From 45952caab007bc0e7af10c0385651e11e5ee9c46 Mon Sep 17 00:00:00 2001 From: Rbb666 Date: Sat, 14 Sep 2024 10:58:39 +0800 Subject: [PATCH 01/54] =?UTF-8?q?[ci]=E5=AE=8C=E5=96=84=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E7=9A=84ci-labels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/labeler.yml | 148 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/.github/labeler.yml b/.github/labeler.yml index 8729ad37db8..ccbeddf92e9 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -84,6 +84,154 @@ Component: - changed-files: - any-glob-to-any-file: components/dfs_v2** +'component: net': +- changed-files: + - any-glob-to-any-file: components/net** + +'component: net/at': +- changed-files: + - any-glob-to-any-file: components/net/at** + +'component: net/lwip': +- changed-files: + - any-glob-to-any-file: components/net/lwip** + +'component: net/netdev': +- changed-files: + - any-glob-to-any-file: components/net/netdev** + +'component: net/sal': +- changed-files: + - any-glob-to-any-file: components/net/sal** + +'component: drivers': +- changed-files: + - any-glob-to-any-file: components/drivers** + +'component: drivers/audio': +- changed-files: + - any-glob-to-any-file: components/drivers/audio** + +'component: drivers/can': +- changed-files: + - any-glob-to-any-file: components/drivers/can** + +'component: drivers/clk': +- changed-files: + - any-glob-to-any-file: components/drivers/clk** + +'component: drivers/core': +- changed-files: + - any-glob-to-any-file: components/drivers/core** + +'component: drivers/cputime': +- changed-files: + - any-glob-to-any-file: components/drivers/cputime** + +'component: drivers/graphic': +- changed-files: + - any-glob-to-any-file: components/drivers/graphic** + +'component: drivers/hwcrypto': +- changed-files: + - any-glob-to-any-file: components/drivers/hwcrypto** + +'component: drivers/hwtimer': +- changed-files: + - any-glob-to-any-file: components/drivers/hwtimer** + +'component: drivers/i2c': +- changed-files: + - any-glob-to-any-file: components/drivers/i2c** + +'component: drivers/ipc': +- changed-files: + - any-glob-to-any-file: components/drivers/ipc** + +'component: drivers/ktime': +- changed-files: + - any-glob-to-any-file: components/drivers/ktime** + +'component: drivers/misc': +- changed-files: + - any-glob-to-any-file: components/drivers/misc** + +'component: drivers/mtd': +- changed-files: + - any-glob-to-any-file: components/drivers/mtd** + +'component: drivers/ofw': +- changed-files: + - any-glob-to-any-file: components/drivers/ofw** + +'component: drivers/pci': +- changed-files: + - any-glob-to-any-file: components/drivers/pci** + +'component: drivers/phy': +- changed-files: + - any-glob-to-any-file: components/drivers/phy** + +'component: drivers/pic': +- changed-files: + - any-glob-to-any-file: components/drivers/pic** + +'component: drivers/pinctrl': +- changed-files: + - any-glob-to-any-file: components/drivers/pinctrl** + +'component: drivers/pm': +- changed-files: + - any-glob-to-any-file: components/drivers/pm** + +'component: drivers/rtc': +- changed-files: + - any-glob-to-any-file: components/drivers/rtc** + +'component: drivers/sdio': +- changed-files: + - any-glob-to-any-file: components/drivers/sdio** + +'component: drivers/sensor_v1': +- changed-files: + - any-glob-to-any-file: components/drivers/sensor/v1** + +'component: drivers/sensor_v2': +- changed-files: + - any-glob-to-any-file: components/drivers/sensor/v2** + +'component: drivers/serial': +- changed-files: + - any-glob-to-any-file: components/drivers/serial** + +'component: drivers/spi': +- changed-files: + - any-glob-to-any-file: components/drivers/spi** + +'component: drivers/touch': +- changed-files: + - any-glob-to-any-file: components/drivers/touch** + +'component: drivers/usb': +- changed-files: + - any-glob-to-any-file: components/drivers/usb** + +'component: drivers/virtio': +- changed-files: + - any-glob-to-any-file: components/drivers/virtio** + +'component: drivers/watchdog': +- changed-files: + - any-glob-to-any-file: components/drivers/watchdog** + +'component: drivers/wlan': +- changed-files: + - any-glob-to-any-file: components/drivers/wlan** + +'component: finsh': +- changed-files: + - any-glob-to-any-file: components/finsh** + libcpu: - changed-files: - any-glob-to-any-file: libcpu/** From 91f11aa325cc35e75d923d664e6180c78f130905 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 13 Sep 2024 18:46:10 -0400 Subject: [PATCH 02/54] [action][spell] remove spell check when pushing --- .github/workflows/spell_check.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/spell_check.yml b/.github/workflows/spell_check.yml index af0942c2783..1cc6a91d8c0 100644 --- a/.github/workflows/spell_check.yml +++ b/.github/workflows/spell_check.yml @@ -1,11 +1,6 @@ name: Check Spelling on: - push: - branches: - - master - paths: - - 'documentation/**' pull_request: branches: - master From f17a71c2e44cbdfc90b2134395da1f9ff409ecd5 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 13 Sep 2024 18:46:26 -0400 Subject: [PATCH 03/54] [action][format] rename format check file name --- .github/workflows/{file_check.yml => format_check.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{file_check.yml => format_check.yml} (100%) diff --git a/.github/workflows/file_check.yml b/.github/workflows/format_check.yml similarity index 100% rename from .github/workflows/file_check.yml rename to .github/workflows/format_check.yml From accd616e17ab5cb19a7576a57640ba43785fe123 Mon Sep 17 00:00:00 2001 From: zms123456 <85141075+zmshahaha@users.noreply.github.com> Date: Sat, 14 Sep 2024 13:49:25 +0800 Subject: [PATCH 04/54] [component][sal]delete netdev_lo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit netdev_lo无需单独处理,可以根据协议去找对应的网络设备 --- components/net/netdev/include/netdev.h | 2 -- components/net/netdev/src/netdev.c | 2 -- components/net/sal/src/sal_socket.c | 5 ----- 3 files changed, 9 deletions(-) diff --git a/components/net/netdev/include/netdev.h b/components/net/netdev/include/netdev.h index 5dc68bf216f..cafa73d4c29 100644 --- a/components/net/netdev/include/netdev.h +++ b/components/net/netdev/include/netdev.h @@ -111,8 +111,6 @@ struct netdev extern struct netdev *netdev_list; /* The default network interface device */ extern struct netdev *netdev_default; -/* The local virtual network device */ -extern struct netdev *netdev_lo; /* The network interface device ping response object */ struct netdev_ping_resp { diff --git a/components/net/netdev/src/netdev.c b/components/net/netdev/src/netdev.c index 8d21db756c0..2f4cea5120e 100644 --- a/components/net/netdev/src/netdev.c +++ b/components/net/netdev/src/netdev.c @@ -35,8 +35,6 @@ struct netdev *netdev_list = RT_NULL; /* The default network interface device */ struct netdev *netdev_default = RT_NULL; -/* The local virtual network device */ -struct netdev *netdev_lo = RT_NULL; /* The global network register callback */ static netdev_callback_fn g_netdev_register_callback = RT_NULL; static netdev_callback_fn g_netdev_default_change_callback = RT_NULL; diff --git a/components/net/sal/src/sal_socket.c b/components/net/sal/src/sal_socket.c index 1317c5c1bdd..aebf8d5ff1b 100644 --- a/components/net/sal/src/sal_socket.c +++ b/components/net/sal/src/sal_socket.c @@ -444,11 +444,6 @@ static int socket_init(int family, int type, int protocol, struct sal_socket **r struct netdev *netdev = RT_NULL; rt_bool_t flag = RT_FALSE; - if (family == AF_UNIX) - { - netdv_def = netdev_lo; - } - if (family < 0 || family > AF_MAX) { return -1; From cadcd81104b40e4230b69e1c7253ec4f4ed92c09 Mon Sep 17 00:00:00 2001 From: Rbb666 Date: Sat, 14 Sep 2024 14:29:26 +0800 Subject: [PATCH 05/54] =?UTF-8?q?[ci]=E4=BF=AE=E6=AD=A3#9441-label?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E8=AE=BE=E7=BD=AE=E9=94=99=E8=AF=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/labeler.yml | 84 ++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index ccbeddf92e9..324f3f0a868 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -72,165 +72,169 @@ Component: - changed-files: - any-glob-to-any-file: components/** +RT-Smart: +- changed-files: + - any-glob-to-any-file: components/lwp/** + 'component: lwp': - changed-files: - - any-glob-to-any-file: components/lwp** + - any-glob-to-any-file: components/lwp/** 'component: dfsv1': - changed-files: - - any-glob-to-any-file: components/dfs_v1** + - any-glob-to-any-file: components/dfs_v1/** 'component: dfsv2': - changed-files: - - any-glob-to-any-file: components/dfs_v2** + - any-glob-to-any-file: components/dfs_v2/** 'component: net': - changed-files: - - any-glob-to-any-file: components/net** + - any-glob-to-any-file: components/net/** 'component: net/at': - changed-files: - - any-glob-to-any-file: components/net/at** + - any-glob-to-any-file: components/net/at/** 'component: net/lwip': - changed-files: - - any-glob-to-any-file: components/net/lwip** + - any-glob-to-any-file: components/net/lwip/** 'component: net/netdev': - changed-files: - - any-glob-to-any-file: components/net/netdev** + - any-glob-to-any-file: components/net/netdev/** 'component: net/sal': - changed-files: - - any-glob-to-any-file: components/net/sal** + - any-glob-to-any-file: components/net/sal/** 'component: drivers': - changed-files: - - any-glob-to-any-file: components/drivers** + - any-glob-to-any-file: components/drivers/** 'component: drivers/audio': - changed-files: - - any-glob-to-any-file: components/drivers/audio** + - any-glob-to-any-file: components/drivers/audio/** 'component: drivers/can': - changed-files: - - any-glob-to-any-file: components/drivers/can** + - any-glob-to-any-file: components/drivers/can/** 'component: drivers/clk': - changed-files: - - any-glob-to-any-file: components/drivers/clk** + - any-glob-to-any-file: components/drivers/clk/** 'component: drivers/core': - changed-files: - - any-glob-to-any-file: components/drivers/core** + - any-glob-to-any-file: components/drivers/core/** 'component: drivers/cputime': - changed-files: - - any-glob-to-any-file: components/drivers/cputime** + - any-glob-to-any-file: components/drivers/cputime/** 'component: drivers/graphic': - changed-files: - - any-glob-to-any-file: components/drivers/graphic** + - any-glob-to-any-file: components/drivers/graphic/** 'component: drivers/hwcrypto': - changed-files: - - any-glob-to-any-file: components/drivers/hwcrypto** + - any-glob-to-any-file: components/drivers/hwcrypto/** 'component: drivers/hwtimer': - changed-files: - - any-glob-to-any-file: components/drivers/hwtimer** + - any-glob-to-any-file: components/drivers/hwtimer/** 'component: drivers/i2c': - changed-files: - - any-glob-to-any-file: components/drivers/i2c** + - any-glob-to-any-file: components/drivers/i2c/** 'component: drivers/ipc': - changed-files: - - any-glob-to-any-file: components/drivers/ipc** + - any-glob-to-any-file: components/drivers/ipc/** 'component: drivers/ktime': - changed-files: - - any-glob-to-any-file: components/drivers/ktime** + - any-glob-to-any-file: components/drivers/ktime/** 'component: drivers/misc': - changed-files: - - any-glob-to-any-file: components/drivers/misc** + - any-glob-to-any-file: components/drivers/misc/** 'component: drivers/mtd': - changed-files: - - any-glob-to-any-file: components/drivers/mtd** + - any-glob-to-any-file: components/drivers/mtd/** 'component: drivers/ofw': - changed-files: - - any-glob-to-any-file: components/drivers/ofw** + - any-glob-to-any-file: components/drivers/ofw/** 'component: drivers/pci': - changed-files: - - any-glob-to-any-file: components/drivers/pci** + - any-glob-to-any-file: components/drivers/pci/** 'component: drivers/phy': - changed-files: - - any-glob-to-any-file: components/drivers/phy** + - any-glob-to-any-file: components/drivers/phy/** 'component: drivers/pic': - changed-files: - - any-glob-to-any-file: components/drivers/pic** + - any-glob-to-any-file: components/drivers/pic/** 'component: drivers/pinctrl': - changed-files: - - any-glob-to-any-file: components/drivers/pinctrl** + - any-glob-to-any-file: components/drivers/pinctrl/** 'component: drivers/pm': - changed-files: - - any-glob-to-any-file: components/drivers/pm** + - any-glob-to-any-file: components/drivers/pm/** 'component: drivers/rtc': - changed-files: - - any-glob-to-any-file: components/drivers/rtc** + - any-glob-to-any-file: components/drivers/rtc/** 'component: drivers/sdio': - changed-files: - - any-glob-to-any-file: components/drivers/sdio** + - any-glob-to-any-file: components/drivers/sdio/** 'component: drivers/sensor_v1': - changed-files: - - any-glob-to-any-file: components/drivers/sensor/v1** + - any-glob-to-any-file: components/drivers/sensor/v1/** 'component: drivers/sensor_v2': - changed-files: - - any-glob-to-any-file: components/drivers/sensor/v2** + - any-glob-to-any-file: components/drivers/sensor/v2/** 'component: drivers/serial': - changed-files: - - any-glob-to-any-file: components/drivers/serial** + - any-glob-to-any-file: components/drivers/serial/** 'component: drivers/spi': - changed-files: - - any-glob-to-any-file: components/drivers/spi** + - any-glob-to-any-file: components/drivers/spi/** 'component: drivers/touch': - changed-files: - - any-glob-to-any-file: components/drivers/touch** + - any-glob-to-any-file: components/drivers/touch/** 'component: drivers/usb': - changed-files: - - any-glob-to-any-file: components/drivers/usb** + - any-glob-to-any-file: components/drivers/usb/** 'component: drivers/virtio': - changed-files: - - any-glob-to-any-file: components/drivers/virtio** + - any-glob-to-any-file: components/drivers/virtio/** 'component: drivers/watchdog': - changed-files: - - any-glob-to-any-file: components/drivers/watchdog** + - any-glob-to-any-file: components/drivers/watchdog/** 'component: drivers/wlan': - changed-files: - - any-glob-to-any-file: components/drivers/wlan** + - any-glob-to-any-file: components/drivers/wlan/** 'component: finsh': - changed-files: - - any-glob-to-any-file: components/finsh** + - any-glob-to-any-file: components/finsh/** libcpu: - changed-files: From 2cbd5889d1b29eadcd8345e4107ffa1a92be9f66 Mon Sep 17 00:00:00 2001 From: Shell Date: Sat, 14 Sep 2024 16:21:36 +0800 Subject: [PATCH 06/54] fixup: dfsv2: seq: aligned proto of lseek to manual In manual, the prototype of lseek is `off_t lseek(int fd, off_t offset, int whence);` where the return type is `off_t` but not ssize_t. Signed-off-by: Shell --- components/dfs/dfs_v2/include/dfs_seq_file.h | 2 +- components/dfs/dfs_v2/src/dfs_seq_file.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/dfs/dfs_v2/include/dfs_seq_file.h b/components/dfs/dfs_v2/include/dfs_seq_file.h index 6dbc30f24d5..f0c1de7ddeb 100644 --- a/components/dfs/dfs_v2/include/dfs_seq_file.h +++ b/components/dfs/dfs_v2/include/dfs_seq_file.h @@ -56,7 +56,7 @@ static inline void dfs_seq_setwidth(struct dfs_seq_file *seq, size_t size) int dfs_seq_open(struct dfs_file *file, const struct dfs_seq_ops *ops); ssize_t dfs_seq_read(struct dfs_file *file, void *buf, size_t size, off_t *pos); -ssize_t dfs_seq_lseek(struct dfs_file *file, off_t offset, int whence); +off_t dfs_seq_lseek(struct dfs_file *file, off_t offset, int whence); int dfs_seq_release(struct dfs_file *file); int dfs_seq_write(struct dfs_seq_file *seq, const void *data, size_t len); diff --git a/components/dfs/dfs_v2/src/dfs_seq_file.c b/components/dfs/dfs_v2/src/dfs_seq_file.c index 9521f530380..2980b03cc12 100644 --- a/components/dfs/dfs_v2/src/dfs_seq_file.c +++ b/components/dfs/dfs_v2/src/dfs_seq_file.c @@ -256,7 +256,7 @@ ssize_t dfs_seq_read(struct dfs_file *file, void *buf, size_t size, off_t *pos) goto Done; } -ssize_t dfs_seq_lseek(struct dfs_file *file, off_t offset, int whence) +off_t dfs_seq_lseek(struct dfs_file *file, off_t offset, int whence) { struct dfs_seq_file *seq = file->data; off_t retval = -EINVAL; From 3ca6126efc1bde098312c2886c2332caa6a32126 Mon Sep 17 00:00:00 2001 From: Shell Date: Sat, 14 Sep 2024 16:40:34 +0800 Subject: [PATCH 07/54] fixup: smart: remove unnecessary Kconfig option The `LWP_CONSOLE_INPUT_BUFFER_SIZE` is a legacy config option for TTY driver used in smart. Since the driver is updated, there's no dependency of this option any more. Changes: - Removed unused Kconfig option `LWP_CONSOLE_INPUT_BUFFER_SIZE` Signed-off-by: Shell --- components/lwp/Kconfig | 4 ---- 1 file changed, 4 deletions(-) diff --git a/components/lwp/Kconfig b/components/lwp/Kconfig index d88a0b6a9d5..f815c7da998 100644 --- a/components/lwp/Kconfig +++ b/components/lwp/Kconfig @@ -29,10 +29,6 @@ if RT_USING_LWP int "The maximum number of channel messages" default 1024 - config LWP_CONSOLE_INPUT_BUFFER_SIZE - int "The input buffer size of lwp console device" - default 1024 - config LWP_TID_MAX_NR int "The maximum number of lwp thread id" default 64 From 379aece6dc0ba2bc74c3e6548010df8017cf5359 Mon Sep 17 00:00:00 2001 From: zms123456 <85141075+zmshahaha@users.noreply.github.com> Date: Sun, 15 Sep 2024 01:52:40 +0800 Subject: [PATCH 08/54] [components][sal]delay getting sal_proto_family in sal_ioctlsocket --- components/net/sal/src/sal_socket.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/components/net/sal/src/sal_socket.c b/components/net/sal/src/sal_socket.c index aebf8d5ff1b..a268c2dcebc 100644 --- a/components/net/sal/src/sal_socket.c +++ b/components/net/sal/src/sal_socket.c @@ -1166,12 +1166,9 @@ int sal_ioctlsocket(int socket, long cmd, void *arg) /* get the socket object by socket descriptor */ SAL_SOCKET_OBJ_GET(sock, socket); - /* check the network interface socket opreation */ - SAL_NETDEV_SOCKETOPS_VALID(sock->netdev, pf, ioctlsocket); - struct sal_ifreq *ifr = (struct sal_ifreq *)arg; - if((sock->domain == AF_INET)&&(sock->netdev)&&(ifr != RT_NULL)) + if (ifr != RT_NULL) { switch (cmd) { @@ -1473,6 +1470,10 @@ int sal_ioctlsocket(int socket, long cmd, void *arg) break; } } + + /* check the network interface socket opreation */ + SAL_NETDEV_SOCKETOPS_VALID(sock->netdev, pf, ioctlsocket); + return pf->skt_ops->ioctlsocket((int)(size_t)sock->user_data, cmd, arg); } From 6320f184f53f4c78714e5897937d46fae55dd08e Mon Sep 17 00:00:00 2001 From: Supper Thomas <78900636@qq.com> Date: Sun, 15 Sep 2024 08:22:44 +0800 Subject: [PATCH 09/54] [doxygen] add driver example for doxygen (#9446) --- .github/workflows/doxygen.yml | 18 +- components/drivers/include/drivers/dev_can.h | 18 +- .../drivers/include/drivers/dev_serial.h | 131 +++++++++++++- .../drivers/include/drivers/dev_serial_v2.h | 168 +++++++++++++++++- components/finsh/finsh.h | 21 +-- documentation/doxygen/Doxyfile | 1 + 6 files changed, 316 insertions(+), 41 deletions(-) diff --git a/.github/workflows/doxygen.yml b/.github/workflows/doxygen.yml index 447c66634c8..a4580be1be1 100644 --- a/.github/workflows/doxygen.yml +++ b/.github/workflows/doxygen.yml @@ -3,27 +3,13 @@ on: # Runs at 16:00 UTC (BeiJing 00:00) on the 30st of every month schedule: - cron: '0 16 30 * *' - push: - branches: - - master - paths-ignore: - - '**/README.md' - - '**/README_zh.md' - pull_request: - branches: - - master - paths-ignore: - - bsp/** - - examples/** - - .github/** - - '**/README.md' - - '**/README_zh.md' + workflow_dispatch: jobs: build: runs-on: ubuntu-latest name: doxygen_doc generate - if: github.repository_owner == 'RT-Thread' && false + if: github.repository_owner == 'RT-Thread' steps: - uses: actions/checkout@v4 with: diff --git a/components/drivers/include/drivers/dev_can.h b/components/drivers/include/drivers/dev_can.h index 9f2d7c06778..6881d5d613a 100644 --- a/components/drivers/include/drivers/dev_can.h +++ b/components/drivers/include/drivers/dev_can.h @@ -63,9 +63,16 @@ enum CANBAUD #define RT_CAN_MODE_PRIV 0x01 #define RT_CAN_MODE_NOPRIV 0x00 -/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number - * @{ - */ +/** + * @addtogroup Drivers RTTHREAD Driver + * @defgroup CAN_Device CAN Driver + * @ingroup Drivers + */ + +/*! + * @addtogroup CAN_Device + * @{ + */ #define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ #define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ @@ -360,5 +367,8 @@ rt_err_t rt_hw_can_register(struct rt_can_device *can, const struct rt_can_ops *ops, void *data); void rt_hw_can_isr(struct rt_can_device *can, int event); -#endif /*__DEV_CAN_H*/ +/*! @} +*/ + +#endif /*__DEV_CAN_H*/ \ No newline at end of file diff --git a/components/drivers/include/drivers/dev_serial.h b/components/drivers/include/drivers/dev_serial.h index 418c25fa1d9..df2a62030aa 100644 --- a/components/drivers/include/drivers/dev_serial.h +++ b/components/drivers/include/drivers/dev_serial.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2024, RT-Thread Development Team + * Copyright (c) 2006-2024 RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -15,7 +15,105 @@ #define __DEV_SERIAL_H__ #include +/** + * @addtogroup Drivers RTTHREAD Driver + * @defgroup Serial Serial + * + * @brief Serial driver api + * + * Example + * @code {.c} + * + * #include + * + * #define SAMPLE_UART_NAME "uart2" + * static struct rt_semaphore rx_sem; + * static rt_device_t serial; + * + * static rt_err_t uart_input(rt_device_t dev, rt_size_t size) + * { + * + * rt_sem_release(&rx_sem); + * + * return RT_EOK; + * } + * + * static void serial_thread_entry(void *parameter) + * { + * char ch; + * + * while (1) + * { + * + * while (rt_device_read(serial, -1, &ch, 1) != 1) + * { + * + * rt_sem_take(&rx_sem, RT_WAITING_FOREVER); + * } + * + * ch = ch + 1; + * rt_device_write(serial, 0, &ch, 1); + * } + * } + * + * static int uart_sample(int argc, char *argv[]) + * { + * rt_err_t ret = RT_EOK; + * char uart_name[RT_NAME_MAX]; + * char str[] = "hello RT-Thread!\r\n"; + * + * if (argc == 2) + * { + * rt_strncpy(uart_name, argv[1], RT_NAME_MAX); + * } + * else + * { + * rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX); + * } + * + * + * serial = rt_device_find(uart_name); + * if (!serial) + * { + * rt_kprintf("find %s failed!\n", uart_name); + * return RT_ERROR; + * } + * + * + * rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); + * + * rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); + * + * rt_device_set_rx_indicate(serial, uart_input); + * + * rt_device_write(serial, 0, str, (sizeof(str) - 1)); + * + * + * rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); + * + * if (thread != RT_NULL) + * { + * rt_thread_startup(thread); + * } + * else + * { + * ret = RT_ERROR; + * } + * + * return ret; + * } + * + * MSH_CMD_EXPORT(uart_sample, uart device sample); + * @endcode + * + * @ingroup Drivers + */ + +/*! + * @addtogroup Serial + * @{ + */ #define BAUD_RATE_2400 2400 #define BAUD_RATE_4800 4800 #define BAUD_RATE_9600 9600 @@ -105,7 +203,6 @@ /** * @brief Sets a hook function when RX indicate is called * - * @param thread is the target thread that initializing */ typedef void (*rt_hw_serial_rxind_hookproto_t)(rt_device_t dev, rt_size_t size); RT_OBJECT_HOOKLIST_DECLARE(rt_hw_serial_rxind_hookproto_t, rt_hw_serial_rxind); @@ -173,7 +270,7 @@ struct rt_serial_device typedef struct rt_serial_device rt_serial_t; /** - * uart operators + * @brief Configure the serial device */ struct rt_uart_ops { @@ -186,13 +283,41 @@ struct rt_uart_ops rt_ssize_t (*dma_transmit)(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction); }; +/** + * @brief Serial interrupt service routine + * @param serial serial device + * @param event event mask + * @ingroup Serial + */ void rt_hw_serial_isr(struct rt_serial_device *serial, int event); +/** + * @brief Register a serial device to device list + * + * @param serial serial device + * @param name device name + * @param flag device flag + * @param data device private data + * @return rt_err_t error code + * @note This function will register a serial device to system device list, + * and add a device object to system object list. + * @ingroup Serial + */ rt_err_t rt_hw_serial_register(struct rt_serial_device *serial, const char *name, rt_uint32_t flag, void *data); +/** + * @brief register a serial device to system device list and add a device object to system object list + * + * @param serial serial device + * @return rt_err_t error code + * + * @ingroup Serial + */ rt_err_t rt_hw_serial_register_tty(struct rt_serial_device *serial); +/*! @}*/ + #endif diff --git a/components/drivers/include/drivers/dev_serial_v2.h b/components/drivers/include/drivers/dev_serial_v2.h index 0c3d095ab31..0bdc51b7baf 100644 --- a/components/drivers/include/drivers/dev_serial_v2.h +++ b/components/drivers/include/drivers/dev_serial_v2.h @@ -13,6 +13,122 @@ #include + +/** + * @addtogroup Drivers RTTHREAD Driver + * @defgroup Serial_v2 Serial v2 + * + * @brief Serial v2 driver api + * + * Example + * @code {.c} + * + * #include + * #include + * + * #define SAMPLE_UART_NAME "uart1" + * + * struct rx_msg + * { + * rt_device_t dev; + * rt_size_t size; + * }; + * static rt_device_t serial; + * static struct rt_messagequeue rx_mq; + * + * static rt_err_t uart_input(rt_device_t dev, rt_size_t size) + * { + * struct rx_msg msg; + * rt_err_t result; + * msg.dev = dev; + * msg.size = size; + * + * result = rt_mq_send(&rx_mq, &msg, sizeof(msg)); + * if (result == -RT_EFULL) + * { + * rt_kprintf("message queue full!\n"); + * } + * return result; + * } + * + * static void serial_thread_entry(void *parameter) + * { + * struct rx_msg msg; + * rt_err_t result; + * rt_uint32_t rx_length; + * static char rx_buffer[BSP_UART1_RX_BUFSIZE + 1]; + * + * while (1) + * { + * rt_memset(&msg, 0, sizeof(msg)); + * result = rt_mq_recv(&rx_mq, &msg, sizeof(msg), RT_WAITING_FOREVER); + * if (result > 0) + * { + * rx_length = rt_device_read(msg.dev, 0, rx_buffer, msg.size); + * rx_buffer[rx_length] = '\0'; + * rt_device_write(serial, 0, rx_buffer, rx_length); + * rt_kprintf("%s\n",rx_buffer); + * } + * } + * } + * + * static int uart_dma_sample(int argc, char *argv[]) + * { + * rt_err_t ret = RT_EOK; + * char uart_name[RT_NAME_MAX]; + * static char msg_pool[256]; + * char str[] = "hello RT-Thread!\r\n"; + * + * if (argc == 2) + * { + * rt_strncpy(uart_name, argv[1], RT_NAME_MAX); + * } + * else + * { + * rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX); + * } + * + * serial = rt_device_find(uart_name); + * if (!serial) + * { + * rt_kprintf("find %s failed!\n", uart_name); + * return RT_ERROR; + * } + * + * rt_mq_init(&rx_mq, "rx_mq", + * msg_pool, + * sizeof(struct rx_msg), + * sizeof(msg_pool), + * RT_IPC_FLAG_FIFO); + * + * rt_device_open(serial, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING); + * rt_device_set_rx_indicate(serial, uart_input); + * rt_device_write(serial, 0, str, (sizeof(str) - 1)); + * + * rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10); + * if (thread != RT_NULL) + * { + * rt_thread_startup(thread); + * } + * else + * { + * ret = RT_ERROR; + * } + * + * return ret; + * } + * MSH_CMD_EXPORT(uart_dma_sample, uart device dma sample); + * @endcode + * + * @ingroup Drivers + */ + + +/*! + * @addtogroup Serial_v2 + * @{ + */ + #define BAUD_RATE_2400 2400 #define BAUD_RATE_4800 4800 #define BAUD_RATE_9600 9600 @@ -104,9 +220,8 @@ } /** - * @brief Sets a hook function when RX indicate is called - * - * @param thread is the target thread that initializing + * @brief Serial receive indicate hook function type + * */ typedef void (*rt_hw_serial_rxind_hookproto_t)(rt_device_t dev, rt_size_t size); RT_OBJECT_HOOKLIST_DECLARE(rt_hw_serial_rxind_hookproto_t, rt_hw_serial_rxind); @@ -126,8 +241,8 @@ struct serial_configure rt_uint32_t reserved :5; }; -/* - * Serial Receive FIFO mode +/** + * @brief Serial Receive FIFO mode */ struct rt_serial_rx_fifo { @@ -141,8 +256,9 @@ struct rt_serial_rx_fifo rt_uint8_t buffer[]; }; -/* - * Serial Transmit FIFO mode +/** + * @brief Serial Transmit FIFO mode + * */ struct rt_serial_tx_fifo { @@ -158,6 +274,10 @@ struct rt_serial_tx_fifo rt_uint8_t buffer[]; }; +/** + * @brief serial device structure + * + */ struct rt_serial_device { struct rt_device parent; @@ -172,7 +292,8 @@ struct rt_serial_device }; /** - * uart operators + * @brief uart device operations + * */ struct rt_uart_ops { @@ -192,12 +313,43 @@ struct rt_uart_ops rt_uint32_t tx_flag); }; +/** + * @brief Serial interrupt service routine + * @param serial serial device + * @param event event mask + * @ingroup Serial_v2 + */ void rt_hw_serial_isr(struct rt_serial_device *serial, int event); + +/** + * @brief Register a serial device to device list + * + * @param serial serial device + * @param name device name + * @param flag device flag + * @param data device private data + * @return rt_err_t error code + * @note This function will register a serial device to system device list, + * and add a device object to system object list. + * @ingroup Serial_v2 + */ rt_err_t rt_hw_serial_register(struct rt_serial_device *serial, const char *name, rt_uint32_t flag, void *data); +/** + * @brief register a serial device to system device list and add a device object to system object list + * + * @param serial serial device + * @return rt_err_t error code + * + * @ingroup Serial_v2 + */ rt_err_t rt_hw_serial_register_tty(struct rt_serial_device *serial); + + +/*! @}*/ + #endif diff --git a/components/finsh/finsh.h b/components/finsh/finsh.h index 9fe36fae5a2..530ab9baae7 100644 --- a/components/finsh/finsh.h +++ b/components/finsh/finsh.h @@ -130,13 +130,13 @@ typedef long (*syscall_func)(void); #define FINSH_FUNCTION_EXPORT_ALIAS(name, alias, desc) /** - * @ingroup msh + * @ingroup finsh * * This macro exports a command to module shell. * - * @param command is the name of the command. - * @param desc is the description of the command, which will show in help list. - * @param opt This is an option, enter any content to enable option completion + * param command is the name of the command. + * param desc is the description of the command, which will show in help list. + * param opt This is an option, enter any content to enable option completion */ /* MSH_CMD_EXPORT(command, desc) or MSH_CMD_EXPORT(command, desc, opt) */ #define MSH_CMD_EXPORT(...) \ @@ -144,17 +144,18 @@ typedef long (*syscall_func)(void); _MSH_FUNCTION_CMD2)(__VA_ARGS__) /** - * @ingroup msh + * @ingroup finsh * * This macro exports a command with alias to module shell. * - * @param command is the name of the command. - * @param alias is the alias of the command. - * @param desc is the description of the command, which will show in help list. - * @param opt This is an option, enter any content to enable option completion - * @note + * param command is the name of the command. + * param alias is the alias of the command. + * param desc is the description of the command, which will show in help list. + * param opt This is an option, enter any content to enable option completion + * @code * #define MSH_CMD_EXPORT_ALIAS(command, alias, desc) or * #define MSH_CMD_EXPORT_ALIAS(command, alias, desc, opt) + * @endcode */ #define MSH_CMD_EXPORT_ALIAS(...) \ __MSH_GET_EXPORT_MACRO(__VA_ARGS__, _MSH_FUNCTION_EXPORT_CMD3_OPT, \ diff --git a/documentation/doxygen/Doxyfile b/documentation/doxygen/Doxyfile index 412d93d0dc9..44a09c85d10 100644 --- a/documentation/doxygen/Doxyfile +++ b/documentation/doxygen/Doxyfile @@ -868,6 +868,7 @@ INPUT = ../../src \ ../../include \ . \ ../../components/finsh \ + ../../components/drivers/include/drivers \ ../../components/dfs/dfs_v2/src \ ../../components/dfs/dfs_v2/include From beb7bc42de61830d356afb4096442e81b55958a0 Mon Sep 17 00:00:00 2001 From: Yuqiang Wang <2053731441@qq.com> Date: Mon, 16 Sep 2024 01:29:20 +0800 Subject: [PATCH 10/54] [bsp][renesas] Add a new BSP: RZN2L-RSK --- .github/workflows/bsp_buildings.yml | 1 + bsp/renesas/README.md | 2 + bsp/renesas/rzn2l_rsk/.api_xml | 2 + bsp/renesas/rzn2l_rsk/.config | 1194 + bsp/renesas/rzn2l_rsk/.secure_azone | 4 + bsp/renesas/rzn2l_rsk/.secure_xml | 125 + .../rzn2l_rsk/.settings/standalone.prefs | 24 + bsp/renesas/rzn2l_rsk/Kconfig | 17 + bsp/renesas/rzn2l_rsk/README.md | 168 + bsp/renesas/rzn2l_rsk/README_zh.md | 168 + bsp/renesas/rzn2l_rsk/SConscript | 28 + bsp/renesas/rzn2l_rsk/SConstruct | 54 + bsp/renesas/rzn2l_rsk/board/Kconfig | 201 + bsp/renesas/rzn2l_rsk/board/SConscript | 16 + bsp/renesas/rzn2l_rsk/board/board.h | 64 + bsp/renesas/rzn2l_rsk/board/ports/SConscript | 16 + bsp/renesas/rzn2l_rsk/board/ports/gpio_cfg.h | 74 + bsp/renesas/rzn2l_rsk/buildinfo.ipcf | 153 + bsp/renesas/rzn2l_rsk/configuration.xml | 1111 + .../figures/image-20240914173709363.png | Bin 0 -> 456375 bytes bsp/renesas/rzn2l_rsk/memory_regions.icf | 38 + bsp/renesas/rzn2l_rsk/project.ewd | 3276 ++ bsp/renesas/rzn2l_rsk/project.ewp | 2802 + bsp/renesas/rzn2l_rsk/project.ewt | 3406 ++ bsp/renesas/rzn2l_rsk/project.eww | 10 + bsp/renesas/rzn2l_rsk/rtconfig.h | 344 + bsp/renesas/rzn2l_rsk/rtconfig.py | 123 + bsp/renesas/rzn2l_rsk/rzn/SConscript | 28 + .../CMSIS/Core_R/Include/cmsis_compiler.h | 290 + .../CMSIS_5/CMSIS/Core_R/Include/cmsis_cp15.h | 783 + .../CMSIS_5/CMSIS/Core_R/Include/cmsis_gcc.h | 2233 + .../CMSIS/Core_R/Include/cmsis_iccarm.h | 958 + .../CMSIS/Core_R/Include/cmsis_version.h | 46 + .../CMSIS_5/CMSIS/Core_R/Include/core_cr52.h | 312 + .../rzn2l_rsk/rzn/arm/CMSIS_5/LICENSE.txt | 201 + .../rzn2l_rsk/rzn/board/rzn2l_rsk/board.h | 67 + .../rzn/board/rzn2l_rsk/board_ethernet_phy.h | 60 + .../rzn/board/rzn2l_rsk/board_init.c | 67 + .../rzn/board/rzn2l_rsk/board_init.h | 64 + .../rzn/board/rzn2l_rsk/board_leds.c | 77 + .../rzn/board/rzn2l_rsk/board_leds.h | 81 + .../rzn2l_rsk/rzn/fsp/inc/api/bsp_api.h | 111 + .../rzn2l_rsk/rzn/fsp/inc/api/r_ioport_api.h | 206 + .../rzn/fsp/inc/api/r_transfer_api.h | 402 + .../rzn2l_rsk/rzn/fsp/inc/api/r_uart_api.h | 268 + .../rzn2l_rsk/rzn/fsp/inc/fsp_common_api.h | 394 + .../rzn2l_rsk/rzn/fsp/inc/fsp_features.h | 562 + .../rzn2l_rsk/rzn/fsp/inc/fsp_version.h | 80 + .../rzn/fsp/inc/instances/r_ioport.h | 212 + .../rzn/fsp/inc/instances/r_sci_uart.h | 246 + .../cmsis/Device/RENESAS/Include/R9A07G084.h | 46278 ++++++++++++++++ .../cmsis/Device/RENESAS/Include/renesas.h | 131 + .../bsp/cmsis/Device/RENESAS/Include/system.h | 58 + .../Device/RENESAS/Source/cr/startup_core.c | 364 + .../Device/RENESAS/Source/cr/system_core.c | 617 + .../bsp/cmsis/Device/RENESAS/Source/startup.c | 197 + .../bsp/cmsis/Device/RENESAS/Source/system.c | 822 + .../rzn/fsp/src/bsp/mcu/all/bsp_cache.c | 752 + .../rzn/fsp/src/bsp/mcu/all/bsp_cache.h | 67 + .../rzn/fsp/src/bsp/mcu/all/bsp_clocks.c | 374 + .../rzn/fsp/src/bsp/mcu/all/bsp_clocks.h | 221 + .../rzn/fsp/src/bsp/mcu/all/bsp_common.c | 221 + .../rzn/fsp/src/bsp/mcu/all/bsp_common.h | 435 + .../src/bsp/mcu/all/bsp_compiler_support.h | 110 + .../rzn/fsp/src/bsp/mcu/all/bsp_delay.c | 159 + .../rzn/fsp/src/bsp/mcu/all/bsp_delay.h | 72 + .../rzn/fsp/src/bsp/mcu/all/bsp_exceptions.h | 50 + .../rzn/fsp/src/bsp/mcu/all/bsp_io.c | 41 + .../rzn/fsp/src/bsp/mcu/all/bsp_io.h | 544 + .../rzn/fsp/src/bsp/mcu/all/bsp_irq.c | 50 + .../rzn/fsp/src/bsp/mcu/all/bsp_irq.h | 236 + .../rzn/fsp/src/bsp/mcu/all/bsp_mcu_api.h | 64 + .../rzn/fsp/src/bsp/mcu/all/bsp_module_stop.h | 228 + .../src/bsp/mcu/all/bsp_register_protection.c | 116 + .../src/bsp/mcu/all/bsp_register_protection.h | 76 + .../rzn/fsp/src/bsp/mcu/all/bsp_reset.c | 139 + .../rzn/fsp/src/bsp/mcu/all/bsp_reset.h | 150 + .../rzn/fsp/src/bsp/mcu/all/bsp_sbrk.c | 108 + .../rzn/fsp/src/bsp/mcu/all/bsp_tfu.h | 228 + .../fsp/src/bsp/mcu/all/cr/bsp_cache_core.c | 48 + .../fsp/src/bsp/mcu/all/cr/bsp_cache_core.h | 52 + .../fsp/src/bsp/mcu/all/cr/bsp_delay_core.c | 63 + .../fsp/src/bsp/mcu/all/cr/bsp_delay_core.h | 63 + .../rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.c | 146 + .../rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.h | 347 + .../rzn/fsp/src/bsp/mcu/rzn2l/bsp_elc.h | 523 + .../rzn/fsp/src/bsp/mcu/rzn2l/bsp_feature.h | 242 + .../rzn/fsp/src/bsp/mcu/rzn2l/bsp_irq_sense.c | 86 + .../fsp/src/bsp/mcu/rzn2l/bsp_loader_param.c | 69 + .../rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h | 64 + .../rzn/fsp/src/bsp/mcu/rzn2l/bsp_override.h | 1455 + .../rzn2l_rsk/rzn/fsp/src/r_ioport/r_ioport.c | 957 + .../rzn/fsp/src/r_sci_uart/r_sci_uart.c | 1934 + bsp/renesas/rzn2l_rsk/rzn_cfg.txt | 1158 + bsp/renesas/rzn2l_rsk/rzn_cfg/SConscript | 19 + .../rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/board_cfg.h | 25 + .../rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_cfg.h | 37 + .../rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h | 14 + .../fsp_cfg/bsp/bsp_mcu_device_memory_cfg.h | 552 + .../fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h | 12 + .../rzn_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h | 15 + .../rzn_cfg/fsp_cfg/bsp/bsp_memory_cfg.h | 5 + .../rzn_cfg/fsp_cfg/bsp/bsp_pin_cfg.h | 105 + .../rzn2l_rsk/rzn_cfg/fsp_cfg/r_ioport_cfg.h | 13 + .../rzn_cfg/fsp_cfg/r_sci_uart_cfg.h | 16 + bsp/renesas/rzn2l_rsk/rzn_gen/SConscript | 19 + bsp/renesas/rzn2l_rsk/rzn_gen/bsp_clock_cfg.h | 42 + bsp/renesas/rzn2l_rsk/rzn_gen/common_data.c | 75 + bsp/renesas/rzn2l_rsk/rzn_gen/common_data.h | 16 + bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.c | 110 + bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.h | 37 + bsp/renesas/rzn2l_rsk/rzn_gen/main.c | 6 + bsp/renesas/rzn2l_rsk/rzn_gen/pin_data.c | 228 + bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.c | 12 + bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.h | 50 + .../rzn2l_rsk/script/fsp_xspi0_boot.icf | 684 + .../rzn2l_rsk/script/fsp_xspi0_boot.ld | 398 + .../script/fsp_xspi0_boot_systemRAM.icf | 699 + .../rzn2l_rsk/script/memory_regions.ld | 38 + bsp/renesas/rzn2l_rsk/src/hal_entry.c | 32 + bsp/renesas/rzn2l_rsk/template.ewd | 3276 ++ bsp/renesas/rzn2l_rsk/template.ewp | 2616 + bsp/renesas/rzn2l_rsk/template.eww | 7 + 123 files changed, 90442 insertions(+) create mode 100644 bsp/renesas/rzn2l_rsk/.api_xml create mode 100644 bsp/renesas/rzn2l_rsk/.config create mode 100644 bsp/renesas/rzn2l_rsk/.secure_azone create mode 100644 bsp/renesas/rzn2l_rsk/.secure_xml create mode 100644 bsp/renesas/rzn2l_rsk/.settings/standalone.prefs create mode 100644 bsp/renesas/rzn2l_rsk/Kconfig create mode 100644 bsp/renesas/rzn2l_rsk/README.md create mode 100644 bsp/renesas/rzn2l_rsk/README_zh.md create mode 100644 bsp/renesas/rzn2l_rsk/SConscript create mode 100644 bsp/renesas/rzn2l_rsk/SConstruct create mode 100644 bsp/renesas/rzn2l_rsk/board/Kconfig create mode 100644 bsp/renesas/rzn2l_rsk/board/SConscript create mode 100644 bsp/renesas/rzn2l_rsk/board/board.h create mode 100644 bsp/renesas/rzn2l_rsk/board/ports/SConscript create mode 100644 bsp/renesas/rzn2l_rsk/board/ports/gpio_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/buildinfo.ipcf create mode 100644 bsp/renesas/rzn2l_rsk/configuration.xml create mode 100644 bsp/renesas/rzn2l_rsk/figures/image-20240914173709363.png create mode 100644 bsp/renesas/rzn2l_rsk/memory_regions.icf create mode 100644 bsp/renesas/rzn2l_rsk/project.ewd create mode 100644 bsp/renesas/rzn2l_rsk/project.ewp create mode 100644 bsp/renesas/rzn2l_rsk/project.ewt create mode 100644 bsp/renesas/rzn2l_rsk/project.eww create mode 100644 bsp/renesas/rzn2l_rsk/rtconfig.h create mode 100644 bsp/renesas/rzn2l_rsk/rtconfig.py create mode 100644 bsp/renesas/rzn2l_rsk/rzn/SConscript create mode 100644 bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_compiler.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_cp15.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_gcc.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_iccarm.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_version.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/core_cr52.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/LICENSE.txt create mode 100644 bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_ethernet_phy.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/bsp_api.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_ioport_api.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_transfer_api.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_uart_api.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_common_api.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_features.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_version.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_ioport.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_sci_uart.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/R9A07G084.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/startup_core.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/system_core.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_compiler_support.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_exceptions.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_mcu_api.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_module_stop.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_sbrk.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_tfu.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_elc.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_feature.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_irq_sense.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_loader_param.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_override.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_ioport/r_ioport.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_sci_uart/r_sci_uart.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg.txt create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/SConscript create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/board_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_memory_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_memory_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_pin_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_ioport_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_sci_uart_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/SConscript create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/bsp_clock_cfg.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/common_data.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/common_data.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.h create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/main.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/pin_data.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.c create mode 100644 bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.h create mode 100644 bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.icf create mode 100644 bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.ld create mode 100644 bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot_systemRAM.icf create mode 100644 bsp/renesas/rzn2l_rsk/script/memory_regions.ld create mode 100644 bsp/renesas/rzn2l_rsk/src/hal_entry.c create mode 100644 bsp/renesas/rzn2l_rsk/template.ewd create mode 100644 bsp/renesas/rzn2l_rsk/template.ewp create mode 100644 bsp/renesas/rzn2l_rsk/template.eww diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 5a2a90d68da..ed9f9005359 100644 --- a/.github/workflows/bsp_buildings.yml +++ b/.github/workflows/bsp_buildings.yml @@ -234,6 +234,7 @@ jobs: - "renesas/ra8d1-ek" - "renesas/ra8d1-vision-board" - "renesas/rzt2m_rsk" + - "renesas/rzn2l_rsk" - "frdm-k64f" - "xplorer4330/M4" - RTT_BSP: "gd32_n32_apm32" diff --git a/bsp/renesas/README.md b/bsp/renesas/README.md index e7e95d78804..ef89868352f 100644 --- a/bsp/renesas/README.md +++ b/bsp/renesas/README.md @@ -19,7 +19,9 @@ RA 系列 BSP 目前支持情况如下表所示: | [ra8m1-ek](ra8m1-ek) | Renesas 官方 EK-RA8M1 开发板 | | [ra8d1-ek](ra8d1-ek) | Renesas 官方 EK-RA8D1 开发板 | | [ra8d1-vision-board](ra8d1-vision-board) | Renesas 联合 RT-Thread RA8D1-Vision-Board 开发板 | +| **RZ 系列** | | | [rzt2m_rsk](rzt2m_rsk) | Renesas 官方 RSK-RZT2M 开发板 | +| [rzn2l_rsk](rzn2l_rsk) | Renesas 官方 RSK-RZN2L 开发板 | 可以通过阅读相应 BSP 下的 README 来快速上手,如果想要使用 BSP 更多功能可参考 docs 文件夹下提供的说明文档,如下表所示: diff --git a/bsp/renesas/rzn2l_rsk/.api_xml b/bsp/renesas/rzn2l_rsk/.api_xml new file mode 100644 index 00000000000..fc9bf0b30e4 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/.api_xml @@ -0,0 +1,2 @@ + + diff --git a/bsp/renesas/rzn2l_rsk/.config b/bsp/renesas/rzn2l_rsk/.config new file mode 100644 index 00000000000..6f402d9bc83 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/.config @@ -0,0 +1,1194 @@ + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=16 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +# CONFIG_RT_USING_HOOKLIST is not set +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=1024 +# CONFIG_RT_USING_TIMER_SOFT is not set +# CONFIG_RT_USING_CPU_USAGE_TRACER is not set + +# +# kservice optimization +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice optimization + +# +# klibc optimization +# +# CONFIG_RT_KLIBC_USING_STDLIB is not set +# CONFIG_RT_KLIBC_USING_TINY_SIZE is not set +# CONFIG_RT_KLIBC_USING_PRINTF_LONGLONG is not set +# end of klibc optimization + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +CONFIG_RT_USING_OVERFLOW_CHECK=y + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +# CONFIG_RT_USING_SCHED_THREAD_CTX is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=512 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" +CONFIG_RT_VER_NUM=0x50200 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +CONFIG_RT_USING_HW_ATOMIC=y +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_R=y +CONFIG_ARCH_ARM_CORTEX_R52=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_USING_SERIAL_V1 is not set +CONFIG_RT_USING_SERIAL_V2=y +CONFIG_RT_SERIAL_USING_DMA=y +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# 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_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_LCD is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_KTIME is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CHERRYUSB is not set +# end of Device Drivers + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 +# end of Timezone and Daylight Saving Time +# end of ISO-ANSI C layer + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# end of Interprocess Communication (IPC) +# end of POSIX (Portable Operating System Interface) layer + +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C/C++ and POSIX layer + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set +# end of Network + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set +# end of Memory protection + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RESOURCE_ID is not set +# CONFIG_RT_USING_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# CONFIG_RT_USING_VBUS is not set + +# +# Using USB legacy version +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB legacy version + +# CONFIG_RT_USING_FDT is not set +# end of RT-Thread Components + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set +# end of RT-Thread Utestcases + +# +# RT-Thread online packages +# + +# +# 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_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set +# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# 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 +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# 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_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_IOTSHARP_SDK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C 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_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN 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 +# end of security packages + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set +# end of multimedia packages + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR 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_MEMORYPERF 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 +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# end of tools packages + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX 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_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 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 +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# end of sensors drivers + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_CST812T is not set +# end of touch drivers + +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# 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_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED 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_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 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_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_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of project laboratory + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +CONFIG_SOC_FAMILY_RENESAS=y +CONFIG_SOC_SERIES_R9A07G0=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_R9A07G084=y + +# +# Onboard Peripheral Drivers +# +# CONFIG_BSP_USING_ETHERCAT_EOE is not set +# end of Onboard Peripheral Drivers + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +# CONFIG_BSP_USING_ONCHIP_FLASH is not set +# CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART0=y +# CONFIG_BSP_UART0_RX_USING_DMA is not set +# CONFIG_BSP_UART0_TX_USING_DMA is not set +CONFIG_BSP_UART0_RX_BUFSIZE=256 +CONFIG_BSP_UART0_TX_BUFSIZE=0 +# CONFIG_BSP_USING_ADC is not set +# CONFIG_BSP_USING_CANFD is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_TIM is not set +# CONFIG_BSP_USING_ETH is not set +# end of On-chip Peripheral Drivers + +# +# Board extended module Drivers +# +# CONFIG_BSP_USING_RW007 is not set +# end of Board extended module Drivers +# end of Hardware Drivers Config diff --git a/bsp/renesas/rzn2l_rsk/.secure_azone b/bsp/renesas/rzn2l_rsk/.secure_azone new file mode 100644 index 00000000000..585ba89ca37 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/.secure_azone @@ -0,0 +1,4 @@ + + + + diff --git a/bsp/renesas/rzn2l_rsk/.secure_xml b/bsp/renesas/rzn2l_rsk/.secure_xml new file mode 100644 index 00000000000..0ee0319050f --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/.secure_xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/rzn2l_rsk/.settings/standalone.prefs b/bsp/renesas/rzn2l_rsk/.settings/standalone.prefs new file mode 100644 index 00000000000..5e6ead989e8 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/.settings/standalone.prefs @@ -0,0 +1,24 @@ +#Sat Sep 14 16:03:03 CST 2024 +com.renesas.cdt.ddsc.content/com.renesas.cdt.ddsc.content.defaultlinkerscript=script/fsp_xspi0_boot.icf +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#Board\#\#rzn2l_rsk\#\#xspi0_x1_boot\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Arm\#\#CMSIS\#\#CMSIS5\#\#Core\#\#\#\#5.7.0+renesas.1.fsp.2.0.0/all=1441545198,rzn/arm/CMSIS_5/LICENSE.txt|4247764709,rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_gcc.h|1135074086,rzn/arm/CMSIS_5/CMSIS/Core_R/Include/core_cr52.h|510668081,rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_iccarm.h|4245531541,rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_compiler.h|1887099957,rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_cp15.h|3334069041,rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_version.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#rzn2l\#\#device\#\#R9A07G084M04GBG\#\#2.0.0/all= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#Board\#\#rzn2l_rsk\#\#xspi0_x1_boot\#\#2.0.0/all=907937621,script/fsp_xspi0_boot.icf|3822962514,rzn/board/rzn2l_rsk/board_leds.c|358444977,rzn/board/rzn2l_rsk/board_init.c|2067006575,rzn/board/rzn2l_rsk/board.h|736691883,rzn/board/rzn2l_rsk/board_ethernet_phy.h|1631979823,rzn/board/rzn2l_rsk/board_leds.h|1430483072,rzn/board/rzn2l_rsk/board_init.h +com.renesas.cdt.ddsc.contentgen.options/options/suppresswarningspaths= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.threads.configurator/collapse/module.driver.uart_on_sci_uart.86814920=false +com.renesas.cdt.ddsc.settingseditor/com.renesas.cdt.ddsc.settingseditor.active_page=SWPConfigurator +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#2.0.0/all=908052335,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|3563504244,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|870156648,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/system_core.c|368480523,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/startup_core.c|3243637314,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|1280798555,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|3352808441,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/R9A07G084.h|1310386533,rzn/fsp/src/bsp/mcu/all/bsp_io.h|3643995939,rzn/fsp/src/bsp/mcu/all/bsp_cache.h|1033616941,rzn/fsp/src/bsp/mcu/all/bsp_register_protection.h|1572168446,rzn/fsp/src/bsp/mcu/all/bsp_io.c|3001342594,rzn/fsp/src/bsp/mcu/all/bsp_common.h|263477342,rzn/fsp/src/bsp/mcu/all/bsp_reset.h|2534029381,rzn/fsp/src/bsp/mcu/all/bsp_module_stop.h|4193244082,rzn/fsp/src/bsp/mcu/all/bsp_irq.h|2136575248,rzn/fsp/src/bsp/mcu/all/bsp_tfu.h|2170977041,rzn/fsp/src/bsp/mcu/all/bsp_delay.c|526389185,rzn/fsp/src/bsp/mcu/all/bsp_compiler_support.h|8162287,rzn/fsp/src/bsp/mcu/all/bsp_clocks.h|3045644015,rzn/fsp/src/bsp/mcu/all/bsp_common.c|1908923075,rzn/fsp/src/bsp/mcu/all/bsp_clocks.c|1289851302,rzn/fsp/src/bsp/mcu/all/bsp_irq.c|358242822,rzn/fsp/src/bsp/mcu/all/bsp_sbrk.c|2321472163,rzn/fsp/src/bsp/mcu/all/bsp_cache.c|225356254,rzn/fsp/src/bsp/mcu/all/bsp_exceptions.h|2518644892,rzn/fsp/src/bsp/mcu/all/bsp_register_protection.c|392613868,rzn/fsp/src/bsp/mcu/all/bsp_reset.c|2238656401,rzn/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1611830052,rzn/fsp/src/bsp/mcu/all/bsp_delay.h|2060190483,rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.h|1543064539,rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.h|3717942516,rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.c|3396795463,rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.c|2195931215,rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.c|1126344352,rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.h|1926319940,rzn/fsp/inc/fsp_features.h|2508067197,rzn/fsp/inc/fsp_version.h|3571247719,rzn/fsp/inc/fsp_common_api.h|3347087544,rzn/fsp/inc/instances/r_ioport.h|1765016794,rzn/fsp/inc/api/bsp_api.h|250199021,rzn/fsp/inc/api/r_ioport_api.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#rzn2l\#\#device\#\#R9A07G084M04GBG\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#rzn2l\#\#fsp\#\#\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.project.standalone.projectgenerationoptions/isCpp=false +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#all\#\#Memory\#\#\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#all\#\#Memory\#\#\#\#2.0.0/all= +com.renesas.cdt.ddsc.packs.componentfiles/Arm\#\#CMSIS\#\#CMSIS5\#\#Core\#\#\#\#5.7.0+renesas.1.fsp.2.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#2.0.0/all=2921827146,rzn/fsp/src/r_sci_uart/r_sci_uart.c|4093801030,rzn/fsp/inc/instances/r_sci_uart.h|1119704027,rzn/fsp/inc/api/r_uart_api.h|3586794436,rzn/fsp/inc/api/r_transfer_api.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#rzn2l\#\#device\#\#\#\#2.0.0/all=3243637314,rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#rzn2l\#\#device\#\#\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#rzn2l\#\#fsp\#\#\#\#2.0.0/all=2989202485,rzn/fsp/src/bsp/mcu/rzn2l/bsp_loader_param.c|1967641730,rzn/fsp/src/bsp/mcu/rzn2l/bsp_feature.h|1508541487,rzn/fsp/src/bsp/mcu/rzn2l/bsp_elc.h|1088535767,rzn/fsp/src/bsp/mcu/rzn2l/bsp_irq_sense.c|1458388275,rzn/fsp/src/bsp/mcu/rzn2l/bsp_override.h|617637586,rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#2.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#2.0.0/all=615913359,rzn/fsp/src/r_ioport/r_ioport.c|3347087544,rzn/fsp/inc/instances/r_ioport.h|250199021,rzn/fsp/inc/api/r_ioport_api.h diff --git a/bsp/renesas/rzn2l_rsk/Kconfig b/bsp/renesas/rzn2l_rsk/Kconfig new file mode 100644 index 00000000000..896f127335a --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/Kconfig @@ -0,0 +1,17 @@ +mainmenu "RT-Thread Configuration" + +BSP_DIR := . + +RTT_DIR := ../../.. + +# you can change the RTT_ROOT default "rt-thread" +# example : default "F:/git_repositories/rt-thread" + +PKGS_DIR := packages + +ENV_DIR := / + +source "$(RTT_DIR)/Kconfig" +osource "$PKGS_DIR/Kconfig" +rsource "../libraries/Kconfig" +source "$(BSP_DIR)/board/Kconfig" diff --git a/bsp/renesas/rzn2l_rsk/README.md b/bsp/renesas/rzn2l_rsk/README.md new file mode 100644 index 00000000000..e12338d8ec4 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/README.md @@ -0,0 +1,168 @@ +# Renesas RSK-RZN2L Development Board BSP Documentation + +**English** | [**中文**](./README_zh.md) + +## Introduction + +This document provides the BSP (Board Support Package) for the Renesas RSK-RZN2L development board. By following the Quick Start Guide, developers can quickly get started with the BSP and run RT-Thread on the development board. + +The main contents include: + +- Development Board Introduction +- BSP Quick Start Guide + +## Development Board Introduction + +The RSK-RZN2L MCU evaluation board is based on Renesas RZ/N2L and is designed for developing embedded system applications with flexible software package configuration and IDE support. + +The front appearance of the development board is shown below: + +![image-20240914173709363](figures/image-20240914173709363.png) + +The commonly used **onboard resources** for this development board are as follows: + +- MPU: R9A07G084M04GBG, maximum operating frequency of 400MHz, Arm® Cortex®-R52 with on-chip FPU (Floating Point Unit) and NEON™, 1.5 MB on-chip SRAM, Ethernet MAC, EtherCAT, USB 2.0 High-Speed, CAN/CANFD, various communication interfaces such as xSPI and ΔΣ interfaces, and security functions. +- Debug Interface: Onboard J-Link interface +- Expansion Interface: Two PMOD connectors + +**More detailed information and tools** + +## Peripheral Support + +The current peripheral support in this BSP is as follows: + +| **On-chip Peripheral** | **Support Status** | **Remarks** | +| :----------------- | :----------------- | :------------- | +| UART | Supported | UART0 is the default log output port | +| GPIO | Supported | | +| HWIMER | Supported | | +| IIC | Supported | | +| WDT | Supported | | +| RTC | Supported | | +| ADC | Supported | | +| DAC | Supported | | +| SPI | Supported | | +| FLASH | Supported | | +| PWM | Supported | | +| CAN | Supported | | +| ETH | Supported | | +| More updates... | | | + +## Instructions + +The instructions are divided into the following two sections: + +- Quick Start + + This section is for beginners who are new to RT-Thread. By following simple steps, you can run the RT-Thread OS on this development board and observe the experimental results. + +- Advanced Usage + + This section is for developers who want to use more resources on the development board with RT-Thread. Using the ENV tool to configure the BSP, you can enable more onboard resources and achieve more advanced features. + +### Quick Start + +Currently, this BSP only provides an IAR project. Below is an example of how to get the system running using the [IAR Embedded Workbench for Arm](https://www.iar.com/products/architectures/arm/iar-embedded-workbench-for-arm/) development environment. + +**Hardware Connection** + +Connect the development board to the PC using a USB data cable, and use the J-Link interface to download and debug programs. + +**Compilation and Download** + +- Go to the BSP directory, open ENV, and use the command `scons --target=iar` to generate the IAR project. +- Compile: Double-click the `project.eww` file to open the IAR project and compile the program. +- Debug: Click `Project->Download and Debug` in the IAR toolbar to download and start debugging. + +**View Running Results** + +After successfully downloading the program, the system will run automatically and print system information. + +Connect the corresponding serial port of the development board to the PC. Open the corresponding serial port in a terminal tool (115200-8-1-N). After resetting the device, you can see the RT-Thread output. Enter the `help` command to view the supported commands in the system. + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.1.0 build Mar 14 2024 18:26:01 + 2006 - 2024 Copyright by RT-Thread team + +Hello RT-Thread! +================================================== +This is a iar project which mode is xspi0 execution! +================================================== +msh >help +RT-Thread shell commands: +clear - clear the terminal screen +version - show RT-Thread version information +list - list objects +backtrace - print backtrace of a thread +help - RT-Thread shell help +ps - List threads in the system +free - Show the memory usage in the system +pin - pin [option] + +msh > +``` + +**Application Entry Function** + +The application layer's entry function is in `src\hal_entry.c` in the `void hal_entry(void)` function. User source files can be placed directly in the `src` directory. + +```c +#define LED_PIN BSP_IO_PORT_18_PIN_2 /* Onboard LED pins */ + +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread!\n"); + rt_kprintf("==================================================\n"); + rt_kprintf("This is a iar project which mode is xspi0 execution!\n"); + rt_kprintf("==================================================\n"); + + while (1) + { + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} +``` + +### Advanced Usage + +**Resources and Documentation** + +- [Development Board Official Homepage](https://www.renesas.cn/zh/products/microcontrollers-microprocessors/rz-mpus/rzn2l-integrated-tsn-compliant-3-port-gigabit-ethernet-switch-enables-various-industrial-applications) +- [Development Board Data Sheet](https://www.renesas.cn/zh/document/dst/rzn2l-group-datasheet?r=1622651) +- [Development Board Hardware Manual](https://www.renesas.cn/zh/document/mah/rzn2l-group-users-manual-hardware?r=1622651) +- [RZ/N2L MCU Quick Start Guide](https://www.renesas.cn/zh/document/apn/rzt2-rzn2-device-setup-guide-flash-boot-application-note?r=1622651) +- [RZ/N2L Easy Download Guide](https://www.renesas.cn/zh/document/gde/rzn2l-easy-download-guide?r=1622651) +- [Renesas RZ/N2L Group](https://www.renesas.cn/zh/document/fly/renesas-rzn2l-group?r=1622651) + +**FSP Configuration** + +If you need to modify Renesas BSP peripheral configurations or add new peripheral ports, you will need to use the Renesas [FSP](https://www2.renesas.cn/jp/zh/software-tool/flexible-software-package-fsp#document) configuration tool. Please follow the steps below. If you encounter any issues during the configuration, feel free to ask on the [RT-Thread Community Forum](https://club.rt-thread.org/). + +1. [Download the Flexible Software Package (FSP) | Renesas](https://github.com/renesas/rzn-fsp/releases/download/v2.0.0/setup_rznfsp_v2_0_0_rzsc_v2024-01.1.exe), please use version FSP 2.0.0. +2. Refer to the document [How to Import Board Support Package](https://www2.renesas.cn/document/ppt/1527171?language=zh&r=1527191) to add the **"RSK-RZN2L Board Support Package"** to FSP. +3. Refer to the document: [RA Series Using FSP to Configure Peripheral Drivers](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/make-bsp/renesas-ra/RA系列使用FSP配置外设驱动?id=ra系列使用-fsp-配置外设驱动). + +**ENV Configuration** + +- How to use the ENV tool: [RT-Thread ENV Tool User Manual](https://www.rt-thread.org/document/site/#/development-tools/env/env) + +By default, this BSP only enables UART0. To use more advanced features like components, software packages, etc., you need to configure the BSP using the ENV tool. + +Steps: +1. Open the env tool in the BSP directory. +2. Enter the `menuconfig` command to configure the project. After configuration, save and exit. +3. Enter the `pkgs --update` command to update the software packages. +4. Enter the `scons --target=iar` command to regenerate the project. + +## Contact Information + +If you have any thoughts or suggestions during usage, feel free to contact us via the [RT-Thread Community Forum](https://club.rt-thread.org/). + +## Contribute Code + +If you are interested in the RSK-RZN2L and have some exciting projects to share with the community, we welcome your code contributions. You can refer to [How to Contribute Code to RT-Thread](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/development-guide/github/github). \ No newline at end of file diff --git a/bsp/renesas/rzn2l_rsk/README_zh.md b/bsp/renesas/rzn2l_rsk/README_zh.md new file mode 100644 index 00000000000..6c7579e7468 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/README_zh.md @@ -0,0 +1,168 @@ +# 瑞萨 RSK-RZN2L 开发板 BSP 说明 + +**中文** | [**English**](./README.md) + +## 简介 + +本文档为瑞萨 RSK-RZN2L 开发板提供的 BSP (板级支持包) 说明。通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。 + +主要内容如下: + +- 开发板介绍 +- BSP 快速上手指南 + +## 开发板介绍 + +基于瑞萨 RZ/N2L 开发的 RSK-RZN2L MCU 评估板,通过灵活配置软件包和 IDE,对嵌入系统应用程序进行开发。 + +开发板正面外观如下图: + +![image-20240914173709363](figures/image-20240914173709363.png) + +该开发板常用 **板载资源** 如下: + +- MPU:R9A07G084M04GBG,最大工作频率 400MHz,Arm® Cortex®-R52 片上浮点单元(FPU)和 NEON™,1.5 MB 片上 SRAM,Ethernet MAC,EtherCAT,USB 2.0 高速,CAN/CANFD,xSPI 和 ΔΣ 接口等各种通信接口,以及安全功能。 +- 调试接口:板载 J-Link 接口 +- 扩展接口:两个 PMOD 连接器 + +**更多详细资料及工具** + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :----------------- | :----------------- | :------------- | +| UART | 支持 | UART0 为默认日志输出端口 | +| GPIO | 支持 | | +| HWIMER | 支持 | | +| IIC | 支持 | | +| WDT | 支持 | | +| RTC | 支持 | | +| ADC | 支持 | | +| DAC | 支持 | | +| SPI | 支持 | | +| FLASH | 支持 | | +| PWM | 支持 | | +| CAN | 支持 | | +| ETH | 支持 | | +| 持续更新中... | | | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 目前仅提供 IAR 工程。下面以 [IAR Embedded Workbench for Arm](https://www.iar.com/products/architectures/arm/iar-embedded-workbench-for-arm/) 开发环境为例,介绍如何将系统运行起来。 + +**硬件连接** + +使用 USB 数据线连接开发板到 PC,使用 J-link 接口下载和 DEBUG 程序。 + +**编译下载** + +- 进入 bsp 目录下,打开 ENV 使用命令 `scons --target=iar` 生成 IAR工程。 +- 编译:双击 project.eww 文件,打开 IAR 工程,编译程序。 +- 调试:IAR 左上方导航栏点击 `Project->Download and Debug`下载并启动调试。 + +**查看运行结果** + +下载程序成功之后,系统会自动运行并打印系统信息。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息。输入 help 命令可查看系统中支持的命令。 + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.1.0 build Mar 14 2024 18:26:01 + 2006 - 2024 Copyright by RT-Thread team + +Hello RT-Thread! +================================================== +This is a iar project which mode is xspi0 execution! +================================================== +msh >help +RT-Thread shell commands: +clear - clear the terminal screen +version - show RT-Thread version information +list - list objects +backtrace - print backtrace of a thread +help - RT-Thread shell help +ps - List threads in the system +free - Show the memory usage in the system +pin - pin [option] + +msh > +``` + +**应用入口函数** + +应用层的入口函数在 **src\hal_entry.c** 中 的 `void hal_entry(void)` 。用户编写的源文件可直接放在 src 目录下。 + +```c +#define LED_PIN BSP_IO_PORT_18_PIN_2 /* Onboard LED pins */ + +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread!\n"); + rt_kprintf("==================================================\n"); + rt_kprintf("This is a iar project which mode is xspi0 execution!\n"); + rt_kprintf("==================================================\n"); + + while (1) + { + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} +``` + +### 进阶使用 + +**资料及文档** + +- [开发板官网主页](https://www.renesas.cn/zh/products/microcontrollers-microprocessors/rz-mpus/rzn2l-integrated-tsn-compliant-3-port-gigabit-ethernet-switch-enables-various-industrial-applications) +- [开发板数据手册](https://www.renesas.cn/zh/document/dst/rzn2l-group-datasheet?r=1622651) +- [开发板硬件手册](https://www.renesas.cn/zh/document/mah/rzn2l-group-users-manual-hardware?r=1622651) +- [RZ/N2L MCU 快速入门指南](https://www.renesas.cn/zh/document/apn/rzt2-rzn2-device-setup-guide-flash-boot-application-note?r=1622651) +- [RZ/N2L Easy Download Guide](https://www.renesas.cn/zh/document/gde/rzn2l-easy-download-guide?r=1622651) +- [Renesas RZ/N2L Group](https://www.renesas.cn/zh/document/fly/renesas-rzn2l-group?r=1622651) + +**FSP 配置** + +需要修改瑞萨的 BSP 外设配置或添加新的外设端口,需要用到瑞萨的 [FSP](https://www2.renesas.cn/jp/zh/software-tool/flexible-software-package-fsp#document) 配置工具。请务必按照如下步骤完成配置。配置中有任何问题可到[RT-Thread 社区论坛](https://club.rt-thread.org/)中提问。 + +1. [下载灵活配置软件包 (FSP) | Renesas](https://github.com/renesas/rzn-fsp/releases/download/v2.0.0/setup_rznfsp_v2_0_0_rzsc_v2024-01.1.exe),请使用 FSP 2.0.0 版本 +2. 如何将 **”RSK-RZN2L板级支持包“**添加到 FSP 中,请参考文档[如何导入板级支持包](https://www2.renesas.cn/document/ppt/1527171?language=zh&r=1527191) +3. 请参考文档:[RA系列使用FSP配置外设驱动](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/make-bsp/renesas-ra/RA系列使用FSP配置外设驱动?id=ra系列使用-fsp-配置外设驱动)。 + +**ENV 配置** + +- 如何使用 ENV 工具:[RT-Thread env 工具用户手册](https://www.rt-thread.org/document/site/#/development-tools/env/env) + +此 BSP 默认只开启了 UART0 的功能,如果需使用更多高级功能例如组件、软件包等,需要利用 ENV 工具进行配置。 + +步骤如下: +1. 在 bsp 下打开 env 工具。 +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 +3. 输入`pkgs --update`命令更新软件包。 +4. 输入`scons --target=iar` 命令重新生成工程。 + +## 联系人信息 + +在使用过程中若您有任何的想法和建议,建议您通过以下方式来联系到我们 [RT-Thread 社区论坛](https://club.rt-thread.org/) + +## 贡献代码 + +如果您对 RSK-RZN2L 感兴趣,并且有一些好玩的项目愿意与大家分享的话欢迎给我们贡献代码,您可以参考 [如何向 RT-Thread 代码贡献](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/development-guide/github/github)。 diff --git a/bsp/renesas/rzn2l_rsk/SConscript b/bsp/renesas/rzn2l_rsk/SConscript new file mode 100644 index 00000000000..889ba12c85f --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/SConscript @@ -0,0 +1,28 @@ +# for module compiling +import os +Import('RTT_ROOT') +Import('rtconfig') +from building import * +from gcc import * + +cwd = GetCurrentDir() +src = [] +CPPPATH = [cwd] +group = [] +list = os.listdir(cwd) + +if rtconfig.PLATFORM in ['iccarm']: + group = DefineGroup('', src, depend = [''], CPPPATH = CPPPATH) +elif rtconfig.PLATFORM in GetGCCLikePLATFORM(): + if GetOption('target') != 'mdk5': + CPPPATH = [cwd] + src = Glob('./src/*.c') + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + group = group + SConscript(os.path.join(d, 'SConscript')) + +Return('group') diff --git a/bsp/renesas/rzn2l_rsk/SConstruct b/bsp/renesas/rzn2l_rsk/SConstruct new file mode 100644 index 00000000000..ec52972c99a --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/SConstruct @@ -0,0 +1,54 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map project.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +rtconfig.BSP_LIBRARY_TYPE = None + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/renesas/rzn2l_rsk/board/Kconfig b/bsp/renesas/rzn2l_rsk/board/Kconfig new file mode 100644 index 00000000000..994910cf14a --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/board/Kconfig @@ -0,0 +1,201 @@ +menu "Hardware Drivers Config" + + config SOC_R9A07G084 + bool + select SOC_SERIES_R9A07G0 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + + menu "Onboard Peripheral Drivers" + + config BSP_USING_ETHERCAT_EOE + bool "Enable EtherCAT EOE example" + select BSP_USING_ETH + default n + if BSP_USING_ETHERCAT_EOE + config RT_LWIP_IPADDR + string "set static ip address for eoe slaver" + default "192.168.10.100" + config RT_LWIP_GWADDR + string "set static gateway address for eoe slaver" + default "192.168.10.1" + config RT_LWIP_MSKADDR + string "set static mask address for eoe slaver" + default "255.255.255.0" + endif + + endmenu + + menu "On-chip Peripheral Drivers" + + rsource "../../libraries/HAL_Drivers/Kconfig" + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + select RT_USING_SERIAL_V2 + if BSP_USING_UART + + menuconfig BSP_USING_UART0 + bool "Enable UART0" + default n + if BSP_USING_UART0 + config BSP_UART0_RX_USING_DMA + bool "Enable UART0 RX DMA" + depends on BSP_USING_UART0 && RT_SERIAL_USING_DMA + default n + + config BSP_UART0_TX_USING_DMA + bool "Enable UART0 TX DMA" + depends on BSP_USING_UART0 && RT_SERIAL_USING_DMA + default n + + config BSP_UART0_RX_BUFSIZE + int "Set UART0 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART0_TX_BUFSIZE + int "Set UART0 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + endif + + menuconfig BSP_USING_ADC + bool "Enable ADC" + default n + select RT_USING_ADC + if BSP_USING_ADC + config BSP_USING_ADC1 + bool "Enable ADC1" + default n + endif + + menuconfig BSP_USING_CANFD + bool "Enable CANFD" + default n + select RT_USING_CAN + select RT_CAN_USING_CANFD + if BSP_USING_CANFD + config BSP_USING_CANFD0 + bool "Enable CANFD0" + default n + endif + + menuconfig BSP_USING_I2C + bool "Enable I2C BUS" + default n + select RT_USING_I2C + select RT_USING_I2C_BITOPS + select RT_USING_PIN + if BSP_USING_I2C + config BSP_USING_HW_I2C + bool "Enable Hardware I2C BUS" + default n + if BSP_USING_HW_I2C + config BSP_USING_HW_I2C0 + bool "Enable Hardware I2C0 BUS" + default n + endif + if BSP_USING_HW_I2C + config BSP_USING_HW_I2C1 + bool "Enable Hardware I2C1 BUS" + default n + endif + if !BSP_USING_HW_I2C + menuconfig BSP_USING_I2C1 + bool "Enable I2C1 BUS (software simulation)" + default y + if BSP_USING_I2C1 + config BSP_I2C1_SCL_PIN + hex "i2c1 scl pin number" + range 0x0000 0x0B0F + default 0x0B03 + config BSP_I2C1_SDA_PIN + hex "I2C1 sda pin number" + range 0x0000 0x0B0F + default 0x050E + endif + endif + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI0 + bool "Enable SPI0 BUS" + default n + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + default n + config BSP_USING_SPI2 + bool "Enable SPI2 BUS" + default n + endif + + menuconfig BSP_USING_TIM + bool "Enable timer" + default n + select RT_USING_HWTIMER + if BSP_USING_TIM + config BSP_USING_TIM0 + bool "Enable TIM0" + default n + config BSP_USING_TIM1 + bool "Enable TIM1" + default n + endif + + config BSP_USING_ETH + bool "Enable Ethernet" + select RT_USING_SAL + select RT_USING_LWIP + select RT_USING_NETDEV + default n + + endmenu + + menu "Board extended module Drivers" + menuconfig BSP_USING_RW007 + bool "Enable RW007" + default n + select PKG_USING_RW007 + select BSP_USING_SPI + select BSP_USING_SPI2 + select RT_USING_MEMPOOL + select RW007_NOT_USE_EXAMPLE_DRIVERS + + if BSP_USING_RW007 + config RA_RW007_SPI_BUS_NAME + string "RW007 BUS NAME" + default "spi2" + + config RA_RW007_CS_PIN + hex "(HEX)CS pin index" + default 0x1207 + + config RA_RW007_BOOT0_PIN + hex "(HEX)BOOT0 pin index (same as spi clk pin)" + default 0x1204 + + config RA_RW007_BOOT1_PIN + hex "(HEX)BOOT1 pin index (same as spi cs pin)" + default 0x1207 + + config RA_RW007_INT_BUSY_PIN + hex "(HEX)INT/BUSY pin index" + default 0x1102 + + config RA_RW007_RST_PIN + hex "(HEX)RESET pin index" + default 0x1706 + endif + endmenu +endmenu diff --git a/bsp/renesas/rzn2l_rsk/board/SConscript b/bsp/renesas/rzn2l_rsk/board/SConscript new file mode 100644 index 00000000000..a27ea8e470c --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/board/SConscript @@ -0,0 +1,16 @@ +import os +from building import * + +objs = [] +cwd = GetCurrentDir() +list = os.listdir(cwd) +CPPPATH = [cwd] +src = Glob('*.c') + +objs = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/renesas/rzn2l_rsk/board/board.h b/bsp/renesas/rzn2l_rsk/board/board.h new file mode 100644 index 00000000000..cf53068064e --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/board/board.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-03-11 Wangyuqiang first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define RZ_SRAM_SIZE 512 /* The SRAM size of the chip needs to be modified */ +#define RZ_SRAM_END (0x10000000 + RZ_SRAM_SIZE * 1024 - 1) + +#ifdef __ARMCC_VERSION +extern int Image$$RAM_END$$ZI$$Base; +#define HEAP_BEGIN ((void *)&Image$$RAM_END$$ZI$$Base) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +#define HEAP_BEGIN (0x10000000) +#endif + +#define HEAP_END RZ_SRAM_END + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define MAX_HANDLERS (512) +#define GIC_IRQ_START 0 +#define GIC_ACK_INTID_MASK (0x000003FFU) +/* number of interrupts on board */ +#define ARM_GIC_NR_IRQS (448) +/* only one GIC available */ +#define ARM_GIC_MAX_NR 1 +/* end defined */ + +#define GICV3_DISTRIBUTOR_BASE_ADDR (0x100000) + +/* the basic constants and interfaces needed by gic */ +rt_inline rt_uint32_t platform_get_gic_dist_base(void) +{ + rt_uint32_t gic_base; + + __get_cp(15, 1, gic_base, 15, 3, 0); + return gic_base + GICV3_DISTRIBUTOR_BASE_ADDR; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/renesas/rzn2l_rsk/board/ports/SConscript b/bsp/renesas/rzn2l_rsk/board/ports/SConscript new file mode 100644 index 00000000000..e8ac9ae59e6 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/board/ports/SConscript @@ -0,0 +1,16 @@ +import os +from building import * + +objs = [] +src = Glob('*.c') +cwd = GetCurrentDir() +CPPPATH = [cwd] + +objs = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +list = os.listdir(cwd) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/renesas/rzn2l_rsk/board/ports/gpio_cfg.h b/bsp/renesas/rzn2l_rsk/board/ports/gpio_cfg.h new file mode 100644 index 00000000000..d179d4ab6ca --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/board/ports/gpio_cfg.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-03-11 Wangyuqiang first version + */ + +/* Number of IRQ channels on the device */ +#define RA_IRQ_MAX 16 + +/* PIN to IRQx table */ +#define PIN2IRQX_TABLE \ +{ \ + switch (pin) \ + { \ + case BSP_IO_PORT_00_PIN_1: \ + case BSP_IO_PORT_09_PIN_2: \ + case BSP_IO_PORT_18_PIN_3: \ + return 0; \ + case BSP_IO_PORT_00_PIN_3: \ + case BSP_IO_PORT_07_PIN_4: \ + case BSP_IO_PORT_18_PIN_4: \ + return 1; \ + case BSP_IO_PORT_01_PIN_2: \ + return 2; \ + case BSP_IO_PORT_01_PIN_4: \ + return 3; \ + case BSP_IO_PORT_02_PIN_0: \ + case BSP_IO_PORT_22_PIN_2: \ + return 4; \ + case BSP_IO_PORT_03_PIN_5: \ + case BSP_IO_PORT_13_PIN_2: \ + return 5; \ + case BSP_IO_PORT_14_PIN_2: \ + case BSP_IO_PORT_21_PIN_5: \ + return 6; \ + case BSP_IO_PORT_16_PIN_3: \ + return 7; \ + case BSP_IO_PORT_03_PIN_6: \ + case BSP_IO_PORT_16_PIN_6: \ + return 8; \ + case BSP_IO_PORT_03_PIN_7: \ + case BSP_IO_PORT_21_PIN_6: \ + return 9; \ + case BSP_IO_PORT_04_PIN_4: \ + case BSP_IO_PORT_18_PIN_1: \ + case BSP_IO_PORT_21_PIN_7: \ + return 10; \ + case BSP_IO_PORT_10_PIN_4: \ + case BSP_IO_PORT_18_PIN_6: \ + return 11; \ + case BSP_IO_PORT_05_PIN_0: \ + case BSP_IO_PORT_05_PIN_4: \ + case BSP_IO_PORT_05_PIN_6: \ + return 12; \ + case BSP_IO_PORT_00_PIN_4: \ + case BSP_IO_PORT_00_PIN_7: \ + case BSP_IO_PORT_05_PIN_1: \ + return 13; \ + case BSP_IO_PORT_02_PIN_2: \ + case BSP_IO_PORT_03_PIN_0: \ + case BSP_IO_PORT_05_PIN_2: \ + return 14; \ + case BSP_IO_PORT_02_PIN_3: \ + case BSP_IO_PORT_05_PIN_3: \ + case BSP_IO_PORT_22_PIN_0: \ + return 15; \ + default : \ + return -1; \ + } \ +} diff --git a/bsp/renesas/rzn2l_rsk/buildinfo.ipcf b/bsp/renesas/rzn2l_rsk/buildinfo.ipcf new file mode 100644 index 00000000000..f80fac71ee5 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/buildinfo.ipcf @@ -0,0 +1,153 @@ + + + + R9A07G084M04 + + + $PROJ_DIR$/rzn/arm/CMSIS_5/CMSIS/Core_R/Include + $PROJ_DIR$/rzn/fsp/inc + $PROJ_DIR$/rzn/fsp/inc/api + $PROJ_DIR$/rzn/fsp/inc/instances + $PROJ_DIR$/rzn/fsp/src/bsp/mcu/all/cr + $PROJ_DIR$/rzn_cfg/fsp_cfg + $PROJ_DIR$/rzn_cfg/fsp_cfg/bsp + $PROJ_DIR$/rzn_gen + $PROJ_DIR$/src + $PROJ_DIR$ + + + _RZN_ORDINAL=1 + _RZN_CORE=CR52_0 + _RENESAS_RZN_ + + + $PROJ_DIR$/rzn/arm/CMSIS_5/CMSIS/Core_R/Include + $PROJ_DIR$/rzn/fsp/inc + $PROJ_DIR$/rzn/fsp/inc/api + $PROJ_DIR$/rzn/fsp/inc/instances + $PROJ_DIR$/rzn/fsp/src/bsp/mcu/all/cr + $PROJ_DIR$/rzn_cfg/fsp_cfg + $PROJ_DIR$/rzn_cfg/fsp_cfg/bsp + $PROJ_DIR$/rzn_gen + $PROJ_DIR$/src + $PROJ_DIR$ + + + _RZN_ORDINAL=1 + _RZN_CORE=CR52_0 + _RENESAS_RZN_ + + + true + $PROJ_DIR$/script/fsp_xspi0_boot.icf + + + --config_search "$PROJ_DIR$" + + + system_init + + + + + RASC_EXE_PATH + D:\manufacture_apps\Renesas\fsp\rzn_v2.0.0\eclipse\rasc.exe + + + + + + rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_compiler.h + rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_cp15.h + rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_gcc.h + rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_iccarm.h + rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_version.h + rzn/arm/CMSIS_5/CMSIS/Core_R/Include/core_cr52.h + rzn/arm/CMSIS_5/LICENSE.txt + rzn/board/rzn2l_rsk/board.h + rzn/board/rzn2l_rsk/board_ethernet_phy.h + rzn/board/rzn2l_rsk/board_init.c + rzn/board/rzn2l_rsk/board_init.h + rzn/board/rzn2l_rsk/board_leds.c + rzn/board/rzn2l_rsk/board_leds.h + rzn/fsp/inc/api/bsp_api.h + rzn/fsp/inc/api/r_ioport_api.h + rzn/fsp/inc/api/r_transfer_api.h + rzn/fsp/inc/api/r_uart_api.h + rzn/fsp/inc/fsp_common_api.h + rzn/fsp/inc/fsp_features.h + rzn/fsp/inc/fsp_version.h + rzn/fsp/inc/instances/r_ioport.h + rzn/fsp/inc/instances/r_sci_uart.h + rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/R9A07G084.h + rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h + rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h + rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/startup_core.c + rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/system_core.c + rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c + rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c + rzn/fsp/src/bsp/mcu/all/bsp_cache.c + rzn/fsp/src/bsp/mcu/all/bsp_cache.h + rzn/fsp/src/bsp/mcu/all/bsp_clocks.c + rzn/fsp/src/bsp/mcu/all/bsp_clocks.h + rzn/fsp/src/bsp/mcu/all/bsp_common.c + rzn/fsp/src/bsp/mcu/all/bsp_common.h + rzn/fsp/src/bsp/mcu/all/bsp_compiler_support.h + rzn/fsp/src/bsp/mcu/all/bsp_delay.c + rzn/fsp/src/bsp/mcu/all/bsp_delay.h + rzn/fsp/src/bsp/mcu/all/bsp_exceptions.h + rzn/fsp/src/bsp/mcu/all/bsp_io.c + rzn/fsp/src/bsp/mcu/all/bsp_io.h + rzn/fsp/src/bsp/mcu/all/bsp_irq.c + rzn/fsp/src/bsp/mcu/all/bsp_irq.h + rzn/fsp/src/bsp/mcu/all/bsp_mcu_api.h + rzn/fsp/src/bsp/mcu/all/bsp_module_stop.h + rzn/fsp/src/bsp/mcu/all/bsp_register_protection.c + rzn/fsp/src/bsp/mcu/all/bsp_register_protection.h + rzn/fsp/src/bsp/mcu/all/bsp_reset.c + rzn/fsp/src/bsp/mcu/all/bsp_reset.h + rzn/fsp/src/bsp/mcu/all/bsp_sbrk.c + rzn/fsp/src/bsp/mcu/all/bsp_tfu.h + rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.c + rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.h + rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.c + rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.h + rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.c + rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.h + rzn/fsp/src/bsp/mcu/rzn2l/bsp_elc.h + rzn/fsp/src/bsp/mcu/rzn2l/bsp_feature.h + rzn/fsp/src/bsp/mcu/rzn2l/bsp_irq_sense.c + rzn/fsp/src/bsp/mcu/rzn2l/bsp_loader_param.c + rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h + rzn/fsp/src/bsp/mcu/rzn2l/bsp_override.h + rzn/fsp/src/r_ioport/r_ioport.c + rzn/fsp/src/r_sci_uart/r_sci_uart.c + + + rzn_cfg/fsp_cfg/bsp/board_cfg.h + rzn_cfg/fsp_cfg/bsp/bsp_cfg.h + rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h + rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_memory_cfg.h + rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h + rzn_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h + rzn_cfg/fsp_cfg/bsp/bsp_memory_cfg.h + rzn_cfg/fsp_cfg/bsp/bsp_pin_cfg.h + rzn_cfg/fsp_cfg/r_ioport_cfg.h + rzn_cfg/fsp_cfg/r_sci_uart_cfg.h + + + rzn_gen/bsp_clock_cfg.h + rzn_gen/common_data.c + rzn_gen/common_data.h + rzn_gen/hal_data.c + rzn_gen/hal_data.h + rzn_gen/main.c + rzn_gen/pin_data.c + rzn_gen/vector_data.c + rzn_gen/vector_data.h + + + src/hal_entry.c + + + diff --git a/bsp/renesas/rzn2l_rsk/configuration.xml b/bsp/renesas/rzn2l_rsk/configuration.xml new file mode 100644 index 00000000000..e2a3575d5f0 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/configuration.xml @@ -0,0 +1,1111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Board Support Package Common Files + Renesas.RZN.2.0.0.pack + + + Memory Config Checking + Renesas.RZN.2.0.0.pack + + + I/O Port + Renesas.RZN.2.0.0.pack + + + Arm CMSIS Version 5 - Core + Arm.CMSIS5.5.7.0+renesas.1.fsp.2.0.0.pack + + + RSK+RZN2L Board Support Files (xSPI0 x1 boot mode) + Renesas.RZN_board_rzn2l_rsk.2.0.0.pack + + + Board support package for R9A07G084M04GBG + Renesas.RZN_mcu_rzn2l.2.0.0.pack + + + Board support package for RZN2L + Renesas.RZN_mcu_rzn2l.2.0.0.pack + + + Board support package for RZN2L - FSP Data + Renesas.RZN_mcu_rzn2l.2.0.0.pack + + + SCI UART + Renesas.RZN.2.0.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/rzn2l_rsk/figures/image-20240914173709363.png b/bsp/renesas/rzn2l_rsk/figures/image-20240914173709363.png new file mode 100644 index 0000000000000000000000000000000000000000..f36978de7bce16c0393b175284cd4ee44033a2ef GIT binary patch literal 456375 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�GDjon^FX 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 rOXDXy8(~BJ8UrLf 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�OgTf(LAmad5fxzIX>Y5<|fYrs! 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

U3XX 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 %5$SySr<5SNj=rHXcSuA4K%t=-|Mzo{xO7 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⪻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

!A3FH&IbiC47NJE_s8lJB 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�S_a##cEEwoib3kj$B%f=`DkqWB zM7D-6`C&}J7if=xmrGncdH-B6~p16A37o^vx(*4|g zb>;Fp!yWo*9tr}@a(-BsN_z-4TFRN2H7GiJ-kz6b@pG2sIHgLjn8_J5)e=0D0*Qgm z&Vz_ZX7z{dB4nY}jkcTJNM^ySEL45($>#A6T%hmWsY$Fr3W@6_A5beDaM%9%ItqW) zeKUJi>%c`A=709S>9&q7#5sfpGsqevhSeM-%=1+kYmbeKOPwyctn5TK<^8<@nC17J z&wo3TMElX)-5r+W=e15XTR)bM&bc`epXS9#^w_!^?lB4*$?Xn@dSv(;?pvLxR z^zSE(ZG0OxnT(vp@vXu{%!?DM;~Z=riXUBcPJ| zH#aJZ7Rk~CtJeXtXf`17IKr__TvNa8n%~w237NUQ>8?wjG3xoZx=GFT$`qeu3CDf& z7tzDH(X)YsB3rU~J`{k*(l^Ly_+*W18<2~1+95rA2U)Mf*2{3_LhSOt*YwuTBbYZavR4bl=RJ_}DMC&mTd)?1M|gp8?K;BZR=Gf6V$a)m)E-!1MX& zy~$^Qe+SFPe1X~@vbyheXVEz$65g1`OTX`GWc}XT7gJxl{nvUrdlt^TVx|oN-X&H7 z{89*KL#c`ZzaQV0hWo?0ODqKN-tW0SFCra0i_WqL;Ykg6vfEX)RhKtA?AFO+2fh&U zn6-WmfmHtcj5P|uSwkccv;?8uwe1{7xCub}A6^04GBnz^h;PfT_zp`KZj+TFY_l0@ zhb}rP$>WBbdYgp!$}~x;j_=p24kX{`xUeC&-<}2IzNer4K%=J|>n~b3b90x*D1NE5 zJ-0{Ac&V0Hsq(@OgyTq(rGkOuA1>q#R9m0a3LhTIu2}@a+&-LfCoL;5=ysz8OHdzWKS>ti65SEBE+w1c z&v)<(q290sbPE#lapb2Cs*IVH=5$HT>?lvB$f7+Wbq7YOROl~(l z9MEv?ge}jb{6xn($tqD1ppzrRGgNT9;FbQ99Yc=(X_v>0BD`mmH(9cks-#1~(~RV7pf?FIxxkBv8y3=z22=7Q zFmq+aw_4CR)Ec5O(@+FTD^E97*n}-Z-s=s*ra+-MbU_nN3e9EgEVuL*J z0vwvTc?AW;n5iBPXHPc`6XJNqBkFX$^l&S0!)rvl95?hEqpgAK_(sB6)86@Y2oan6 zHMS~T46k|5Ud-@ftAXc>Vu)}s23szpH>?_ zi6t9tmSl?uz5b|fYcwpy2fjLHs(GPGmv^W`^n&!;5%XA^t&ujZA`k2 z?7_i`)2%WEl*uReU-V`WS-{ehx6R99giw^2*sJ;kd;)tQOFRMnr|O6G-&Rsh~4} zg7-AIO63HGv=IRL?4c^|_Z{D(h!0P#F$7mdqRTF%Ed`X6^DTQ5P&xz`^i zvA)N{LZ=I&v@~K7cIa>~7z=0_hmF2huyoTx_AAd1jnklERR#R^yRQYu%RQintJ=<6 z2iBkZmpPa(!AciCqV}dNt0T3!VHV zvY5R+m`Gb)pNBT&Q{=BVABw^!=572>k&6eg95U-nwB~L56Ix*^LvqmttX8XAuDhDi zVh0DalX@KH#QNGE9x)w%9LX*TK3cjgq(`QltNAXn+xTAxUCNUl3!TUF2|ko}y92xC zx12*us+wJTr~m-Lm&M7}t);g}Wd2%8g)TOoRRE|NS@P*~q=H=`wzNE-A=~$OEDZIB zcdI|hBF4J92lVYvXCg1XZYWeIwiAvXx%ty8;#mVNjS}!~R`qlzgtwK5jL% z{+ssF$9+kx@A;yTFP-)~%62oZ(cdvj{FHv#GrYu=WR#2Q)!W{Oo{haKc4bE4Og1v{ zSE#dtb|`AlgpQag0-|GPRftN7;O*kHKPb)J$7}3d(8|Fb7-u-+NR~`Fo-jLmrR#Nq z4o}MOx=M2Y)Fqrv``@j>9^qozH%_uBJ?(006vXC2o1UP4>Q`8+>#7F_lR&Z@#I93V7?bDsra~v(o435r2Zd}S6J1urfzcfpMd<`@W03f#p3vzCZ!J-= zpj(NQ*HiY?=no)8PE;=5iqG=cUToLRfJN=!txKM%7XQxOxLEx((5|_g4$6wkS}Xr^ z^KtkSQzrV8CVZAB!k+6Zj=Y?!x9jIHdvBwEvan!2(Kj z=4&hI_3)7SRGLV}+*b&YeGiWU96Wponk*dL(uU{Jp8?eA5to_;Q#j-rO}}%&^~t!iTA|zZPq)2j?h3CB1*l)(Y0vF& zP8%?ZgpcJqOz1suu`+XVsQc|gqw?3fmV|*pyGo7PSj`!piT&#gJZaaXw%^M*>UqO> zPxfz7Z_}bmKxTYA8x@k*t}~dcZsoRmt)b96~V@M37Z&o5czvH}&>w;uY2RO3UFdvtrZ|nX=$i zuU=4Oxf3o6yq~@er08l9BpF|q}mG-9(<{5pA@S95vt zYUz2f;J$ju*h6e~zoNK1B{x}L61q7qE9B06lyZ3Kt?X_+NA0oB_Uxx#*HP$xcztd% zQLtBZydti7e_pyGy2tTzMb+Z;v8_ATA}rLG;AJ)rqjK0j#tLKW)~TQO$5BW9+lIikXpmiY;|>u#@lqjv>?DJ6B_t#?zZ(3A1>|L2kU+x{nPP%2lbs@8sbu2S|%y|ZW^;y-sm7Quo+In0>zLZ(cabBWg00uoQFPuedSFe2=QT4)DkbRH5 z;z62`a98*i@^d(V3y;NkSQplc9v=p5k_T?s*vB>x!T4X=E1zb9nZ~lX1cf6Q&TH4r zn#hb#lv2W`-t`$Z_vL)oy=!>WR}igkvJc;UjAyU1Y(6b$DH8x!YvAkq8g_sGlp{i< z;AVvk=q!$AeMmnT`I+;(($%sxT^(wu&`nYIn>39B1%mb_AgzkgOeLb@FS#cgko(bA z*}*K;@6IMjvHPu%w0PL>aEfnzS*YdyJaM$)W>pm<;j(Y=X1t^4^L;+S7xw ztmr~zC3OP!l>2?1yZh$BzwO=J3l2SENsjGWh0LWYRoJLI93ps5)0TPuihosBza`>+T=x8)AN~y|H~Ck%Dx4+_~mj9HY@Bx4^d@pM|0ij?;Ob6oQDtdVQ@_1d_a z_(a-8G(tnP0wKvQNd$m&Kuwb;L*)$9VriKxGs!L?MVS8wMXNvB+>j*&Ggj#Cw>Zhi z)>Bv)bc>W14x_WdqO5}unKDTXLERh;U2>(C6f997t5Ssw{p0T$e3@oIDY$nkl4h0F zEN%`?yhLBr6=9l~tyubSWel%88eGDl4W2To^U*Fs7lkrg$Ig@gt~5thbX-ju=R9vB>UBzvGc?lbZAyMSVE!wPUq=)G)4nIKf9~Q!e`6sl8)!n`ix97v z#X&X#V>r>6%oGHXq|{G#AWL)4Ktto9r37OH3!BYG4i8-v7r2%4GR9B%H_sGn-J&5% z(=6|&dPD_;G?Luirdry}92E!J0))B9r4B1hZxsKF111DZtvzI>O;R2T2u6760HRQd zOa0$-H_UIg0O5G%Ks6baUN!arr_j*=`F@B-IeEizV)B$SNJ=#})F0t|iV(rfUzX?I zxhpWW4)#7bsIb02p{@HB7e)%;{@;VMo5#Zme#-wX56J&w$5ep=is*fVP`pAEE~$86 zQ(%I58yt%v#H%x{ge+0OOmYCOkr9It6m{r3`rmNu`hrGl7m#SPUSvIkq4~x{(kPa) zJN9p}0Fqj4MAmOVKY4_^s39?;F7SIBzU*u9Bq*rIutBZR)b)n?pcnE>p4eSwi_Dj2 zdW9RdjH|a#J>;J0NQ@qNl$AlygLe=8ZtjJV>Hj_8v%$~*>PH*l=$`-FN}mymB+Q5x z$6Tp|dxd#nF^nK3I0EF<~|6#amGq*0Kp|n_y;?AUvg4Vw~=BqyutfBZ^Q#0 z1Jz&yE*GwQU?Tc&$M{Fx&~Jp?7Z6)hgGY&(Pm&TYuA7fL*G^q}{yT!OCI7XNT+&os zAkrgB>5^kv58rHU`H{aQx}48QJGb-Ye5=<>f{{Z;=v0xhMovabj4MeY{27niE?m{W zQQ1FbkgiT9Z^@U!k(YonGMDh^5*p(iq^zT(88c;C5YMJmAA*et)6cfPet?8xN1Ifv zmwuQ&63{}$AUfUx?tha-rZCMgcat%OT6d+2?=9-mQ&q2CAe$+lV!%u+k?`mro1yiKhy;TQ`hitw+BE!(g3^fD154IuV^va(~p?RJ3X8ZWFNxZL^4D3xs#*bP0Q*QQ?UwVvL`hqcjfk|Fh)@c{*fJ=^m=eE* z$jp+OBZ-ltV^#ryBYMT@{I$iddR8JMzpvqf45@k6Dg~~cS_cphXXV{srjtLaZAwdS znS`>oqngvgfPNNJBaixDTB;XqwA1t$tRQIrb) zdHL*3{?r0a=KQfx<~hX0dQV1N_aL!3D2it1z8@7vljHj6mcfCO(TYv3)*FJEIkj5v zj|o%lVUGN@X*Tpc=waXvGn0m+<+vTT`G8fZ{Lv2hsUnV01!FiPUC5J_s?LJeSPl<6 zpDBXXy1B)~A&s><2erGfX6|t8)M4ud873WA2EW+GIST|f;(wPn2`r0%Xx&nNYANq9 zqn&1cBmXIv1ku3>gW}GP_9v9#U$Zehrj5o}#{-9wjU04~nu(ZhU!}laq#)oI?6oT6 zFeS+YfiP?V-mtj}n(4$sTt*8shCCFfbl2=9vl)ku2eh)yAY*ENl6=&1X-dFl6Vp8e z?H=8o-UG%+HO_x(m-nBv5jf_>pQeaF`;h1bop< zId$szzKdwMe%vPf(<;eK%imwI65F~goG#AXpRVJyVrk5eSNiXF6sDTZc+j=9oCWWN zk6UQ~&qM&C06HdSNH%;u6x8g~QAr)fF-QBX?brpq^Ewil?E)-~bct0vx`A;3WLq~c% zURSSuxj=rif0ftp=pvh|SfjIp3msk`YQ=sXTh^k288pOW8&Qu#f$sBNyi3e|50j(q)w=+#$5($v>^tgI}X==NW=7pgh6)?1rv z3*&3`FJBKl*5rmgOWX4K*D!u#HPt^ew(pIvDibH1|T>soSsy8v><*|(TwAig* z!Y_iwbaFjj_k`FhbBX+Kne5x#cH?*2k)J9k^^#i5&2^=V3neOK20%)u79U2ZNbIM{ z=adhBC}kw9QE2A(oC?~w5gM#{CA?RM9%6xj2i&u_C!D{t9n0C8TImztnhA6g zF7Zt!CvJ_$*%Xv_zzX78rSN%`j^>#jGerplV6nM*TL1A;T)ruvbqu&l+vwy?Hwuqe z_P=Tk2I|^P8qDa=)^HFcOSF>!ioRIV~rLt$Wn@{ z3@raP=gE?Mx-YD7Qu5Iw3xJU5y>dR)fz}h=i>x3$1lbNLXCmv);85Q>yC4 zh_-`gE7;Gkw%V5T^t+z3ugXTVv~_i3Isi}hI^*&}7B>pq9Y6RCsTT-q!(NDLmwq4e z=(-<0mc+~I=zeFCX9V3&jy}YXuo1X1a%)&^yccHXid3g$IC}N?iljrFU|SD>Q>?w(@0Q1`3EupZ@u*@8~L+SeY3A{X|Te-5~7T@veP6X;Y{UbL-=kpWeVkKL=) zKiz1{$^Kl+)&JCQ`hkfzv^U$eTB~~l1f_%4xRuv?_kZ?Z+z1a(hP(;A&)!#l_MJZ; zDgyZrO1qwFc4R+I`6k3@$R?#*>*O!8 zu{MRUztUMl)MZa!(<9h<;j&rD*J9O&)8eJRO6bU+d%BHq)I5Y7TOoO^j1NVo#$tnZ zl5$*TjvrFE`Un2)j8m)D7>{SB-(eGFvbxs0f7o|om#CJj{jfSlk+Eu-Y!B5}Tz&{j z9-Ek`I_vmNH14?j;57LcX*U5B#UH(#Sc`iFV|bj_(%yntt!x?bq|nR?}p2S&2W?S9lLmvbnuPeWFQ zP#crmKzNiEfv9h5OPflEi}7*DKzp&Cn*+TJff())OTzJ=W}#e0ir_d4go|MG+a|CT!pkPE-#TRi5epF#A~`X!y9dK{Q#rxHLCSItMjRms(11f=3j8bDxt# zf_%;>e|3n2SiA)Wn>LSAC$++2OPbkR81?x+O`Vd0l;{*l`B_Sdh4g8XBj(KvLZEz1 z&owFDG9UOH+)w@PcA(W6rqn}mgg~$kqiMXhF$$6jE$FE+tW6Xu`uvRPQ{SNZx903D zrxsR`@d1BsZsK2(4j)K>Ahi#W#M!*JwF+=6{IHd9igbMi&5e=jepMX2LxobEOY zBrzmqp#eVmKK{?3mtcM~l|PPy-{-P_njdsku)3R{o{p#Cb+ue;9Sszl3atu#Y?v#i z7TqX{e?IAqvLDhPQR{n1NACMhGn3>lH@o>(ejMj;zcFi6 z%&Na@Dvux42vwyjPNvVdXFfax9o4GUI@D}-IFR5?%M(Rlskd>u?QRTAULLD?8iKAB z7-~q)Spocf{v;ML{A+f zL0fnVlrE+WfCy718~*sS9Mbi)j1;9>196EP5A;#&Hs)>z8JXRpp>Ekf)=Y(2UA(<<*E+T3mRJCdOrGb=i@cwkp`<>;^)u zj3!WhMqf96-_2+;0y$g+PTDha1F*#?i@KcDzbu6I7gH;iF8po z+K$eu+2-iC`L&7u<57BT%L!`Z7Gjs1(o+Q|P!UW}2lLy|fRA)iIRwfI`;%N+zXgt5 z^=LaZ4BZ5c-W~vH^((|8;fk}E1KNO0bJ{`Qq}V(ew-MeoG9&vM`(Q8{1P&)31fAeE z+_pAFar4I|rS13GB{P*%ggm)`AWwl@M4Mi943QoOE4U<#zZb_gDfX*)r(Per{Bdz| zB|ao{G+%>)*cC5+FSW8jkdrsc&=m6T^BheOb=RuONOl{md3Ui18Jm5udPO7VXZF!fnu{>4`0D)?^6#4{I>vz{qJNN zkt%tp#9}rYtH|WQ;2GA_pkVjrHpzK65W4J{qlmKopY<{~EOYddU}G>a*l-?r($c&u zp zwf5-b?OR?oe*D=uk5O5m5jc}|=ONGTwYCf%H<&I>ohRhf#>jB`io^qN4+n;S@$!u! zTpxG5FK65^W9cuuCIK%_PByivUusWEDz&t&bN;*4Ph-l$Va ufI}H5!*P>c + + 4 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 33 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E2_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + GPLINK_ID + 2 + + 0 + 1 + 1 + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\Azure\AzureArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 33 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E2_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + GPLINK_ID + 2 + + 0 + 1 + 0 + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\Azure\AzureArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/renesas/rzn2l_rsk/project.ewp b/bsp/renesas/rzn2l_rsk/project.ewp new file mode 100644 index 00000000000..571f8bdf8b0 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/project.ewp @@ -0,0 +1,2802 @@ + + + 4 + + Debug + + ARM + + 1 + + General + 3 + + 36 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 38 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 12 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 1 + inputOutputBased + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BUILDACTION + 2 + + + + + Release + + ARM + + 0 + + General + 3 + + 36 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 38 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 12 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BUILDACTION + 2 + + + + cmd /c ""$RASC_EXE_PATH$" -nosplash --launcher.suppressErrors --generate --compiler IAR --devicefamily rzn "$PROJ_DIR$\configuration.xml" 2> "%TEMP%\rasc_stderr.out"" + $PROJ_DIR$ + preCompile + + + $BUILD_FILES_DIR$/.prebuild + + + + + cmd /c ""$RASC_EXE_PATH$" -nosplash --launcher.suppressErrors --gensmartbundle --compiler IAR --devicefamily rzn "$PROJ_DIR$\configuration.xml" "$TARGET_PATH$" 2> "%TEMP%\rasc_stderr.out"" && echo > "$BUILD_FILES_DIR$/.postbuild" + $PROJ_DIR$ + postLink + + + $BUILD_FILES_DIR$/.postbuild + + + + + + + + + Applications + + + Compiler + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cctype.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdlib.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstring.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\ctime.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cunistd.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cwchar.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscalls.c + + + + CPU + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\gicv3.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\interrupt.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\stack.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\start_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\trap.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\vector_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_comm.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_up.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\condvar.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\pin\dev_pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\dev_serial_v2.c + + + $PROJ_DIR$\..\..\..\components\drivers\core\device.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\workqueue.c + + + + Drivers + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart_v2.c + + + + Finsh + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_parse.c + + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + + Flex Software + + Build Configuration + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\board_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_memory_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_pn_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_family_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_memory_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_pin_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_ioport_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_sci_uart_cfg.h + + + + Components + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_ethernet_phy.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_init.c + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_init.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_leds.c + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_leds.h + + + $PROJ_DIR$\rzn\fsp\inc\api\bsp_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_cache.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_cache.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_cache_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_cache_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_clocks.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_clocks.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_common.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_common.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_compiler_support.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_delay.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_delay.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_delay_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_delay_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_elc.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_exceptions.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_feature.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_io.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_io.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_irq.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_irq.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_irq_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_irq_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_irq_sense.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_loader_param.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_mcu_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_mcu_info.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_module_stop.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_override.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_register_protection.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_register_protection.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_reset.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_reset.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_sbrk.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_tfu.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_compiler.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_cp15.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_gcc.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_iccarm.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_version.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\core_cr52.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_common_api.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_features.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_version.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\LICENSE.txt + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\R9A07G084.h + + + $PROJ_DIR$\rzn\fsp\src\r_ioport\r_ioport.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_ioport.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_ioport_api.h + + + $PROJ_DIR$\rzn\fsp\src\r_sci_uart\r_sci_uart.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_sci_uart.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_transfer_api.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_uart_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\renesas.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\startup.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\cr\startup_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\system.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\system.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\cr\system_core.c + + + + Generated Data + + $PROJ_DIR$\rzn_gen\bsp_clock_cfg.h + + + $PROJ_DIR$\rzn_gen\common_data.c + + + $PROJ_DIR$\rzn_gen\common_data.h + + + $PROJ_DIR$\rzn_gen\hal_data.c + + + $PROJ_DIR$\rzn_gen\hal_data.h + + + $PROJ_DIR$\rzn_gen\main.c + + + $PROJ_DIR$\rzn_gen\pin_data.c + + + $PROJ_DIR$\rzn_gen\vector_data.c + + + $PROJ_DIR$\rzn_gen\vector_data.h + + + + Program Entry + + $PROJ_DIR$\src\hal_entry.c + + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu_up.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\klibc\kstdio.c + + + $PROJ_DIR$\..\..\..\src\klibc\kstring.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler_comm.c + + + $PROJ_DIR$\..\..\..\src\scheduler_up.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + libcpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\atomic_arm.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + + POSIX + + + $PROJ_DIR$\buildinfo.ipcf + IAR.ControlFile + + diff --git a/bsp/renesas/rzn2l_rsk/project.ewt b/bsp/renesas/rzn2l_rsk/project.ewt new file mode 100644 index 00000000000..f5b8963f783 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/project.ewt @@ -0,0 +1,3406 @@ + + + 4 + + Debug + + ARM + + 1 + + C-STAT + 518 + + 518 + + 0 + + 1 + 600 + 1 + 3 + 0 + 1 + 100 + Debug/C-STAT + + + 2.6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RuntimeChecking + 0 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + Release + + ARM + + 0 + + C-STAT + 518 + + 518 + + 0 + + 1 + 600 + 1 + 3 + 0 + 1 + 100 + Release/C-STAT + + + 2.6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RuntimeChecking + 0 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + Applications + + + Compiler + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cctype.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdlib.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstring.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\ctime.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cunistd.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cwchar.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscalls.c + + + + CPU + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\gicv3.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\interrupt.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\stack.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\start_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\trap.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-r52\vector_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_comm.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_up.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\condvar.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\pin\dev_pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\dev_serial_v2.c + + + $PROJ_DIR$\..\..\..\components\drivers\core\device.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\workqueue.c + + + + Drivers + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart_v2.c + + + + Finsh + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_parse.c + + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + + Flex Software + + Build Configuration + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\board_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_memory_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_pn_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_family_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_memory_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_pin_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_ioport_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_sci_uart_cfg.h + + + + Components + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_ethernet_phy.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_init.c + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_init.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_leds.c + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_leds.h + + + $PROJ_DIR$\rzn\fsp\inc\api\bsp_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_cache.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_cache.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_cache_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_cache_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_clocks.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_clocks.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_common.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_common.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_compiler_support.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_delay.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_delay.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_delay_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_delay_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_elc.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_exceptions.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_feature.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_io.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_io.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_irq.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_irq.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_irq_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_irq_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_irq_sense.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_loader_param.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_mcu_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_mcu_info.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_module_stop.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_override.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_register_protection.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_register_protection.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_reset.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_reset.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_sbrk.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_tfu.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_compiler.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_cp15.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_gcc.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_iccarm.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_version.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\core_cr52.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_common_api.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_features.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_version.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\LICENSE.txt + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\R9A07G084.h + + + $PROJ_DIR$\rzn\fsp\src\r_ioport\r_ioport.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_ioport.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_ioport_api.h + + + $PROJ_DIR$\rzn\fsp\src\r_sci_uart\r_sci_uart.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_sci_uart.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_transfer_api.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_uart_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\renesas.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\startup.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\cr\startup_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\system.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\system.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\cr\system_core.c + + + + Generated Data + + $PROJ_DIR$\rzn_gen\bsp_clock_cfg.h + + + $PROJ_DIR$\rzn_gen\common_data.c + + + $PROJ_DIR$\rzn_gen\common_data.h + + + $PROJ_DIR$\rzn_gen\hal_data.c + + + $PROJ_DIR$\rzn_gen\hal_data.h + + + $PROJ_DIR$\rzn_gen\main.c + + + $PROJ_DIR$\rzn_gen\pin_data.c + + + $PROJ_DIR$\rzn_gen\vector_data.c + + + $PROJ_DIR$\rzn_gen\vector_data.h + + + + Program Entry + + $PROJ_DIR$\src\hal_entry.c + + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu_up.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\klibc\kstdio.c + + + $PROJ_DIR$\..\..\..\src\klibc\kstring.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler_comm.c + + + $PROJ_DIR$\..\..\..\src\scheduler_up.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + libcpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\atomic_arm.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + + POSIX + + + $PROJ_DIR$\buildinfo.ipcf + + diff --git a/bsp/renesas/rzn2l_rsk/project.eww b/bsp/renesas/rzn2l_rsk/project.eww new file mode 100644 index 00000000000..c2cb02eb1e8 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/renesas/rzn2l_rsk/rtconfig.h b/bsp/renesas/rzn2l_rsk/rtconfig.h new file mode 100644 index 00000000000..d682c565ba5 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rtconfig.h @@ -0,0 +1,344 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 16 +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 1024 + +/* kservice optimization */ + +/* end of kservice optimization */ + +/* klibc optimization */ + +/* end of klibc optimization */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT +#define RT_USING_OVERFLOW_CHECK + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 512 +#define RT_CONSOLE_DEVICE_NAME "uart0" +#define RT_VER_NUM 0x50200 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define RT_USING_HW_ATOMIC +#define ARCH_ARM +#define ARCH_ARM_CORTEX_R +#define ARCH_ARM_CORTEX_R52 + +/* 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 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V2 +#define RT_SERIAL_USING_DMA +#define RT_USING_PIN +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +/* end of Network */ + +/* Memory protection */ + +/* end of Memory protection */ + +/* Utilities */ + +/* end of Utilities */ + +/* Using USB legacy version */ + +/* end of Using USB legacy version */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ +#define SOC_FAMILY_RENESAS +#define SOC_SERIES_R9A07G0 + +/* Hardware Drivers Config */ + +#define SOC_R9A07G084 + +/* Onboard Peripheral Drivers */ + +/* end of Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART0 +#define BSP_UART0_RX_BUFSIZE 256 +#define BSP_UART0_TX_BUFSIZE 0 +/* end of On-chip Peripheral Drivers */ + +/* Board extended module Drivers */ + +/* end of Board extended module Drivers */ +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rtconfig.py b/bsp/renesas/rzn2l_rsk/rtconfig.py new file mode 100644 index 00000000000..57a98c2bcb6 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rtconfig.py @@ -0,0 +1,123 @@ +import os +import sys + +# toolchains options +ARCH='arm' +CPU='cortex-r52' +CROSS_TOOL='gcc' + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armclang' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iccarm' + EXEC_PATH = r'D:/IAR Systems/Embedded Workbench 9.2' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' +# BUILD = 'release' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + NM = PREFIX + 'nm' + + DEVICE = ' -mcpu=cortex-r52 -marm -mfloat-abi=hard -mfpu=neon-fp-armv8 -munaligned-access -fdiagnostics-parseable-fixits -Og -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -funwind-tables' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=arm ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T script/fsp_xspi0_boot.ld -L script/' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g -Wall' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -Os' + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O ihex $TARGET rtthread.hex\n' + SIZE + ' $TARGET \n' + # POST_ACTION += OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'iccarm': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-R52' + CFLAGS += ' -e' + CFLAGS += ' --arm' + CFLAGS += ' --float-abi=hard' + CFLAGS += ' --fpu=neon-fp-armv8' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-R52' + AFLAGS += ' --arm' + AFLAGS += ' --float-abi hard' + AFLAGS += ' --fpu neon-fp-armv8' + # AFLAGS += ' --unaligned-access' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "script/fsp_xspi0_boot.icf"' + LFLAGS += ' --entry Reset_Handler' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/renesas/rzn2l_rsk/rzn/SConscript b/bsp/renesas/rzn2l_rsk/rzn/SConscript new file mode 100644 index 00000000000..41038bee62c --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/SConscript @@ -0,0 +1,28 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * +from gcc import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + Return('group') +elif rtconfig.PLATFORM in GetGCCLikePLATFORM(): + if GetOption('target') != 'mdk5': + src += Glob(cwd + '/fsp/src/bsp/mcu/all/*.c') + src += Glob(cwd + '/fsp/src/bsp/mcu/all/cr/*.c') + src += Glob(cwd + '/fsp/src/bsp/mcu/r*/*.c') + src += Glob(cwd + '/fsp/src/r_*/*.c') + src += Glob(cwd + '/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/*.c') + src += [cwd + '/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c'] + src += [cwd + '/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c'] + CPPPATH = [ cwd + '/arm/CMSIS_5/CMSIS/Core_R/Include', + cwd + '/fsp/inc', + cwd + '/fsp/inc/api', + cwd + '/fsp/inc/instances',] + +group = DefineGroup('rzn', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_compiler.h b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_compiler.h new file mode 100644 index 00000000000..e1e68604b26 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_compiler.h @@ -0,0 +1,290 @@ +/**************************************************************************//** + * @file cmsis_compiler.h + * @brief CMSIS compiler generic header file + * @date 31. August 2021 + ******************************************************************************/ +/* + * Copyright [2020-2021] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This file is based on the "\CMSIS\Core\Include\cmsis_compliler.h" + * + * Changes: + * - No Changes. + */ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_COMPILER_H +#define __CMSIS_COMPILER_H + +#include + +/* + * Arm Compiler 4/5 + */ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + + +/* + * Arm Compiler 6.6 LTM (armclang) + */ +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) + #include "cmsis_armclang_ltm.h" + + /* + * Arm Compiler above 6.10.1 (armclang) + */ +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) + #include "cmsis_armclang.h" + + +/* + * GNU Compiler + */ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + + +/* + * IAR Compiler + */ +#elif defined ( __ICCARM__ ) + #include + + +/* + * TI Arm Compiler + */ +#elif defined ( __TI_ARM__ ) + #include + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __attribute__((packed)) + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed)) + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed)) + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) + #endif + #ifndef __RESTRICT + #define __RESTRICT __restrict + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + + +/* + * TASKING Compiler + */ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __packed__ + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __packed__ + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __packed__ + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __packed__ T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __align(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + + +/* + * COSMIC Compiler + */ +#elif defined ( __CSMC__ ) + #include + + #ifndef __ASM + #define __ASM _asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + // NO RETURN is automatically detected hence no warning here + #define __NO_RETURN + #endif + #ifndef __USED + #warning No compiler specific solution for __USED. __USED is ignored. + #define __USED + #endif + #ifndef __WEAK + #define __WEAK __weak + #endif + #ifndef __PACKED + #define __PACKED @packed + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT @packed struct + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION @packed union + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + @packed struct T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. + #define __ALIGNED(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + + +#else + #error Unknown compiler. +#endif + + +#endif /* __CMSIS_COMPILER_H */ + diff --git a/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_cp15.h b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_cp15.h new file mode 100644 index 00000000000..174b5b8e561 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_cp15.h @@ -0,0 +1,783 @@ +/**************************************************************************//** + * @file cmsis_cp15.h + * @brief CMSIS compiler specific macros, functions, instructions + * @date 02. February 2024 + ******************************************************************************/ +/* + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This file is based on the "CMSIS\Core_A\Include\cmsis_cp15.h" + * + * Changes: + * Renesas Electronics Corporation on 2021-08-31 + * - Changed to be related to Cortex-R52 by + * Renesas Electronics Corporation on 2024-02-02 + * - Functions are sorted according to the Arm technical reference. + * - Added some functions to convert BSP into C language. + */ +/* + * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CMSIS_CP15_H +#define __CMSIS_CP15_H + +/** \brief Get CTR + \return Cache Type Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CTR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 0, 0, 1); + return result; +} + +/** \brief Get MPIDR + + This function returns the value of the Multiprocessor Affinity Register. + + \return Multiprocessor Affinity Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MPIDR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 0, 0, 5); + return result; +} + +/** \brief Get CCSIDR + \return CCSIDR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CCSIDR(void) +{ + uint32_t result; + __get_CP(15, 1, result, 0, 0, 0); + return result; +} + +/** \brief Get CLIDR + \return CLIDR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CLIDR(void) +{ + uint32_t result; + __get_CP(15, 1, result, 0, 0, 1); + return result; +} + +/** \brief Get CSSELR + \return CSSELR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CSSELR(void) +{ + uint32_t result; + __get_CP(15, 2, result, 0, 0, 0); + return result; +} + +/** \brief Set CSSELR + */ +__STATIC_FORCEINLINE void __set_CSSELR(uint32_t value) +{ + __set_CP(15, 2, value, 0, 0, 0); +} + +/** \brief Get SCTLR + + This function assigns the given value to the System Control Register. + + \return System Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_SCTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 0); + return result; +} + +/** \brief Set SCTLR + \param [in] value System Control Register value to set + */ +__STATIC_FORCEINLINE void __set_SCTLR(uint32_t value) +{ + __set_CP(15, 0, value, 1, 0, 0); +} + + +/** \brief Get ACTLR + \return Auxiliary Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_ACTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 1); + return(result); +} + +/** \brief Set ACTLR + \param [in] value Auxiliary Control value to set + */ +__STATIC_FORCEINLINE void __set_ACTLR(uint32_t value) +{ + __set_CP(15, 0, value, 1, 0, 1); +} + +/** \brief Get CPACR + \return Coprocessor Access Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPACR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 2); + return result; +} + +/** \brief Set CPACR + \param [in] value Coprocessor Access Control value to set + */ +__STATIC_FORCEINLINE void __set_CPACR(uint32_t value) +{ + __set_CP(15, 0, value, 1, 0, 2); +} + +/** \brief Get TTBR0 + + This function returns the value of the Translation Table Base Register 0. + + \return Translation Table Base Register 0 value + */ +__STATIC_FORCEINLINE uint32_t __get_TTBR0(void) +{ + uint32_t result; + __get_CP(15, 0, result, 2, 0, 0); + return result; +} + +/** \brief Set TTBR0 + + This function assigns the given value to the Translation Table Base Register 0. + + \param [in] value Translation Table Base Register 0 value to set + */ +__STATIC_FORCEINLINE void __set_TTBR0(uint32_t value) +{ + __set_CP(15, 0, value, 2, 0, 0); +} + +/** \brief Get DACR + + This function returns the value of the Domain Access Control Register. + + \return Domain Access Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_DACR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 3, 0, 0); + return result; +} + +/** \brief Set DACR + + This function assigns the given value to the Domain Access Control Register. + + \param [in] value Domain Access Control Register value to set + */ +__STATIC_FORCEINLINE void __set_DACR(uint32_t value) +{ + __set_CP(15, 0, value, 3, 0, 0); +} + +/** \brief Get ICC_PMR + */ +__STATIC_FORCEINLINE uint32_t __get_ICC_PMR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 4, 6, 0); + return result; +} + +/** \brief Set ICC_PMR + */ +__STATIC_FORCEINLINE void __set_ICC_PMR(uint32_t value) +{ + __set_CP(15, 0, value, 4, 6, 0); +} + +/** \brief Get DFSR + \return Data Fault Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_DFSR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 5, 0, 0); + return result; +} + +/** \brief Set DFSR + \param [in] value Data Fault Status value to set + */ +__STATIC_FORCEINLINE void __set_DFSR(uint32_t value) +{ + __set_CP(15, 0, value, 5, 0, 0); +} + +/** \brief Get IFSR + \return Instruction Fault Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IFSR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 5, 0, 1); + return result; +} + +/** \brief Set IFSR + \param [in] value Instruction Fault Status value to set + */ +__STATIC_FORCEINLINE void __set_IFSR(uint32_t value) +{ + __set_CP(15, 0, value, 5, 0, 1); +} + +/** \brief Set PRSELR + + This function assigns the given value to the Protection Region Selection Register. + + \param [in] value Protection Region Selection Register to set + */ +__STATIC_FORCEINLINE void __set_PRSELR(uint32_t value) +{ + __set_CP(15, 0, value, 6, 2, 1); +} + +/** \brief Get PRBAR + + This function returns the value of the Protection Region Base Address Register. + + \return Protection Region Base Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_PRBAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 6, 3, 0); + return result; +} + +/** \brief Set PRBAR + + This function assigns the given value to the Protection Region Base Address Register. + + \param [in] value Protection Region Base Address Register to set + */ +__STATIC_FORCEINLINE void __set_PRBAR(uint32_t value) +{ + __set_CP(15, 0, value, 6, 3, 0); +} + +/** \brief Get PRLAR + + This function returns the value of the Protection Region Limit Address Register. + + \return Protection Region Limit Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_PRLAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 6, 3, 1); + return result; +} + +/** \brief Set PRLAR + + This function assigns the given value to the Protection Region Limit Address Register. + + \param [in] value Protection Region Limit Address Register to set + */ +__STATIC_FORCEINLINE void __set_PRLAR(uint32_t value) +{ + __set_CP(15, 0, value, 6, 3, 1); +} + +/** \brief Set ICIALLU + + Instruction Cache Invalidate All + */ +__STATIC_FORCEINLINE void __set_ICIALLU(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 0); +} + +/** \brief Set ICIVAU + */ +__STATIC_FORCEINLINE void __set_ICIVAU(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 1); +} + +/** \brief Set BPIALL. + + Branch Predictor Invalidate All + */ +__STATIC_FORCEINLINE void __set_BPIALL(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 6); +} + +/** \brief Set DCIMVAC + + Data cache invalidate + */ +__STATIC_FORCEINLINE void __set_DCIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 6, 1); +} + +/** \brief Set DCIVAC + */ +__STATIC_FORCEINLINE void __set_DCIVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 6, 1); +} + +/** \brief Set DCISW + */ +__STATIC_FORCEINLINE void __set_DCISW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 6, 2); +} + +/** \brief Set DCCMVAC + + Data cache clean + */ +__STATIC_FORCEINLINE void __set_DCCMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 10, 1); +} + +/** \brief Set DCCVAC + */ +__STATIC_FORCEINLINE void __set_DCCVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 10, 1); +} + +/** \brief Set DCCSW + */ +__STATIC_FORCEINLINE void __set_DCCSW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 10, 2); +} + +/** \brief Set DCCIMVAC + + Data cache clean and invalidate + */ +__STATIC_FORCEINLINE void __set_DCCIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 14, 1); +} + +/** \brief Set DCCIVAC + */ +__STATIC_FORCEINLINE void __set_DCCIVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 14, 1); +} + +/** \brief Set DCCISW + */ +__STATIC_FORCEINLINE void __set_DCCISW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 14, 2); +} + +/** \brief Set TLBIALL + + TLB Invalidate All + */ +__STATIC_FORCEINLINE void __set_TLBIALL(uint32_t value) +{ + __set_CP(15, 0, value, 8, 7, 0); +} + +/** \brief Set MAIR0 + + This function assigns the given value to the Memory Attribute Indirection Registers 0. + + \param [in] value Memory Attribute Indirection Registers 0 to set + */ +__STATIC_FORCEINLINE void __set_MAIR0(uint32_t value) +{ + __set_CP(15, 0, value, 10, 2, 0); +} + +/** \brief Set MAIR1 + + This function assigns the given value to the Memory Attribute Indirection Registers 1. + + \param [in] value Memory Attribute Indirection Registers 1 to set + */ +__STATIC_FORCEINLINE void __set_MAIR1(uint32_t value) +{ + __set_CP(15, 0, value, 10, 2, 1); +} + +/** \brief Get IMP_SLAVEPCTLR + + This function returns the value of the Slave Port Control Register. + + \return Slave Port Control Register + */ +__STATIC_FORCEINLINE uint32_t __get_IMP_SLAVEPCTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 11, 0, 0); + return result; +} + +/** \brief Set IMP_SLAVEPCTLR + + This function assigns the given value to the Slave Port Control Register. + + \param [in] value Slave Port Control Register value to set + */ +__STATIC_FORCEINLINE void __set_IMP_SLAVEPCTLR(uint32_t value) +{ + __set_CP(15, 0, value, 11, 0, 0); +} + +/** \brief Get VBAR + + This function returns the value of the Vector Base Address Register. + + \return Vector Base Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_VBAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 0, 0); + return result; +} + +/** \brief Set VBAR + + This function assigns the given value to the Vector Base Address Register. + + \param [in] value Vector Base Address Register value to set + */ +__STATIC_FORCEINLINE void __set_VBAR(uint32_t value) +{ + __set_CP(15, 0, value, 12, 0, 0); +} + +/** \brief Get MVBAR + + This function returns the value of the Monitor Vector Base Address Register. + + \return Monitor Vector Base Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_MVBAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 0, 1); + return result; +} + +/** \brief Set MVBAR + + This function assigns the given value to the Monitor Vector Base Address Register. + + \param [in] value Monitor Vector Base Address Register value to set + */ +__STATIC_FORCEINLINE void __set_MVBAR(uint32_t value) +{ + __set_CP(15, 0, value, 12, 0, 1); +} + +/** \brief Get ISR + \return Interrupt Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_ISR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 1, 0); + return result; +} + +/** \brief Get ICC_RPR + */ +__STATIC_FORCEINLINE uint32_t __get_ICC_RPR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 11, 3); + return result; +} + +/** \brief Get ICC_IAR1 + */ +__STATIC_FORCEINLINE uint32_t __get_ICC_IAR1(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 12, 0); + return result; +} + +/** \brief Set ICC_EOIR1 + */ +__STATIC_FORCEINLINE void __set_ICC_EOIR1(uint32_t value) +{ + __set_CP(15, 0, value, 12, 12, 0); +} + +/** \brief Get ICC_HPPIR1 + */ +__STATIC_FORCEINLINE uint32_t __get_ICC_HPPIR1(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 12, 2); + return result; +} + +/** \brief Get ICC_BPR1 + */ +__STATIC_FORCEINLINE uint32_t __get_ICC_BPR1(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 12, 3); + return result; +} + +/** \brief Set ICC_BPR1 + */ +__STATIC_FORCEINLINE void __set_ICC_BPR1(uint32_t value) +{ + __set_CP(15, 0, value, 12, 12, 3); +} + +/** \brief Get ICC_CTLR + */ +__STATIC_FORCEINLINE uint32_t __get_ICC_CTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 12, 4); + return result; +} + +/** \brief Set ICC_CTLR + */ +__STATIC_FORCEINLINE void __set_ICC_CTLR(uint32_t value) +{ + __set_CP(15, 0, value, 12, 12, 4); +} + +/** \brief Set ICC_IGRPEN1 + */ +__STATIC_FORCEINLINE void __set_ICC_IGRPEN1(uint32_t value) +{ + __set_CP(15, 0, value, 12, 12, 7); +} + +/** \brief Set CNTFRQ + + This function assigns the given value to PL1 Physical Timer Counter Frequency Register (CNTFRQ). + + \param [in] value CNTFRQ Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTFRQ(uint32_t value) +{ + __set_CP(15, 0, value, 14, 0, 0); +} + +/** \brief Get CNTFRQ + + This function returns the value of the PL1 Physical Timer Counter Frequency Register (CNTFRQ). + + \return CNTFRQ Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTFRQ(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 0, 0); + return result; +} + +/** \brief Set CNTKCTL + + This function assigns the given value to Counter-timer Kernel Control Register (CNTKCTL). + + \param [in] value CNTKCTL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTKCTL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 1, 0); +} + +/** \brief Get CNTKCTL + + This function returns the value of the Counter-timer kernel Control Register (CNTKCTL). + + \return CNTFRQ Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTKCTL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 1, 0); + return result; +} + +/** \brief Set CNTP_TVAL + + This function assigns the given value to PL1 Physical Timer Value Register (CNTP_TVAL). + + \param [in] value CNTP_TVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_TVAL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 2, 0); +} + +/** \brief Get CNTP_TVAL + + This function returns the value of the PL1 Physical Timer Value Register (CNTP_TVAL). + + \return CNTP_TVAL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTP_TVAL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 2, 0); + return result; +} + +/** \brief Set CNTP_CTL + + This function assigns the given value to PL1 Physical Timer Control Register (CNTP_CTL). + + \param [in] value CNTP_CTL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_CTL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 2, 1); +} + +/** \brief Get CNTP_CTL register + \return CNTP_CTL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTP_CTL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 2, 1); + return result; +} + +/** \brief Set CNTV_CTL + + This function assigns the given value to PL1 Virtual Timer Control Register (CNTV_CTL). + + \param [in] value CNTV_CTL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTV_CTL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 3, 1); +} + +/** \brief Get CNTV_CTL register + \return CNTV_CTL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTV_CTL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 3, 1); + return result; +} + +/** \brief Get CBAR + \return Configuration Base Address register value + */ +__STATIC_FORCEINLINE uint32_t __get_CBAR(void) +{ + uint32_t result; + __get_CP(15, 4, result, 15, 0, 0); + return result; +} + +/** \brief Get CNTPCT + + This function returns the value of the 64 bits PL1 Physical Count Register (CNTPCT). + + \return CNTPCT Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTPCT(void) +{ + uint64_t result; + __get_CP64(15, 0, result, 14); + return result; +} + +/** \brief Set ICC_SGI1R + */ +__STATIC_FORCEINLINE void __set_ICC_SGI1R(uint64_t value) +{ + __set_CP64(15, 0, value, 12); +} + +/** \brief Get CNTVCT + + This function returns the value of the 64 bits PL1 Virtual Count Register (CNTVCT). + + \return CNTVCT Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTVCT(void) +{ + uint64_t result; + __get_CP64(15, 1, result, 14); + return result; +} + +/** \brief Set CNTP_CVAL + + This function assigns the given value to 64bits PL1 Physical Timer CompareValue Register (CNTP_CVAL). + + \param [in] value CNTP_CVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_CVAL(uint64_t value) +{ + __set_CP64(15, 2, value, 14); +} + +/** \brief Get CNTP_CVAL + + This function returns the value of the 64 bits PL1 Physical Timer CompareValue Register (CNTP_CVAL). + + \return CNTP_CVAL Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTP_CVAL(void) +{ + uint64_t result; + __get_CP64(15, 2, result, 14); + return result; +} + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_gcc.h b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_gcc.h new file mode 100644 index 00000000000..1e6e8bddcb3 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_gcc.h @@ -0,0 +1,2233 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS compiler GCC header file + * @date 02. February 2024 + ******************************************************************************/ +/* + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This file is based on the "\CMSIS\Core\Include\cmsis_gcc.h" + * + * Changes: + * Renesas Electronics Corporation on 2021-08-31 + * - Add CP15 descriptions by + * Renesas Electronics Corporation on 2024-02-02 + * - Added functions related to FPEXC registers. + */ +/* + * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +/* ######################### Startup and Lowlevel Init ######################## */ + +#ifndef __PROGRAM_START + +/** + \brief Initializes data and bss sections + \details This default implementations initialized all data and additional bss + sections relying on .copy.table and .zero.table specified properly + in the used linker script. + + */ +__STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) +{ + extern void _start(void) __NO_RETURN; + + typedef struct { + uint32_t const* src; + uint32_t* dest; + uint32_t wlen; + } __copy_table_t; + + typedef struct { + uint32_t* dest; + uint32_t wlen; + } __zero_table_t; + + extern const __copy_table_t __copy_table_start__; + extern const __copy_table_t __copy_table_end__; + extern const __zero_table_t __zero_table_start__; + extern const __zero_table_t __zero_table_end__; + + for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) { + for(uint32_t i=0u; iwlen; ++i) { + pTable->dest[i] = pTable->src[i]; + } + } + + for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { + for(uint32_t i=0u; iwlen; ++i) { + pTable->dest[i] = 0u; + } + } + + _start(); +} + +#define __PROGRAM_START __cmsis_start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP __StackTop +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __StackLimit +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) +#endif + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_get_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + return __builtin_arm_get_fpscr(); +#else + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#endif +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_set_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + __builtin_arm_set_fpscr(fpscr); +#else + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); +#endif +#else + (void)fpscr; +#endif +} + +/** + * \brief Get FPEXC + * \details Returns the current value of the Floating Point Exception Control register. + * \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC (void) +{ +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) + + uint32_t result; + + __ASM volatile ("VMRS %0, fpexc" : "=r" (result)); + + return result; +#else + + return 0U; +#endif +} + +/** + * \brief Set FPEXC + * \details Assigns the given value to the Floating Point Exception Control register. + * \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC (uint32_t fpexc) +{ +#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined(__FPU_USED) && (__FPU_USED == 1U))) + + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#else + (void) fpexc; +#endif +} + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __ASM volatile ("nop") + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __ASM volatile ("wfi":::"memory") + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __ASM volatile ("wfe":::"memory") + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __ASM volatile ("sev") + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +__STATIC_FORCEINLINE void __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__STATIC_FORCEINLINE void __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (int16_t)__builtin_bswap16(value); +#else + int16_t result; + + __ASM ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return result; +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +{ + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); +} + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +__STATIC_FORCEINLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1, ARG2) \ +__extension__ \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1, ARG2) \ + __extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); +} + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); +} + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); +} + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); +} + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1, ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + +#define __USAT16(ARG1, ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) +{ + uint32_t result; + + __ASM ("sxtb16 %0, %1, ROR %2" : "=r" (result) : "r" (op1), "i" (rotate) ); + + return result; +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#if 0 +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) +#endif + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#include "cmsis_cp15.h" + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_H */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_iccarm.h b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_iccarm.h new file mode 100644 index 00000000000..a6882cfe80b --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_iccarm.h @@ -0,0 +1,958 @@ +/**************************************************************************//** + * @file cmsis_iccarm.h + * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file + * @date 02. February 2024 + ******************************************************************************/ +// ------------------------------------------------------------------------------ +// +// Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. +// +// This file is based on the "\CMSIS\Core\Include\cmsis_iccarm.h" +// +// Changes: +// Renesas Electronics Corporation on 2021-08-31 +// - Changed to be related to Cortex-R52 by +// Renesas Electronics Corporation on 2024-02-02 +// - Added functions related to FPEXC registers. +// - Moved the process of defining compiler macros for CPU architectures to renesas.h. +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// +// Copyright (c) 2017-2019 IAR Systems +// Copyright (c) 2017-2019 Arm Limited. All rights reserved. +// +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License") +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//------------------------------------------------------------------------------ + +#ifndef __CMSIS_ICCARM_H__ +#define __CMSIS_ICCARM_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + +#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 + #define __IAR_M0_FAMILY 1 +#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 + #define __IAR_M0_FAMILY 1 +#else + #define __IAR_M0_FAMILY 0 +#endif + + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if __ICCARM_V8 + #define __NO_RETURN __attribute__((__noreturn__)) + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #if __ICCARM_V8 + #define __RESTRICT __restrict + #else + /* Needs IAR language extensions */ + #define __RESTRICT restrict + #endif +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef __UNALIGNED_UINT16_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint16_t __iar_uint16_read(void const *ptr) +{ + return *(__packed uint16_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) +{ + *(__packed uint16_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint32_t __iar_uint32_read(void const *ptr) +{ + return *(__packed uint32_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) +{ + *(__packed uint32_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32 /* deprecated */ +#pragma language=save +#pragma language=extended +__packed struct __iar_u32 { uint32_t v; }; +#pragma language=restore +#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + +#ifndef __PROGRAM_START +#define __PROGRAM_START __iar_program_start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP CSTACK$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT CSTACK$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __vector_table +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE @".intvec" +#endif + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_fault_irq __iar_builtin_disable_fiq + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_fault_irq __iar_builtin_enable_fiq + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + + #define __get_APSR() (__arm_rsr("APSR")) + #define __get_BASEPRI() (__arm_rsr("BASEPRI")) + #define __get_CONTROL() (__arm_rsr("CONTROL")) + #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) + + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + + #define __get_FPEXC() (__arm_rsr("FPEXC")) + #define __set_FPEXC(VALUE) (__arm_wsr("FPEXC", (VALUE))) + #else + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void) VALUE) + + #define __get_FPEXC() (0) + #define __set_FPEXC(VALUE) ((void) VALUE) + #endif + + #define __get_IPSR() (__arm_rsr("IPSR")) + #define __get_MSP() (__arm_rsr("MSP")) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __get_MSPLIM() (0U) + #else + #define __get_MSPLIM() (__arm_rsr("MSPLIM")) + #endif + #define __get_PRIMASK() (__arm_rsr("PRIMASK")) + #define __get_PSP() (__arm_rsr("PSP")) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __get_PSPLIM() (0U) + #else + #define __get_PSPLIM() (__arm_rsr("PSPLIM")) + #endif + + #define __get_xPSR() (__arm_rsr("xPSR")) + + #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) + #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) + #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) + #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) + #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __set_MSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) + #endif + #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) + #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __set_PSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) + #endif + + #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) + #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) + #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) + #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) + #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) + #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) + #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) + #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) + #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) + #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) + #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) + #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) + #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) + #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __TZ_get_PSPLIM_NS() (0U) + #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) + #else + #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) + #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) + #endif + + #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) + #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) + + #define __get_CP(cp, op1, RT, CRn, CRm, op2) \ + ((RT) = __arm_rsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2)) + + #define __set_CP(cp, op1, RT, CRn, CRm, op2) \ + (__arm_wsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2, (RT))) + + #define __get_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) + + #define __set_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + + #include "cmsis_cp15.h" + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + #define __CLREX __iar_builtin_CLREX + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #if !__IAR_M0_FAMILY + #define __SSAT __iar_builtin_SSAT + #endif + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #if !__IAR_M0_FAMILY + #define __USAT __iar_builtin_USAT + #endif + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #if __ARM_MEDIA__ + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + #endif + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #define __CLZ __cmsis_iar_clz_not_active + #define __SSAT __cmsis_iar_ssat_not_active + #define __USAT __cmsis_iar_usat_not_active + #define __RBIT __cmsis_iar_rbit_not_active + #define __get_APSR __cmsis_iar_get_APSR_not_active + #endif + + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #define __set_FPSCR __cmsis_iar_set_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #undef __CLZ + #undef __SSAT + #undef __USAT + #undef __RBIT + #undef __get_APSR + + __STATIC_INLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_INLINE uint32_t __RBIT(uint32_t v) + { + uint8_t sc = 31U; + uint32_t r = v; + for (v >>= 1U; v; v >>= 1U) + { + r <<= 1U; + r |= v & 1U; + sc--; + } + return (r << sc); + } + + __STATIC_INLINE uint32_t __get_APSR(void) + { + uint32_t res; + __asm("MRS %0,APSR" : "=r" (res)); + return res; + } + + #endif + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #undef __get_FPSCR + #undef __set_FPSCR + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void)VALUE) + + #define __get_FPEXC() (0) + #define __set_FPEXC(VALUE) ((void) VALUE) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + #endif + + + /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + #if (__CORTEX_M >= 0x03) + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM volatile("RRX %0, %1" : "=r"(result) : "r" (value)); + return(result); + } + + __IAR_FT void __set_BASEPRI_MAX(uint32_t value) + { + __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); + } + + + #define __enable_fault_irq __enable_fiq + #define __disable_fault_irq __disable_fiq + + + #endif /* (__CORTEX_M >= 0x03) */ + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + __IAR_FT uint32_t __get_MSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,MSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_MSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR MSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __get_PSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_PSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) + { + __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PSP_NS(uint32_t value) + { + __asm volatile("MSR PSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_MSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSP_NS(uint32_t value) + { + __asm volatile("MSR MSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_SP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,SP_NS" : "=r" (res)); + return res; + } + __IAR_FT void __TZ_set_SP_NS(uint32_t value) + { + __asm volatile("MSR SP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) + { + __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) + { + __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) + { + __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) + { + __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); + } + + #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + +#if __IAR_M0_FAMILY + __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) + { + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; + } + + __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) + { + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; + } +#endif + +#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + + __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) + { + uint32_t res; + __ASM volatile ("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) + { + uint32_t res; + __ASM volatile ("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) + { + uint32_t res; + __ASM volatile ("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return res; + } + + __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) + { + __ASM volatile ("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) + { + __ASM volatile ("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) + { + __ASM volatile ("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); + } + +#endif /* (__CORTEX_M >= 0x03) */ + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + + __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) + { + __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) + { + __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) + { + __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + +#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#undef __IAR_FT +#undef __IAR_M0_FAMILY +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#endif /* __CMSIS_ICCARM_H__ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_version.h b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_version.h new file mode 100644 index 00000000000..fa9f84c16f7 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/cmsis_version.h @@ -0,0 +1,46 @@ +/**************************************************************************//** + * @file cmsis_version.h + * @brief CMSIS Core(M) Version definitions + * @date 31. August 2021 + ******************************************************************************/ +/* + * Copyright [2020-2021] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This file is based on the "\CMSIS\Core\Include\cmsis_version.h" + * + * Changes: + * - No Changes. + */ +/* + * Copyright (c) 2009-2019 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CMSIS_VERSION_H +#define __CMSIS_VERSION_H + +/* CMSIS Version definitions */ +#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ +#define __CM_CMSIS_VERSION_SUB ( 4U) /*!< [15:0] CMSIS Core(M) sub version */ +#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ + __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/core_cr52.h b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/core_cr52.h new file mode 100644 index 00000000000..615ae49a34d --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/CMSIS/Core_R/Include/core_cr52.h @@ -0,0 +1,312 @@ +/**************************************************************************//** + * @file core_cr52.h + * @brief CMSIS Cortex-R52 Core Peripheral Access Layer Header File + * @date 31. August 2021 + ******************************************************************************/ +/* + * Copyright [2020-2021] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This file is based on the "\CMSIS\Core\Include\core_armv8mml.h" + * + * Changes: + * Renesas Electronics Corporation on 2021-08-31 + * - Changed to be related to Cortex-R52 by + */ +/* + * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#endif + +#ifndef __CORE_CR52_H_GENERIC +#define __CORE_CR52_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_R52 + @{ + */ + +#if defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #define __FPU_D32 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #ifndef __ARMVFP_D16__ + #define __FPU_D32 1U + #endif + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif +#endif + +#include "cmsis_version.h" + +/* CMSIS CR52 definitions */ +#define __CR52_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CR52_CMSIS_VERSION_SUB ( __CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CR52_CMSIS_VERSION ((__CR52_CMSIS_VERSION_MAIN << 16U) | \ + __CR52_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_R (52U) /*!< Cortex-R Core */ + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CR52_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CR52_H_DEPENDANT +#define __CORE_CR52_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_R52 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_GIC Generic Interrupt Controller (GIC) + \brief Type definitions for the GIC Registers + @{ +*/ + + /** + \brief Structure type to access the Generic Interrupt Controller (GIC) for GICD. + */ +typedef struct +{ + __IOM uint32_t GICD_CTLR; /*!< Offset: 0x0000 (R/W) Distributor Control Register */ + __IM uint32_t GICD_TYPER; /*!< Offset: 0x0004 (R/ ) Interrupt Controller Type Register */ + __IM uint32_t GICD_IIDR; /*!< Offset: 0x0008 (R/ ) Distributor Implementer Identification Register */ + uint32_t RESERVED0[30U]; + __IOM uint32_t GICD_IGROUPR[30U]; /*!< Offset: 0x0084 (R/W) Interrupt Group Registers 1 - 30 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t GICD_ISENABLER[30U]; /*!< Offset: 0x0104 (R/W) Interrupt Set-Enable Registers 1 - 30 */ + uint32_t RESERVED2[2U]; + __IOM uint32_t GICD_ICENABLER[30U]; /*!< Offset: 0x0184 (R/W) Interrupt Clear-Enable Registers 1 - 30 */ + uint32_t RESERVED3[2U]; + __IOM uint32_t GICD_ISPENDR[30U]; /*!< Offset: 0x0204 (R/W) Interrupt Set-Pending Registers 1 - 30 */ + uint32_t RESERVED4[2U]; + __IOM uint32_t GICD_ICPENDR[30U]; /*!< Offset: 0x0284 (R/W) Interrupt Clear-Pending Registers 1 - 30 */ + uint32_t RESERVED5[2U]; + __IOM uint32_t GICD_ISACTIVER[30U]; /*!< Offset: 0x0304 (R/W) Interrupt Set-Active Registers 1 - 30 */ + uint32_t RESERVED6[2U]; + __IOM uint32_t GICD_ICACTIVER[30U]; /*!< Offset: 0x0384 (R/W) Interrupt Clear-Active Registers 1 - 30 */ + uint32_t RESERVED7[9U]; + __IOM uint32_t GICD_IPRIORITYR[240U]; /*!< Offset: 0x0420 (R/W) Interrupt Priority Registers 8 - 247 */ + uint32_t RESERVED8[266U]; + __IOM uint32_t GICD_ICFGR[60U]; /*!< Offset: 0x0C08 (R/W) Interrupt Configuration Registers 2 - 61 */ +} GICD_Type; + + /** + \brief Structure type to access the Generic Interrupt Controller (GIC) for GICR for Control target. + */ +typedef struct +{ + __IM uint32_t GICR_CTLR; /*!< Offset: 0x0000 (R/ ) Redistributor Control Register */ + __IM uint32_t GICR_IIDR; /*!< Offset: 0x0004 (R/ ) Redistributor Implementer Identification Register */ + __IM uint32_t GICR_TYPER[2]; /*!< Offset: 0x0008 (R/ ) Redistributor Type Register */ + uint32_t RESERVED0; + __IOM uint32_t GICR_WAKER; /*!< Offset: 0x0014 (R/W) Redistributor Wake Register */ +} GICR_CONTROL_TARGET_Type; + + /** + \brief Structure type to access the Generic Interrupt Controller (GIC) for GICR for SGI and PPI. + */ +typedef struct +{ + uint32_t RESERVED0[32]; + __IOM uint32_t GICR_IGROUPR0; /*!< Offset: 0x0080 (R/W) Interrupt Group Register 0 */ + uint32_t RESERVED1[31]; + __IOM uint32_t GICR_ISENABLER0; /*!< Offset: 0x0100 (R/W) Interrupt Set-Enable Register 0 */ + uint32_t RESERVED2[31]; + __IOM uint32_t GICR_ICENABLER0; /*!< Offset: 0x0180 (R/W) Interrupt Clear-Enable Register 0 */ + uint32_t RESERVED3[31]; + __IOM uint32_t GICR_ISPENDR0; /*!< Offset: 0x0200 (R/W) Interrupt Set-Pending Register 0 */ + uint32_t RESERVED4[31]; + __IOM uint32_t GICR_ICPENDR0; /*!< Offset: 0x0280 (R/W) Interrupt Clear-Pending Register 0 */ + uint32_t RESERVED5[31]; + __IOM uint32_t GICR_ISACTIVER0; /*!< Offset: 0x0300 (R/W) Interrupt Set-Active Register 0 */ + uint32_t RESERVED6[31]; + __IOM uint32_t GICR_ICACTIVER0; /*!< Offset: 0x0380 (R/W) Interrupt Clear-Active Register 0 */ + uint32_t RESERVED7[31]; + __IOM uint32_t GICR_IPRIORITYR[8]; /*!< Offset: 0x0400 (R/W) Interrupt Priority Registers 0 - 7 */ + uint32_t RESERVED8[504]; + __IM uint32_t GICR_ICFGR0; /*!< Offset: 0x0C00 (R/ ) Interrupt Configuration Register 0 */ + __IOM uint32_t GICR_ICFGR1; /*!< Offset: 0x0C04 (R/W) Interrupt Configuration Register 1 */ +} GICR_SGI_PPI_Type; + +/*@} end of group CMSIS_GIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define GIC0_BASE (0x94000000UL) /*!< GIC0 Base Address */ +#define GIC1_BASE (0x9C000000UL) /*!< GIC1 Base Address */ +#define GICR_TARGET0_BASE (0x00100000UL) /*!< GICR Base Address (for Control target 0) */ +#define GICR_TARGET0_SGI_PPI_BASE (0x00110000UL) /*!< GICR Base Address (for SGI and PPI target 0) */ + +#define GICD0 ((GICD_Type *) GIC0_BASE ) /*!< GICD configuration struct */ +#define GICD1 ((GICD_Type *) GIC1_BASE ) /*!< GICD configuration struct */ +#define GICR0_TARGET0_IFREG ((GICR_CONTROL_TARGET_Type *) (GIC0_BASE + GICR_TARGET0_BASE) ) /*!< GICR configuration struct for Control target 0 */ +#define GICR1_TARGET0_IFREG ((GICR_CONTROL_TARGET_Type *) (GIC1_BASE + GICR_TARGET0_BASE) ) /*!< GICR configuration struct for Control target 0 */ +#define GICR0_TARGET0_INTREG ((GICR_SGI_PPI_Type *) (GIC0_BASE + GICR_TARGET0_SGI_PPI_BASE) ) /*!< GICR configuration struct for SGI and PPI target 0 */ +#define GICR1_TARGET0_INTREG ((GICR_SGI_PPI_Type *) (GIC1_BASE + GICR_TARGET0_SGI_PPI_BASE) ) /*!< GICR configuration struct for SGI and PPI target 0 */ + +/*@} */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + + +#if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/ +/* ARM armcc specific functions */ + +#if (__ARMCC_VERSION < 400677) + #error "Please use ARM Compiler Toolchain V4.0.677 or later!" +#endif + + +/** \brief Get CPSR Register + + This function returns the content of the CPSR Register. + + \return CPSR Register value + */ +__STATIC_INLINE uint32_t __get_CPSR(void) +{ + register uint32_t __regCPSR __ASM("cpsr"); + return(__regCPSR); +} + + +#elif (defined (__ICCARM__)) /*---------------- ICC Compiler ---------------------*/ + + +#include + + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* __CORE_CR52_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/LICENSE.txt b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/LICENSE.txt new file mode 100644 index 00000000000..8dada3edaf5 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/arm/CMSIS_5/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board.h b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board.h new file mode 100644 index 00000000000..0cf82a0faf3 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board.h @@ -0,0 +1,67 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * File Name : board.h + * Description : Includes and API function available for this board. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARDS + * @defgroup BOARD_RZN2L_RSK + * @brief BSP for the RZN2L_RSK Board + * + * The RZN2L_RSK is a development kit for the Renesas RZN2L microcontroller. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_H +#define BOARD_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP Board Specific Includes. */ +#include "board_init.h" +#include "board_leds.h" +#include "board_ethernet_phy.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BOARD_RZN2L_RSK + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** @} (end defgroup BSP_CONFIG_RZN2L) */ + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_ethernet_phy.h b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_ethernet_phy.h new file mode 100644 index 00000000000..fb4f299cc81 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_ethernet_phy.h @@ -0,0 +1,60 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RZN2_RSK + * @defgroup BOARD_RZN2_RSK_ETHERNET_PHY Board Ethernet Phy + * @brief Ethernet Phy information for this board. + * + * This is code specific to the RZN2_RSK board. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_ETHERNET_PHY_H +#define BSP_ETHERNET_PHY_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define ETHER_PHY_CFG_TARGET_VSC8541_ENABLE (1) +#define ETHER_PHY_LSI_TYPE_KIT_COMPONENT ETHER_PHY_LSI_TYPE_VSC8541 + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Public Functions + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RZN2_RSK_ETHERNET_PHY) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.c b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.c new file mode 100644 index 00000000000..f3a4c789b93 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.c @@ -0,0 +1,67 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * File Name : board_init.c + * Description : This module calls any initialization code specific to this BSP. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RZN2L_RSK_INIT + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if defined(BOARD_RZN2L_RSK) + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Performs any initialization specific to this BSP. + * + * @param[in] p_args Pointer to arguments of the user's choice. + **********************************************************************************************************************/ +void bsp_init (void * p_args) +{ + FSP_PARAMETER_NOT_USED(p_args); +} + +#endif + +/** @} (end addtogroup BOARD_RZN2L_RSK_INIT) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.h b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.h new file mode 100644 index 00000000000..7c57fe415ca --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_init.h @@ -0,0 +1,64 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * File Name : board_init.h + * Description : This module calls any initialization code specific to this BSP. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RZN2L_RSK + * @defgroup BOARD_RZN2L_RSK_INIT + * @brief Board specific code for the RZN2L_RSK Board + * + * This include file is specific to the RZN2L_RSK board. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_INIT_H +#define BOARD_INIT_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +void bsp_init(void * p_args); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RZN2L_RSK_INIT) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.c b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.c new file mode 100644 index 00000000000..32ac2a0da32 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.c @@ -0,0 +1,77 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * File Name : board_leds.c + * Description : This module has information about the LEDs on this board. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RZN2L_RSK_LEDS + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#if defined(BOARD_RZN2L_RSK) + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** Array of LED IOPORT pins. */ +static const uint32_t g_bsp_prv_leds[][2] = +{ + {(uint32_t) BSP_IO_PORT_18_PIN_2, (uint32_t) BSP_IO_REGION_SAFE}, ///< RLED0 + {(uint32_t) BSP_IO_PORT_22_PIN_3, (uint32_t) BSP_IO_REGION_SAFE}, ///< RLED1 + {(uint32_t) BSP_IO_PORT_04_PIN_1, (uint32_t) BSP_IO_REGION_SAFE}, ///< RLED2 + {(uint32_t) BSP_IO_PORT_17_PIN_3, (uint32_t) BSP_IO_REGION_SAFE} ///< RLED3 +}; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/** Structure with LED information for this board. */ + +const bsp_leds_t g_bsp_leds = +{ + .led_count = (uint16_t) (sizeof(g_bsp_prv_leds) / sizeof(g_bsp_prv_leds[0])), + .p_leds = g_bsp_prv_leds +}; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +#endif + +/** @} (end addtogroup BOARD_RZN2L_RSK_LEDS) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.h b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.h new file mode 100644 index 00000000000..fdae49f91d8 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/board/rzn2l_rsk/board_leds.h @@ -0,0 +1,81 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * File Name : board_leds.h + * Description : This module has information about the LEDs on this board. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RZN2L_RSK + * @defgroup BOARD_RZN2L_RSK_LEDS Board LEDs + * @brief LED information for this board. + * + * This is code specific to the RZN2L_RSK board. It includes info on the number of LEDs and which pins are they + * are on. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_LEDS_H +#define BOARD_LEDS_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Information on how many LEDs and what pins they are on. */ +typedef struct st_bsp_leds +{ + uint16_t led_count; ///< The number of LEDs on this board + uint32_t const (*p_leds)[2]; ///< Pointer to an array of IOPORT pins for controlling LEDs +} bsp_leds_t; + +/** Available user-controllable LEDs on this board. These enums can be can be used to index into the array of LED pins + * found in the bsp_leds_t structure. */ +typedef enum e_bsp_led +{ + BSP_LED_RLED0 = 0, ///< Green + BSP_LED_RLED1 = 1, ///< Yellow + BSP_LED_RLED2 = 2, ///< Red + BSP_LED_RLED3 = 3, ///< Red +} bsp_led_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Public Functions + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RZN2L_RSK_LEDS) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/bsp_api.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/bsp_api.h new file mode 100644 index 00000000000..b2c951b125b --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/bsp_api.h @@ -0,0 +1,111 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_API_H +#define BSP_API_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* FSP Common Includes. */ +#include "fsp_common_api.h" + +/* Gets MCU configuration information. */ +#include "bsp_cfg.h" + +#if defined(__GNUC__) && !defined(__ARMCC_VERSION) + +/* Store warning settings for 'conversion' and 'sign-conversion' to as specified on command line. */ + #pragma GCC diagnostic push + +/* CMSIS-CORE currently generates 2 warnings when compiling with GCC. One in core_cmInstr.h and one in core_cm4_simd.h. + * We are not modifying these files so we will ignore these warnings temporarily. */ + #pragma GCC diagnostic ignored "-Wconversion" + #pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +/* Vector information for this project. This is generated by the tooling. */ +#include "../../src/bsp/mcu/all/bsp_exceptions.h" +#include "vector_data.h" + +/* CMSIS-CORE Renesas Device Files. Must come after bsp_feature.h, which is included in bsp_cfg.h. */ +#include "../../src/bsp/cmsis/Device/RENESAS/Include/renesas.h" +#include "../../src/bsp/cmsis/Device/RENESAS/Include/system.h" + +#if defined(__GNUC__) && !defined(__ARMCC_VERSION) + +/* Restore warning settings for 'conversion' and 'sign-conversion' to as specified on command line. */ + #pragma GCC diagnostic pop +#endif + +#if defined(BSP_API_OVERRIDE) + #include BSP_API_OVERRIDE +#else + +/* BSP Common Includes. */ + #include "../../src/bsp/mcu/all/bsp_common.h" + +/* BSP MCU Specific Includes. */ + #include "../../src/bsp/mcu/all/bsp_register_protection.h" + #include "../../src/bsp/mcu/all/bsp_irq.h" + #include "../../src/bsp/mcu/all/bsp_io.h" + #include "../../src/bsp/mcu/all/bsp_group_irq.h" + #include "../../src/bsp/mcu/all/bsp_clocks.h" + #include "../../src/bsp/mcu/all/bsp_module_stop.h" + #include "../../src/bsp/mcu/all/bsp_security.h" + +/* Factory MCU information. */ + #include "../../inc/fsp_features.h" + +/* BSP Common Includes (Other than bsp_common.h) */ + #include "../../src/bsp/mcu/all/bsp_delay.h" + #include "../../src/bsp/mcu/all/bsp_mcu_api.h" + +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +fsp_err_t R_FSP_VersionGet(fsp_pack_version_t * const p_version); + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_ioport_api.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_ioport_api.h new file mode 100644 index 00000000000..d6b3049b844 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_ioport_api.h @@ -0,0 +1,206 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_SYSTEM_INTERFACES + * @defgroup IOPORT_API I/O Port Interface + * @brief Interface for accessing I/O ports and configuring I/O functionality. + * + * @section IOPORT_API_SUMMARY Summary + * The IOPort shared interface provides the ability to access the IOPorts of a device at both bit and port level. + * Port and pin direction can be changed. + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_IOPORT_API_H +#define R_IOPORT_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Common error codes and definitions. */ +#include "bsp_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +#ifndef BSP_OVERRIDE_IOPORT_SIZE_T + +/** IO port type used with ports */ +typedef uint16_t ioport_size_t; ///< IO port size +#endif + +/** Pin identifier and pin configuration value */ +typedef struct st_ioport_pin_cfg +{ + uint32_t pin_cfg; ///< Pin configuration - Use ioport_cfg_options_t parameters to configure + bsp_io_port_pin_t pin; ///< Pin identifier +} ioport_pin_cfg_t; + +/** Multiple pin configuration data for loading into registers by R_IOPORT_Open() */ +typedef struct st_ioport_cfg +{ + uint16_t number_of_pins; ///< Number of pins for which there is configuration data + ioport_pin_cfg_t const * p_pin_cfg_data; ///< Pin configuration data + const void * p_extend; ///< Pointer to hardware extend configuration +} ioport_cfg_t; + +/** IOPORT control block. Allocate an instance specific control block to pass into the IOPORT API calls. + */ +typedef void ioport_ctrl_t; + +/** IOPort driver structure. IOPort functions implemented at the HAL layer will follow this API. */ +typedef struct st_ioport_api +{ + /** Initialize internal driver data and initial pin configurations. Called during startup. Do + * not call this API during runtime. Use @ref ioport_api_t::pinsCfg for runtime reconfiguration of + * multiple pins. + * + * @param[in] p_ctrl Pointer to control structure. Must be declared by user. Elements set here. + * @param[in] p_cfg Pointer to pin configuration data array. + */ + fsp_err_t (* open)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); + + /** Close the API. + * + * @param[in] p_ctrl Pointer to control structure. + **/ + fsp_err_t (* close)(ioport_ctrl_t * const p_ctrl); + + /** Configure multiple pins. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] p_cfg Pointer to pin configuration data array. + */ + fsp_err_t (* pinsCfg)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); + + /** Configure settings for an individual pin. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be read. + * @param[in] cfg Configuration options for the pin. + */ + fsp_err_t (* pinCfg)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg); + + /** Read the event input data of the specified pin and return the level. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be read. + * @param[in] p_pin_event Pointer to return the event data. + */ + fsp_err_t (* pinEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event); + + /** Write pin event data. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin event data is to be written to. + * @param[in] pin_value Level to be written to pin output event. + */ + fsp_err_t (* pinEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value); + + /** Read level of a pin. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be read. + * @param[in] p_pin_value Pointer to return the pin level. + */ + fsp_err_t (* pinRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value); + + /** Write specified level to a pin. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be written to. + * @param[in] level State to be written to the pin. + */ + fsp_err_t (* pinWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level); + + /** Set the direction of one or more pins on a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port being configured. + * @param[in] direction_values Value controlling direction of pins on port. + * @param[in] mask Mask controlling which pins on the port are to be configured. + */ + fsp_err_t (* portDirectionSet)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t direction_values, + ioport_size_t mask); + + /** Read captured event data for a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port to be read. + * @param[in] p_event_data Pointer to return the event data. + */ + fsp_err_t (* portEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data); + + /** Write event output data for a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port event data will be written to. + * @param[in] event_data Data to be written as event data to specified port. + * @param[in] mask_value Each bit set to 1 in the mask corresponds to that bit's value in event data. + * being written to port. + */ + fsp_err_t (* portEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t event_data, + ioport_size_t mask_value); + + /** Read states of pins on the specified port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port to be read. + * @param[in] p_port_value Pointer to return the port value. + */ + fsp_err_t (* portRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value); + + /** Write to multiple pins on a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port to be written to. + * @param[in] value Value to be written to the port. + * @param[in] mask Mask controlling which pins on the port are written to. + */ + fsp_err_t (* portWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask); +} ioport_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_ioport_instance +{ + ioport_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + ioport_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + ioport_api_t const * p_api; ///< Pointer to the API structure for this instance +} ioport_instance_t; + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/*******************************************************************************************************************//** + * @} (end defgroup IOPORT_API) + **********************************************************************************************************************/ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_transfer_api.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_transfer_api.h new file mode 100644 index 00000000000..530c88dc9de --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_transfer_api.h @@ -0,0 +1,402 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_TRANSFER_INTERFACES + * @defgroup TRANSFER_API Transfer Interface + * + * @brief Interface for data transfer functions. + * + * @section TRANSFER_API_SUMMARY Summary + * The transfer interface supports background data transfer (no CPU intervention). + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_TRANSFER_API_H +#define R_TRANSFER_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Common error codes and definitions. */ +#include "bsp_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#define TRANSFER_SETTINGS_MODE_BITS (30U) +#define TRANSFER_SETTINGS_SIZE_BITS (28U) +#define TRANSFER_SETTINGS_SRC_ADDR_BITS (26U) +#define TRANSFER_SETTINGS_CHAIN_MODE_BITS (22U) +#define TRANSFER_SETTINGS_IRQ_BITS (21U) +#define TRANSFER_SETTINGS_REPEAT_AREA_BITS (20U) +#define TRANSFER_SETTINGS_DEST_ADDR_BITS (18U) + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Transfer control block. Allocate an instance specific control block to pass into the transfer API calls. + */ +typedef void transfer_ctrl_t; + +#ifndef BSP_OVERRIDE_TRANSFER_MODE_T + +/** Transfer mode describes what will happen when a transfer request occurs. */ +typedef enum e_transfer_mode +{ + /** In normal mode, each transfer request causes a transfer of @ref transfer_size_t from the source pointer to + * the destination pointer. The transfer length is decremented and the source and address pointers are + * updated according to @ref transfer_addr_mode_t. After the transfer length reaches 0, transfer requests + * will not cause any further transfers. */ + TRANSFER_MODE_NORMAL = 0, + + /** Repeat mode is like normal mode, except that when the transfer length reaches 0, the pointer to the + * repeat area and the transfer length will be reset to their initial values. If DMAC is used, the + * transfer repeats only transfer_info_t::num_blocks times. After the transfer repeats + * transfer_info_t::num_blocks times, transfer requests will not cause any further transfers. If DTC is + * used, the transfer repeats continuously (no limit to the number of repeat transfers). */ + TRANSFER_MODE_REPEAT = 1, + + /** In block mode, each transfer request causes transfer_info_t::length transfers of @ref transfer_size_t. + * After each individual transfer, the source and destination pointers are updated according to + * @ref transfer_addr_mode_t. After the block transfer is complete, transfer_info_t::num_blocks is + * decremented. After the transfer_info_t::num_blocks reaches 0, transfer requests will not cause any + * further transfers. */ + TRANSFER_MODE_BLOCK = 2, + + /** In addition to block mode features, repeat-block mode supports a ring buffer of blocks and offsets + * within a block (to split blocks into arrays of their first data, second data, etc.) */ + TRANSFER_MODE_REPEAT_BLOCK = 3 +} transfer_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_SIZE_T + +/** Transfer size specifies the size of each individual transfer. + * Total transfer length = transfer_size_t * transfer_length_t + */ +typedef enum e_transfer_size +{ + TRANSFER_SIZE_1_BYTE = 0, ///< Each transfer transfers a 8-bit value + TRANSFER_SIZE_2_BYTE = 1, ///< Each transfer transfers a 16-bit value + TRANSFER_SIZE_4_BYTE = 2 ///< Each transfer transfers a 32-bit value +} transfer_size_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_ADDR_MODE_T + +/** Address mode specifies whether to modify (increment or decrement) pointer after each transfer. */ +typedef enum e_transfer_addr_mode +{ + /** Address pointer remains fixed after each transfer. */ + TRANSFER_ADDR_MODE_FIXED = 0, + + /** Offset is added to the address pointer after each transfer. */ + TRANSFER_ADDR_MODE_OFFSET = 1, + + /** Address pointer is incremented by associated @ref transfer_size_t after each transfer. */ + TRANSFER_ADDR_MODE_INCREMENTED = 2, + + /** Address pointer is decremented by associated @ref transfer_size_t after each transfer. */ + TRANSFER_ADDR_MODE_DECREMENTED = 3 +} transfer_addr_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_REPEAT_AREA_T + +/** Repeat area options (source or destination). In @ref TRANSFER_MODE_REPEAT, the selected pointer returns to its + * original value after transfer_info_t::length transfers. In @ref TRANSFER_MODE_BLOCK and @ref TRANSFER_MODE_REPEAT_BLOCK, + * the selected pointer returns to its original value after each transfer. */ +typedef enum e_transfer_repeat_area +{ + /** Destination area repeated in @ref TRANSFER_MODE_REPEAT or @ref TRANSFER_MODE_BLOCK or @ref TRANSFER_MODE_REPEAT_BLOCK. */ + TRANSFER_REPEAT_AREA_DESTINATION = 0, + + /** Source area repeated in @ref TRANSFER_MODE_REPEAT or @ref TRANSFER_MODE_BLOCK or @ref TRANSFER_MODE_REPEAT_BLOCK. */ + TRANSFER_REPEAT_AREA_SOURCE = 1 +} transfer_repeat_area_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_CHAIN_MODE_T + +/** Chain transfer mode options. + * @note Only applies for DTC. */ +typedef enum e_transfer_chain_mode +{ + /** Chain mode not used. */ + TRANSFER_CHAIN_MODE_DISABLED = 0, + + /** Switch to next transfer after a single transfer from this @ref transfer_info_t. */ + TRANSFER_CHAIN_MODE_EACH = 2, + + /** Complete the entire transfer defined in this @ref transfer_info_t before chaining to next transfer. */ + TRANSFER_CHAIN_MODE_END = 3 +} transfer_chain_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_IRQ_T + +/** Interrupt options. */ +typedef enum e_transfer_irq +{ + /** Interrupt occurs only after last transfer. If this transfer is chained to a subsequent transfer, + * the interrupt will occur only after subsequent chained transfer(s) are complete. + * @warning DTC triggers the interrupt of the activation source. Choosing TRANSFER_IRQ_END with DTC will + * prevent activation source interrupts until the transfer is complete. */ + TRANSFER_IRQ_END = 0, + + /** Interrupt occurs after each transfer. + * @note Not available in all HAL drivers. See HAL driver for details. */ + TRANSFER_IRQ_EACH = 1 +} transfer_irq_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_CALLBACK_ARGS_T + +/** Callback function parameter data. */ +typedef struct st_transfer_callback_args_t +{ + void const * p_context; ///< Placeholder for user data. Set in @ref transfer_api_t::open function in ::transfer_cfg_t. +} transfer_callback_args_t; + +#endif + +/** Driver specific information. */ +typedef struct st_transfer_properties +{ + uint32_t block_count_max; ///< Maximum number of blocks + uint32_t block_count_remaining; ///< Number of blocks remaining + uint32_t transfer_length_max; ///< Maximum number of transfers + uint32_t transfer_length_remaining; ///< Number of transfers remaining +} transfer_properties_t; + +#ifndef BSP_OVERRIDE_TRANSFER_INFO_T + +/** This structure specifies the properties of the transfer. + * @warning When using DTC, this structure corresponds to the descriptor block registers required by the DTC. + * The following components may be modified by the driver: p_src, p_dest, num_blocks, and length. + * @warning When using DTC, do NOT reuse this structure to configure multiple transfers. Each transfer must + * have a unique transfer_info_t. + * @warning When using DTC, this structure must not be allocated in a temporary location. Any instance of this + * structure must remain in scope until the transfer it is used for is closed. + * @note When using DTC, consider placing instances of this structure in a protected section of memory. */ +typedef struct st_transfer_info +{ + union + { + struct + { + uint32_t : 16; + uint32_t : 2; + + /** Select what happens to destination pointer after each transfer. */ + transfer_addr_mode_t dest_addr_mode : 2; + + /** Select to repeat source or destination area, unused in @ref TRANSFER_MODE_NORMAL. */ + transfer_repeat_area_t repeat_area : 1; + + /** Select if interrupts should occur after each individual transfer or after the completion of all planned + * transfers. */ + transfer_irq_t irq : 1; + + /** Select when the chain transfer ends. */ + transfer_chain_mode_t chain_mode : 2; + + uint32_t : 2; + + /** Select what happens to source pointer after each transfer. */ + transfer_addr_mode_t src_addr_mode : 2; + + /** Select number of bytes to transfer at once. @see transfer_info_t::length. */ + transfer_size_t size : 2; + + /** Select mode from @ref transfer_mode_t. */ + transfer_mode_t mode : 2; + } transfer_settings_word_b; + + uint32_t transfer_settings_word; + }; + + void const * volatile p_src; ///< Source pointer + void * volatile p_dest; ///< Destination pointer + + /** Number of blocks to transfer when using @ref TRANSFER_MODE_BLOCK (both DTC an DMAC) or + * @ref TRANSFER_MODE_REPEAT (DMAC only) or + * @ref TRANSFER_MODE_REPEAT_BLOCK (DMAC only), unused in other modes. */ + volatile uint16_t num_blocks; + + /** Length of each transfer. Range limited for @ref TRANSFER_MODE_BLOCK, @ref TRANSFER_MODE_REPEAT, + * and @ref TRANSFER_MODE_REPEAT_BLOCK + * see HAL driver for details. */ + volatile uint16_t length; +} transfer_info_t; + +#endif + +/** Driver configuration set in @ref transfer_api_t::open. All elements except p_extend are required and must be + * initialized. */ +typedef struct st_transfer_cfg +{ + /** Pointer to transfer configuration options. If using chain transfer (DTC only), this can be a pointer to + * an array of chained transfers that will be completed in order. */ + transfer_info_t * p_info; + + void const * p_extend; ///< Extension parameter for hardware specific settings. +} transfer_cfg_t; + +/** Select whether to start single or repeated transfer with software start. */ +typedef enum e_transfer_start_mode +{ + TRANSFER_START_MODE_SINGLE = 0, ///< Software start triggers single transfer. + TRANSFER_START_MODE_REPEAT = 1 ///< Software start transfer continues until transfer is complete. +} transfer_start_mode_t; + +/** Transfer functions implemented at the HAL layer will follow this API. */ +typedef struct st_transfer_api +{ + /** Initial configuration. + * + * @param[in,out] p_ctrl Pointer to control block. Must be declared by user. Elements set here. + * @param[in] p_cfg Pointer to configuration structure. All elements of this structure + * must be set by user. + */ + fsp_err_t (* open)(transfer_ctrl_t * const p_ctrl, transfer_cfg_t const * const p_cfg); + + /** Reconfigure the transfer. + * Enable the transfer if p_info is valid. + * + * @param[in,out] p_ctrl Pointer to control block. Must be declared by user. Elements set here. + * @param[in] p_info Pointer to a new transfer info structure. + */ + fsp_err_t (* reconfigure)(transfer_ctrl_t * const p_ctrl, transfer_info_t * p_info); + + /** Reset source address pointer, destination address pointer, and/or length, keeping all other settings the same. + * Enable the transfer if p_src, p_dest, and length are valid. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_src Pointer to source. Set to NULL if source pointer should not change. + * @param[in] p_dest Pointer to destination. Set to NULL if destination pointer should not change. + * @param[in] num_transfers Transfer length in normal mode or number of blocks in block mode. In DMAC only, + * resets number of repeats (initially stored in transfer_info_t::num_blocks) in + * repeat mode. Not used in repeat mode for DTC. + */ + fsp_err_t (* reset)(transfer_ctrl_t * const p_ctrl, void const * p_src, void * p_dest, + uint16_t const num_transfers); + + /** Enable transfer. Transfers occur after the activation source event (or when + * @ref transfer_api_t::softwareStart is called if no peripheral event is chosen as activation source). + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* enable)(transfer_ctrl_t * const p_ctrl); + + /** Disable transfer. Transfers do not occur after the activation source event (or when + * @ref transfer_api_t::softwareStart is called if no peripheral event is chosen as the DMAC activation source). + * @note If a transfer is in progress, it will be completed. Subsequent transfer requests do not cause a + * transfer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* disable)(transfer_ctrl_t * const p_ctrl); + + /** Start transfer in software. + * @warning Only works if no peripheral event is chosen as the DMAC activation source. + * @note Not supported for DTC. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] mode Select mode from @ref transfer_start_mode_t. + */ + fsp_err_t (* softwareStart)(transfer_ctrl_t * const p_ctrl, transfer_start_mode_t mode); + + /** Stop transfer in software. The transfer will stop after completion of the current transfer. + * @note Not supported for DTC. + * @note Only applies for transfers started with TRANSFER_START_MODE_REPEAT. + * @warning Only works if no peripheral event is chosen as the DMAC activation source. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* softwareStop)(transfer_ctrl_t * const p_ctrl); + + /** Provides information about this transfer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[out] p_properties Driver specific information. + */ + fsp_err_t (* infoGet)(transfer_ctrl_t * const p_ctrl, transfer_properties_t * const p_properties); + + /** Releases hardware lock. This allows a transfer to be reconfigured using @ref transfer_api_t::open. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* close)(transfer_ctrl_t * const p_ctrl); + + /** To update next transfer information without interruption during transfer. + * Allow further transfer continuation. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_src Pointer to source. Set to NULL if source pointer should not change. + * @param[in] p_dest Pointer to destination. Set to NULL if destination pointer should not change. + * @param[in] num_transfers Transfer length in normal mode or block mode. + */ + fsp_err_t (* reload)(transfer_ctrl_t * const p_ctrl, void const * p_src, void * p_dest, + uint32_t const num_transfers); + + /** Specify callback function and optional context pointer and working memory pointer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_callback Callback function to register + * @param[in] p_context Pointer to send to callback function + * @param[in] p_callback_memory Pointer to volatile memory where callback structure can be allocated. + * Callback arguments allocated here are only valid during the callback. + */ + fsp_err_t (* callbackSet)(transfer_ctrl_t * const p_ctrl, void (* p_callback)(transfer_callback_args_t *), + void const * const p_context, transfer_callback_args_t * const p_callback_memory); +} transfer_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_transfer_instance +{ + transfer_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + transfer_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + transfer_api_t const * p_api; ///< Pointer to the API structure for this instance +} transfer_instance_t; + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/*******************************************************************************************************************//** + * @} (end defgroup TRANSFER_API) + **********************************************************************************************************************/ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_uart_api.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_uart_api.h new file mode 100644 index 00000000000..23585bd3903 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/api/r_uart_api.h @@ -0,0 +1,268 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_CONNECTIVITY_INTERFACES + * @defgroup UART_API UART Interface + * @brief Interface for UART communications. + * + * @section UART_INTERFACE_SUMMARY Summary + * The UART interface provides common APIs for UART HAL drivers. The UART interface supports the following features: + * - Full-duplex UART communication + * - Interrupt driven transmit/receive processing + * - Callback function with returned event code + * - Runtime baud-rate change + * - Hardware resource locking during a transaction + * - CTS/RTS hardware flow control support (with an associated IOPORT pin) + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_UART_API_H +#define R_UART_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Includes board and MCU related header files. */ +#include "bsp_api.h" +#include "r_transfer_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** UART Event codes */ +#ifndef BSP_OVERRIDE_UART_EVENT_T +typedef enum e_sf_event +{ + UART_EVENT_RX_COMPLETE = (1UL << 0), ///< Receive complete event + UART_EVENT_TX_COMPLETE = (1UL << 1), ///< Transmit complete event + UART_EVENT_RX_CHAR = (1UL << 2), ///< Character received + UART_EVENT_ERR_PARITY = (1UL << 3), ///< Parity error event + UART_EVENT_ERR_FRAMING = (1UL << 4), ///< Mode fault error event + UART_EVENT_ERR_OVERFLOW = (1UL << 5), ///< FIFO Overflow error event + UART_EVENT_BREAK_DETECT = (1UL << 6), ///< Break detect error event + UART_EVENT_TX_DATA_EMPTY = (1UL << 7), ///< Last byte is transmitting, ready for more data +} uart_event_t; +#endif +#ifndef BSP_OVERRIDE_UART_DATA_BITS_T + +/** UART Data bit length definition */ +typedef enum e_uart_data_bits +{ + UART_DATA_BITS_9 = 0U, ///< Data bits 9-bit + UART_DATA_BITS_8 = 2U, ///< Data bits 8-bit + UART_DATA_BITS_7 = 3U, ///< Data bits 7-bit +} uart_data_bits_t; +#endif +#ifndef BSP_OVERRIDE_UART_PARITY_T + +/** UART Parity definition */ +typedef enum e_uart_parity +{ + UART_PARITY_OFF = 0U, ///< No parity + UART_PARITY_ZERO = 1U, ///< Zero parity + UART_PARITY_EVEN = 2U, ///< Even parity + UART_PARITY_ODD = 3U, ///< Odd parity +} uart_parity_t; +#endif + +/** UART Stop bits definition */ +typedef enum e_uart_stop_bits +{ + UART_STOP_BITS_1 = 0U, ///< Stop bit 1-bit + UART_STOP_BITS_2 = 1U, ///< Stop bits 2-bit +} uart_stop_bits_t; + +/** UART transaction definition */ +typedef enum e_uart_dir +{ + UART_DIR_RX_TX = 3U, ///< Both RX and TX + UART_DIR_RX = 1U, ///< Only RX + UART_DIR_TX = 2U, ///< Only TX +} uart_dir_t; + +/** UART driver specific information */ +typedef struct st_uart_info +{ + /** Maximum bytes that can be written at this time. Only applies if uart_cfg_t::p_transfer_tx is not NULL. */ + uint32_t write_bytes_max; + + /** Maximum bytes that are available to read at one time. Only applies if uart_cfg_t::p_transfer_rx is not NULL. */ + uint32_t read_bytes_max; +} uart_info_t; + +/** UART Callback parameter definition */ +typedef struct st_uart_callback_arg +{ + uint32_t channel; ///< Device channel number + uart_event_t event; ///< Event code + + /** Contains the next character received for the events UART_EVENT_RX_CHAR, UART_EVENT_ERR_PARITY, + * UART_EVENT_ERR_FRAMING, or UART_EVENT_ERR_OVERFLOW. Otherwise unused. */ + uint32_t data; + void const * p_context; ///< Context provided to user during callback +} uart_callback_args_t; + +/** UART Configuration */ +typedef struct st_uart_cfg +{ + /* UART generic configuration */ + uint8_t channel; ///< Select a channel corresponding to the channel number of the hardware. + uart_data_bits_t data_bits; ///< Data bit length (8 or 7 or 9) + uart_parity_t parity; ///< Parity type (none or odd or even) + uart_stop_bits_t stop_bits; ///< Stop bit length (1 or 2) + uint8_t rxi_ipl; ///< Receive interrupt priority + IRQn_Type rxi_irq; ///< Receive interrupt IRQ number + uint8_t txi_ipl; ///< Transmit interrupt priority + IRQn_Type txi_irq; ///< Transmit interrupt IRQ number + uint8_t tei_ipl; ///< Transmit end interrupt priority + IRQn_Type tei_irq; ///< Transmit end interrupt IRQ number + uint8_t eri_ipl; ///< Error interrupt priority + IRQn_Type eri_irq; ///< Error interrupt IRQ number + + /** Optional transfer instance used to receive multiple bytes without interrupts. Set to NULL if unused. + * If NULL, the number of bytes allowed in the read API is limited to one byte at a time. */ + transfer_instance_t const * p_transfer_rx; + + /** Optional transfer instance used to send multiple bytes without interrupts. Set to NULL if unused. + * If NULL, the number of bytes allowed in the write APIs is limited to one byte at a time. */ + transfer_instance_t const * p_transfer_tx; + + /* Configuration for UART Event processing */ + void (* p_callback)(uart_callback_args_t * p_args); ///< Pointer to callback function + void const * p_context; ///< User defined context passed into callback function + + /* Pointer to UART peripheral specific configuration */ + void const * p_extend; ///< UART hardware dependent configuration +} uart_cfg_t; + +/** UART control block. Allocate an instance specific control block to pass into the UART API calls. + */ +typedef void uart_ctrl_t; + +/** Shared Interface definition for UART */ +typedef struct st_uart_api +{ + /** Open UART device. + * + * @param[in,out] p_ctrl Pointer to the UART control block. Must be declared by user. Value set here. + * @param[in] uart_cfg_t Pointer to UART configuration structure. All elements of this structure must be set by + * user. + */ + fsp_err_t (* open)(uart_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); + + /** Read from UART device. The read buffer is used until the read is complete. When a transfer is complete, the + * callback is called with event UART_EVENT_RX_COMPLETE. Bytes received outside an active transfer are received in + * the callback function with event UART_EVENT_RX_CHAR. + * The maximum transfer size is reported by infoGet(). + * + * @param[in] p_ctrl Pointer to the UART control block for the channel. + * @param[in] p_dest Destination address to read data from. + * @param[in] bytes Read data length. + */ + fsp_err_t (* read)(uart_ctrl_t * const p_ctrl, uint8_t * const p_dest, uint32_t const bytes); + + /** Write to UART device. The write buffer is used until write is complete. Do not overwrite write buffer + * contents until the write is finished. When the write is complete (all bytes are fully transmitted on the wire), + * the callback called with event UART_EVENT_TX_COMPLETE. + * The maximum transfer size is reported by infoGet(). + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_src Source address to write data to. + * @param[in] bytes Write data length. + */ + fsp_err_t (* write)(uart_ctrl_t * const p_ctrl, uint8_t const * const p_src, uint32_t const bytes); + + /** Change baud rate. + * @warning Calling this API aborts any in-progress transmission and disables reception until the new baud + * settings have been applied. + * + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_baudrate_info Pointer to module specific information for configuring baud rate. + */ + fsp_err_t (* baudSet)(uart_ctrl_t * const p_ctrl, void const * const p_baudrate_info); + + /** Get the driver specific information. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] baudrate Baud rate in bps. + */ + fsp_err_t (* infoGet)(uart_ctrl_t * const p_ctrl, uart_info_t * const p_info); + + /** + * Abort ongoing transfer. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] communication_to_abort Type of abort request. + */ + fsp_err_t (* communicationAbort)(uart_ctrl_t * const p_ctrl, uart_dir_t communication_to_abort); + + /** + * Specify callback function and optional context pointer and working memory pointer. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_callback Callback function + * @param[in] p_context Pointer to send to callback function + * @param[in] p_working_memory Pointer to volatile memory where callback structure can be allocated. + * Callback arguments allocated here are only valid during the callback. + */ + fsp_err_t (* callbackSet)(uart_ctrl_t * const p_ctrl, void (* p_callback)(uart_callback_args_t *), + void const * const p_context, uart_callback_args_t * const p_callback_memory); + + /** Close UART device. + * + * @param[in] p_ctrl Pointer to the UART control block. + */ + fsp_err_t (* close)(uart_ctrl_t * const p_ctrl); + + /** Stop ongoing read and return the number of bytes remaining in the read. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in,out] remaining_bytes Pointer to location to store remaining bytes for read. + */ + fsp_err_t (* readStop)(uart_ctrl_t * const p_ctrl, uint32_t * remaining_bytes); +} uart_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_uart_instance +{ + uart_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + uart_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + uart_api_t const * p_api; ///< Pointer to the API structure for this instance +} uart_instance_t; + +/** @} (end defgroup UART_API) */ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_common_api.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_common_api.h new file mode 100644 index 00000000000..6bc678d533a --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_common_api.h @@ -0,0 +1,394 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef FSP_COMMON_API_H +#define FSP_COMMON_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include +#include + +/* Includes FSP version macros. */ +#include "fsp_version.h" + +/*******************************************************************************************************************//** + * @ingroup RENESAS_COMMON + * @defgroup RENESAS_ERROR_CODES Common Error Codes + * All FSP modules share these common error codes. + * @{ + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** This macro is used to suppress compiler messages about a parameter not being used in a function. The nice thing + * about using this implementation is that it does not take any extra RAM or ROM. */ + +#define FSP_PARAMETER_NOT_USED(p) (void) ((p)) + +/** Determine if a C++ compiler is being used. + * If so, ensure that standard C is used to process the API information. */ +#if defined(__cplusplus) + #define FSP_CPP_HEADER extern "C" { + #define FSP_CPP_FOOTER } +#else + #define FSP_CPP_HEADER + #define FSP_CPP_FOOTER +#endif + +/** FSP Header and Footer definitions */ +#define FSP_HEADER FSP_CPP_HEADER +#define FSP_FOOTER FSP_CPP_FOOTER + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/** Macro to be used when argument to function is ignored since function call is NSC and the parameter is statically + * defined on the Secure side. */ +#define FSP_SECURE_ARGUMENT (NULL) + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Common error codes */ +typedef enum e_fsp_err +{ + FSP_SUCCESS = 0, + + FSP_ERR_ASSERTION = 1, ///< A critical assertion has failed + FSP_ERR_INVALID_POINTER = 2, ///< Pointer points to invalid memory location + FSP_ERR_INVALID_ARGUMENT = 3, ///< Invalid input parameter + FSP_ERR_INVALID_CHANNEL = 4, ///< Selected channel does not exist + FSP_ERR_INVALID_MODE = 5, ///< Unsupported or incorrect mode + FSP_ERR_UNSUPPORTED = 6, ///< Selected mode not supported by this API + FSP_ERR_NOT_OPEN = 7, ///< Requested channel is not configured or API not open + FSP_ERR_IN_USE = 8, ///< Channel/peripheral is running/busy + FSP_ERR_OUT_OF_MEMORY = 9, ///< Allocate more memory in the driver's cfg.h + FSP_ERR_HW_LOCKED = 10, ///< Hardware is locked + FSP_ERR_IRQ_BSP_DISABLED = 11, ///< IRQ not enabled in BSP + FSP_ERR_OVERFLOW = 12, ///< Hardware overflow + FSP_ERR_UNDERFLOW = 13, ///< Hardware underflow + FSP_ERR_ALREADY_OPEN = 14, ///< Requested channel is already open in a different configuration + FSP_ERR_APPROXIMATION = 15, ///< Could not set value to exact result + FSP_ERR_CLAMPED = 16, ///< Value had to be limited for some reason + FSP_ERR_INVALID_RATE = 17, ///< Selected rate could not be met + FSP_ERR_ABORTED = 18, ///< An operation was aborted + FSP_ERR_NOT_ENABLED = 19, ///< Requested operation is not enabled + FSP_ERR_TIMEOUT = 20, ///< Timeout error + FSP_ERR_INVALID_BLOCKS = 21, ///< Invalid number of blocks supplied + FSP_ERR_INVALID_ADDRESS = 22, ///< Invalid address supplied + FSP_ERR_INVALID_SIZE = 23, ///< Invalid size/length supplied for operation + FSP_ERR_WRITE_FAILED = 24, ///< Write operation failed + FSP_ERR_ERASE_FAILED = 25, ///< Erase operation failed + FSP_ERR_INVALID_CALL = 26, ///< Invalid function call is made + FSP_ERR_INVALID_HW_CONDITION = 27, ///< Detected hardware is in invalid condition + FSP_ERR_INVALID_FACTORY_FLASH = 28, ///< Factory flash is not available on this MCU + FSP_ERR_INVALID_STATE = 30, ///< API or command not valid in the current state + FSP_ERR_NOT_ERASED = 31, ///< Erase verification failed + FSP_ERR_SECTOR_RELEASE_FAILED = 32, ///< Sector release failed + FSP_ERR_NOT_INITIALIZED = 33, ///< Required initialization not complete + FSP_ERR_NOT_FOUND = 34, ///< The requested item could not be found + FSP_ERR_NO_CALLBACK_MEMORY = 35, ///< Non-secure callback memory not provided for non-secure callback + FSP_ERR_BUFFER_EMPTY = 36, ///< No data available in buffer + FSP_ERR_INVALID_DATA = 37, ///< Accuracy of data is not guaranteed + + /* Start of RTOS only error codes */ + FSP_ERR_INTERNAL = 100, ///< Internal error + FSP_ERR_WAIT_ABORTED = 101, ///< Wait aborted + + /* Start of UART specific */ + FSP_ERR_FRAMING = 200, ///< Framing error occurs + FSP_ERR_BREAK_DETECT = 201, ///< Break signal detects + FSP_ERR_PARITY = 202, ///< Parity error occurs + FSP_ERR_RXBUF_OVERFLOW = 203, ///< Receive queue overflow + FSP_ERR_QUEUE_UNAVAILABLE = 204, ///< Can't open s/w queue + FSP_ERR_INSUFFICIENT_SPACE = 205, ///< Not enough space in transmission circular buffer + FSP_ERR_INSUFFICIENT_DATA = 206, ///< Not enough data in receive circular buffer + + /* Start of SPI specific */ + FSP_ERR_TRANSFER_ABORTED = 300, ///< The data transfer was aborted. + FSP_ERR_MODE_FAULT = 301, ///< Mode fault error. + FSP_ERR_READ_OVERFLOW = 302, ///< Read overflow. + FSP_ERR_SPI_PARITY = 303, ///< Parity error. + FSP_ERR_OVERRUN = 304, ///< Overrun error. + + /* Start of CGC Specific */ + FSP_ERR_CLOCK_INACTIVE = 400, ///< Inactive clock specified as system clock. + FSP_ERR_CLOCK_ACTIVE = 401, ///< Active clock source cannot be modified without stopping first. + FSP_ERR_NOT_STABILIZED = 403, ///< Clock has not stabilized after its been turned on/off + FSP_ERR_PLL_SRC_INACTIVE = 404, ///< PLL initialization attempted when PLL source is turned off + FSP_ERR_OSC_STOP_DET_ENABLED = 405, ///< Illegal attempt to stop LOCO when Oscillation stop is enabled + FSP_ERR_OSC_STOP_DETECTED = 406, ///< The Oscillation stop detection status flag is set + FSP_ERR_OSC_STOP_CLOCK_ACTIVE = 407, ///< Attempt to clear Oscillation Stop Detect Status with PLL/MAIN_OSC active + FSP_ERR_CLKOUT_EXCEEDED = 408, ///< Output on target output clock pin exceeds maximum supported limit + FSP_ERR_USB_MODULE_ENABLED = 409, ///< USB clock configure request with USB Module enabled + FSP_ERR_HARDWARE_TIMEOUT = 410, ///< A register read or write timed out + FSP_ERR_LOW_VOLTAGE_MODE = 411, ///< Invalid clock setting attempted in low voltage mode + + /* Start of FLASH Specific */ + FSP_ERR_PE_FAILURE = 500, ///< Unable to enter Programming mode. + FSP_ERR_CMD_LOCKED = 501, ///< Peripheral in command locked state + FSP_ERR_FCLK = 502, ///< FCLK must be >= 4 MHz + FSP_ERR_INVALID_LINKED_ADDRESS = 503, ///< Function or data are linked at an invalid region of memory + FSP_ERR_BLANK_CHECK_FAILED = 504, ///< Blank check operation failed + + /* Start of CAC Specific */ + FSP_ERR_INVALID_CAC_REF_CLOCK = 600, ///< Measured clock rate < reference clock rate + + /* Start of IIRFA Specific */ + FSP_ERR_INVALID_RESULT = 700, ///< The result of one or more calculations was +/- infinity. + + /* Start of GLCD Specific */ + FSP_ERR_CLOCK_GENERATION = 1000, ///< Clock cannot be specified as system clock + FSP_ERR_INVALID_TIMING_SETTING = 1001, ///< Invalid timing parameter + FSP_ERR_INVALID_LAYER_SETTING = 1002, ///< Invalid layer parameter + FSP_ERR_INVALID_ALIGNMENT = 1003, ///< Invalid memory alignment found + FSP_ERR_INVALID_GAMMA_SETTING = 1004, ///< Invalid gamma correction parameter + FSP_ERR_INVALID_LAYER_FORMAT = 1005, ///< Invalid color format in layer + FSP_ERR_INVALID_UPDATE_TIMING = 1006, ///< Invalid timing for register update + FSP_ERR_INVALID_CLUT_ACCESS = 1007, ///< Invalid access to CLUT entry + FSP_ERR_INVALID_FADE_SETTING = 1008, ///< Invalid fade-in/fade-out setting + FSP_ERR_INVALID_BRIGHTNESS_SETTING = 1009, ///< Invalid gamma correction parameter + + /* Start of JPEG Specific */ + FSP_ERR_JPEG_ERR = 1100, ///< JPEG error + FSP_ERR_JPEG_SOI_NOT_DETECTED = 1101, ///< SOI not detected until EOI detected. + FSP_ERR_JPEG_SOF1_TO_SOFF_DETECTED = 1102, ///< SOF1 to SOFF detected. + FSP_ERR_JPEG_UNSUPPORTED_PIXEL_FORMAT = 1103, ///< Unprovided pixel format detected. + FSP_ERR_JPEG_SOF_ACCURACY_ERROR = 1104, ///< SOF accuracy error: other than 8 detected. + FSP_ERR_JPEG_DQT_ACCURACY_ERROR = 1105, ///< DQT accuracy error: other than 0 detected. + FSP_ERR_JPEG_COMPONENT_ERROR1 = 1106, ///< Component error 1: the number of SOF0 header components detected is other than 1, 3, or 4. + FSP_ERR_JPEG_COMPONENT_ERROR2 = 1107, ///< Component error 2: the number of components differs between SOF0 header and SOS. + FSP_ERR_JPEG_SOF0_DQT_DHT_NOT_DETECTED = 1108, ///< SOF0, DQT, and DHT not detected when SOS detected. + FSP_ERR_JPEG_SOS_NOT_DETECTED = 1109, ///< SOS not detected: SOS not detected until EOI detected. + FSP_ERR_JPEG_EOI_NOT_DETECTED = 1110, ///< EOI not detected (default) + FSP_ERR_JPEG_RESTART_INTERVAL_DATA_NUMBER_ERROR = 1111, ///< Restart interval data number error detected. + FSP_ERR_JPEG_IMAGE_SIZE_ERROR = 1112, ///< Image size error detected. + FSP_ERR_JPEG_LAST_MCU_DATA_NUMBER_ERROR = 1113, ///< Last MCU data number error detected. + FSP_ERR_JPEG_BLOCK_DATA_NUMBER_ERROR = 1114, ///< Block data number error detected. + FSP_ERR_JPEG_BUFFERSIZE_NOT_ENOUGH = 1115, ///< User provided buffer size not enough + FSP_ERR_JPEG_UNSUPPORTED_IMAGE_SIZE = 1116, ///< JPEG Image size is not aligned with MCU + + /* Start of touch panel framework specific */ + FSP_ERR_CALIBRATE_FAILED = 1200, ///< Calibration failed + + /* Start of IIRFA specific */ + FSP_ERR_IIRFA_ECC_1BIT = 1300, ///< 1-bit ECC error detected + FSP_ERR_IIRFA_ECC_2BIT = 1301, ///< 2-bit ECC error detected + + /* Start of IP specific */ + FSP_ERR_IP_HARDWARE_NOT_PRESENT = 1400, ///< Requested IP does not exist on this device + FSP_ERR_IP_UNIT_NOT_PRESENT = 1401, ///< Requested unit does not exist on this device + FSP_ERR_IP_CHANNEL_NOT_PRESENT = 1402, ///< Requested channel does not exist on this device + + /* Start of USB specific */ + FSP_ERR_USB_FAILED = 1500, + FSP_ERR_USB_BUSY = 1501, + FSP_ERR_USB_SIZE_SHORT = 1502, + FSP_ERR_USB_SIZE_OVER = 1503, + FSP_ERR_USB_NOT_OPEN = 1504, + FSP_ERR_USB_NOT_SUSPEND = 1505, + FSP_ERR_USB_PARAMETER = 1506, + + /* Start of Message framework specific */ + FSP_ERR_NO_MORE_BUFFER = 2000, ///< No more buffer found in the memory block pool + FSP_ERR_ILLEGAL_BUFFER_ADDRESS = 2001, ///< Buffer address is out of block memory pool + FSP_ERR_INVALID_WORKBUFFER_SIZE = 2002, ///< Work buffer size is invalid + FSP_ERR_INVALID_MSG_BUFFER_SIZE = 2003, ///< Message buffer size is invalid + FSP_ERR_TOO_MANY_BUFFERS = 2004, ///< Number of buffer is too many + FSP_ERR_NO_SUBSCRIBER_FOUND = 2005, ///< No message subscriber found + FSP_ERR_MESSAGE_QUEUE_EMPTY = 2006, ///< No message found in the message queue + FSP_ERR_MESSAGE_QUEUE_FULL = 2007, ///< No room for new message in the message queue + FSP_ERR_ILLEGAL_SUBSCRIBER_LISTS = 2008, ///< Message subscriber lists is illegal + FSP_ERR_BUFFER_RELEASED = 2009, ///< Buffer has been released + + /* Start of 2DG Driver specific */ + FSP_ERR_D2D_ERROR_INIT = 3000, ///< D/AVE 2D has an error in the initialization + FSP_ERR_D2D_ERROR_DEINIT = 3001, ///< D/AVE 2D has an error in the initialization + FSP_ERR_D2D_ERROR_RENDERING = 3002, ///< D/AVE 2D has an error in the rendering + FSP_ERR_D2D_ERROR_SIZE = 3003, ///< D/AVE 2D has an error in the rendering + + /* Start of ETHER Driver specific */ + FSP_ERR_ETHER_ERROR_NO_DATA = 4000, ///< No Data in Receive buffer. + FSP_ERR_ETHER_ERROR_LINK = 4001, ///< ETHERC/EDMAC has an error in the Auto-negotiation + FSP_ERR_ETHER_ERROR_MAGIC_PACKET_MODE = 4002, ///< As a Magic Packet is being detected, and transmission/reception is not enabled + FSP_ERR_ETHER_ERROR_TRANSMIT_BUFFER_FULL = 4003, ///< Transmit buffer is not empty + FSP_ERR_ETHER_ERROR_FILTERING = 4004, ///< Detect multicast frame when multicast frame filtering enable + FSP_ERR_ETHER_ERROR_PHY_COMMUNICATION = 4005, ///< ETHERC/EDMAC has an error in the phy communication + FSP_ERR_ETHER_RECEIVE_BUFFER_ACTIVE = 4006, ///< Receive buffer is active. + + /* Start of ETHER_PHY Driver specific */ + FSP_ERR_ETHER_PHY_ERROR_LINK = 5000, ///< PHY is not link up. + FSP_ERR_ETHER_PHY_NOT_READY = 5001, ///< PHY has an error in the Auto-negotiation + + /* Start of BYTEQ library specific */ + FSP_ERR_QUEUE_FULL = 10000, ///< Queue is full, cannot queue another data + FSP_ERR_QUEUE_EMPTY = 10001, ///< Queue is empty, no data to dequeue + + /* Start of CTSU Driver specific */ + FSP_ERR_CTSU_SCANNING = 6000, ///< Scanning. + FSP_ERR_CTSU_NOT_GET_DATA = 6001, ///< Not processed previous scan data. + FSP_ERR_CTSU_INCOMPLETE_TUNING = 6002, ///< Incomplete initial offset tuning. + FSP_ERR_CTSU_DIAG_NOT_YET = 6003, ///< Diagnosis of data collected no yet. + FSP_ERR_CTSU_DIAG_LDO_OVER_VOLTAGE = 6004, ///< Diagnosis of LDO over voltage failed. + FSP_ERR_CTSU_DIAG_CCO_HIGH = 6005, ///< Diagnosis of CCO into 19.2uA failed. + FSP_ERR_CTSU_DIAG_CCO_LOW = 6006, ///< Diagnosis of CCO into 2.4uA failed. + FSP_ERR_CTSU_DIAG_SSCG = 6007, ///< Diagnosis of SSCG frequency failed. + FSP_ERR_CTSU_DIAG_DAC = 6008, ///< Diagnosis of non-touch count value failed. + FSP_ERR_CTSU_DIAG_OUTPUT_VOLTAGE = 6009, ///< Diagnosis of LDO output voltage failed. + FSP_ERR_CTSU_DIAG_OVER_VOLTAGE = 6010, ///< Diagnosis of over voltage detection circuit failed. + FSP_ERR_CTSU_DIAG_OVER_CURRENT = 6011, ///< Diagnosis of over current detection circuit failed. + FSP_ERR_CTSU_DIAG_LOAD_RESISTANCE = 6012, ///< Diagnosis of LDO internal resistance value failed. + FSP_ERR_CTSU_DIAG_CURRENT_SOURCE = 6013, ///< Diagnosis of Current source value failed. + FSP_ERR_CTSU_DIAG_SENSCLK_GAIN = 6014, ///< Diagnosis of SENSCLK frequency gain failed. + FSP_ERR_CTSU_DIAG_SUCLK_GAIN = 6015, ///< Diagnosis of SUCLK frequency gain failed. + FSP_ERR_CTSU_DIAG_CLOCK_RECOVERY = 6016, ///< Diagnosis of SUCLK clock recovery function failed. + FSP_ERR_CTSU_DIAG_CFC_GAIN = 6017, ///< Diagnosis of CFC oscillator gain failed. + + /* Start of SDMMC specific */ + FSP_ERR_CARD_INIT_FAILED = 40000, ///< SD card or eMMC device failed to initialize. + FSP_ERR_CARD_NOT_INSERTED = 40001, ///< SD card not installed. + FSP_ERR_DEVICE_BUSY = 40002, ///< Device is holding DAT0 low or another operation is ongoing. + FSP_ERR_CARD_NOT_INITIALIZED = 40004, ///< SD card was removed. + FSP_ERR_CARD_WRITE_PROTECTED = 40005, ///< Media is write protected. + FSP_ERR_TRANSFER_BUSY = 40006, ///< Transfer in progress. + FSP_ERR_RESPONSE = 40007, ///< Card did not respond or responded with an error. + + /* Start of FX_IO specific */ + FSP_ERR_MEDIA_FORMAT_FAILED = 50000, ///< Media format failed. + FSP_ERR_MEDIA_OPEN_FAILED = 50001, ///< Media open failed. + + /* Start of CAN specific */ + FSP_ERR_CAN_DATA_UNAVAILABLE = 60000, ///< No data available. + FSP_ERR_CAN_MODE_SWITCH_FAILED = 60001, ///< Switching operation modes failed. + FSP_ERR_CAN_INIT_FAILED = 60002, ///< Hardware initialization failed. + FSP_ERR_CAN_TRANSMIT_NOT_READY = 60003, ///< Transmit in progress. + FSP_ERR_CAN_RECEIVE_MAILBOX = 60004, ///< Mailbox is setup as a receive mailbox. + FSP_ERR_CAN_TRANSMIT_MAILBOX = 60005, ///< Mailbox is setup as a transmit mailbox. + FSP_ERR_CAN_MESSAGE_LOST = 60006, ///< Receive message has been overwritten or overrun. + FSP_ERR_CAN_TRANSMIT_FIFO_FULL = 60007, ///< Transmit FIFO is full. + + /* Start of SF_WIFI Specific */ + FSP_ERR_WIFI_CONFIG_FAILED = 70000, ///< WiFi module Configuration failed. + FSP_ERR_WIFI_INIT_FAILED = 70001, ///< WiFi module initialization failed. + FSP_ERR_WIFI_TRANSMIT_FAILED = 70002, ///< Transmission failed + FSP_ERR_WIFI_INVALID_MODE = 70003, ///< API called when provisioned in client mode + FSP_ERR_WIFI_FAILED = 70004, ///< WiFi Failed. + FSP_ERR_WIFI_SCAN_COMPLETE = 70005, ///< Wifi scan has completed. + FSP_ERR_WIFI_AP_NOT_CONNECTED = 70006, ///< WiFi module is not connected to access point + FSP_ERR_WIFI_UNKNOWN_AT_CMD = 70007, ///< DA16200 Unknown AT command Error + FSP_ERR_WIFI_INSUF_PARAM = 70008, ///< DA16200 Insufficient parameter + FSP_ERR_WIFI_TOO_MANY_PARAMS = 70009, ///< DA16200 Too many parameters + FSP_ERR_WIFI_INV_PARAM_VAL = 70010, ///< DA16200 Wrong parameter value + FSP_ERR_WIFI_NO_RESULT = 70011, ///< DA16200 No result + FSP_ERR_WIFI_RSP_BUF_OVFLW = 70012, ///< DA16200 Response buffer overflow + FSP_ERR_WIFI_FUNC_NOT_CONFIG = 70013, ///< DA16200 Function is not configured + FSP_ERR_WIFI_NVRAM_WR_FAIL = 70014, ///< DA16200 NVRAM write failure + FSP_ERR_WIFI_RET_MEM_WR_FAIL = 70015, ///< DA16200 Retention memory write failure + FSP_ERR_WIFI_UNKNOWN_ERR = 70016, ///< DA16200 unknown error + + /* Start of SF_CELLULAR Specific */ + FSP_ERR_CELLULAR_CONFIG_FAILED = 80000, ///< Cellular module Configuration failed. + FSP_ERR_CELLULAR_INIT_FAILED = 80001, ///< Cellular module initialization failed. + FSP_ERR_CELLULAR_TRANSMIT_FAILED = 80002, ///< Transmission failed + FSP_ERR_CELLULAR_FW_UPTODATE = 80003, ///< Firmware is uptodate + FSP_ERR_CELLULAR_FW_UPGRADE_FAILED = 80004, ///< Firmware upgrade failed + FSP_ERR_CELLULAR_FAILED = 80005, ///< Cellular Failed. + FSP_ERR_CELLULAR_INVALID_STATE = 80006, ///< API Called in invalid state. + FSP_ERR_CELLULAR_REGISTRATION_FAILED = 80007, ///< Cellular Network registration failed + + /* Start of SF_BLE specific */ + FSP_ERR_BLE_FAILED = 90001, ///< BLE operation failed + FSP_ERR_BLE_INIT_FAILED = 90002, ///< BLE device initialization failed + FSP_ERR_BLE_CONFIG_FAILED = 90003, ///< BLE device configuration failed + FSP_ERR_BLE_PRF_ALREADY_ENABLED = 90004, ///< BLE device Profile already enabled + FSP_ERR_BLE_PRF_NOT_ENABLED = 90005, ///< BLE device not enabled + + /* Start of SF_BLE_ABS specific */ + FSP_ERR_BLE_ABS_INVALID_OPERATION = 91001, ///< Invalid operation is executed. + FSP_ERR_BLE_ABS_NOT_FOUND = 91002, ///< Valid data or free space is not found. + + /* Start of Crypto specific (0x10000) @note Refer to sf_cryoto_err.h for Crypto error code. */ + FSP_ERR_CRYPTO_CONTINUE = 0x10000, ///< Continue executing function + FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT = 0x10001, ///< Hardware resource busy + FSP_ERR_CRYPTO_SCE_FAIL = 0x10002, ///< Internal I/O buffer is not empty + FSP_ERR_CRYPTO_SCE_HRK_INVALID_INDEX = 0x10003, ///< Invalid index + FSP_ERR_CRYPTO_SCE_RETRY = 0x10004, ///< Retry + FSP_ERR_CRYPTO_SCE_VERIFY_FAIL = 0x10005, ///< Verify is failed + FSP_ERR_CRYPTO_SCE_ALREADY_OPEN = 0x10006, ///< HW SCE module is already opened + FSP_ERR_CRYPTO_NOT_OPEN = 0x10007, ///< Hardware module is not initialized + FSP_ERR_CRYPTO_UNKNOWN = 0x10008, ///< Some unknown error occurred + FSP_ERR_CRYPTO_NULL_POINTER = 0x10009, ///< Null pointer input as a parameter + FSP_ERR_CRYPTO_NOT_IMPLEMENTED = 0x1000a, ///< Algorithm/size not implemented + FSP_ERR_CRYPTO_RNG_INVALID_PARAM = 0x1000b, ///< An invalid parameter is specified + FSP_ERR_CRYPTO_RNG_FATAL_ERROR = 0x1000c, ///< A fatal error occurred + FSP_ERR_CRYPTO_INVALID_SIZE = 0x1000d, ///< Size specified is invalid + FSP_ERR_CRYPTO_INVALID_STATE = 0x1000e, ///< Function used in an valid state + FSP_ERR_CRYPTO_ALREADY_OPEN = 0x1000f, ///< control block is already opened + FSP_ERR_CRYPTO_INSTALL_KEY_FAILED = 0x10010, ///< Specified input key is invalid. + FSP_ERR_CRYPTO_AUTHENTICATION_FAILED = 0x10011, ///< Authentication failed + FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL = 0x10012, ///< Failure to Init Cipher + FSP_ERR_CRYPTO_SCE_AUTHENTICATION = 0x10013, ///< Authentication failed + FSP_ERR_CRYPTO_SCE_PARAMETER = 0x10014, ///< Input date is illegal. + FSP_ERR_CRYPTO_SCE_PROHIBIT_FUNCTION = 0x10015, ///< An invalid function call occurred. + + /* Start of Crypto RSIP specific (0x10100) */ + FSP_ERR_CRYPTO_RSIP_RESOURCE_CONFLICT = 0x10100, ///< Hardware resource is busy + FSP_ERR_CRYPTO_RSIP_FATAL = 0x10101, ///< Hardware fatal error or unexpected return + FSP_ERR_CRYPTO_RSIP_FAIL = 0x10102, ///< Internal error + FSP_ERR_CRYPTO_RSIP_KEY_SET_FAIL = 0x10103, ///< Input key type is illegal + FSP_ERR_CRYPTO_RSIP_AUTHENTICATION = 0x10104, ///< Authentication failed + + /* Start of SF_CRYPTO specific */ + FSP_ERR_CRYPTO_COMMON_NOT_OPENED = 0x20000, ///< Crypto Framework Common is not opened + FSP_ERR_CRYPTO_HAL_ERROR = 0x20001, ///< Cryoto HAL module returned an error + FSP_ERR_CRYPTO_KEY_BUF_NOT_ENOUGH = 0x20002, ///< Key buffer size is not enough to generate a key + FSP_ERR_CRYPTO_BUF_OVERFLOW = 0x20003, ///< Attempt to write data larger than what the buffer can hold + FSP_ERR_CRYPTO_INVALID_OPERATION_MODE = 0x20004, ///< Invalid operation mode. + FSP_ERR_MESSAGE_TOO_LONG = 0x20005, ///< Message for RSA encryption is too long. + FSP_ERR_RSA_DECRYPTION_ERROR = 0x20006, ///< RSA Decryption error. + + /** @note SF_CRYPTO APIs may return an error code starting from 0x10000 which is of Crypto module. + * Refer to sf_cryoto_err.h for Crypto error codes. + */ + + /* Start of Sensor specific */ + FSP_ERR_SENSOR_INVALID_DATA = 0x30000, ///< Data is invalid. + FSP_ERR_SENSOR_IN_STABILIZATION = 0x30001, ///< Sensor is stabilizing. + FSP_ERR_SENSOR_MEASUREMENT_NOT_FINISHED = 0x30002, ///< Measurement is not finished. + + /* Start of COMMS specific */ + FSP_ERR_COMMS_BUS_NOT_OPEN = 0x40000, ///< Bus is not open. +} fsp_err_t; + +/** @} */ + +/*********************************************************************************************************************** + * Function prototypes + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_features.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_features.h new file mode 100644 index 00000000000..5313968fc24 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_features.h @@ -0,0 +1,562 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef FSP_FEATURES_H +#define FSP_FEATURES_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* C99 includes. */ +#include +#include +#include +#include + +/* Different compiler support. */ +#include "fsp_common_api.h" +#include "../../fsp/src/bsp/mcu/all/bsp_compiler_support.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Available modules. */ +typedef enum e_fsp_ip +{ + FSP_IP_CGC = 1, ///< Clock Generation Circuit + FSP_IP_CLMA = 2, ///< Clock Monitor Circuit + FSP_IP_MSTP = 3, ///< Module Stop + FSP_IP_ICU = 4, ///< Interrupt Control Unit + FSP_IP_BSC = 5, ///< Bus State Contoller + FSP_IP_CKIO = 6, ///< CKIO + FSP_IP_DMAC = 7, ///< DMA Controller + FSP_IP_ELC = 8, ///< Event Link Controller + FSP_IP_IOPORT = 9, ///< I/O Ports + FSP_IP_MTU3 = 10, ///< Multi-Function Timer Pulse Unit + FSP_IP_POE3 = 11, ///< Port Output Enable for MTU3 + FSP_IP_GPT = 12, ///< General PWM Timer + FSP_IP_POEG = 13, ///< Port Output Enable for GPT + FSP_IP_TFU = 14, ///< Arithmetic Unit for Trigonometric Functions + FSP_IP_CMT = 15, ///< Compare Match Timer + FSP_IP_CMTW = 16, ///< Compare Match Timer W + FSP_IP_WDT = 17, ///< Watch Dog Timer + FSP_IP_RTC = 18, ///< Real Time Clock + FSP_IP_ETHSS = 19, ///< Ethernet Subsystem + FSP_IP_GMAC = 20, ///< Ethernet MAC + FSP_IP_ETHSW = 21, ///< Ethernet Switch + FSP_IP_ESC = 22, ///< EtherCAT Slave Controller + FSP_IP_USBHS = 23, ///< USB High Speed + FSP_IP_SCI = 24, ///< Serial Communications Interface + FSP_IP_IIC = 25, ///< I2C Bus Interface + FSP_IP_CANFD = 26, ///< Controller Area Network with Flexible Data Rate + FSP_IP_SPI = 27, ///< Serial Peripheral Interface + FSP_IP_XSPI = 28, ///< expanded Serial Peripheral Interface + FSP_IP_CRC = 29, ///< Cyclic Redundancy Check Calculator + FSP_IP_BSCAN = 30, ///< Boundary Scan + FSP_IP_DSMIF = 31, ///< Delta Sigma Interface + FSP_IP_ADC12 = 32, ///< 12-Bit A/D Converter + FSP_IP_TSU = 33, ///< Temperature Sensor + FSP_IP_DOC = 34, ///< Data Operation Circuit + FSP_IP_SYSRAM = 35, ///< System SRAM + FSP_IP_ENCIF = 36, ///< Encoder Interface + FSP_IP_SHOSTIF = 37, ///< Serial Host Interface + FSP_IP_PHOSTIF = 38, ///< Parallel Host Interface +} fsp_ip_t; + +/** Signals that can be mapped to an interrupt. */ +typedef enum e_fsp_signal +{ + FSP_SIGNAL_INTCPU0 = (0), ///< Software interrupt 0 + FSP_SIGNAL_INTCPU1 = (1), ///< Software interrupt 1 + FSP_SIGNAL_INTCPU2 = (2), ///< Software interrupt 2 + FSP_SIGNAL_INTCPU3 = (3), ///< Software interrupt 3 + FSP_SIGNAL_INTCPU4 = (4), ///< Software interrupt 4 + FSP_SIGNAL_INTCPU5 = (5), ///< Software interrupt 5 + FSP_SIGNAL_IRQ0 = (6), ///< External pin interrupt 0 + FSP_SIGNAL_IRQ1 = (7), ///< External pin interrupt 1 + FSP_SIGNAL_IRQ2 = (8), ///< External pin interrupt 2 + FSP_SIGNAL_IRQ3 = (9), ///< External pin interrupt 3 + FSP_SIGNAL_IRQ4 = (10), ///< External pin interrupt 4 + FSP_SIGNAL_IRQ5 = (11), ///< External pin interrupt 5 + FSP_SIGNAL_IRQ6 = (12), ///< External pin interrupt 6 + FSP_SIGNAL_IRQ7 = (13), ///< External pin interrupt 7 + FSP_SIGNAL_IRQ8 = (14), ///< External pin interrupt 8 + FSP_SIGNAL_IRQ9 = (15), ///< External pin interrupt 9 + FSP_SIGNAL_IRQ10 = (16), ///< External pin interrupt 10 + FSP_SIGNAL_IRQ11 = (17), ///< External pin interrupt 11 + FSP_SIGNAL_IRQ12 = (18), ///< External pin interrupt 12 + FSP_SIGNAL_IRQ13 = (19), ///< External pin interrupt 13 + FSP_SIGNAL_BSC_CMI = (20), ///< Refresh compare match interrupt + FSP_SIGNAL_DMAC0_INT0 = (21), ///< DMAC0 transfer completion 0 + FSP_SIGNAL_DMAC0_INT1 = (22), ///< DMAC0 transfer completion 1 + FSP_SIGNAL_DMAC0_INT2 = (23), ///< DMAC0 transfer completion 2 + FSP_SIGNAL_DMAC0_INT3 = (24), ///< DMAC0 transfer completion 3 + FSP_SIGNAL_DMAC0_INT4 = (25), ///< DMAC0 transfer completion 4 + FSP_SIGNAL_DMAC0_INT5 = (26), ///< DMAC0 transfer completion 5 + FSP_SIGNAL_DMAC0_INT6 = (27), ///< DMAC0 transfer completion 6 + FSP_SIGNAL_DMAC0_INT7 = (28), ///< DMAC0 transfer completion 7 + FSP_SIGNAL_DMAC1_INT0 = (37), ///< DMAC1 transfer completion 0 + FSP_SIGNAL_DMAC1_INT1 = (38), ///< DMAC1 transfer completion 1 + FSP_SIGNAL_DMAC1_INT2 = (39), ///< DMAC1 transfer completion 2 + FSP_SIGNAL_DMAC1_INT3 = (40), ///< DMAC1 transfer completion 3 + FSP_SIGNAL_DMAC1_INT4 = (41), ///< DMAC1 transfer completion 4 + FSP_SIGNAL_DMAC1_INT5 = (42), ///< DMAC1 transfer completion 5 + FSP_SIGNAL_DMAC1_INT6 = (43), ///< DMAC1 transfer completion 6 + FSP_SIGNAL_DMAC1_INT7 = (44), ///< DMAC1 transfer completion 7 + FSP_SIGNAL_CMT0_CMI = (53), ///< CMT0 Compare match + FSP_SIGNAL_CMT1_CMI = (54), ///< CMT1 Compare match + FSP_SIGNAL_CMT2_CMI = (55), ///< CMT2 Compare match + FSP_SIGNAL_CMT3_CMI = (56), ///< CMT3 Compare match + FSP_SIGNAL_CMT4_CMI = (57), ///< CMT4 Compare match + FSP_SIGNAL_CMT5_CMI = (58), ///< CMT5 Compare match + FSP_SIGNAL_CMTW0_CMWI = (59), ///< CMTW0 Compare match + FSP_SIGNAL_CMTW0_IC0I = (60), ///< CMTW0 Input capture of register 0 + FSP_SIGNAL_CMTW0_IC1I = (61), ///< CMTW0 Input capture of register 1 + FSP_SIGNAL_CMTW0_OC0I = (62), ///< CMTW0 Output compare of register 0 + FSP_SIGNAL_CMTW0_OC1I = (63), ///< CMTW0 Output compare of register 1 + FSP_SIGNAL_CMTW1_CMWI = (64), ///< CMTW1 Compare match + FSP_SIGNAL_CMTW1_IC0I = (65), ///< CMTW1 Input capture of register 0 + FSP_SIGNAL_CMTW1_IC1I = (66), ///< CMTW1 Input capture of register 1 + FSP_SIGNAL_CMTW1_OC0I = (67), ///< CMTW1 Output compare of register 0 + FSP_SIGNAL_CMTW1_OC1I = (68), ///< CMTW1 Output compare of register 1 + FSP_SIGNAL_TGIA0 = (69), ///< MTU0.TGRA input capture/compare match + FSP_SIGNAL_TGIB0 = (70), ///< MTU0.TGRB input capture/compare match + FSP_SIGNAL_TGIC0 = (71), ///< MTU0.TGRC input capture/compare match + FSP_SIGNAL_TGID0 = (72), ///< MTU0.TGRD input capture/compare match + FSP_SIGNAL_TCIV0 = (73), ///< MTU0.TCNT overflow + FSP_SIGNAL_TGIE0 = (74), ///< MTU0.TGRE compare match + FSP_SIGNAL_TGIF0 = (75), ///< MTU0.TGRF compare match + FSP_SIGNAL_TGIA1 = (76), ///< MTU1.TGRA input capture/compare match + FSP_SIGNAL_TGIB1 = (77), ///< MTU1.TGRB input capture/compare match + FSP_SIGNAL_TCIV1 = (78), ///< MTU1.TCNT overflow + FSP_SIGNAL_TCIU1 = (79), ///< MTU1.TCNT underflow + FSP_SIGNAL_TGIA2 = (80), ///< MTU2.TGRA input capture/compare match + FSP_SIGNAL_TGIB2 = (81), ///< MTU2.TGRB input capture/compare match + FSP_SIGNAL_TCIV2 = (82), ///< MTU2.TCNT overflow + FSP_SIGNAL_TCIU2 = (83), ///< MTU2.TCNT underflow + FSP_SIGNAL_TGIA3 = (84), ///< MTU3.TGRA input capture/compare match + FSP_SIGNAL_TGIB3 = (85), ///< MTU3.TGRB input capture/compare match + FSP_SIGNAL_TGIC3 = (86), ///< MTU3.TGRC input capture/compare match + FSP_SIGNAL_TGID3 = (87), ///< MTU3.TGRD input capture/compare match + FSP_SIGNAL_TCIV3 = (88), ///< MTU3.TCNT overflow + FSP_SIGNAL_TGIA4 = (89), ///< MTU4.TGRA input capture/compare match + FSP_SIGNAL_TGIB4 = (90), ///< MTU4.TGRB input capture/compare match + FSP_SIGNAL_TGIC4 = (91), ///< MTU4.TGRC input capture/compare match + FSP_SIGNAL_TGID4 = (92), ///< MTU4.TGRD input capture/compare match + FSP_SIGNAL_TCIV4 = (93), ///< MTU4.TCNT overflow/underflow + FSP_SIGNAL_TGIU5 = (94), ///< MTU5.TGRU input capture/compare match + FSP_SIGNAL_TGIV5 = (95), ///< MTU5.TGRV input capture/compare match + FSP_SIGNAL_TGIW5 = (96), ///< MTU5.TGRW input capture/compare match + FSP_SIGNAL_TGIA6 = (97), ///< MTU6.TGRA input capture/compare match + FSP_SIGNAL_TGIB6 = (98), ///< MTU6.TGRB input capture/compare match + FSP_SIGNAL_TGIC6 = (99), ///< MTU6.TGRC input capture/compare match + FSP_SIGNAL_TGID6 = (100), ///< MTU6.TGRD input capture/compare match + FSP_SIGNAL_TCIV6 = (101), ///< MTU6.TCNT overflow + FSP_SIGNAL_TGIA7 = (102), ///< MTU7.TGRA input capture/compare match + FSP_SIGNAL_TGIB7 = (103), ///< MTU7.TGRB input capture/compare match + FSP_SIGNAL_TGIC7 = (104), ///< MTU7.TGRC input capture/compare match + FSP_SIGNAL_TGID7 = (105), ///< MTU7.TGRD input capture/compare match + FSP_SIGNAL_TCIV7 = (106), ///< MTU7.TCNT overflow/underflow + FSP_SIGNAL_TGIA8 = (107), ///< MTU8.TGRA input capture/compare match + FSP_SIGNAL_TGIB8 = (108), ///< MTU8.TGRB input capture/compare match + FSP_SIGNAL_TGIC8 = (109), ///< MTU8.TGRC input capture/compare match + FSP_SIGNAL_TGID8 = (110), ///< MTU8.TGRD input capture/compare match + FSP_SIGNAL_TCIV8 = (111), ///< MTU8.TCNT overflow + FSP_SIGNAL_OEI1 = (112), ///< Output enable interrupt 1 + FSP_SIGNAL_OEI2 = (113), ///< Output enable interrupt 2 + FSP_SIGNAL_OEI3 = (114), ///< Output enable interrupt 3 + FSP_SIGNAL_OEI4 = (115), ///< Output enable interrupt 4 + FSP_SIGNAL_GPT0_CCMPA = (116), ///< GPT0 GTCCRA input capture/compare match + FSP_SIGNAL_GPT0_CCMPB = (117), ///< GPT0 GTCCRB input capture/compare match + FSP_SIGNAL_GPT0_CMPC = (118), ///< GPT0 GTCCRC compare match + FSP_SIGNAL_GPT0_CMPD = (119), ///< GPT0 GTCCRD compare match + FSP_SIGNAL_GPT0_CMPE = (120), ///< GPT0 GTCCRE compare match + FSP_SIGNAL_GPT0_CMPF = (121), ///< GPT0 GTCCRF compare match + FSP_SIGNAL_GPT0_OVF = (122), ///< GPT0 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT0_UDF = (123), ///< GPT0 GTCNT underflow + FSP_SIGNAL_GPT0_DTE = (124), ///< GPT0 Dead time error + FSP_SIGNAL_GPT1_CCMPA = (125), ///< GPT1 GTCCRA input capture/compare match + FSP_SIGNAL_GPT1_CCMPB = (126), ///< GPT1 GTCCRB input capture/compare match + FSP_SIGNAL_GPT1_CMPC = (127), ///< GPT1 GTCCRC compare match + FSP_SIGNAL_GPT1_CMPD = (128), ///< GPT1 GTCCRD compare match + FSP_SIGNAL_GPT1_CMPE = (129), ///< GPT1 GTCCRE compare match + FSP_SIGNAL_GPT1_CMPF = (130), ///< GPT1 GTCCRF compare match + FSP_SIGNAL_GPT1_OVF = (131), ///< GPT1 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT1_UDF = (132), ///< GPT1 GTCNT underflow + FSP_SIGNAL_GPT1_DTE = (133), ///< GPT1 Dead time error + FSP_SIGNAL_GPT2_CCMPA = (134), ///< GPT2 GTCCRA input capture/compare match + FSP_SIGNAL_GPT2_CCMPB = (135), ///< GPT2 GTCCRB input capture/compare match + FSP_SIGNAL_GPT2_CMPC = (136), ///< GPT2 GTCCRC compare match + FSP_SIGNAL_GPT2_CMPD = (137), ///< GPT2 GTCCRD compare match + FSP_SIGNAL_GPT2_CMPE = (138), ///< GPT2 GTCCRE compare match + FSP_SIGNAL_GPT2_CMPF = (139), ///< GPT2 GTCCRF compare match + FSP_SIGNAL_GPT2_OVF = (140), ///< GPT2 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT2_UDF = (141), ///< GPT2 GTCNT underflow + FSP_SIGNAL_GPT2_DTE = (142), ///< GPT2 Dead time error + FSP_SIGNAL_GPT3_CCMPA = (143), ///< GPT3 GTCCRA input capture/compare match + FSP_SIGNAL_GPT3_CCMPB = (144), ///< GPT3 GTCCRB input capture/compare match + FSP_SIGNAL_GPT3_CMPC = (145), ///< GPT3 GTCCRC compare match + FSP_SIGNAL_GPT3_CMPD = (146), ///< GPT3 GTCCRD compare match + FSP_SIGNAL_GPT3_CMPE = (147), ///< GPT3 GTCCRE compare match + FSP_SIGNAL_GPT3_CMPF = (148), ///< GPT3 GTCCRF compare match + FSP_SIGNAL_GPT3_OVF = (149), ///< GPT3 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT3_UDF = (150), ///< GPT3 GTCNT underflow + FSP_SIGNAL_GPT3_DTE = (151), ///< GPT3 Dead time error + FSP_SIGNAL_GPT4_CCMPA = (152), ///< GPT4 GTCCRA input capture/compare match + FSP_SIGNAL_GPT4_CCMPB = (153), ///< GPT4 GTCCRB input capture/compare match + FSP_SIGNAL_GPT4_CMPC = (154), ///< GPT4 GTCCRC compare match + FSP_SIGNAL_GPT4_CMPD = (155), ///< GPT4 GTCCRD compare match + FSP_SIGNAL_GPT4_CMPE = (156), ///< GPT4 GTCCRE compare match + FSP_SIGNAL_GPT4_CMPF = (157), ///< GPT4 GTCCRF compare match + FSP_SIGNAL_GPT4_OVF = (158), ///< GPT4 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT4_UDF = (159), ///< GPT4 GTCNT underflow + FSP_SIGNAL_GPT4_DTE = (160), ///< GPT4 Dead time error + FSP_SIGNAL_GPT5_CCMPA = (161), ///< GPT5 GTCCRA input capture/compare match + FSP_SIGNAL_GPT5_CCMPB = (162), ///< GPT5 GTCCRB input capture/compare match + FSP_SIGNAL_GPT5_CMPC = (163), ///< GPT5 GTCCRC compare match + FSP_SIGNAL_GPT5_CMPD = (164), ///< GPT5 GTCCRD compare match + FSP_SIGNAL_GPT5_CMPE = (165), ///< GPT5 GTCCRE compare match + FSP_SIGNAL_GPT5_CMPF = (166), ///< GPT5 GTCCRF compare match + FSP_SIGNAL_GPT5_OVF = (167), ///< GPT5 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT5_UDF = (168), ///< GPT5 GTCNT underflow + FSP_SIGNAL_GPT5_DTE = (169), ///< GPT5 Dead time error + FSP_SIGNAL_GPT6_CCMPA = (170), ///< GPT6 GTCCRA input capture/compare match + FSP_SIGNAL_GPT6_CCMPB = (171), ///< GPT6 GTCCRB input capture/compare match + FSP_SIGNAL_GPT6_CMPC = (172), ///< GPT6 GTCCRC compare match + FSP_SIGNAL_GPT6_CMPD = (173), ///< GPT6 GTCCRD compare match + FSP_SIGNAL_GPT6_CMPE = (174), ///< GPT6 GTCCRE compare match + FSP_SIGNAL_GPT6_CMPF = (175), ///< GPT6 GTCCRF compare match + FSP_SIGNAL_GPT6_OVF = (176), ///< GPT6 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT6_UDF = (177), ///< GPT6 GTCNT underflow + FSP_SIGNAL_GPT6_DTE = (178), ///< GPT6 Dead time error + FSP_SIGNAL_GPT7_CCMPA = (179), ///< GPT7 GTCCRA input capture/compare match + FSP_SIGNAL_GPT7_CCMPB = (180), ///< GPT7 GTCCRB input capture/compare match + FSP_SIGNAL_GPT7_CMPC = (181), ///< GPT7 GTCCRC compare match + FSP_SIGNAL_GPT7_CMPD = (182), ///< GPT7 GTCCRD compare match + FSP_SIGNAL_GPT7_CMPE = (183), ///< GPT7 GTCCRE compare match + FSP_SIGNAL_GPT7_CMPF = (184), ///< GPT7 GTCCRF compare match + FSP_SIGNAL_GPT7_OVF = (185), ///< GPT7 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT7_UDF = (186), ///< GPT7 GTCNT underflow + FSP_SIGNAL_GPT7_DTE = (187), ///< GPT7 Dead time error + FSP_SIGNAL_GPT8_CCMPA = (188), ///< GPT8 GTCCRA input capture/compare match + FSP_SIGNAL_GPT8_CCMPB = (189), ///< GPT8 GTCCRB input capture/compare match + FSP_SIGNAL_GPT8_CMPC = (190), ///< GPT8 GTCCRC compare match + FSP_SIGNAL_GPT8_CMPD = (191), ///< GPT8 GTCCRD compare match + FSP_SIGNAL_GPT8_CMPE = (192), ///< GPT8 GTCCRE compare match + FSP_SIGNAL_GPT8_CMPF = (193), ///< GPT8 GTCCRF compare match + FSP_SIGNAL_GPT8_OVF = (194), ///< GPT8 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT8_UDF = (195), ///< GPT8 GTCNT underflow + FSP_SIGNAL_GPT8_DTE = (196), ///< GPT8 Dead time error + FSP_SIGNAL_GPT9_CCMPA = (197), ///< GPT9 GTCCRA input capture/compare match + FSP_SIGNAL_GPT9_CCMPB = (198), ///< GPT9 GTCCRB input capture/compare match + FSP_SIGNAL_GPT9_CMPC = (199), ///< GPT9 GTCCRC compare match + FSP_SIGNAL_GPT9_CMPD = (200), ///< GPT9 GTCCRD compare match + FSP_SIGNAL_GPT9_CMPE = (201), ///< GPT9 GTCCRE compare match + FSP_SIGNAL_GPT9_CMPF = (202), ///< GPT9 GTCCRF compare match + FSP_SIGNAL_GPT9_OVF = (203), ///< GPT9 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT9_UDF = (204), ///< GPT9 GTCNT underflow + FSP_SIGNAL_GPT9_DTE = (205), ///< GPT9 Dead time error + FSP_SIGNAL_GPT10_CCMPA = (206), ///< GPT10 GTCCRA input capture/compare match + FSP_SIGNAL_GPT10_CCMPB = (207), ///< GPT10 GTCCRB input capture/compare match + FSP_SIGNAL_GPT10_CMPC = (208), ///< GPT10 GTCCRC compare match + FSP_SIGNAL_GPT10_CMPD = (209), ///< GPT10 GTCCRD compare match + FSP_SIGNAL_GPT10_CMPE = (210), ///< GPT10 GTCCRE compare match + FSP_SIGNAL_GPT10_CMPF = (211), ///< GPT10 GTCCRF compare match + FSP_SIGNAL_GPT10_OVF = (212), ///< GPT10 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT10_UDF = (213), ///< GPT10 GTCNT underflow + FSP_SIGNAL_GPT10_DTE = (214), ///< GPT10 Dead time error + FSP_SIGNAL_GPT11_CCMPA = (215), ///< GPT11 GTCCRA input capture/compare match + FSP_SIGNAL_GPT11_CCMPB = (216), ///< GPT11 GTCCRB input capture/compare match + FSP_SIGNAL_GPT11_CMPC = (217), ///< GPT11 GTCCRC compare match + FSP_SIGNAL_GPT11_CMPD = (218), ///< GPT11 GTCCRD compare match + FSP_SIGNAL_GPT11_CMPE = (219), ///< GPT11 GTCCRE compare match + FSP_SIGNAL_GPT11_CMPF = (220), ///< GPT11 GTCCRF compare match + FSP_SIGNAL_GPT11_OVF = (221), ///< GPT11 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT11_UDF = (222), ///< GPT11 GTCNT underflow + FSP_SIGNAL_GPT11_DTE = (223), ///< GPT11 Dead time error + FSP_SIGNAL_GPT12_CCMPA = (224), ///< GPT12 GTCCRA input capture/compare match + FSP_SIGNAL_GPT12_CCMPB = (225), ///< GPT12 GTCCRB input capture/compare match + FSP_SIGNAL_GPT12_CMPC = (226), ///< GPT12 GTCCRC compare match + FSP_SIGNAL_GPT12_CMPD = (227), ///< GPT12 GTCCRD compare match + FSP_SIGNAL_GPT12_CMPE = (228), ///< GPT12 GTCCRE compare match + FSP_SIGNAL_GPT12_CMPF = (229), ///< GPT12 GTCCRF compare match + FSP_SIGNAL_GPT12_OVF = (230), ///< GPT12 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT12_UDF = (231), ///< GPT12 GTCNT underflow + FSP_SIGNAL_GPT12_DTE = (232), ///< GPT12 Dead time error + FSP_SIGNAL_GPT13_CCMPA = (233), ///< GPT13 GTCCRA input capture/compare match + FSP_SIGNAL_GPT13_CCMPB = (234), ///< GPT13 GTCCRB input capture/compare match + FSP_SIGNAL_GPT13_CMPC = (235), ///< GPT13 GTCCRC compare match + FSP_SIGNAL_GPT13_CMPD = (236), ///< GPT13 GTCCRD compare match + FSP_SIGNAL_GPT13_CMPE = (237), ///< GPT13 GTCCRE compare match + FSP_SIGNAL_GPT13_CMPF = (238), ///< GPT13 GTCCRF compare match + FSP_SIGNAL_GPT13_OVF = (239), ///< GPT13 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT13_UDF = (240), ///< GPT13 GTCNT underflow + FSP_SIGNAL_GPT13_DTE = (241), ///< GPT13 Dead time error + FSP_SIGNAL_POEG0_GROUP0 = (242), ///< POEG group A interrupt for channels in LLPP + FSP_SIGNAL_POEG0_GROUP1 = (243), ///< POEG group B interrupt for channels in LLPP + FSP_SIGNAL_POEG0_GROUP2 = (244), ///< POEG group C interrupt for channels in LLPP + FSP_SIGNAL_POEG0_GROUP3 = (245), ///< POEG group D interrupt for channels in LLPP + FSP_SIGNAL_POEG1_GROUP0 = (246), ///< POEG group A interrupt for channels in NONSAFETY + FSP_SIGNAL_POEG1_GROUP1 = (247), ///< POEG group B interrupt for channels in NONSAFETY + FSP_SIGNAL_POEG1_GROUP2 = (248), ///< POEG group C interrupt for channels in NONSAFETY + FSP_SIGNAL_POEG1_GROUP3 = (249), ///< POEG group D interrupt for channels in NONSAFETY + FSP_SIGNAL_GMAC_LPI = (250), ///< GMAC1 energy efficient + FSP_SIGNAL_GMAC_PMT = (251), ///< GMAC1 power management + FSP_SIGNAL_GMAC_SBD = (252), ///< GMAC1 general interrupt + FSP_SIGNAL_ETHSW_INTR = (253), ///< Ethernet Switch interrupt + FSP_SIGNAL_ETHSW_DLR = (254), ///< Ethernet Switch DLR interrupt + FSP_SIGNAL_ETHSW_PRP = (255), ///< Ethernet Switch PRP interrupt + FSP_SIGNAL_ETHSW_IHUB = (256), ///< Ethernet Switch Integrated Hub interrupt + FSP_SIGNAL_ETHSW_PTRN0 = (257), ///< Ethernet Switch RX Pattern Matcher interrupt 0 + FSP_SIGNAL_ETHSW_PTRN1 = (258), ///< Ethernet Switch RX Pattern Matcher interrupt 1 + FSP_SIGNAL_ETHSW_PTRN2 = (259), ///< Ethernet Switch RX Pattern Matcher interrupt 2 + FSP_SIGNAL_ETHSW_PTRN3 = (260), ///< Ethernet Switch RX Pattern Matcher interrupt 3 + FSP_SIGNAL_ETHSW_PTRN4 = (261), ///< Ethernet Switch RX Pattern Matcher interrupt 4 + FSP_SIGNAL_ETHSW_PTRN5 = (262), ///< Ethernet Switch RX Pattern Matcher interrupt 5 + FSP_SIGNAL_ETHSW_PTRN6 = (263), ///< Ethernet Switch RX Pattern Matcher interrupt 6 + FSP_SIGNAL_ETHSW_PTRN7 = (264), ///< Ethernet Switch RX Pattern Matcher interrupt 7 + FSP_SIGNAL_ETHSW_PTRN8 = (265), ///< Ethernet Switch RX Pattern Matcher interrupt 8 + FSP_SIGNAL_ETHSW_PTRN9 = (266), ///< Ethernet Switch RX Pattern Matcher interrupt 9 + FSP_SIGNAL_ETHSW_PTRN10 = (267), ///< Ethernet Switch RX Pattern Matcher interrupt 10 + FSP_SIGNAL_ETHSW_PTRN11 = (268), ///< Ethernet Switch RX Pattern Matcher interrupt 11 + FSP_SIGNAL_ETHSW_PTPOUT0 = (269), ///< Ethernet switch timer pulse output 0 + FSP_SIGNAL_ETHSW_PTPOUT1 = (270), ///< Ethernet switch timer pulse output 1 + FSP_SIGNAL_ETHSW_PTPOUT2 = (271), ///< Ethernet switch timer pulse output 2 + FSP_SIGNAL_ETHSW_PTPOUT3 = (272), ///< Ethernet switch timer pulse output 3 + FSP_SIGNAL_ETHSW_TDMAOUT0 = (273), ///< Ethernet Switch TDMA timer output 0 + FSP_SIGNAL_ETHSW_TDMAOUT1 = (274), ///< Ethernet Switch TDMA timer output 1 + FSP_SIGNAL_ETHSW_TDMAOUT2 = (275), ///< Ethernet Switch TDMA timer output 2 + FSP_SIGNAL_ETHSW_TDMAOUT3 = (276), ///< Ethernet Switch TDMA timer output 3 + FSP_SIGNAL_ESC_SYNC0 = (277), ///< EtherCAT Sync0 interrupt + FSP_SIGNAL_ESC_SYNC1 = (278), ///< EtherCAT Sync1 interrupt + FSP_SIGNAL_ESC_CAT = (279), ///< EtherCAT interrupt + FSP_SIGNAL_ESC_SOF = (280), ///< EtherCAT SOF interrupt + FSP_SIGNAL_ESC_EOF = (281), ///< EtherCAT EOF interrupt + FSP_SIGNAL_ESC_WDT = (282), ///< EtherCAT WDT interrupt + FSP_SIGNAL_ESC_RST = (283), ///< EtherCAT RESET interrupt + FSP_SIGNAL_USB_HI = (284), ///< USB (Host) interrupt + FSP_SIGNAL_USB_FI = (285), ///< USB (Function) interrupt + FSP_SIGNAL_USB_FDMA0 = (286), ///< USB (Function) DMA 0 transmit completion + FSP_SIGNAL_USB_FDMA1 = (287), ///< USB (Function) DMA 1 transmit completion + FSP_SIGNAL_SCI0_ERI = (288), ///< SCI0 Receive error + FSP_SIGNAL_SCI0_RXI = (289), ///< SCI0 Receive data full + FSP_SIGNAL_SCI0_TXI = (290), ///< SCI0 Transmit data empty + FSP_SIGNAL_SCI0_TEI = (291), ///< SCI0 Transmit end + FSP_SIGNAL_SCI1_ERI = (292), ///< SCI1 Receive error + FSP_SIGNAL_SCI1_RXI = (293), ///< SCI1 Receive data full + FSP_SIGNAL_SCI1_TXI = (294), ///< SCI1 Transmit data empty + FSP_SIGNAL_SCI1_TEI = (295), ///< SCI1 Transmit end + FSP_SIGNAL_SCI2_ERI = (296), ///< SCI2 Receive error + FSP_SIGNAL_SCI2_RXI = (297), ///< SCI2 Receive data full + FSP_SIGNAL_SCI2_TXI = (298), ///< SCI2 Transmit data empty + FSP_SIGNAL_SCI2_TEI = (299), ///< SCI2 Transmit end + FSP_SIGNAL_SCI3_ERI = (300), ///< SCI3 Receive error + FSP_SIGNAL_SCI3_RXI = (301), ///< SCI3 Receive data full + FSP_SIGNAL_SCI3_TXI = (302), ///< SCI3 Transmit data empty + FSP_SIGNAL_SCI3_TEI = (303), ///< SCI3 Transmit end + FSP_SIGNAL_SCI4_ERI = (304), ///< SCI4 Receive error + FSP_SIGNAL_SCI4_RXI = (305), ///< SCI4 Receive data full + FSP_SIGNAL_SCI4_TXI = (306), ///< SCI4 Transmit data empty + FSP_SIGNAL_SCI4_TEI = (307), ///< SCI4 Transmit end + FSP_SIGNAL_IIC0_EEI = (308), ///< IIC0 Transfer error or event generation + FSP_SIGNAL_IIC0_RXI = (309), ///< IIC0 Receive data full + FSP_SIGNAL_IIC0_TXI = (310), ///< IIC0 Transmit data empty + FSP_SIGNAL_IIC0_TEI = (311), ///< IIC0 Transmit end + FSP_SIGNAL_IIC1_EEI = (312), ///< IIC1 Transfer error or event generation + FSP_SIGNAL_IIC1_RXI = (313), ///< IIC1 Receive data full + FSP_SIGNAL_IIC1_TXI = (314), ///< IIC1 Transmit data empty + FSP_SIGNAL_IIC1_TEI = (315), ///< IIC1 Transmit end + FSP_SIGNAL_CAN_RXF = (316), ///< CANFD RX FIFO interrupt + FSP_SIGNAL_CAN_GLERR = (317), ///< CANFD Global error interrupt + FSP_SIGNAL_CAN0_TX = (318), ///< CAFND0 Channel TX interrupt + FSP_SIGNAL_CAN0_CHERR = (319), ///< CAFND0 Channel CAN error interrupt + FSP_SIGNAL_CAN0_COMFRX = (320), ///< CAFND0 Common RX FIFO or TXQ interrupt + FSP_SIGNAL_CAN1_TX = (321), ///< CAFND1 Channel TX interrupt + FSP_SIGNAL_CAN1_CHERR = (322), ///< CAFND1 Channel CAN error interrupt + FSP_SIGNAL_CAN1_COMFRX = (323), ///< CAFND1 Common RX FIFO or TXQ interrupt + FSP_SIGNAL_SPI0_SPRI = (324), ///< SPI0 Reception buffer full + FSP_SIGNAL_SPI0_SPTI = (325), ///< SPI0 Transmit buffer empty + FSP_SIGNAL_SPI0_SPII = (326), ///< SPI0 SPI idle + FSP_SIGNAL_SPI0_SPEI = (327), ///< SPI0 errors + FSP_SIGNAL_SPI0_SPCEND = (328), ///< SPI0 Communication complete + FSP_SIGNAL_SPI1_SPRI = (329), ///< SPI1 Reception buffer full + FSP_SIGNAL_SPI1_SPTI = (330), ///< SPI1 Transmit buffer empty + FSP_SIGNAL_SPI1_SPII = (331), ///< SPI1 SPI idle + FSP_SIGNAL_SPI1_SPEI = (332), ///< SPI1 errors + FSP_SIGNAL_SPI1_SPCEND = (333), ///< SPI1 Communication complete + FSP_SIGNAL_SPI2_SPRI = (334), ///< SPI2 Reception buffer full + FSP_SIGNAL_SPI2_SPTI = (335), ///< SPI2 Transmit buffer empty + FSP_SIGNAL_SPI2_SPII = (336), ///< SPI2 SPI idle + FSP_SIGNAL_SPI2_SPEI = (337), ///< SPI2 errors + FSP_SIGNAL_SPI2_SPCEND = (338), ///< SPI2 Communication complete + FSP_SIGNAL_XSPI0_INT = (339), ///< xSPI0 Interrupt + FSP_SIGNAL_XSPI0_INTERR = (340), ///< xSPI0 Error interrupt + FSP_SIGNAL_XSPI1_INT = (341), ///< xSPI1 Interrupt + FSP_SIGNAL_XSPI1_INTERR = (342), ///< xSPI1 Error interrupt + FSP_SIGNAL_DSMIF0_CDRUI = (343), ///< DSMIF0 current data register update (ORed ch0 to ch2) + FSP_SIGNAL_DSMIF1_CDRUI = (344), ///< DSMIF1 current data register update (ORed ch3 to ch5) + FSP_SIGNAL_ADC0_ADI = (345), ///< ADC0 A/D scan end interrupt + FSP_SIGNAL_ADC0_GBADI = (346), ///< ADC0 A/D scan end interrupt for Group B + FSP_SIGNAL_ADC0_GCADI = (347), ///< ADC0 A/D scan end interrupt for Group C + FSP_SIGNAL_ADC0_CMPAI = (348), ///< ADC0 Window A compare match + FSP_SIGNAL_ADC0_CMPBI = (349), ///< ADC0 Window B compare match + FSP_SIGNAL_ADC1_ADI = (350), ///< ADC1 A/D scan end interrupt + FSP_SIGNAL_ADC1_GBADI = (351), ///< ADC1 A/D scan end interrupt for Group B + FSP_SIGNAL_ADC1_GCADI = (352), ///< ADC1 A/D scan end interrupt for Group C + FSP_SIGNAL_ADC1_CMPAI = (353), ///< ADC1 Window A compare match + FSP_SIGNAL_ADC1_CMPBI = (354), ///< ADC1 Window B compare match + FSP_SIGNAL_MBX_INT0 = (372), ///< Mailbox (Host CPU to Cortex-R52) interrupt 0 + FSP_SIGNAL_MBX_INT1 = (373), ///< Mailbox (Host CPU to Cortex-R52) interrupt 1 + FSP_SIGNAL_MBX_INT2 = (374), ///< Mailbox (Host CPU to Cortex-R52) interrupt 2 + FSP_SIGNAL_MBX_INT3 = (375), ///< Mailbox (Host CPU to Cortex-R52) interrupt 3 + FSP_SIGNAL_CPU0_ERR0 = (384), ///< Cortex-R52 CPU0 error event 0 + FSP_SIGNAL_CPU0_ERR1 = (385), ///< Cortex-R52 CPU0 error event 1 + FSP_SIGNAL_PERI_ERR0 = (388), ///< Peripherals error event 0 + FSP_SIGNAL_PERI_ERR1 = (389), ///< Peripherals error event 1 + FSP_SIGNAL_SHOST_INT = (390), ///< SHOSTIF interrupt + FSP_SIGNAL_PHOST_INT = (391), ///< PHOSTIF interrupt + FSP_SIGNAL_INTCPU6 = (392), ///< Software interrupt 6 + FSP_SIGNAL_INTCPU7 = (393), ///< Software interrupt 7 + FSP_SIGNAL_IRQ14 = (394), ///< External pin interrupt 14 + FSP_SIGNAL_IRQ15 = (395), ///< External pin interrupt 15 + FSP_SIGNAL_GPT14_CCMPA = (396), ///< GPT14 GTCCRA input capture/compare match + FSP_SIGNAL_GPT14_CCMPB = (397), ///< GPT14 GTCCRB input capture/compare match + FSP_SIGNAL_GPT14_CMPC = (398), ///< GPT14 GTCCRC compare match + FSP_SIGNAL_GPT14_CMPD = (399), ///< GPT14 GTCCRD compare match + FSP_SIGNAL_GPT14_CMPE = (400), ///< GPT14 GTCCRE compare match + FSP_SIGNAL_GPT14_CMPF = (401), ///< GPT14 GTCCRF compare match + FSP_SIGNAL_GPT14_OVF = (402), ///< GPT14 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT14_UDF = (403), ///< GPT14 GTCNT underflow + FSP_SIGNAL_GPT15_CCMPA = (404), ///< GPT15 GTCCRA input capture/compare match + FSP_SIGNAL_GPT15_CCMPB = (405), ///< GPT15 GTCCRB input capture/compare match + FSP_SIGNAL_GPT15_CMPC = (406), ///< GPT15 GTCCRC compare match + FSP_SIGNAL_GPT15_CMPD = (407), ///< GPT15 GTCCRD compare match + FSP_SIGNAL_GPT15_CMPE = (408), ///< GPT15 GTCCRE compare match + FSP_SIGNAL_GPT15_CMPF = (409), ///< GPT15 GTCCRF compare match + FSP_SIGNAL_GPT15_OVF = (410), ///< GPT15 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT15_UDF = (411), ///< GPT15 GTCNT underflow + FSP_SIGNAL_GPT16_CCMPA = (412), ///< GPT16 GTCCRA input capture/compare match + FSP_SIGNAL_GPT16_CCMPB = (413), ///< GPT16 GTCCRB input capture/compare match + FSP_SIGNAL_GPT16_CMPC = (414), ///< GPT16 GTCCRC compare match + FSP_SIGNAL_GPT16_CMPD = (415), ///< GPT16 GTCCRD compare match + FSP_SIGNAL_GPT16_CMPE = (416), ///< GPT16 GTCCRE compare match + FSP_SIGNAL_GPT16_CMPF = (417), ///< GPT16 GTCCRF compare match + FSP_SIGNAL_GPT16_OVF = (418), ///< GPT16 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT16_UDF = (419), ///< GPT16 GTCNT underflow + FSP_SIGNAL_GPT17_CCMPA = (420), ///< GPT17 GTCCRA input capture/compare match + FSP_SIGNAL_GPT17_CCMPB = (421), ///< GPT17 GTCCRB input capture/compare match + FSP_SIGNAL_GPT17_CMPC = (422), ///< GPT17 GTCCRC compare match + FSP_SIGNAL_GPT17_CMPD = (423), ///< GPT17 GTCCRD compare match + FSP_SIGNAL_GPT17_CMPE = (424), ///< GPT17 GTCCRE compare match + FSP_SIGNAL_GPT17_CMPF = (425), ///< GPT17 GTCCRF compare match + FSP_SIGNAL_GPT17_OVF = (426), ///< GPT17 GTCNT overflow (GTPR compare match) + FSP_SIGNAL_GPT17_UDF = (427), ///< GPT17 GTCNT underflow + FSP_SIGNAL_POEG2_GROUP0 = (428), ///< POEG group A interrupt for channels in SAFETY + FSP_SIGNAL_POEG2_GROUP1 = (429), ///< POEG group B interrupt for channels in SAFETY + FSP_SIGNAL_POEG2_GROUP2 = (430), ///< POEG group C interrupt for channels in SAFETY + FSP_SIGNAL_POEG2_GROUP3 = (431), ///< POEG group D interrupt for channels in SAFETY + FSP_SIGNAL_RTC_ALM = (432), ///< Alarm interrupt + FSP_SIGNAL_RTC_1S = (433), ///< 1 second interrupt + FSP_SIGNAL_RTC_PRD = (434), ///< Fixed interval interrupt + FSP_SIGNAL_SCI5_ERI = (435), ///< SCI5 Receive error + FSP_SIGNAL_SCI5_RXI = (436), ///< SCI5 Receive data full + FSP_SIGNAL_SCI5_TXI = (437), ///< SCI5 Transmit data empty + FSP_SIGNAL_SCI5_TEI = (438), ///< SCI5 Transmit end + FSP_SIGNAL_IIC2_EEI = (439), ///< IIC2 Transfer error or event generation + FSP_SIGNAL_IIC2_RXI = (440), ///< IIC2 Receive data full + FSP_SIGNAL_IIC2_TXI = (441), ///< IIC2 Transmit data empty + FSP_SIGNAL_IIC2_TEI = (442), ///< IIC2 Transmit end + FSP_SIGNAL_SPI3_SPRI = (443), ///< SPI3 Reception buffer full + FSP_SIGNAL_SPI3_SPTI = (444), ///< SPI3 Transmit buffer empty + FSP_SIGNAL_SPI3_SPII = (445), ///< SPI3 SPI idle + FSP_SIGNAL_SPI3_SPEI = (446), ///< SPI3 errors + FSP_SIGNAL_SPI3_SPCEND = (447), ///< SPI3 Communication complete + FSP_SIGNAL_DREQ = (448), ///< External DMA request + FSP_SIGNAL_CAN_RF_DMAREQ0 = (449), ///< CAFND RX FIFO 0 DMA request + FSP_SIGNAL_CAN_RF_DMAREQ1 = (450), ///< CAFND RX FIFO 1 DMA request + FSP_SIGNAL_CAN_RF_DMAREQ2 = (451), ///< CAFND RX FIFO 2 DMA request + FSP_SIGNAL_CAN_RF_DMAREQ3 = (452), ///< CAFND RX FIFO 3 DMA request + FSP_SIGNAL_CAN_RF_DMAREQ4 = (453), ///< CAFND RX FIFO 4 DMA request + FSP_SIGNAL_CAN_RF_DMAREQ5 = (454), ///< CAFND RX FIFO 5 DMA request + FSP_SIGNAL_CAN_RF_DMAREQ6 = (455), ///< CAFND RX FIFO 6 DMA request + FSP_SIGNAL_CAN_RF_DMAREQ7 = (456), ///< CAFND RX FIFO 7 DMA request + FSP_SIGNAL_CAN0_CF_DMAREQ = (457), ///< CAFND0 First common FIFO DMA request + FSP_SIGNAL_CAN1_CF_DMAREQ = (458), ///< CAFND1 First common FIFO DMA request + FSP_SIGNAL_ADC0_WCMPM = (459), ///< ADC0 compare match + FSP_SIGNAL_ADC0_WCMPUM = (460), ///< ADC0 compare mismatch + FSP_SIGNAL_ADC1_WCMPM = (461), ///< ADC1 compare match + FSP_SIGNAL_ADC1_WCMPUM = (462), ///< ADC1 compare mismatch + FSP_SIGNAL_TCIV4_OF = (463), ///< MTU4.TCNT overflow + FSP_SIGNAL_TCIV4_UF = (464), ///< MTU4.TCNT underflow + FSP_SIGNAL_TCIV7_OF = (465), ///< MTU7.TCNT overflow + FSP_SIGNAL_TCIV7_UF = (466), ///< MTU7.TCNT underflow + FSP_SIGNAL_IOPORT_GROUP1 = (467), ///< Input edge detection of input port group 1 + FSP_SIGNAL_IOPORT_GROUP2 = (468), ///< Input edge detection of input port group 2 + FSP_SIGNAL_IOPORT_SINGLE0 = (469), ///< Input edge detection of single input port 0 + FSP_SIGNAL_IOPORT_SINGLE1 = (470), ///< Input edge detection of single input port 1 + FSP_SIGNAL_IOPORT_SINGLE2 = (471), ///< Input edge detection of single input port 2 + FSP_SIGNAL_IOPORT_SINGLE3 = (472), ///< Input edge detection of single input port 3 + FSP_SIGNAL_GPT0_ADTRGA = (473), ///< GPT0 GTADTRA compare match + FSP_SIGNAL_GPT0_ADTRGB = (474), ///< GPT0 GTADTRB compare match + FSP_SIGNAL_GPT1_ADTRGA = (475), ///< GPT1 GTADTRA compare match + FSP_SIGNAL_GPT1_ADTRGB = (476), ///< GPT1 GTADTRB compare match + FSP_SIGNAL_GPT2_ADTRGA = (477), ///< GPT2 GTADTRA compare match + FSP_SIGNAL_GPT2_ADTRGB = (478), ///< GPT2 GTADTRB compare match + FSP_SIGNAL_GPT3_ADTRGA = (479), ///< GPT3 GTADTRA compare match + FSP_SIGNAL_GPT3_ADTRGB = (480), ///< GPT3 GTADTRB compare match + FSP_SIGNAL_GPT4_ADTRGA = (481), ///< GPT4 GTADTRA compare match + FSP_SIGNAL_GPT4_ADTRGB = (482), ///< GPT4 GTADTRB compare match + FSP_SIGNAL_GPT5_ADTRGA = (483), ///< GPT5 GTADTRA compare match + FSP_SIGNAL_GPT5_ADTRGB = (484), ///< GPT5 GTADTRB compare match + FSP_SIGNAL_GPT6_ADTRGA = (485), ///< GPT6 GTADTRA compare match + FSP_SIGNAL_GPT6_ADTRGB = (486), ///< GPT6 GTADTRB compare match + FSP_SIGNAL_GPT7_ADTRGA = (487), ///< GPT7 GTADTRA compare match + FSP_SIGNAL_GPT7_ADTRGB = (488), ///< GPT7 GTADTRB compare match + FSP_SIGNAL_GPT8_ADTRGA = (489), ///< GPT8 GTADTRA compare match + FSP_SIGNAL_GPT8_ADTRGB = (490), ///< GPT8 GTADTRB compare match + FSP_SIGNAL_GPT9_ADTRGA = (491), ///< GPT9 GTADTRA compare match + FSP_SIGNAL_GPT9_ADTRGB = (492), ///< GPT9 GTADTRB compare match + FSP_SIGNAL_GPT10_ADTRGA = (493), ///< GPT10 GTADTRA compare match + FSP_SIGNAL_GPT10_ADTRGB = (494), ///< GPT10 GTADTRB compare match + FSP_SIGNAL_GPT11_ADTRGA = (495), ///< GPT11 GTADTRA compare match + FSP_SIGNAL_GPT11_ADTRGB = (496), ///< GPT11 GTADTRB compare match + FSP_SIGNAL_GPT12_ADTRGA = (497), ///< GPT12 GTADTRA compare match + FSP_SIGNAL_GPT12_ADTRGB = (498), ///< GPT12 GTADTRB compare match + FSP_SIGNAL_GPT13_ADTRGA = (499), ///< GPT13 GTADTRA compare match + FSP_SIGNAL_GPT13_ADTRGB = (500), ///< GPT13 GTADTRB compare match + FSP_SIGNAL_NONE +} fsp_signal_t; + +typedef void (* fsp_vector_t)(void); + +/** @} (end addtogroup BSP_MCU) */ + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_version.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_version.h new file mode 100644 index 00000000000..274f97a19cf --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/fsp_version.h @@ -0,0 +1,80 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef FSP_VERSION_H +#define FSP_VERSION_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Includes board and MCU related header files. */ +#include "bsp_api.h" + +/*******************************************************************************************************************//** + * @addtogroup RENESAS_COMMON + * @{ + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** FSP pack major version. */ +#define FSP_VERSION_MAJOR (2U) + +/** FSP pack minor version. */ +#define FSP_VERSION_MINOR (0U) + +/** FSP pack patch version. */ +#define FSP_VERSION_PATCH (0U) + +/** FSP pack version build number (currently unused). */ +#define FSP_VERSION_BUILD (0U) + +/** Public FSP version name. */ +#define FSP_VERSION_STRING ("2.0.0") + +/** Unique FSP version ID. */ +#define FSP_VERSION_BUILD_STRING ("Built with RZ/N Flexible Software Package version 2.0.0") + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** FSP Pack version structure */ +typedef union st_fsp_pack_version +{ + /** Version id */ + uint32_t version_id; + + /** Code version parameters, little endian order. */ + struct version_id_b_s + { + uint8_t build; ///< Build version of FSP Pack + uint8_t patch; ///< Patch version of FSP Pack + uint8_t minor; ///< Minor version of FSP Pack + uint8_t major; ///< Major version of FSP Pack + } version_id_b; +} fsp_pack_version_t; + +/** @} */ + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_ioport.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_ioport.h new file mode 100644 index 00000000000..b9f4e1b93e3 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_ioport.h @@ -0,0 +1,212 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup IOPORT + * @{ + **********************************************************************************************************************/ + +#ifndef R_IOPORT_H +#define R_IOPORT_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +#include "r_ioport_api.h" +#include "r_ioport_cfg.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define IOPORT_SINGLE_PORT_NUM (4) +#define IOPORT_PORT_GROUP_NUM (2) +#define IOPORT_PORT_GROUP_1 (0) +#define IOPORT_PORT_GROUP_2 (1) +#define IOPORT_SINGLE_PORT_0 (0) +#define IOPORT_SINGLE_PORT_1 (1) +#define IOPORT_SINGLE_PORT_2 (2) +#define IOPORT_SINGLE_PORT_3 (3) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Pin selection for port group + * @note Event link must be configured by the ELC + */ +typedef enum e_ioport_event_pin_selection +{ + IOPORT_EVENT_PIN_SELECTION_NONE = 0x00, ///< No pin selection for port group + IOPORT_EVENT_PIN_SELECTION_PIN_0 = 0x01, ///< Select pin 0 to port group + IOPORT_EVENT_PIN_SELECTION_PIN_1 = 0x02, ///< Select pin 1 to port group + IOPORT_EVENT_PIN_SELECTION_PIN_2 = 0x04, ///< Select pin 2 to port group + IOPORT_EVENT_PIN_SELECTION_PIN_3 = 0x08, ///< Select pin 3 to port group + IOPORT_EVENT_PIN_SELECTION_PIN_4 = 0x10, ///< Select pin 4 to port group + IOPORT_EVENT_PIN_SELECTION_PIN_5 = 0x20, ///< Select pin 5 to port group + IOPORT_EVENT_PIN_SELECTION_PIN_6 = 0x40, ///< Select pin 6 to port group + IOPORT_EVENT_PIN_SELECTION_PIN_7 = 0x80, ///< Select pin 7 to port group +} ioport_event_pin_selection_t; + +/** Port group operation + * @note Event link must be configured by the ELC + */ +typedef enum e_ioport_event_output_operation +{ + IOPORT_EVENT_OUTPUT_OPERATION_LOW = 0x0, ///< Set Low output to output operation + IOPORT_EVENT_OUTPUT_OPERATION_HIGH = 0x1, ///< Set High output to output operation + IOPORT_EVENT_OUTPUT_OPERATION_TOGGLE = 0x2, ///< Set toggle output to output operation + IOPORT_EVENT_OUTPUT_OPERATION_BUFFER = 0x3, ///< Set buffer value output to output operation +} ioport_event_output_operation_t; + +/** Input port group event control + * @note Event link must be configured by the ELC + */ +typedef enum e_ioport_event_control +{ + IOPORT_EVENT_CONTROL_DISABLE = 0x0, ///< Disable function related with event link + IOPORT_EVENT_CONTROL_ENABLE = 0x1, ///< Enable function related with event link +} ioport_event_control_t; + +/** Single port event direction + * @note Event link must be configured by the ELC + */ +typedef enum e_ioport_event_direction +{ + IOPORT_EVENT_DIRECTION_OUTPUT = 0x0, ///< Set output direction to single port + IOPORT_EVENT_DIRECTION_INPUT = 0x1, ///< Set input direction to single port +} ioport_event_direction_t; + +/** Input event edge detection + * @note Event link must be configured by the ELC + */ +typedef enum e_ioport_event_detection +{ + IOPORT_EVENT_DETECTION_RISING_EDGE = 0x0, ///< Set rising edge to event detection for input event + IOPORT_EVENT_DETECTION_FALLING_EDGE = 0x1, ///< Set falling edge to event detection for input event + IOPORT_EVENT_DETECTION_BOTH_EGDE = 0x2, ///< Set both edges to event detection for input event +} ioport_event_detection_t; + +/** Initial value for buffer register + * @note Event link must be configured by the ELC + */ +typedef enum e_ioport_event_initial_buffer_value +{ + IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW = 0U, ///< Set low input to initial value of buffer register for input port group + IOPORT_EVENT_INITIAL_BUFFER_VALUE_HIGH = 1U, ///< Set high input to initial value of buffer register for input port group +} ioport_event_initial_buffer_value_t; + +/** Single port configuration + * @note Event link must be configured by the ELC + */ +typedef struct st_ioport_event_single +{ + ioport_event_control_t event_control; ///< Event link control for single port + ioport_event_direction_t direction; ///< Event direction for single port + uint16_t port_num; ///< Port number specified to single port + ioport_event_output_operation_t operation; ///< Single port operation select + ioport_event_detection_t edge_detection; ///< Edge detection select +} ioport_event_single_t; + +/** Output port group configuration + * @note Event link must be configured by the ELC + */ +typedef struct st_ioport_event_group_output +{ + uint8_t pin_select; ///< Port number specified to output port group + ioport_event_output_operation_t operation; ///< Port group operation select +} ioport_event_group_output_t; + +/** Input port group configuration + * @note Event link must be configured by the ELC + */ +typedef struct st_ioport_event_group_input +{ + ioport_event_control_t event_control; ///< Event link control for input port group + ioport_event_detection_t edge_detection; ///< Edge detection select + ioport_event_control_t overwrite_control; ///< Buffer register overwrite control + uint8_t pin_select; ///< Port number specified to input port group + uint8_t buffer_init_value; ///< Buffer register initial value +} ioport_event_group_input_t; + +/** IOPORT extended configuration for event link function + * @note Event link must be configured by the ELC + */ +typedef struct st_ioport_extend_cfg +{ + ioport_event_group_output_t port_group_output_cfg[IOPORT_PORT_GROUP_NUM]; ///< Output port group configuration + ioport_event_group_input_t port_group_input_cfg[IOPORT_PORT_GROUP_NUM]; ///< Input port group configuration + ioport_event_single_t single_port_cfg[IOPORT_SINGLE_PORT_NUM]; ///< Single input port configuration +} ioport_extend_cfg_t; + +/** IOPORT private control block. DO NOT MODIFY. Initialization occurs when R_IOPORT_Open() is called. */ +typedef struct st_ioport_instance_ctrl +{ + uint32_t open; // Whether or not ioport is open + void const * p_context; // Pointer to context to be passed into callback + ioport_cfg_t const * p_cfg; // Pointer to the configuration block +} ioport_instance_ctrl_t; + +/********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/** @cond INC_HEADER_DEFS_SEC */ +/** Filled in Interface API structure for this Instance. */ +extern const ioport_api_t g_ioport_on_ioport; + +/** @endcond */ + +/*********************************************************************************************************************** + * Public APIs + **********************************************************************************************************************/ + +fsp_err_t R_IOPORT_Open(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); +fsp_err_t R_IOPORT_Close(ioport_ctrl_t * const p_ctrl); +fsp_err_t R_IOPORT_PinsCfg(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); +fsp_err_t R_IOPORT_PinCfg(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg); +fsp_err_t R_IOPORT_PinEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event); +fsp_err_t R_IOPORT_PinEventOutputWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value); +fsp_err_t R_IOPORT_PinRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value); +fsp_err_t R_IOPORT_PinWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level); +fsp_err_t R_IOPORT_PortDirectionSet(ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t direction_values, + ioport_size_t mask); +fsp_err_t R_IOPORT_PortEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data); +fsp_err_t R_IOPORT_PortEventOutputWrite(ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t event_data, + ioport_size_t mask_value); +fsp_err_t R_IOPORT_PortRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value); +fsp_err_t R_IOPORT_PortWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask); + +/*******************************************************************************************************************//** + * @} (end defgroup IOPORT) + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif // R_IOPORT_H diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_sci_uart.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_sci_uart.h new file mode 100644 index 00000000000..fd403941112 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/inc/instances/r_sci_uart.h @@ -0,0 +1,246 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef R_SCI_UART_H +#define R_SCI_UART_H + +/*******************************************************************************************************************//** + * @addtogroup SCI_UART + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "r_uart_api.h" +#include "r_sci_uart_cfg.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Enumeration for SCI clock source */ +typedef enum e_sci_uart_clock +{ + SCI_UART_CLOCK_INT, ///< Use internal clock for baud generation + SCI_UART_CLOCK_INT_WITH_BAUDRATE_OUTPUT, ///< Use internal clock for baud generation and output on SCK + SCI_UART_CLOCK_EXT8X, ///< Use external clock 8x baud rate + SCI_UART_CLOCK_EXT16X ///< Use external clock 16x baud rate +} sci_uart_clock_t; + +/** UART flow control mode definition */ +typedef enum e_sci_uart_flow_control +{ + SCI_UART_FLOW_CONTROL_RTS = 0U, ///< Use CTSn_RTSn pin for RTS + SCI_UART_FLOW_CONTROL_CTS = 1U, ///< Use CTSn_RTSn pin for CTS + SCI_UART_FLOW_CONTROL_HARDWARE_CTSRTS = 3U, ///< Use CTSn pin for CTS, CTSn_RTSn pin for RTS + SCI_UART_FLOW_CONTROL_CTSRTS = 5U, ///< Use SCI pin for CTS, external pin for RTS +} sci_uart_flow_control_t; + +/** UART instance control block. */ +typedef struct st_sci_uart_instance_ctrl +{ + /* Parameters to control UART peripheral device */ + uint8_t fifo_depth; // FIFO depth of the UART channel + uint8_t rx_transfer_in_progress; // Set to 1 if a receive transfer is in progress, 0 otherwise + uint8_t data_bytes : 2; // 1 byte for 7 or 8 bit data, 2 bytes for 9 bit data + uint8_t bitrate_modulation : 1; // 1 if bit rate modulation is enabled, 0 otherwise + uint32_t open; // Used to determine if the channel is configured + + bsp_io_port_pin_t flow_pin; + + /* Source buffer pointer used to fill hardware FIFO from transmit ISR. */ + uint8_t const * p_tx_src; + + /* Size of source buffer pointer used to fill hardware FIFO from transmit ISR. */ + uint32_t tx_src_bytes; + + /* Destination buffer pointer used for receiving data. */ + uint8_t const * p_rx_dest; + + /* Size of destination buffer pointer used for receiving data. */ + uint32_t rx_dest_bytes; + + /* Pointer to the configuration block. */ + uart_cfg_t const * p_cfg; + + /* Base register for this channel */ + R_SCI0_Type * p_reg; + + void (* p_callback)(uart_callback_args_t *); // Pointer to callback that is called when a uart_event_t occurs. + uart_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + + /* Pointer to context to be passed into callback function */ + void const * p_context; +} sci_uart_instance_ctrl_t; + +/** Receive FIFO trigger configuration. */ +typedef enum e_sci_uart_rx_fifo_trigger +{ + SCI_UART_RX_FIFO_TRIGGER_1 = 0x1, ///< Callback after each byte is received without buffering + SCI_UART_RX_FIFO_TRIGGER_MAX = 0xF, ///< Callback when FIFO is full or after 15 bit times with no data (fewer interrupts) +} sci_uart_rx_fifo_trigger_t; + +/** Asynchronous Start Bit Edge Detection configuration. */ +typedef enum e_sci_uart_start_bit +{ + SCI_UART_START_BIT_LOW_LEVEL = 0x0, ///< Detect low level on RXDn pin as start bit + SCI_UART_START_BIT_FALLING_EDGE = 0x1, ///< Detect falling level on RXDn pin as start bit +} sci_uart_start_bit_t; + +/** Noise cancellation configuration. */ +typedef enum e_sci_uart_noise_cancellation +{ + SCI_UART_NOISE_CANCELLATION_DISABLE = 0x0, ///< Disable noise cancellation + SCI_UART_NOISE_CANCELLATION_ENABLE = 0x1, ///< Enable noise cancellation, The base clock signal divided by 1 + SCI_UART_NOISE_CANCELLATION_ENABLE_FILTER_CKS_DIV_1 = 0x2, ///< Enable noise cancellation, The on-chip baud rate generator source clock divided by 1 + SCI_UART_NOISE_CANCELLATION_ENABLE_FILTER_CKS_DIV_2 = 0x3, ///< Enable noise cancellation, The on-chip baud rate generator source clock divided by 2 + SCI_UART_NOISE_CANCELLATION_ENABLE_FILTER_CKS_DIV_4 = 0x4, ///< Enable noise cancellation, The on-chip baud rate generator source clock divided by 4 + SCI_UART_NOISE_CANCELLATION_ENABLE_FILTER_CKS_DIV_8 = 0x5, ///< Enable noise cancellation, The on-chip baud rate generator source clock divided by 8 +} sci_uart_noise_cancellation_t; + +/** RS-485 Enable/Disable. */ +typedef enum e_sci_uart_rs485_enable +{ + SCI_UART_RS485_DISABLE = 0, ///< RS-485 disabled. + SCI_UART_RS485_ENABLE = 1, ///< RS-485 enabled. +} sci_uart_rs485_enable_t; + +/** The polarity of the RS-485 DE signal. */ +typedef enum e_sci_uart_rs485_de_polarity +{ + SCI_UART_RS485_DE_POLARITY_HIGH = 0, ///< The DE signal is high when a write transfer is in progress. + SCI_UART_RS485_DE_POLARITY_LOW = 1, ///< The DE signal is low when a write transfer is in progress. +} sci_uart_rs485_de_polarity_t; + +/** Source clock selection options for SCI. */ +typedef enum e_sci_uart_clock_source +{ + SCI_UART_CLOCK_SOURCE_SCI0ASYNCCLK = 0, + SCI_UART_CLOCK_SOURCE_SCI1ASYNCCLK = 1, + SCI_UART_CLOCK_SOURCE_SCI2ASYNCCLK = 2, + SCI_UART_CLOCK_SOURCE_SCI3ASYNCCLK = 3, + SCI_UART_CLOCK_SOURCE_SCI4ASYNCCLK = 4, + SCI_UART_CLOCK_SOURCE_SCI5ASYNCCLK = 5, + SCI_UART_CLOCK_SOURCE_PCLKM = 6, +} sci_uart_clock_source_t; + +/** Baudrate calculation configuration. */ +typedef struct st_sci_uart_baud_calculation +{ + uint32_t baudrate; ///< Target baudrate + bool bitrate_modulation; ///< Whether bitrate modulation use or not + uint32_t baud_rate_error_x_1000; ///< Max baudrate percent error +} sci_uart_baud_calculation_t; + +/** Register settings to achieve a desired baud rate and modulation duty. */ +typedef struct st_sci_baud_setting_t +{ + union + { + uint32_t baudrate_bits; + + struct + { + uint32_t : 4; + uint32_t bgdm : 1; ///< Baud Rate Generator Double-Speed Mode Select + uint32_t abcs : 1; ///< Asynchronous Mode Base Clock Select + uint32_t abcse : 1; ///< Asynchronous Mode Extended Base Clock Select 1 + uint32_t : 1; + uint32_t brr : 8; ///< Bit Rate Register setting + uint32_t brme : 1; ///< Bit Rate Modulation Enable + uint32_t : 3; + uint32_t cks : 2; ///< CKS value to get divisor (CKS = N) + uint32_t : 2; + uint32_t mddr : 8; ///< Modulation Duty Register setting + } baudrate_bits_b; + }; +} sci_baud_setting_t; + +/** Configuration settings for controlling the DE signal for RS-485. */ +typedef struct st_sci_uart_rs485_setting +{ + sci_uart_rs485_enable_t enable; ///< Enable the DE signal. + sci_uart_rs485_de_polarity_t polarity; ///< DE signal polarity. + uint8_t assertion_time : 5; ///< Time in baseclock units after assertion of the DE signal and before the start of the write transfer. + uint8_t negation_time : 5; ///< Time in baseclock units after the end of a write transfer and before the DE signal is negated. +} sci_uart_rs485_setting_t; + +/** UART on SCI device Configuration */ +typedef struct st_sci_uart_extended_cfg +{ + sci_uart_clock_t clock; ///< The source clock for the baud-rate generator. If internal optionally output baud rate on SCK + sci_uart_start_bit_t rx_edge_start; ///< Start reception on falling edge + sci_uart_noise_cancellation_t noise_cancel; ///< Noise cancellation setting + + sci_baud_setting_t * p_baud_setting; ///< Register settings for a desired baud rate. + + sci_uart_rx_fifo_trigger_t rx_fifo_trigger; ///< Receive FIFO trigger level, unused if channel has no FIFO or if DMAC is used. + + bsp_io_port_pin_t flow_control_pin; ///< UART Driver Enable pin + sci_uart_flow_control_t flow_control; ///< CTS/RTS function + sci_uart_rs485_setting_t rs485_setting; ///< RS-485 settings. + + /** Clock source to generate SCK can either be selected as PCLKM or SCInASYNCCLK. */ + sci_uart_clock_source_t clock_source; +} sci_uart_extended_cfg_t; + +/********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/** @cond INC_HEADER_DEFS_SEC */ +/** Filled in Interface API structure for this Instance. */ +extern const uart_api_t g_uart_on_sci; + +/** @endcond */ + +fsp_err_t R_SCI_UART_Open(uart_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); +fsp_err_t R_SCI_UART_Read(uart_ctrl_t * const p_ctrl, uint8_t * const p_dest, uint32_t const bytes); +fsp_err_t R_SCI_UART_Write(uart_ctrl_t * const p_ctrl, uint8_t const * const p_src, uint32_t const bytes); +fsp_err_t R_SCI_UART_BaudSet(uart_ctrl_t * const p_ctrl, void const * const p_baud_setting); +fsp_err_t R_SCI_UART_InfoGet(uart_ctrl_t * const p_ctrl, uart_info_t * const p_info); +fsp_err_t R_SCI_UART_Close(uart_ctrl_t * const p_ctrl); +fsp_err_t R_SCI_UART_Abort(uart_ctrl_t * const p_ctrl, uart_dir_t communication_to_abort); +fsp_err_t R_SCI_UART_BaudCalculate(sci_uart_baud_calculation_t const * const p_baud_target, + sci_uart_clock_source_t clock_source, + sci_baud_setting_t * const p_baud_setting); +fsp_err_t R_SCI_UART_CallbackSet(uart_ctrl_t * const p_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void const * const p_context, + uart_callback_args_t * const p_callback_memory); +fsp_err_t R_SCI_UART_ReadStop(uart_ctrl_t * const p_ctrl, uint32_t * remaining_bytes); + +/*******************************************************************************************************************//** + * @} (end addtogroup SCI_UART) + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/R9A07G084.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/R9A07G084.h new file mode 100644 index 00000000000..ae4df5d449c --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/R9A07G084.h @@ -0,0 +1,46278 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/** @addtogroup Renesas Electronics Corporation + * @{ + */ + +/** @addtogroup R9A07G084 + * @{ + */ + +#ifndef R9A07G084_H + #define R9A07G084_H + + #ifdef __cplusplus +extern "C" { + #endif + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/* ----------------Configuration of the Cortex-M Processor and Core Peripherals---------------- */ + #ifdef RENESAS_CORTEX_M4 + #define __MPU_PRESENT 1 /*!< MPU present or not */ + #define __NVIC_PRIO_BITS 4 /*!< Number of Bits used for Priority Levels */ + #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + #define __FPU_PRESENT 1 /*!< FPU present or not */ + #include "core_cm4.h" /*!< Cortex-M4 processor and core peripherals */ + #elif defined(RENESAS_CORTEX_M0PLUS) + #define __MPU_PRESENT 1 /*!< MPU present or not */ + #define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */ + #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + #define __FPU_PRESENT 0 /*!< FPU present or not */ + #define __VTOR_PRESENT 1 /*!< Vector table VTOR register available or not */ + #include "core_cm0plus.h" /*!< Cortex-M0 processor and core peripherals */ + #elif defined(RENESAS_CORTEX_M23) + #define __MPU_PRESENT 1 /*!< MPU present or not */ + #define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */ + #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + #define __FPU_PRESENT 0 /*!< FPU present or not */ + #define __VTOR_PRESENT 1 /*!< Vector table VTOR register available or not */ + #include "core_cm23.h" /*!< Cortex-M23 processor and core peripherals */ + #elif defined(RENESAS_CORTEX_M33) + #define __MPU_PRESENT 1 /*!< MPU present or not */ + #define __NVIC_PRIO_BITS 4 /*!< Number of Bits used for Priority Levels */ + #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + #define __FPU_PRESENT 1 /*!< FPU present or not */ + #define __VTOR_PRESENT 1 /*!< Vector table VTOR register available or not */ + #define __DSP_PRESENT 1 /*!< DSP present or not */ + #include "core_cm33.h" /*!< Cortex-M33 processor and core peripherals */ + #elif defined(RENESAS_CORTEX_R52) + #define __FPU_PRESENT 1 /*!< FPU present or not */ + #include "core_cr52.h" /*!< Cortex-R52 processor and core peripherals */ + #endif + + #include "system.h" /*!< System */ + + #ifndef __IM /*!< Fallback for older CMSIS versions */ + #define __IM __I + #endif + #ifndef __OM /*!< Fallback for older CMSIS versions */ + #define __OM __O + #endif + #ifndef __IOM /*!< Fallback for older CMSIS versions */ + #define __IOM __IO + #endif + +/* ======================================== Start of section using anonymous unions ======================================== */ + #if defined(__CC_ARM) + #pragma push + #pragma anon_unions + #elif defined(__ICCARM__) + #pragma language=extended + #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wc11-extensions" + #pragma clang diagnostic ignored "-Wreserved-id-macro" + #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" + #pragma clang diagnostic ignored "-Wnested-anon-types" + #elif defined(__GNUC__) + +/* anonymous unions are enabled by default */ + #elif defined(__TMS470__) + +/* anonymous unions are enabled by default */ + #elif defined(__TASKING__) + #pragma warning 586 + #elif defined(__CSMC__) + +/* anonymous unions are enabled by default */ + #else + #warning Not supported compiler type + #endif + +/* =========================================================================================================================== */ +/* ================ Device Specific Cluster Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_clusters + * @{ + */ + +/** + * @brief R_CANFD_CFDC [CFDC] (CANFD Channel [0..1] Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t NCFG; /*!< (@ 0x00000000) Channel n Nominal Bit Rate Configuration Register */ + + struct + { + __IOM uint32_t NBRP : 10; /*!< [9..0] Nominal Bit Rate Prescaler */ + __IOM uint32_t NSJW : 7; /*!< [16..10] Nominal Bit Rate Resynchronization Jump Width Control */ + __IOM uint32_t NTSEG1 : 8; /*!< [24..17] Nominal Bit Rate Time Segment 1 Control */ + __IOM uint32_t NTSEG2 : 7; /*!< [31..25] Nominal Bit Rate Time Segment 2 Control */ + } NCFG_b; + }; + + union + { + __IOM uint32_t CTR; /*!< (@ 0x00000004) Channel n Control Register */ + + struct + { + __IOM uint32_t CHMDC : 2; /*!< [1..0] Mode Select */ + __IOM uint32_t CSLPR : 1; /*!< [2..2] Channel Stop Mode */ + __IOM uint32_t RTBO : 1; /*!< [3..3] Forcible Return from Bus-Off */ + uint32_t : 4; + __IOM uint32_t BEIE : 1; /*!< [8..8] Bus Error Interrupt Enable */ + __IOM uint32_t EWIE : 1; /*!< [9..9] Error Warning Interrupt Enable */ + __IOM uint32_t EPIE : 1; /*!< [10..10] Error Passive Interrupt Enable */ + __IOM uint32_t BOEIE : 1; /*!< [11..11] Bus-Off Entry Interrupt Enable */ + __IOM uint32_t BORIE : 1; /*!< [12..12] Bus-Off Recovery Interrupt Enable */ + __IOM uint32_t OLIE : 1; /*!< [13..13] Overload Interrupt Enable */ + __IOM uint32_t BLIE : 1; /*!< [14..14] Bus Lock Interrupt Enable */ + __IOM uint32_t ALIE : 1; /*!< [15..15] Arbitration Lost Interrupt Enable */ + __IOM uint32_t TAIE : 1; /*!< [16..16] Transmission Abort Interrupt Enable */ + __IOM uint32_t EOCOIE : 1; /*!< [17..17] Error Occurrence Counter Overflow Interrupt Enable */ + __IOM uint32_t SOCOIE : 1; /*!< [18..18] Successful Occurrence Counter Overflow Interrupt Enable */ + __IOM uint32_t TDCVFIE : 1; /*!< [19..19] Transceiver Delay Compensation Violation Interrupt + * Enable */ + uint32_t : 1; + __IOM uint32_t BOM : 2; /*!< [22..21] Bus-Off Recovery Mode Select */ + __IOM uint32_t ERRD : 1; /*!< [23..23] Error Display Mode Select */ + __IOM uint32_t CTME : 1; /*!< [24..24] Communication Test Mode Enable */ + __IOM uint32_t CTMS : 2; /*!< [26..25] Communication Test Mode Select */ + uint32_t : 3; + __IOM uint32_t CRCT : 1; /*!< [30..30] CRC Error Test Enable */ + __IOM uint32_t ROM : 1; /*!< [31..31] Restricted Operation Mode Enable */ + } CTR_b; + }; + + union + { + __IOM uint32_t STS; /*!< (@ 0x00000008) Channel n Status Register */ + + struct + { + __IM uint32_t CRSTSTS : 1; /*!< [0..0] Channel Reset Status Flag */ + __IM uint32_t CHLTSTS : 1; /*!< [1..1] Channel Halt Status Flag */ + __IM uint32_t CSLPSTS : 1; /*!< [2..2] Channel Stop Status Flag */ + __IM uint32_t EPSTS : 1; /*!< [3..3] Error Passive Status Flag */ + __IM uint32_t BOSTS : 1; /*!< [4..4] Bus-Off Status Flag */ + __IM uint32_t TRMSTS : 1; /*!< [5..5] Transmit Status Flag */ + __IM uint32_t RECSTS : 1; /*!< [6..6] Receive Status Flag */ + __IM uint32_t COMSTS : 1; /*!< [7..7] Communication Status Flag */ + __IOM uint32_t ESIF : 1; /*!< [8..8] Error State Indication Flag */ + uint32_t : 7; + __IM uint32_t REC : 8; /*!< [23..16] Reception Error Count */ + __IM uint32_t TEC : 8; /*!< [31..24] Transmission Error Count */ + } STS_b; + }; + + union + { + __IOM uint32_t ERFL; /*!< (@ 0x0000000C) Channel n Error Flag Register */ + + struct + { + __IOM uint32_t BEF : 1; /*!< [0..0] Bus Error Flag */ + __IOM uint32_t EWF : 1; /*!< [1..1] Error Warning Flag */ + __IOM uint32_t EPF : 1; /*!< [2..2] Error Passive Flag */ + __IOM uint32_t BOEF : 1; /*!< [3..3] Bus-Off Entry Flag */ + __IOM uint32_t BORF : 1; /*!< [4..4] Bus-Off Recovery Flag */ + __IOM uint32_t OVLF : 1; /*!< [5..5] Overload Flag */ + __IOM uint32_t BLF : 1; /*!< [6..6] Bus Lock Flag */ + __IOM uint32_t ALF : 1; /*!< [7..7] Arbitration Lost Flag */ + __IOM uint32_t SERR : 1; /*!< [8..8] Stuff Error Flag */ + __IOM uint32_t FERR : 1; /*!< [9..9] Form Error Flag */ + __IOM uint32_t AERR : 1; /*!< [10..10] Acknowledge Error Flag */ + __IOM uint32_t CERR : 1; /*!< [11..11] CRC Error Flag */ + __IOM uint32_t B1ERR : 1; /*!< [12..12] Recessive Bit Error Flag */ + __IOM uint32_t B0ERR : 1; /*!< [13..13] Dominant Bit Error Flag */ + __IOM uint32_t ADERR : 1; /*!< [14..14] Acknowledge Delimiter Error Flag */ + uint32_t : 1; + __IM uint32_t CRCREG : 15; /*!< [30..16] CRC Calculation Data (CRC length: 15 bits) */ + uint32_t : 1; + } ERFL_b; + }; +} R_CANFD_CFDC_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_CANFD_CFDC2 [CFDC2] (Channel Configuration Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t DCFG; /*!< (@ 0x00000000) Channel Data Bit Rate Configuration Register */ + + struct + { + __IOM uint32_t DBRP : 8; /*!< [7..0] Data Bit Rate Prescaler Division Ratio Setting */ + __IOM uint32_t DTSEG1 : 5; /*!< [12..8] Data Bit Rate Time Segment 1 Control */ + uint32_t : 3; + __IOM uint32_t DTSEG2 : 4; /*!< [19..16] Data Bit Rate Time Segment 2 Control */ + uint32_t : 4; + __IOM uint32_t DSJW : 4; /*!< [27..24] Data Bit Rate Resynchronization Jump Width Control */ + uint32_t : 4; + } DCFG_b; + }; + + union + { + __IOM uint32_t FDCFG; /*!< (@ 0x00000004) Channel n CAN-FD Configuration Register */ + + struct + { + __IOM uint32_t EOCCFG : 3; /*!< [2..0] Error Occurrence Counter Configuration */ + uint32_t : 5; + __IOM uint32_t TDCOC : 1; /*!< [8..8] Transmitter Delay Compensation Offset Configuration */ + __IOM uint32_t TDCE : 1; /*!< [9..9] Transceiver Delay Compensation Enable */ + __IOM uint32_t ESIC : 1; /*!< [10..10] Error State Indication Configuration */ + uint32_t : 5; + __IOM uint32_t TDCO : 8; /*!< [23..16] Transceiver Delay Compensation Offset */ + __IOM uint32_t GWEN : 1; /*!< [24..24] CAN2.0, CAN-FD Multi Gateway Enable */ + __IOM uint32_t GWFDF : 1; /*!< [25..25] Gateway FDF Configuration Bit */ + __IOM uint32_t GWBRS : 1; /*!< [26..26] Gateway BRS Configuration Bit */ + uint32_t : 1; + __IOM uint32_t FDOE : 1; /*!< [28..28] FD-Only Enable */ + __IOM uint32_t REFE : 1; /*!< [29..29] RX Edge Filter Enable */ + __IOM uint32_t CLOE : 1; /*!< [30..30] Classical CAN-Only Enable */ + __IOM uint32_t CFDTE : 1; /*!< [31..31] CAN-FD Frame Distinction Enable */ + } FDCFG_b; + }; + + union + { + __IOM uint32_t FDCTR; /*!< (@ 0x00000008) Channel n CAN-FD Control Register */ + + struct + { + __IOM uint32_t EOCCLR : 1; /*!< [0..0] Error Occurrence Counter Clear */ + __IOM uint32_t SOCCLR : 1; /*!< [1..1] Successful Occurrence Counter Clear */ + uint32_t : 30; + } FDCTR_b; + }; + + union + { + __IOM uint32_t FDSTS; /*!< (@ 0x0000000C) Channel n CAN-FD Status Register */ + + struct + { + __IM uint32_t TDCR : 8; /*!< [7..0] Transceiver Delay Compensation Result */ + __IOM uint32_t EOCO : 1; /*!< [8..8] Error Occurrence Counter Overflow Flag */ + __IOM uint32_t SOCO : 1; /*!< [9..9] Successful Occurrence Counter Overflow Flag */ + uint32_t : 5; + __IOM uint32_t TDCVF : 1; /*!< [15..15] Transceiver Delay Compensation Violation Flag */ + __IM uint32_t EOC : 8; /*!< [23..16] Error Occurrence Counter */ + __IM uint32_t SOC : 8; /*!< [31..24] Successful Occurrence Counter */ + } FDSTS_b; + }; + + union + { + __IM uint32_t FDCRC; /*!< (@ 0x00000010) Channel n CAN-FD CRC Register */ + + struct + { + __IM uint32_t CRCREG : 21; /*!< [20..0] CRC Register Value */ + uint32_t : 4; + __IM uint32_t SCNT : 4; /*!< [28..25] Stuff Bit Count */ + uint32_t : 3; + } FDCRC_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t BLCT; /*!< (@ 0x00000018) Channel n Bus Load Control Register */ + + struct + { + __IOM uint32_t BLCE : 1; /*!< [0..0] Bus Load Counter Enable */ + uint32_t : 7; + __OM uint32_t BLCLD : 1; /*!< [8..8] Bus Load Counter Load */ + uint32_t : 23; + } BLCT_b; + }; + + union + { + __IM uint32_t BLSTS; /*!< (@ 0x0000001C) Channel n Bus Load Status Register */ + + struct + { + uint32_t : 3; + __IM uint32_t BLC : 29; /*!< [31..3] Bus Load Counter Status */ + } BLSTS_b; + }; +} R_CANFD_CFDC2_Type; /*!< Size = 32 (0x20) */ + +/** + * @brief R_CANFD_CFDGAFL [CFDGAFL] (Global Acceptance Filter List Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t ID; /*!< (@ 0x00000000) Global Acceptance Filter List ID Register n */ + + struct + { + __IOM uint32_t GAFLID : 29; /*!< [28..0] Global Acceptance Filter List Entry ID Field */ + __IOM uint32_t GAFLLB : 1; /*!< [29..29] Global Acceptance Filter List Entry Loopback Configuration */ + __IOM uint32_t GAFLRTR : 1; /*!< [30..30] Global Acceptance Filter List Entry RTR Field */ + __IOM uint32_t GAFLIDE : 1; /*!< [31..31] Global Acceptance Filter List Entry IDE Field */ + } ID_b; + }; + + union + { + __IOM uint32_t M; /*!< (@ 0x00000004) Global Acceptance Filter List Mask Register n */ + + struct + { + __IOM uint32_t GAFLIDM : 29; /*!< [28..0] Global Acceptance Filter List ID Mask Field */ + __IOM uint32_t GAFLIFL1 : 1; /*!< [29..29] Global Acceptance Filter List Information Label 1 */ + __IOM uint32_t GAFLRTRM : 1; /*!< [30..30] Global Acceptance Filter List Entry RTR Mask */ + __IOM uint32_t GAFLIDEM : 1; /*!< [31..31] Global Acceptance Filter List IDE Mask */ + } M_b; + }; + + union + { + __IOM uint32_t P0; /*!< (@ 0x00000008) Global Acceptance Filter List Pointer 0 Register + * n */ + + struct + { + __IOM uint32_t GAFLDLC : 4; /*!< [3..0] Global Acceptance Filter List DLC Field */ + __IOM uint32_t GAFLSRD0 : 1; /*!< [4..4] Global Acceptance Filter List Select Routing Destination + * 0 */ + __IOM uint32_t GAFLSRD1 : 1; /*!< [5..5] Global Acceptance Filter List Select Routing Destination + * 1 */ + __IOM uint32_t GAFLSRD2 : 1; /*!< [6..6] Global Acceptance Filter List Select Routing Destination + * 2 */ + __IOM uint32_t GAFLIFL0 : 1; /*!< [7..7] Global Acceptance Filter List Information Label 0 */ + __IOM uint32_t GAFLRMDP : 5; /*!< [12..8] Global Acceptance Filter List RX Message Buffer Direction + * Pointer */ + uint32_t : 2; + __IOM uint32_t GAFLRMV : 1; /*!< [15..15] Global Acceptance Filter List RX Message Buffer Valid */ + __IOM uint32_t GAFLPTR : 16; /*!< [31..16] Global Acceptance Filter List Pointer */ + } P0_b; + }; + + union + { + __IOM uint32_t P1; /*!< (@ 0x0000000C) Global Acceptance Filter List Pointer 1 Register + * n */ + + struct + { + __IOM uint32_t GAFLFDP : 14; /*!< [13..0] Global Acceptance Filter List FIFO Direction Pointer */ + uint32_t : 18; + } P1_b; + }; +} R_CANFD_CFDGAFL_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_CANFD_CFDRM [CFDRM] (RX Message Buffer Access Registers) + */ +typedef struct +{ + union + { + __IM uint32_t ID; /*!< (@ 0x00000000) RX Message Buffer ID Register */ + + struct + { + __IM uint32_t RMID : 29; /*!< [28..0] RX Message Buffer ID Field */ + uint32_t : 1; + __IM uint32_t RMRTR : 1; /*!< [30..30] RX Message Buffer RTR Bit */ + __IM uint32_t RMIDE : 1; /*!< [31..31] RX Message Buffer IDE Bit */ + } ID_b; + }; + + union + { + __IOM uint32_t PTR; /*!< (@ 0x00000004) RX Message Buffer Pointer Register */ + + struct + { + __IOM uint32_t RMTS : 16; /*!< [15..0] RX Message Buffer Timestamp Field */ + uint32_t : 12; + __IOM uint32_t RMDLC : 4; /*!< [31..28] RX Message Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IOM uint32_t FDSTS; /*!< (@ 0x00000008) RX Message Buffer CAN-FD Status Register */ + + struct + { + __IOM uint32_t RMESI : 1; /*!< [0..0] Error State Indicator bit */ + __IOM uint32_t RMBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IOM uint32_t RMFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IOM uint32_t RMIFL : 2; /*!< [9..8] RX Message Buffer Information Label Field */ + uint32_t : 6; + __IOM uint32_t RMPTR : 16; /*!< [31..16] RX Message Buffer Pointer Field */ + } FDSTS_b; + }; + + union + { + union + { + __IM uint32_t DF_WD[16]; /*!< (@ 0x0000000C) RX Message Buffer Data Field p Register n (p + * = 0 to 15, n = 0 to 31) */ + + struct + { + __IM uint32_t RMDB_LL : 8; /*!< [7..0] RX Message Buffer Data Byte (4 * p) */ + __IM uint32_t RMDB_LH : 8; /*!< [15..8] RX Message Buffer Data Byte (4 * p + 1) */ + __IM uint32_t RMDB_HL : 8; /*!< [23..16] RX Message Buffer Data Byte (4 * p + 2) */ + __IM uint32_t RMDB_HH : 8; /*!< [31..24] RX Message Buffer Data Byte (4 * p + 3) */ + } DF_WD_b[16]; + }; + + union + { + __IM uint8_t DF[64]; /*!< (@ 0x0000000C) RX Message Buffer Data Field p Register n (p + * = 0 to 63, n = 0 to 31) */ + + struct + { + __IM uint8_t RMDB : 8; /*!< [7..0] RX Message Buffer Data Byte */ + } DF_b[64]; + }; + }; + __IM uint32_t RESERVED[13]; +} R_CANFD_CFDRM_Type; /*!< Size = 128 (0x80) */ + +/** + * @brief R_CANFD_CFDRF [CFDRF] (RX FIFO Access Registers) + */ +typedef struct +{ + union + { + __IM uint32_t ID; /*!< (@ 0x00000000) RX FIFO Access ID Register n */ + + struct + { + __IM uint32_t RFID : 29; /*!< [28..0] RX FIFO Buffer ID Field */ + uint32_t : 1; + __IM uint32_t RFRTR : 1; /*!< [30..30] RX FIFO Buffer RTR bit */ + __IM uint32_t RFIDE : 1; /*!< [31..31] RX FIFO Buffer IDE bit */ + } ID_b; + }; + + union + { + __IM uint32_t PTR; /*!< (@ 0x00000004) RX FIFO Access Pointer Register n */ + + struct + { + __IM uint32_t RFTS : 16; /*!< [15..0] RX FIFO Timestamp Value */ + uint32_t : 12; + __IM uint32_t RFDLC : 4; /*!< [31..28] RX FIFO Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IM uint32_t FDSTS; /*!< (@ 0x00000008) RX FIFO Access CAN-FD Status Register n */ + + struct + { + __IM uint32_t RFESI : 1; /*!< [0..0] Error State Indicator bit */ + __IM uint32_t RFBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IM uint32_t RFFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IM uint32_t RFIFL : 2; /*!< [9..8] RX FIFO Buffer Information Label Field */ + uint32_t : 6; + __IM uint32_t CFDRFPTR : 16; /*!< [31..16] RX FIFO Buffer Pointer Field */ + } FDSTS_b; + }; + + union + { + union + { + __IM uint32_t DF_WD[16]; /*!< (@ 0x0000000C) RX FIFO Access Data Field p Register n (p = 0 + * to 15, n = 0 to 7) */ + + struct + { + __IM uint32_t RFDB_LL : 8; /*!< [7..0] RX FIFO Buffer Data Byte (4 * p) */ + __IM uint32_t RFDB_LH : 8; /*!< [15..8] RX FIFO Buffer Data Byte (4 * p + 1) */ + __IM uint32_t RFDB_HL : 8; /*!< [23..16] RX FIFO Buffer Data Byte (4 * p + 2) */ + __IM uint32_t RFDB_HH : 8; /*!< [31..24] RX FIFO Buffer Data Byte (4 * p + 3) */ + } DF_WD_b[16]; + }; + + union + { + __IM uint8_t DF[64]; /*!< (@ 0x0000000C) RX FIFO Access Data Field p Register n (p = 0 + * to 63, n = 0 to 7) */ + + struct + { + __IM uint8_t RFDB : 8; /*!< [7..0] RX FIFO Buffer Data Byte */ + } DF_b[64]; + }; + }; + __IM uint32_t RESERVED[13]; +} R_CANFD_CFDRF_Type; /*!< Size = 128 (0x80) */ + +/** + * @brief R_CANFD_CFDCF [CFDCF] (Common FIFO Access Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t ID; /*!< (@ 0x00000000) Common FIFO Access ID Register */ + + struct + { + __IOM uint32_t CFID : 29; /*!< [28..0] Common FIFO Buffer ID Field */ + __IOM uint32_t THLEN : 1; /*!< [29..29] THL Entry Enable */ + __IOM uint32_t CFRTR : 1; /*!< [30..30] Common FIFO Buffer RTR bit */ + __IOM uint32_t CFIDE : 1; /*!< [31..31] Common FIFO Buffer IDE bit */ + } ID_b; + }; + + union + { + __IOM uint32_t PTR; /*!< (@ 0x00000004) Common FIFO Access Pointer Register n */ + + struct + { + __IOM uint32_t CFTS : 16; /*!< [15..0] Common FIFO Timestamp Value */ + uint32_t : 12; + __IOM uint32_t CFDLC : 4; /*!< [31..28] Common FIFO Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IOM uint32_t FDCSTS; /*!< (@ 0x00000008) Common FIFO Access CAN-FD Control/Status Register + * n */ + + struct + { + __IOM uint32_t CFESI : 1; /*!< [0..0] Error State Indicator bit */ + __IOM uint32_t CFBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IOM uint32_t CFFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IOM uint32_t CFIFL : 2; /*!< [9..8] COMMON FIFO Buffer Information Label Field */ + uint32_t : 6; + __IOM uint32_t CFPTR : 16; /*!< [31..16] Common FIFO Buffer Pointer Field */ + } FDCSTS_b; + }; + + union + { + union + { + __IOM uint32_t DF_WD[16]; /*!< (@ 0x0000000C) Common FIFO Access Data Field p Register n (p + * = 0 to 15, n = 0 to 5) */ + + struct + { + __IOM uint32_t CFDB_LL : 8; /*!< [7..0] Common FIFO Buffer Data Bytes (4 * p) */ + __IOM uint32_t CFDB_LH : 8; /*!< [15..8] Common FIFO Buffer Data Bytes (4 * p + 1) */ + __IOM uint32_t CFDB_HL : 8; /*!< [23..16] Common FIFO Buffer Data Bytes (4 * p + 2) */ + __IOM uint32_t CFDB_HH : 8; /*!< [31..24] Common FIFO Buffer Data Bytes (4 * p + 3) */ + } DF_WD_b[16]; + }; + + union + { + __IOM uint8_t DF[64]; /*!< (@ 0x0000000C) Common FIFO Access Data Field p Register n (p + * = 0 to 63, n = 0 to 5) */ + + struct + { + __IOM uint8_t CFDB : 8; /*!< [7..0] Common FIFO Buffer Data Bytes */ + } DF_b[64]; + }; + }; + __IM uint32_t RESERVED[13]; +} R_CANFD_CFDCF_Type; /*!< Size = 128 (0x80) */ + +/** + * @brief R_CANFD_CFDTHL [CFDTHL] (Channel TX History List) + */ +typedef struct +{ + union + { + __IM uint32_t ACC0; /*!< (@ 0x00000000) Channel TX History List Access Registers 0 */ + + struct + { + __IM uint32_t BT : 3; /*!< [2..0] Buffer Type */ + __IM uint32_t BN : 7; /*!< [9..3] Buffer Number */ + uint32_t : 5; + __IM uint32_t TGW : 1; /*!< [15..15] Transmit Gateway Buffer Indication */ + __IM uint32_t TMTS : 16; /*!< [31..16] Transmit Timestamp */ + } ACC0_b; + }; + + union + { + __IM uint32_t ACC1; /*!< (@ 0x00000004) Channel TX History List Access Registers 1 */ + + struct + { + __IM uint32_t TID : 16; /*!< [15..0] Transmit ID */ + __IM uint32_t TIFL : 2; /*!< [17..16] Transmit Information Label */ + uint32_t : 14; + } ACC1_b; + }; +} R_CANFD_CFDTHL_Type; /*!< Size = 8 (0x8) */ + +/** + * @brief R_CANFD_CFDTM [CFDTM] (TX Message Buffer Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t ID; /*!< (@ 0x00000000) TX Message Buffer ID Register n (n = 0 to 127) */ + + struct + { + __IOM uint32_t TMID : 29; /*!< [28..0] TX Message Buffer ID Field */ + __IOM uint32_t THLEN : 1; /*!< [29..29] Tx History List Entry */ + __IOM uint32_t TMRTR : 1; /*!< [30..30] TX Message Buffer RTR bit */ + __IOM uint32_t TMIDE : 1; /*!< [31..31] TX Message Buffer IDE bit */ + } ID_b; + }; + + union + { + __IOM uint32_t PTR; /*!< (@ 0x00000004) TX Message Buffer Pointer Register n (n = 0 to + * 127) */ + + struct + { + uint32_t : 28; + __IOM uint32_t TMDLC : 4; /*!< [31..28] TX Message Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IOM uint32_t FDCTR; /*!< (@ 0x00000008) TX Message Buffer CAN-FD Control Register n (n + * = 0 to 127) */ + + struct + { + __IOM uint32_t TMESI : 1; /*!< [0..0] Error State Indicator bit */ + __IOM uint32_t TMBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IOM uint32_t TMFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IOM uint32_t TMIFL : 2; /*!< [9..8] TX Message Buffer Information Label Field */ + uint32_t : 6; + __IOM uint32_t TMPTR : 16; /*!< [31..16] TX Message Buffer Pointer Field */ + } FDCTR_b; + }; + + union + { + union + { + __IOM uint32_t DF_WD[16]; /*!< (@ 0x0000000C) TX Message Buffer Data Field p Register n (p + * = 0 to 15, n = 0 to 127) */ + + struct + { + __IOM uint32_t TMDB_LL : 8; /*!< [7..0] TX Message Buffer Data Byte (4 * p) */ + __IOM uint32_t TMDB_LH : 8; /*!< [15..8] TX Message Buffer Data Byte (4 * p + 1) */ + __IOM uint32_t TMDB_HL : 8; /*!< [23..16] TX Message Buffer Data Byte (4 * p + 2) */ + __IOM uint32_t TMDB_HH : 8; /*!< [31..24] TX Message Buffer Data Byte (4 * p + 3) */ + } DF_WD_b[16]; + }; + + union + { + __IOM uint8_t DF[64]; /*!< (@ 0x0000000C) TX Message Buffer Data Field p Register n (p + * = 0 to 63, n = 0 to 5) */ + + struct + { + __IOM uint8_t TMDB : 8; /*!< [7..0] TX Message Buffer Data Bytes */ + } DF_b[64]; + }; + }; + __IM uint32_t RESERVED[13]; +} R_CANFD_CFDTM_Type; /*!< Size = 128 (0x80) */ + +/** + * @brief R_CMT_UNT_CM [CM] (2 Timer Start Register Pairs) + */ +typedef struct +{ + union + { + __IOM uint16_t CR; /*!< (@ 0x00000000) Compare Match Timer Control Register */ + + struct + { + __IOM uint16_t CKS : 2; /*!< [1..0] Clock Select */ + uint16_t : 4; + __IOM uint16_t CMIE : 1; /*!< [6..6] Compare Match Interrupt Enable */ + uint16_t : 9; + } CR_b; + }; + __IOM uint16_t CNT; /*!< (@ 0x00000002) Compare Match Timer Counter Register */ + __IOM uint16_t COR; /*!< (@ 0x00000004) Compare Match Timer Constant Register */ +} R_CMT_UNT_CM_Type; /*!< Size = 6 (0x6) */ + +/** + * @brief R_CMT_UNT [UNT] (3 Timer Start Register Units) + */ +typedef struct +{ + union + { + __IOM uint16_t CMSTR0; /*!< (@ 0x00000000) Compare Match Timer Start Register */ + + struct + { + __IOM uint16_t STR0 : 1; /*!< [0..0] CMT Channel n Count Start */ + __IOM uint16_t STR1 : 1; /*!< [1..1] CMT Channel n+1 Count Start */ + uint16_t : 14; + } CMSTR0_b; + }; + __IOM R_CMT_UNT_CM_Type CM[2]; /*!< (@ 0x00000002) 2 Timer Start Register Pairs */ + __IM uint16_t RESERVED[505]; +} R_CMT_UNT_Type; /*!< Size = 1024 (0x400) */ + +/** + * @brief R_IIC0_SAR [SAR] (Slave Address Registers) + */ +typedef struct +{ + union + { + __IOM uint8_t L; /*!< (@ 0x00000000) Slave Address Register L y (y = 0 to 2) */ + + struct + { + __IOM uint8_t SVA0 : 1; /*!< [0..0] 10-bit Address LSB */ + __IOM uint8_t SVA : 7; /*!< [7..1] 7-bit Address/10-bit Address Lower Bits */ + } L_b; + }; + + union + { + __IOM uint8_t U; /*!< (@ 0x00000001) Slave Address Register U y (y = 0 to 2) */ + + struct + { + __IOM uint8_t FS : 1; /*!< [0..0] 7-bit/10-bit Address Format Select */ + __IOM uint8_t SVA : 2; /*!< [2..1] 10-bit Address Upper Bits */ + uint8_t : 5; + } U_b; + }; +} R_IIC0_SAR_Type; /*!< Size = 2 (0x2) */ + +/** + * @brief R_DMAC0_GRP_CH_N [N] (DMAC Address Registers [0..1]) + */ +typedef struct +{ + __IOM uint32_t SA; /*!< (@ 0x00000000) Nextm0 Source Address Register n (m = 0, 1) (n + * = 0 to 7) */ + __IOM uint32_t DA; /*!< (@ 0x00000004) Nextm0 Destination Address Register n (m = 0, + * 1) (n = 0 to 7) */ + __IOM uint32_t TB; /*!< (@ 0x00000008) Nextm0 Transaction Byte Register n (m = 0, 1) + * (n = 0 to 7) */ +} R_DMAC0_GRP_CH_N_Type; /*!< Size = 12 (0xc) */ + +/** + * @brief R_DMAC0_GRP_CH [CH] (DMAC channel Control Register [0..7]) + */ +typedef struct +{ + __IOM R_DMAC0_GRP_CH_N_Type N[2]; /*!< (@ 0x00000000) DMAC Address Registers [0..1] */ + __IM uint32_t CRSA; /*!< (@ 0x00000018) Current Source Address Register n (n = 0 to 7) */ + __IM uint32_t CRDA; /*!< (@ 0x0000001C) Current Destination Address Register n (n = 0 + * to 7) */ + __IM uint32_t CRTB; /*!< (@ 0x00000020) Current Transaction Byte Register n (n = 0 to + * 7) */ + + union + { + __IM uint32_t CHSTAT; /*!< (@ 0x00000024) Channel Status Register n (n = 0 to 7) */ + + struct + { + __IM uint32_t EN : 1; /*!< [0..0] DMA Activation Enable */ + __IM uint32_t RQST : 1; /*!< [1..1] DMA Transfer Request */ + __IM uint32_t TACT : 1; /*!< [2..2] DMAC Operating Status */ + __IM uint32_t SUS : 1; /*!< [3..3] Suspend */ + __IM uint32_t ER : 1; /*!< [4..4] DMA Error */ + __IM uint32_t END : 1; /*!< [5..5] DMA Transfer Completion Interrupt */ + __IM uint32_t TC : 1; /*!< [6..6] DMA Transfer Completion (total number of data bytes for + * transaction) */ + __IM uint32_t SR : 1; /*!< [7..7] Next Register Select */ + __IM uint32_t DL : 1; /*!< [8..8] Descriptor Load */ + __IM uint32_t DW : 1; /*!< [9..9] Descriptor Write Back */ + __IM uint32_t DER : 1; /*!< [10..10] Descriptor Error */ + __IM uint32_t MODE : 1; /*!< [11..11] DMA Mode */ + uint32_t : 4; + __IM uint32_t INTM : 1; /*!< [16..16] DMA Transfer Completion Interrupt Request Mask */ + uint32_t : 15; + } CHSTAT_b; + }; + + union + { + __IOM uint32_t CHCTRL; /*!< (@ 0x00000028) Channel Control Register n (n = 0 to 7) */ + + struct + { + __IOM uint32_t SETEN : 1; /*!< [0..0] DMA Activation Enable */ + __IOM uint32_t CLREN : 1; /*!< [1..1] DMA Activation Enable Clear */ + __IOM uint32_t STG : 1; /*!< [2..2] Software Trigger */ + __IOM uint32_t SWRST : 1; /*!< [3..3] Software Reset */ + __IOM uint32_t CLRRQ : 1; /*!< [4..4] DMA Transfer Request Clear */ + __IOM uint32_t CLREND : 1; /*!< [5..5] END Clear */ + __IOM uint32_t CLRTC : 1; /*!< [6..6] TC Clear */ + uint32_t : 1; + __IOM uint32_t SETSUS : 1; /*!< [8..8] Suspend Request */ + __IOM uint32_t CLRSUS : 1; /*!< [9..9] Suspend Clear */ + uint32_t : 6; + __IOM uint32_t SETINTM : 1; /*!< [16..16] DMA Transfer Completion Interrupt Request Mask */ + __IOM uint32_t CLRINTM : 1; /*!< [17..17] DMA Transfer Completion Interrupt Request Mask Clear */ + uint32_t : 14; + } CHCTRL_b; + }; + + union + { + __IOM uint32_t CHCFG; /*!< (@ 0x0000002C) Channel Configuration Register n (n = 0 to 7) */ + + struct + { + __IOM uint32_t SEL : 3; /*!< [2..0] Pin Select */ + __IOM uint32_t REQD : 1; /*!< [3..3] DMA Activation Request Source Select */ + __IOM uint32_t LOEN : 1; /*!< [4..4] L Detection Enable */ + __IOM uint32_t HIEN : 1; /*!< [5..5] H Detection Enable */ + __IOM uint32_t LVL : 1; /*!< [6..6] Level Detection Enable */ + uint32_t : 1; + __IOM uint32_t AM : 3; /*!< [10..8] ACK Mode */ + uint32_t : 1; + __IOM uint32_t SDS : 4; /*!< [15..12] Source Data Size */ + __IOM uint32_t DDS : 4; /*!< [19..16] Destination Data Size */ + __IOM uint32_t SAD : 1; /*!< [20..20] Source Address Count Direction */ + __IOM uint32_t DAD : 1; /*!< [21..21] Destination Address Count Direction */ + __IOM uint32_t TM : 1; /*!< [22..22] Transfer Mode */ + uint32_t : 1; + __IOM uint32_t DEM : 1; /*!< [24..24] DMA Transfer Completion Interrupt Mask */ + __IOM uint32_t TCM : 1; /*!< [25..25] TEND Mask */ + uint32_t : 1; + __IOM uint32_t SBE : 1; /*!< [27..27] Buffer Flush Enable */ + __IOM uint32_t RSEL : 1; /*!< [28..28] Next Register Select */ + __IOM uint32_t RSW : 1; /*!< [29..29] RSEL Reverse */ + __IOM uint32_t REN : 1; /*!< [30..30] Register Set Enable */ + __IOM uint32_t DMS : 1; /*!< [31..31] DMA Mode Select */ + } CHCFG_b; + }; + + union + { + __IOM uint32_t CHITVL; /*!< (@ 0x00000030) Channel Interval Register n (n = 0 to 7) */ + + struct + { + __IOM uint32_t ITVL : 16; /*!< [15..0] Interval */ + uint32_t : 16; + } CHITVL_b; + }; + + union + { + __IOM uint32_t CHEXT; /*!< (@ 0x00000034) Channel Extension Register n (n = 0 to 7) */ + + struct + { + __IOM uint32_t SPR : 3; /*!< [2..0] Source PROT */ + uint32_t : 1; + __IOM uint32_t SCA : 4; /*!< [7..4] Source CACHE */ + __IOM uint32_t DPR : 3; /*!< [10..8] Destination PROT */ + uint32_t : 1; + __IOM uint32_t DCA : 4; /*!< [15..12] Destination CACHE */ + uint32_t : 16; + } CHEXT_b; + }; + __IOM uint32_t NXLA; /*!< (@ 0x00000038) Next Link Address Register n (n = 0 to 7) */ + __IM uint32_t CRLA; /*!< (@ 0x0000003C) Current Link Address Register n (n = 0 to 7) */ +} R_DMAC0_GRP_CH_Type; /*!< Size = 64 (0x40) */ + +/** + * @brief R_DMAC0_GRP [GRP] (8 channel Registers) + */ +typedef struct +{ + __IOM R_DMAC0_GRP_CH_Type CH[8]; /*!< (@ 0x00000000) DMAC channel Control Register [0..7] */ + __IM uint32_t RESERVED[64]; + + union + { + __IOM uint32_t DCTRL; /*!< (@ 0x00000300) DMA Control Register A */ + + struct + { + __IOM uint32_t PR : 1; /*!< [0..0] Priority Control Select */ + __IOM uint32_t LVINT : 1; /*!< [1..1] Sets the interrupt output mode. */ + uint32_t : 30; + } DCTRL_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IM uint32_t DSTAT_EN; /*!< (@ 0x00000310) DMA Status EN Register A */ + + struct + { + __IM uint32_t EN00 : 1; /*!< [0..0] Channel 0 EN */ + __IM uint32_t EN01 : 1; /*!< [1..1] Channel 1 EN */ + __IM uint32_t EN02 : 1; /*!< [2..2] Channel 2 EN */ + __IM uint32_t EN03 : 1; /*!< [3..3] Channel 3 EN */ + __IM uint32_t EN04 : 1; /*!< [4..4] Channel 4 EN */ + __IM uint32_t EN05 : 1; /*!< [5..5] Channel 5 EN */ + __IM uint32_t EN06 : 1; /*!< [6..6] Channel 6 EN */ + __IM uint32_t EN07 : 1; /*!< [7..7] Channel 7 EN */ + uint32_t : 24; + } DSTAT_EN_b; + }; + + union + { + __IM uint32_t DSTAT_ER; /*!< (@ 0x00000314) DMA Status ER Register A */ + + struct + { + __IM uint32_t ER00 : 1; /*!< [0..0] Channel 0 ER */ + __IM uint32_t ER01 : 1; /*!< [1..1] Channel 1 ER */ + __IM uint32_t ER02 : 1; /*!< [2..2] Channel 2 ER */ + __IM uint32_t ER03 : 1; /*!< [3..3] Channel 3 ER */ + __IM uint32_t ER04 : 1; /*!< [4..4] Channel 4 ER */ + __IM uint32_t ER05 : 1; /*!< [5..5] Channel 5 ER */ + __IM uint32_t ER06 : 1; /*!< [6..6] Channel 6 ER */ + __IM uint32_t ER07 : 1; /*!< [7..7] Channel 7 ER */ + uint32_t : 24; + } DSTAT_ER_b; + }; + + union + { + __IM uint32_t DSTAT_END; /*!< (@ 0x00000318) DMA Status END Register A */ + + struct + { + __IM uint32_t END00 : 1; /*!< [0..0] Channel 0 END */ + __IM uint32_t END01 : 1; /*!< [1..1] Channel 1 END */ + __IM uint32_t END02 : 1; /*!< [2..2] Channel 2 END */ + __IM uint32_t END03 : 1; /*!< [3..3] Channel 3 END */ + __IM uint32_t END04 : 1; /*!< [4..4] Channel 4 END */ + __IM uint32_t END05 : 1; /*!< [5..5] Channel 5 END */ + __IM uint32_t END06 : 1; /*!< [6..6] Channel 6 END */ + __IM uint32_t END07 : 1; /*!< [7..7] Channel 7 END */ + uint32_t : 24; + } DSTAT_END_b; + }; + __IM uint32_t RESERVED2; + + union + { + __IM uint32_t DSTAT_SUS; /*!< (@ 0x00000320) DMA Status SUS Register A */ + + struct + { + __IM uint32_t SUS00 : 1; /*!< [0..0] Channel 0 SUS */ + __IM uint32_t SUS01 : 1; /*!< [1..1] Channel 1 SUS */ + __IM uint32_t SUS02 : 1; /*!< [2..2] Channel 2 SUS */ + __IM uint32_t SUS03 : 1; /*!< [3..3] Channel 3 SUS */ + __IM uint32_t SUS04 : 1; /*!< [4..4] Channel 4 SUS */ + __IM uint32_t SUS05 : 1; /*!< [5..5] Channel 5 SUS */ + __IM uint32_t SUS06 : 1; /*!< [6..6] Channel 6 SUS */ + __IM uint32_t SUS07 : 1; /*!< [7..7] Channel 7 SUS */ + uint32_t : 24; + } DSTAT_SUS_b; + }; +} R_DMAC0_GRP_Type; /*!< Size = 804 (0x324) */ + +/** + * @brief R_PORT_DRCTL [DRCTL] (I/O Buffer [0..24] Function Switching Register) + */ +typedef struct +{ + union + { + __IOM uint32_t L; /*!< (@ 0x00000000) I/O Buffer m Function Switching Register 0-3 */ + + struct + { + __IOM uint32_t DRV0 : 2; /*!< [1..0] Pm_0 Driving Ability Control */ + __IOM uint32_t PUD0 : 2; /*!< [3..2] Pm_0 Pull-Up/Down Control */ + __IOM uint32_t SMT0 : 1; /*!< [4..4] Pm_0 Schmitt Trigger Control */ + __IOM uint32_t SR0 : 1; /*!< [5..5] Pm_0 Slew Rate Control */ + uint32_t : 2; + __IOM uint32_t DRV1 : 2; /*!< [9..8] Pm_1 Driving Ability Control */ + __IOM uint32_t PUD1 : 2; /*!< [11..10] Pm_1 Pull-Up/Down Control */ + __IOM uint32_t SMT1 : 1; /*!< [12..12] Pm_1 Schmitt Trigger Control */ + __IOM uint32_t SR1 : 1; /*!< [13..13] Pm_1 Slew Rate Control */ + uint32_t : 2; + __IOM uint32_t DRV2 : 2; /*!< [17..16] Pm_2 Driving Ability Control */ + __IOM uint32_t PUD2 : 2; /*!< [19..18] Pm_2 Pull-Up/Down Control */ + __IOM uint32_t SMT2 : 1; /*!< [20..20] Pm_2 Schmitt Trigger Control */ + __IOM uint32_t SR2 : 1; /*!< [21..21] Pm_2 Slew Rate Control */ + uint32_t : 2; + __IOM uint32_t DRV3 : 2; /*!< [25..24] Pm_3 Driving Ability Control */ + __IOM uint32_t PUD3 : 2; /*!< [27..26] Pm_3 Pull-Up/Down Control */ + __IOM uint32_t SMT3 : 1; /*!< [28..28] Pm_3 Schmitt Trigger Control */ + __IOM uint32_t SR3 : 1; /*!< [29..29] Pm_3 Slew Rate Control */ + uint32_t : 2; + } L_b; + }; + + union + { + __IOM uint32_t H; /*!< (@ 0x00000004) I/O Buffer m Function Switching Register 4-7 */ + + struct + { + __IOM uint32_t DRV4 : 2; /*!< [1..0] Pm_4 Driving Ability Control */ + __IOM uint32_t PUD4 : 2; /*!< [3..2] Pm_4 Pull-Up/Down Control */ + __IOM uint32_t SMT4 : 1; /*!< [4..4] Pm_4 Schmitt Trigger Control */ + __IOM uint32_t SR4 : 1; /*!< [5..5] Pm_4 Slew Rate Control */ + uint32_t : 2; + __IOM uint32_t DRV5 : 2; /*!< [9..8] Pm_5 Driving Ability Control */ + __IOM uint32_t PUD5 : 2; /*!< [11..10] Pm_5 Pull-Up/Down Control */ + __IOM uint32_t SMT5 : 1; /*!< [12..12] Pm_5 Schmitt Trigger Control */ + __IOM uint32_t SR5 : 1; /*!< [13..13] Pm_5 Slew Rate Control */ + uint32_t : 2; + __IOM uint32_t DRV6 : 2; /*!< [17..16] Pm_6 Driving Ability Control */ + __IOM uint32_t PUD6 : 2; /*!< [19..18] Pm_6 Pull-Up/Down Control */ + __IOM uint32_t SMT6 : 1; /*!< [20..20] Pm_6 Schmitt Trigger Control */ + __IOM uint32_t SR6 : 1; /*!< [21..21] Pm_6 Slew Rate Control */ + uint32_t : 2; + __IOM uint32_t DRV7 : 2; /*!< [25..24] Pm_7 Driving Ability Control */ + __IOM uint32_t PUD7 : 2; /*!< [27..26] Pm_7 Pull-Up/Down Control */ + __IOM uint32_t SMT7 : 1; /*!< [28..28] Pm_7 Schmitt Trigger Control */ + __IOM uint32_t SR7 : 1; /*!< [29..29] Pm_7 Slew Rate Control */ + uint32_t : 2; + } H_b; + }; +} R_PORT_DRCTL_Type; /*!< Size = 8 (0x8) */ + +/** + * @brief R_PORT_NSR_ELC_PDBF [ELC_PDBF] (ELC Port Buffer Register [0..1]) + */ +typedef struct +{ + union + { + __IOM uint8_t BY; /*!< (@ 0x00000000) ELC Port Buffer Register n */ + + struct + { + __IOM uint8_t PB0 : 1; /*!< [0..0] Port Buffer 0 */ + __IOM uint8_t PB1 : 1; /*!< [1..1] Port Buffer 1 */ + __IOM uint8_t PB2 : 1; /*!< [2..2] Port Buffer 2 */ + __IOM uint8_t PB3 : 1; /*!< [3..3] Port Buffer 3 */ + __IOM uint8_t PB4 : 1; /*!< [4..4] Port Buffer 4 */ + __IOM uint8_t PB5 : 1; /*!< [5..5] Port Buffer 5 */ + __IOM uint8_t PB6 : 1; /*!< [6..6] Port Buffer 6 */ + __IOM uint8_t PB7 : 1; /*!< [7..7] Port Buffer 7 */ + } BY_b; + }; + __IM uint8_t RESERVED[3]; +} R_PORT_NSR_ELC_PDBF_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_ETHSW_PTP_SWTM [SWTM] (Ethernet Switch Timer output pins 0-3 Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t EN; /*!< (@ 0x00000000) PTP Timer Pulse Output Enable n Register */ + + struct + { + __IOM uint32_t OUTEN : 1; /*!< [0..0] Enable ETHSW_PTPOUTn Signal Output */ + uint32_t : 31; + } EN_b; + }; + + union + { + __IOM uint32_t STSEC; /*!< (@ 0x00000004) PTP Timer Pulse Start Second n Register */ + + struct + { + __IOM uint32_t STSEC : 32; /*!< [31..0] STSEC */ + } STSEC_b; + }; + + union + { + __IOM uint32_t STNS; /*!< (@ 0x00000008) PTP Timer Pulse Start Nanosecond n Register */ + + struct + { + __IOM uint32_t STNS : 32; /*!< [31..0] Start Time by Nanosecond */ + } STNS_b; + }; + + union + { + __IOM uint32_t PSEC; /*!< (@ 0x0000000C) PTP Timer Pulse Period Second n Register */ + + struct + { + __IOM uint32_t PSEC : 32; /*!< [31..0] PSEC */ + } PSEC_b; + }; + + union + { + __IOM uint32_t PNS; /*!< (@ 0x00000010) PTP Timer Pulse Period Nanosecond n Register */ + + struct + { + __IOM uint32_t PNS : 32; /*!< [31..0] Period by Nanosecond */ + } PNS_b; + }; + + union + { + __IOM uint32_t WTH; /*!< (@ 0x00000014) PTP Timer Pulse Width n Register */ + + struct + { + __IOM uint32_t WIDTH : 16; /*!< [15..0] Set the Pulse Width of ETHSW_PTPOUTn in the cycle number + * of ts_clk (8 ns). */ + uint32_t : 16; + } WTH_b; + }; + + union + { + __IOM uint32_t MAXP; /*!< (@ 0x00000018) PTP Timer Pulse Max Second n Register */ + + struct + { + __IOM uint32_t MAXP : 32; /*!< [31..0] Sets the boundary value in nanoseconds to carry from + * the nanosecond field to the second field. The same value + * as ATIME_EVT_PERIOD register must be set. */ + } MAXP_b; + }; + + union + { + __IOM uint32_t LATSEC; /*!< (@ 0x0000001C) PTP Timer Pulse Latch Second n Register */ + + struct + { + __IOM uint32_t LATSEC : 32; /*!< [31..0] LATSEC */ + } LATSEC_b; + }; + + union + { + __IOM uint32_t LATNS; /*!< (@ 0x00000020) PTP Timer Pulse Latch Nanosecond n Register */ + + struct + { + __IOM uint32_t LATNS : 32; /*!< [31..0] LATNS */ + } LATNS_b; + }; + __IM uint32_t RESERVED[55]; +} R_ETHSW_PTP_SWTM_Type; /*!< Size = 256 (0x100) */ + +/** + * @brief R_ETHSW_MGMT_ADDR [MGMT_ADDR] (MAC Address [0..3] for Bridge Protocol Frame Register) + */ +typedef struct +{ + union + { + __IOM uint32_t lo; /*!< (@ 0x00000000) Lower MAC Address */ + + struct + { + __IOM uint32_t BPDU_DST : 32; /*!< [31..0] Additional MAC address defining a Bridge Protocol Frame + * (BPDU) in addition to the commonly-known addresses */ + } lo_b; + }; + + union + { + __IOM uint32_t hi; /*!< (@ 0x00000004) Higher MAC Address */ + + struct + { + __IOM uint32_t BPDU_DST : 16; /*!< [15..0] Bits [7:0] is 5th byte, bits [15:8] is 6th (last) byte */ + __IOM uint32_t MASK : 8; /*!< [23..16] 8-bit mask for comparing the last byte of the MAC address. */ + uint32_t : 8; + } hi_b; + }; +} R_ETHSW_MGMT_ADDR_Type; /*!< Size = 8 (0x8) */ + +/** + * @brief R_ESC_FMMU [FMMU] (FMMU [0..7] Registers (n = 0 to 7)) + */ +typedef struct +{ + union + { + __IM uint32_t L_START_ADR; /*!< (@ 0x00000000) FMMU Logical Start Address n Register (n = 0 + * to 7) */ + + struct + { + __IM uint32_t LSTAADR : 32; /*!< [31..0] Logical Start Address Setting */ + } L_START_ADR_b; + }; + + union + { + __IM uint16_t LEN; /*!< (@ 0x00000004) FMMU Length n Register (n = 0 to 7) */ + + struct + { + __IM uint16_t FMMULEN : 16; /*!< [15..0] Area Size Specification */ + } LEN_b; + }; + + union + { + __IM uint8_t L_START_BIT; /*!< (@ 0x00000006) FMMU Logical Start Bit n Register (n = 0 to 7) */ + + struct + { + __IM uint8_t LSTABIT : 3; /*!< [2..0] Start Bit Setting */ + uint8_t : 5; + } L_START_BIT_b; + }; + + union + { + __IM uint8_t L_STOP_BIT; /*!< (@ 0x00000007) FMMU Logical Stop Bit n Register (n = 0 to 7) */ + + struct + { + __IM uint8_t LSTPBIT : 3; /*!< [2..0] Last Bit Setting */ + uint8_t : 5; + } L_STOP_BIT_b; + }; + + union + { + __IM uint16_t P_START_ADR; /*!< (@ 0x00000008) FMMU Physical Start Address n Register (n = 0 + * to 7) */ + + struct + { + __IM uint16_t PHYSTAADR : 16; /*!< [15..0] Physical Start Address Setting */ + } P_START_ADR_b; + }; + + union + { + __IM uint8_t P_START_BIT; /*!< (@ 0x0000000A) FMMU Physical Start Bit n Register (n = 0 to + * 7) */ + + struct + { + __IM uint8_t PHYSTABIT : 3; /*!< [2..0] Physical Start Bit Setting */ + uint8_t : 5; + } P_START_BIT_b; + }; + + union + { + __IM uint8_t TYPE; /*!< (@ 0x0000000B) FMMU Type n Register (n = 0 to 7) */ + + struct + { + __IM uint8_t READ : 1; /*!< [0..0] Read Access Mapping Setting */ + __IM uint8_t WRITE : 1; /*!< [1..1] Write Access Mapping Setting */ + uint8_t : 6; + } TYPE_b; + }; + + union + { + __IM uint8_t ACT; /*!< (@ 0x0000000C) FMMU Activate n Register (n = 0 to 7) */ + + struct + { + __IM uint8_t ACTIVATE : 1; /*!< [0..0] FMMU Enable/Disable */ + uint8_t : 7; + } ACT_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; +} R_ESC_FMMU_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_ESC_SM [SM] (SyncManager [0..7] Registers (n = 0 to 7)) + */ +typedef struct +{ + union + { + __IM uint16_t P_START_ADR; /*!< (@ 0x00000000) SyncManager Physical Start Address n Register + * (n = 0 to 7) */ + + struct + { + __IM uint16_t SMSTAADDR : 16; /*!< [15..0] Physical Start Address Setting */ + } P_START_ADR_b; + }; + + union + { + __IM uint16_t LEN; /*!< (@ 0x00000002) SyncManager Length n Register (n = 0 to 7) */ + + struct + { + __IM uint16_t SMLEN : 16; /*!< [15..0] Area Size Setting */ + } LEN_b; + }; + + union + { + __IM uint8_t CONTROL; /*!< (@ 0x00000004) SyncManager Control n Register (n = 0 to 7) */ + + struct + { + __IM uint8_t OPEMODE : 2; /*!< [1..0] Operating Mode Setting */ + __IM uint8_t DIR : 2; /*!< [3..2] Transfer Direction Setting */ + __IM uint8_t IRQECAT : 1; /*!< [4..4] ECAT Event Interrupt Setting */ + __IM uint8_t IRQPDI : 1; /*!< [5..5] AL Event Interrupt Setting */ + __IM uint8_t WDTRGEN : 1; /*!< [6..6] Watchdog Trigger Setting */ + uint8_t : 1; + } CONTROL_b; + }; + + union + { + __IM uint8_t STATUS; /*!< (@ 0x00000005) SyncManager Status n Register (n = 0 to 7) */ + + struct + { + __IM uint8_t INTWR : 1; /*!< [0..0] Write Complete Interrupt State Indication */ + __IM uint8_t INTRD : 1; /*!< [1..1] Read Complete Interrupt State Indication */ + uint8_t : 1; + __IM uint8_t MAILBOX : 1; /*!< [3..3] Mailbox Status Indication */ + __IM uint8_t BUFFERED : 2; /*!< [5..4] Buffer Status Indication */ + __IM uint8_t RDBUF : 1; /*!< [6..6] Read State Indication */ + __IM uint8_t WRBUF : 1; /*!< [7..7] Write State Indication */ + } STATUS_b; + }; + + union + { + __IM uint8_t ACT; /*!< (@ 0x00000006) SyncManager Activate n Register (n = 0 to 7) */ + + struct + { + __IM uint8_t SMEN : 1; /*!< [0..0] SyncManager Enable/Disable */ + __IM uint8_t REPEATREQ : 1; /*!< [1..1] Repeat Request */ + uint8_t : 4; + __IM uint8_t LATCHECAT : 1; /*!< [6..6] ECAT Latch Event Specification */ + __IM uint8_t LATCHPDI : 1; /*!< [7..7] PDI Latch Event Specification */ + } ACT_b; + }; + + union + { + __IOM uint8_t PDI_CONT; /*!< (@ 0x00000007) SyncManager PDI Control n Register (n = 0 to + * 7) */ + + struct + { + __IOM uint8_t DEACTIVE : 1; /*!< [0..0] SyncManager Operation Indication/Setting */ + __IOM uint8_t REPEATACK : 1; /*!< [1..1] Repeat Acknowledge */ + uint8_t : 6; + } PDI_CONT_b; + }; +} R_ESC_SM_Type; /*!< Size = 8 (0x8) */ + +/** + * @brief R_USBF_PIPE_TR [PIPE_TR] (PIPEn Transaction Counter Registers (n=1-5)) + */ +typedef struct +{ + union + { + __IOM uint16_t E; /*!< (@ 0x00000000) PIPEn Transaction Counter Enable Register */ + + struct + { + uint16_t : 8; + __IOM uint16_t TRCLR : 1; /*!< [8..8] Transaction Counter Clear */ + __IOM uint16_t TRENB : 1; /*!< [9..9] Transaction Counter Enable */ + uint16_t : 6; + } E_b; + }; + + union + { + __IOM uint16_t N; /*!< (@ 0x00000002) PIPEn Transaction Counter Register */ + + struct + { + __IOM uint16_t TRNCNT : 16; /*!< [15..0] Transaction Counter */ + } N_b; + }; +} R_USBF_PIPE_TR_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_USBF_CHa_N [N] (Address Registers n (n=0-1)) + */ +typedef struct +{ + union + { + __IOM uint32_t SA; /*!< (@ 0x00000000) Next Source Address Register */ + + struct + { + __IOM uint32_t SAWD : 32; /*!< [31..0] Source Address or Write Data */ + } SA_b; + }; + + union + { + __IOM uint32_t DA; /*!< (@ 0x00000004) Next Destination Address Register */ + + struct + { + __IOM uint32_t DA : 32; /*!< [31..0] Destination Address */ + } DA_b; + }; + + union + { + __IOM uint32_t TB; /*!< (@ 0x00000008) Next Transaction Byte Register */ + + struct + { + __IOM uint32_t TB : 32; /*!< [31..0] Transaction Byte */ + } TB_b; + }; +} R_USBF_CHa_N_Type; /*!< Size = 12 (0xc) */ + +/** + * @brief R_USBF_CHa [CHa] (Next Register Set) + */ +typedef struct +{ + __IOM R_USBF_CHa_N_Type N[2]; /*!< (@ 0x00000000) Address Registers n (n=0-1) */ + + union + { + __IM uint32_t CRSA; /*!< (@ 0x00000018) Current Source Address Register */ + + struct + { + __IM uint32_t CRSA : 32; /*!< [31..0] Source Address */ + } CRSA_b; + }; + + union + { + __IM uint32_t CRDA; /*!< (@ 0x0000001C) Current Destination Address Register */ + + struct + { + __IM uint32_t CRDA : 32; /*!< [31..0] Destination Address */ + } CRDA_b; + }; + + union + { + __IM uint32_t CRTB; /*!< (@ 0x00000020) Current Transaction Byte Register */ + + struct + { + __IM uint32_t CRTB : 32; /*!< [31..0] Transaction Byte */ + } CRTB_b; + }; + + union + { + __IM uint32_t CHSTAT; /*!< (@ 0x00000024) Channel Status Register */ + + struct + { + __IM uint32_t EN : 1; /*!< [0..0] Enable */ + __IM uint32_t RQST : 1; /*!< [1..1] Request */ + __IM uint32_t TACT : 1; /*!< [2..2] Transaction Active */ + __IM uint32_t SUS : 1; /*!< [3..3] Suspend */ + __IM uint32_t ER : 1; /*!< [4..4] Error */ + __IM uint32_t END : 1; /*!< [5..5] USB_FDMAn Interrupted */ + __IM uint32_t TC : 1; /*!< [6..6] Terminal Count */ + __IM uint32_t SR : 1; /*!< [7..7] Selected Register Set */ + __IM uint32_t DL : 1; /*!< [8..8] Descriptor Load */ + __IM uint32_t DW : 1; /*!< [9..9] Descriptor WriteBack */ + __IM uint32_t DER : 1; /*!< [10..10] Descriptor Error */ + __IM uint32_t MODE : 1; /*!< [11..11] DMA Mode */ + uint32_t : 4; + __IM uint32_t INTM : 1; /*!< [16..16] Interrupt Mask */ + __IM uint32_t DMARQM : 1; /*!< [17..17] DMAREQ Mask */ + __IM uint32_t SWPRQ : 1; /*!< [18..18] Sweep Request */ + uint32_t : 5; + __IM uint32_t DNUM : 8; /*!< [31..24] Data Number */ + } CHSTAT_b; + }; + + union + { + __OM uint32_t CHCTRL; /*!< (@ 0x00000028) Channel Control Register */ + + struct + { + __OM uint32_t SETEN : 1; /*!< [0..0] Set Enable */ + __OM uint32_t CLREN : 1; /*!< [1..1] Clear Enable */ + __OM uint32_t STG : 1; /*!< [2..2] Software Trigger */ + __OM uint32_t SWRST : 1; /*!< [3..3] Software Reset */ + __OM uint32_t CLRRQ : 1; /*!< [4..4] Clear Request */ + __OM uint32_t CLREND : 1; /*!< [5..5] Clear End */ + __OM uint32_t CLRTC : 1; /*!< [6..6] Clear TC */ + __OM uint32_t CLRDER : 1; /*!< [7..7] Clear DER */ + __OM uint32_t SETSUS : 1; /*!< [8..8] Set Suspend */ + __OM uint32_t CLRSUS : 1; /*!< [9..9] Clear Suspend */ + uint32_t : 2; + __OM uint32_t SETREN : 1; /*!< [12..12] Set Register Set Enable */ + uint32_t : 1; + __OM uint32_t SETSSWPRQ : 1; /*!< [14..14] Set Software Sweep Request */ + uint32_t : 1; + __OM uint32_t SETINTM : 1; /*!< [16..16] Set Interrupt Mask */ + __OM uint32_t CLRINTM : 1; /*!< [17..17] Clear Interrupt Mask */ + __OM uint32_t SETDMARQM : 1; /*!< [18..18] SET DMAREQ Mask */ + __OM uint32_t CLRDMARQM : 1; /*!< [19..19] Clear DMAREQ Mask */ + uint32_t : 12; + } CHCTRL_b; + }; + + union + { + __IOM uint32_t CHCFG; /*!< (@ 0x0000002C) Channel Configuration Register */ + + struct + { + __IOM uint32_t SEL : 1; /*!< [0..0] Terminal Select */ + uint32_t : 2; + __IOM uint32_t REQD : 1; /*!< [3..3] Request Direction */ + __IOM uint32_t LOEN : 1; /*!< [4..4] Sets the transfer request signal between the USB control + * and the DMAC. */ + __IOM uint32_t HIEN : 1; /*!< [5..5] Sets the transfer request signal between the USB control + * and the DMAC. */ + __IOM uint32_t LVL : 1; /*!< [6..6] Sets the transfer request signal between the USB control + * and the DMAC. */ + uint32_t : 1; + __IOM uint32_t AM : 3; /*!< [10..8] These bits set the transfer request signal between the + * USB control and the DMAC. */ + __IOM uint32_t DRRP : 1; /*!< [11..11] Descriptor Read Repeat */ + __IOM uint32_t SDS : 4; /*!< [15..12] Source Data Size */ + __IOM uint32_t DDS : 4; /*!< [19..16] Destination Data Size */ + __IOM uint32_t SAD : 1; /*!< [20..20] Source Address Direction */ + __IOM uint32_t DAD : 1; /*!< [21..21] Destination Address Direction */ + __IOM uint32_t TM : 1; /*!< [22..22] Sets the transfer request signal between the USB control + * and the DMAC. */ + __IOM uint32_t WONLY : 1; /*!< [23..23] Write Only Mode */ + __IOM uint32_t DEM : 1; /*!< [24..24] USB_FDMAn Mask */ + uint32_t : 1; + __IOM uint32_t DIM : 1; /*!< [26..26] Descriptor Interrupt Mask */ + __IOM uint32_t SBE : 1; /*!< [27..27] Sweep Buffer Enable */ + __IOM uint32_t RSEL : 1; /*!< [28..28] Register Set Select */ + __IOM uint32_t RSW : 1; /*!< [29..29] Register Select Switch */ + __IOM uint32_t REN : 1; /*!< [30..30] Register Set Enable */ + __IOM uint32_t DMS : 1; /*!< [31..31] DMA Mode Select */ + } CHCFG_b; + }; + + union + { + __IOM uint32_t CHITVL; /*!< (@ 0x00000030) Channel Interval Register */ + + struct + { + __IOM uint32_t ITVL : 16; /*!< [15..0] Interval */ + uint32_t : 16; + } CHITVL_b; + }; + + union + { + __IOM uint32_t CHEXT; /*!< (@ 0x00000034) Channel Extension Register */ + + struct + { + __IOM uint32_t SPR : 4; /*!< [3..0] Source PROT */ + uint32_t : 4; + __IOM uint32_t DPR : 4; /*!< [11..8] Destination PROT */ + uint32_t : 20; + } CHEXT_b; + }; + + union + { + __IOM uint32_t NXLA; /*!< (@ 0x00000038) Next Link Address Register */ + + struct + { + __IOM uint32_t NXLA : 32; /*!< [31..0] Next Link Address */ + } NXLA_b; + }; + + union + { + __IM uint32_t CRLA; /*!< (@ 0x0000003C) Current Link Address Register */ + + struct + { + __IM uint32_t CRLA : 32; /*!< [31..0] Current Link Address */ + } CRLA_b; + }; +} R_USBF_CHa_Type; /*!< Size = 64 (0x40) */ + +/** + * @brief R_USBF_CHb [CHb] (Skip Register Set) + */ +typedef struct +{ + union + { + __IOM uint32_t SCNT; /*!< (@ 0x00000000) Source Continuous Register */ + + struct + { + __IOM uint32_t SCNT : 32; /*!< [31..0] Source Continuous */ + } SCNT_b; + }; + + union + { + __IOM uint32_t SSKP; /*!< (@ 0x00000004) Source Skip Register */ + + struct + { + __IOM uint32_t SSKP : 32; /*!< [31..0] Source Skip */ + } SSKP_b; + }; + + union + { + __IOM uint32_t DCNT; /*!< (@ 0x00000008) Destination Continuous Register */ + + struct + { + __IOM uint32_t DCNT : 32; /*!< [31..0] Destination Continuous */ + } DCNT_b; + }; + + union + { + __IOM uint32_t DSKP; /*!< (@ 0x0000000C) Destination Skip Register */ + + struct + { + __IOM uint32_t DSKP : 32; /*!< [31..0] Destination Skip */ + } DSKP_b; + }; + __IM uint32_t RESERVED[4]; +} R_USBF_CHb_Type; /*!< Size = 32 (0x20) */ + +/** + * @brief R_XSPI0_CSa [CSa] (xSPI Command Map Configuration Register [0..1]) + */ +typedef struct +{ + union + { + __IOM uint32_t CMCFG0; /*!< (@ 0x00000000) xSPI Command Map Configuration Register 0 CSn */ + + struct + { + __IOM uint32_t FFMT : 2; /*!< [1..0] Frame format */ + __IOM uint32_t ADDSIZE : 2; /*!< [3..2] Address size */ + uint32_t : 12; + __IOM uint32_t ADDRPEN : 8; /*!< [23..16] Address Replace Enable */ + __IOM uint32_t ADDRPCD : 8; /*!< [31..24] Address Replace Code */ + } CMCFG0_b; + }; + + union + { + __IOM uint32_t CMCFG1; /*!< (@ 0x00000004) xSPI Command Map Configuration Register 1 CSn */ + + struct + { + __IOM uint32_t RDCMD : 16; /*!< [15..0] Read command */ + __IOM uint32_t RDLATE : 5; /*!< [20..16] Read latency cycle */ + uint32_t : 11; + } CMCFG1_b; + }; + + union + { + __IOM uint32_t CMCFG2; /*!< (@ 0x00000008) xSPI Command Map Configuration Register 2 CSn */ + + struct + { + __IOM uint32_t WRCMD : 16; /*!< [15..0] Write command */ + __IOM uint32_t WRLATE : 5; /*!< [20..16] Write latency cycle */ + uint32_t : 11; + } CMCFG2_b; + }; + __IM uint32_t RESERVED; +} R_XSPI0_CSa_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_XSPI0_BUF [BUF] (xSPI Command Manual Buf [0..3]) + */ +typedef struct +{ + union + { + __IOM uint32_t CDT; /*!< (@ 0x00000000) xSPI Command Manual Type Buf */ + + struct + { + __IOM uint32_t CMDSIZE : 2; /*!< [1..0] Command Size */ + __IOM uint32_t ADDSIZE : 3; /*!< [4..2] Address size */ + __IOM uint32_t DATASIZE : 4; /*!< [8..5] Write/Read Data Size */ + __IOM uint32_t LATE : 5; /*!< [13..9] Latency cycle */ + uint32_t : 1; + __IOM uint32_t TRTYPE : 1; /*!< [15..15] Transaction Type */ + __IOM uint32_t CMD : 16; /*!< [31..16] Command (1-2 bytes) */ + } CDT_b; + }; + + union + { + __IOM uint32_t CDA; /*!< (@ 0x00000004) xSPI Command Manual Address Buf */ + + struct + { + __IOM uint32_t ADD : 32; /*!< [31..0] Address */ + } CDA_b; + }; + + union + { + __IOM uint32_t CDD0; /*!< (@ 0x00000008) xSPI Command Manual Data 0 Buf */ + + struct + { + __IOM uint32_t DATA : 32; /*!< [31..0] Write/Read Data */ + } CDD0_b; + }; + + union + { + __IOM uint32_t CDD1; /*!< (@ 0x0000000C) xSPI Command Manual Data 1 Buf */ + + struct + { + __IOM uint32_t DATA : 32; /*!< [31..0] Write/Read Data */ + } CDD1_b; + }; +} R_XSPI0_BUF_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_XSPI0_CSb [CSb] (xSPI Command Calibration Control register [0..1]) + */ +typedef struct +{ + union + { + __IOM uint32_t CCCTL0; /*!< (@ 0x00000000) xSPI Command Calibration Control Register 0 CSn */ + + struct + { + __IOM uint32_t CAEN : 1; /*!< [0..0] Automatic Calibration Enable */ + __IOM uint32_t CANOWR : 1; /*!< [1..1] Calibration no write mode */ + uint32_t : 6; + __IOM uint32_t CAITV : 5; /*!< [12..8] Calibration interval */ + uint32_t : 3; + __IOM uint32_t CASFTSTA : 5; /*!< [20..16] Calibration DS shift start value */ + uint32_t : 3; + __IOM uint32_t CASFTEND : 5; /*!< [28..24] Calibration DS shift end value */ + uint32_t : 3; + } CCCTL0_b; + }; + + union + { + __IOM uint32_t CCCTL1; /*!< (@ 0x00000004) xSPI Command Calibration Control Register 1 CSn */ + + struct + { + __IOM uint32_t CACMDSIZE : 2; /*!< [1..0] Command Size */ + __IOM uint32_t CAADDSIZE : 3; /*!< [4..2] Address size */ + __IOM uint32_t CADATASIZE : 4; /*!< [8..5] Write/Read Data Size */ + uint32_t : 7; + __IOM uint32_t CAWRLATE : 5; /*!< [20..16] Write Latency cycle */ + uint32_t : 3; + __IOM uint32_t CARDLATE : 5; /*!< [28..24] Read Latency cycle */ + uint32_t : 3; + } CCCTL1_b; + }; + + union + { + __IOM uint32_t CCCTL2; /*!< (@ 0x00000008) xSPI Command Calibration Control Register 2 CSn */ + + struct + { + __IOM uint32_t CAWRCMD : 16; /*!< [15..0] Calibration pattern write command */ + __IOM uint32_t CARDCMD : 16; /*!< [31..16] Calibration pattern read command */ + } CCCTL2_b; + }; + + union + { + __IOM uint32_t CCCTL3; /*!< (@ 0x0000000C) xSPI Command Calibration Control Register 3 CSn */ + + struct + { + __IOM uint32_t CAADD : 32; /*!< [31..0] Calibration pattern address */ + } CCCTL3_b; + }; + + union + { + __IOM uint32_t CCCTL4; /*!< (@ 0x00000010) xSPI Command Calibration Control Register 4 CSn */ + + struct + { + __IOM uint32_t CADATA : 32; /*!< [31..0] Calibration pattern data */ + } CCCTL4_b; + }; + + union + { + __IOM uint32_t CCCTL5; /*!< (@ 0x00000014) xSPI Command Calibration Control Register 5 CSn */ + + struct + { + __IOM uint32_t CADATA : 32; /*!< [31..0] Calibration pattern data */ + } CCCTL5_b; + }; + + union + { + __IOM uint32_t CCCTL6; /*!< (@ 0x00000018) xSPI Command Calibration Control Register 6 CSn */ + + struct + { + __IOM uint32_t CADATA : 32; /*!< [31..0] Calibration pattern data */ + } CCCTL6_b; + }; + + union + { + __IOM uint32_t CCCTL7; /*!< (@ 0x0000001C) xSPI Command Calibration Control Register 7 CSn */ + + struct + { + __IOM uint32_t CADATA : 32; /*!< [31..0] Calibration pattern data */ + } CCCTL7_b; + }; +} R_XSPI0_CSb_Type; /*!< Size = 32 (0x20) */ + +/** + * @brief R_SYSRAM0_W [W] (System SRAM Wn Registers (n = 0 to 3)) + */ +typedef struct +{ + union + { + __IOM uint32_t EC710CTL; /*!< (@ 0x00000000) ECC Control Register */ + + struct + { + __IM uint32_t ECEMF : 1; /*!< [0..0] ECC Error Indicate Flag */ + __IM uint32_t ECER1F : 1; /*!< [1..1] 1-Bit ECC Error Detection/Correction Flag */ + __IM uint32_t ECER2F : 1; /*!< [2..2] 2-Bit ECC Error Detection Flag */ + __IOM uint32_t EC1EDIC : 1; /*!< [3..3] 1-Bit ECC Error Detection Interrupt Control */ + __IOM uint32_t EC2EDIC : 1; /*!< [4..4] 2-Bit ECC Error Detection Interrupt Control */ + __IOM uint32_t EC1ECP : 1; /*!< [5..5] 1-Bit ECC Error Correction Enable */ + __IOM uint32_t ECERVF : 1; /*!< [6..6] ECC Error Determination Enable */ + __IOM uint32_t ECTHM : 1; /*!< [7..7] ECC Function Through Mode Enable */ + uint32_t : 1; + __IOM uint32_t ECER1C : 1; /*!< [9..9] 1-Bit ECC Error Detection Clear */ + __IOM uint32_t ECER2C : 1; /*!< [10..10] 2-Bit ECC Error Detection Clear */ + __IM uint32_t ECOVFF : 1; /*!< [11..11] ECC Error Address Capture Overflow Flag */ + uint32_t : 2; + __IOM uint32_t EMCA : 2; /*!< [15..14] Access Control to ECC Mode Selection */ + __IM uint32_t ECEDF0 : 2; /*!< [17..16] ECC Error Address Capture Flag m (m = 0) */ + __IM uint32_t ECEDF1 : 2; /*!< [19..18] ECC Error Address Capture Flag m (m = 1) */ + __IM uint32_t ECEDF2 : 2; /*!< [21..20] ECC Error Address Capture Flag m (m = 2) */ + __IM uint32_t ECEDF3 : 2; /*!< [23..22] ECC Error Address Capture Flag m (m = 3) */ + __IM uint32_t ECEDF4 : 2; /*!< [25..24] ECC Error Address Capture Flag m (m = 4) */ + __IM uint32_t ECEDF5 : 2; /*!< [27..26] ECC Error Address Capture Flag m (m = 5) */ + __IM uint32_t ECEDF6 : 2; /*!< [29..28] ECC Error Address Capture Flag m (m = 6) */ + __IM uint32_t ECEDF7 : 2; /*!< [31..30] ECC Error Address Capture Flag m (m = 7) */ + } EC710CTL_b; + }; + + union + { + __IOM uint32_t EC710TMC; /*!< (@ 0x00000004) ECC Test Mode Control Register */ + + struct + { + __IOM uint32_t ECREIS : 1; /*!< [0..0] ECC Redundancy Bit Input Data Select */ + __IOM uint32_t ECDCS : 1; /*!< [1..1] ECC Decode Input Select */ + __IOM uint32_t ECENS : 1; /*!< [2..2] ECC Encode Input Select */ + __IOM uint32_t ECREOS : 1; /*!< [3..3] ECC Redundancy Bit Output Data Select */ + __IOM uint32_t ECTRRS : 1; /*!< [4..4] RAM Read Test Mode Select */ + uint32_t : 2; + __IOM uint32_t ECTMCE : 1; /*!< [7..7] Test Mode Enable */ + uint32_t : 6; + __IOM uint32_t ETMA : 2; /*!< [15..14] ECTMCE Write Enable */ + uint32_t : 16; + } EC710TMC_b; + }; + + union + { + __IOM uint32_t EC710TRC; /*!< (@ 0x00000008) ECC Redundancy Bit Data Control Test Register */ + + struct + { + __IOM uint32_t ECERDB : 7; /*!< [6..0] ECC Redundancy Bit Input/Output Substitute Buffer Register */ + uint32_t : 1; + __IM uint32_t ECECRD : 7; /*!< [14..8] ECC Encode Test Register */ + uint32_t : 1; + __IM uint32_t ECHORD : 7; /*!< [22..16] ECC 7-Redundancy-Bit Data Retain Test Register */ + uint32_t : 1; + __IM uint32_t ECSYND : 7; /*!< [30..24] ECC Decode Syndrome Register */ + uint32_t : 1; + } EC710TRC_b; + }; + + union + { + __IOM uint32_t EC710TED; /*!< (@ 0x0000000C) ECC Encode/Decode Input/Output Switchover Test + * Register */ + + struct + { + __IOM uint32_t ECEDB : 32; /*!< [31..0] 32-Bit Data Test Register for ECC Encode/Decode */ + } EC710TED_b; + }; + + union + { + __IM uint32_t EC710EAD[8]; /*!< (@ 0x00000010) ECC Error Address [0..7] Register 0 */ + + struct + { + __IM uint32_t ECEAD : 15; /*!< [14..0] Bit Error Address */ + uint32_t : 17; + } EC710EAD_b[8]; + }; + __IM uint32_t RESERVED[4]; +} R_SYSRAM0_W_Type; /*!< Size = 64 (0x40) */ + +/** + * @brief R_MPU0_RGN [RGN] (Master MPU Safety Region Start Address Register [0..7]) + */ +typedef struct +{ + union + { + __IOM uint32_t STADD; /*!< (@ 0x00000000) Master MPU Safety Region Start Address Register */ + + struct + { + __IOM uint32_t RDPR : 1; /*!< [0..0] Enable read protection for region m of master MPU */ + __IOM uint32_t WRPR : 1; /*!< [1..1] Enable write protection for region m of master MPU */ + uint32_t : 8; + __IOM uint32_t STADDR : 22; /*!< [31..10] Start address for MPU region */ + } STADD_b; + }; + + union + { + __IOM uint32_t ENDADD; /*!< (@ 0x00000004) Master MPU Safety Region End Address Register */ + + struct + { + uint32_t : 10; + __IOM uint32_t ENDADDR : 22; /*!< [31..10] End address for MPU region */ + } ENDADD_b; + }; + __IM uint32_t RESERVED[2]; +} R_MPU0_RGN_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_DSMIF0_CH [CH] (Channel Registers [0..2]) + */ +typedef struct +{ + union + { + __IOM uint32_t DSICR; /*!< (@ 0x00000000) Interrupt Control Register */ + + struct + { + __IOM uint32_t IOEL : 1; /*!< [0..0] Overcurrent lower limit detection interrupt enable */ + __IOM uint32_t IOEH : 1; /*!< [1..1] Overcurrent upper limit exceeded output interrupt enable */ + __IOM uint32_t ISE : 1; /*!< [2..2] Short circuit detection error interrupt enable */ + __IOM uint32_t IUE : 1; /*!< [3..3] Current data register update interrupt enable */ + uint32_t : 28; + } DSICR_b; + }; + + union + { + __IOM uint32_t DSCMCCR; /*!< (@ 0x00000004) Current Measurement Clock Control Register */ + + struct + { + __IOM uint32_t CKDIR : 1; /*!< [0..0] A/D conversion clock master/slave switching */ + uint32_t : 6; + __IOM uint32_t SEDGE : 1; /*!< [7..7] Sampling edge selection */ + __IOM uint32_t CKDIV : 6; /*!< [13..8] A/D conversion clock division ratio */ + uint32_t : 18; + } DSCMCCR_b; + }; + + union + { + __IOM uint32_t DSCMFCR; /*!< (@ 0x00000008) Current Measurement Filter Control Register */ + + struct + { + __IOM uint32_t CMSINC : 2; /*!< [1..0] Current measurement filter order setting */ + uint32_t : 6; + __IOM uint32_t CMDEC : 8; /*!< [15..8] Decimation ratio selection for current measurement */ + __IOM uint32_t CMSH : 5; /*!< [20..16] Data shift setting for current measurement */ + uint32_t : 11; + } DSCMFCR_b; + }; + + union + { + __IOM uint32_t DSCMCTCR; /*!< (@ 0x0000000C) Current Measurement Capture Trigger Control Register */ + + struct + { + __IOM uint32_t CTSELA : 3; /*!< [2..0] Current capture trigger A selection bit */ + uint32_t : 5; + __IOM uint32_t CTSELB : 3; /*!< [10..8] Current capture trigger B selection bit */ + uint32_t : 5; + __IOM uint32_t DITSEL : 2; /*!< [17..16] Current measurement filter initialization trigger selection + * bit for frequency division counter for decimation. */ + uint32_t : 5; + __IOM uint32_t DEDGE : 1; /*!< [23..23] Current measurement filter initialization trigger for + * division counter for decimation edge selection bit. The + * trigger from ELC is usually used positive edge. Change + * from the initial value if necessary. */ + uint32_t : 8; + } DSCMCTCR_b; + }; + + union + { + __IOM uint32_t DSEDCR; /*!< (@ 0x00000010) Error Detect Control Register */ + + struct + { + __IOM uint32_t SDE : 1; /*!< [0..0] Short circuit detection enable bit */ + uint32_t : 31; + } DSEDCR_b; + }; + + union + { + __IOM uint32_t DSOCFCR; /*!< (@ 0x00000014) Overcurrent Detect Filter Control Register */ + + struct + { + __IOM uint32_t OCSINC : 2; /*!< [1..0] Overcurrent detection filter order setting */ + uint32_t : 6; + __IOM uint32_t OCDEC : 8; /*!< [15..8] Decimation ratio selection for overcurrent detection */ + __IOM uint32_t OCSH : 5; /*!< [20..16] Data shift setting for overcurrent detection */ + uint32_t : 11; + } DSOCFCR_b; + }; + + union + { + __IOM uint32_t DSOCLTR; /*!< (@ 0x00000018) Overcurrent Low Threshold Register */ + + struct + { + __IOM uint32_t OCMPTBL : 16; /*!< [15..0] Overcurrent detection lower limit */ + uint32_t : 16; + } DSOCLTR_b; + }; + + union + { + __IOM uint32_t DSOCHTR; /*!< (@ 0x0000001C) Overcurrent High Threshold Register */ + + struct + { + __IOM uint32_t OCMPTBH : 16; /*!< [15..0] Overcurrent detection upper limit */ + uint32_t : 16; + } DSOCHTR_b; + }; + + union + { + __IOM uint32_t DSSCTSR; /*!< (@ 0x00000020) Short Circuit Threshold Setting Register */ + + struct + { + __IOM uint32_t SCNTL : 13; /*!< [12..0] Short circuit detection low continuous detection count */ + uint32_t : 3; + __IOM uint32_t SCNTH : 13; /*!< [28..16] Short circuit detection high continuous detection count */ + uint32_t : 3; + } DSSCTSR_b; + }; + + union + { + __IOM uint32_t DSODCR; /*!< (@ 0x00000024) Overcurrent Detect Control Register */ + + struct + { + __IOM uint32_t ODEL : 1; /*!< [0..0] Overcurrent lower limit detection enable bit */ + __IOM uint32_t ODEH : 1; /*!< [1..1] Overcurrent upper limit exceeded detection enable bit */ + uint32_t : 30; + } DSODCR_b; + }; + __IM uint32_t RESERVED[6]; + + union + { + __IOM uint32_t DSCSTRTR; /*!< (@ 0x00000040) Software Start Trigger Register */ + + struct + { + __IOM uint32_t STRTRG : 1; /*!< [0..0] Channel start trigger */ + uint32_t : 31; + } DSCSTRTR_b; + }; + + union + { + __IOM uint32_t DSCSTPTR; /*!< (@ 0x00000044) Software Stop Trigger Register */ + + struct + { + __IOM uint32_t STPTRG : 1; /*!< [0..0] Channel stop trigger */ + uint32_t : 31; + } DSCSTPTR_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IM uint32_t DSCDR; /*!< (@ 0x00000050) Current Data Register */ + + struct + { + __IM uint32_t ADDR : 16; /*!< [15..0] Current data */ + uint32_t : 16; + } DSCDR_b; + }; + + union + { + __IM uint32_t DSCCDRA; /*!< (@ 0x00000054) Capture Current Data Register A */ + + struct + { + __IM uint32_t CDRA : 16; /*!< [15..0] Capture current data A */ + uint32_t : 16; + } DSCCDRA_b; + }; + + union + { + __IM uint32_t DSCCDRB; /*!< (@ 0x00000058) Capture Current Data Register B */ + + struct + { + __IM uint32_t CDRB : 16; /*!< [15..0] Capture current data B */ + uint32_t : 16; + } DSCCDRB_b; + }; + + union + { + __IM uint32_t DSOCDR; /*!< (@ 0x0000005C) Overcurrent Data Register */ + + struct + { + __IM uint32_t ODR : 16; /*!< [15..0] Overcurrent data */ + uint32_t : 16; + } DSOCDR_b; + }; + + union + { + __IM uint32_t DSCOCDR; /*!< (@ 0x00000060) Capture Overcurrent Data Register */ + + struct + { + __IM uint32_t CODR : 16; /*!< [15..0] Capture Overcurrent data when overcurrent detected */ + uint32_t : 16; + } DSCOCDR_b; + }; + __IM uint32_t RESERVED2[7]; + + union + { + __IM uint32_t DSCSR; /*!< (@ 0x00000080) Status Register */ + + struct + { + __IM uint32_t DUF : 1; /*!< [0..0] Channel n data update flag */ + __IM uint32_t OCFL : 1; /*!< [1..1] Channel n overcurrent lower limit detection flag */ + __IM uint32_t OCFH : 1; /*!< [2..2] Channel n overcurrent upper limit exceeded flag */ + __IM uint32_t SCF : 1; /*!< [3..3] Channel n short circuit detection flag */ + uint32_t : 12; + __IM uint32_t CHSTATE : 1; /*!< [16..16] Channel n state */ + uint32_t : 15; + } DSCSR_b; + }; + + union + { + __IOM uint32_t DSCSCR; /*!< (@ 0x00000084) Status Clear Register */ + + struct + { + __IOM uint32_t CLRDUF : 1; /*!< [0..0] Channel n data update flag clear */ + __IOM uint32_t CLROCFL : 1; /*!< [1..1] Channel n overcurrent lower limit detection flag clear */ + __IOM uint32_t CLROCFH : 1; /*!< [2..2] Channel n overcurrent upper limit exceeded flag clear */ + __IOM uint32_t CLRSCF : 1; /*!< [3..3] Channel n short circuit detection flag clear */ + uint32_t : 28; + } DSCSCR_b; + }; + __IM uint32_t RESERVED3[2]; +} R_DSMIF0_CH_Type; /*!< Size = 144 (0x90) */ + +/** @} */ /* End of group Device_Peripheral_clusters */ + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripherals + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ R_GPT7 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief General PWM Timer 7 (R_GPT7) + */ + +typedef struct /*!< (@ 0x80000000) R_GPT7 Structure */ +{ + union + { + __IOM uint32_t GTWP; /*!< (@ 0x00000000) General PWM Timer Write-Protection Register */ + + struct + { + __IOM uint32_t WP : 1; /*!< [0..0] Register Write Disabled */ + __IOM uint32_t STRWP : 1; /*!< [1..1] GTSTR.CSTRT Bit Write Disabled */ + __IOM uint32_t STPWP : 1; /*!< [2..2] GTSTP.CSTOP Bit Write Disabled */ + __IOM uint32_t CLRWP : 1; /*!< [3..3] GTCLR.CCLR Bit Write Disabled */ + __IOM uint32_t CMNWP : 1; /*!< [4..4] Common Register Write Disabled */ + uint32_t : 3; + __OM uint32_t PRKEY : 8; /*!< [15..8] GTWP Key Code */ + uint32_t : 16; + } GTWP_b; + }; + + union + { + __IOM uint32_t GTSTR; /*!< (@ 0x00000004) General PWM Timer Software Start Register */ + + struct + { + __IOM uint32_t CSTRT0 : 1; /*!< [0..0] Channel 0 Count Start */ + __IOM uint32_t CSTRT1 : 1; /*!< [1..1] Channel 1 Count Start */ + __IOM uint32_t CSTRT2 : 1; /*!< [2..2] Channel 2 Count Start */ + __IOM uint32_t CSTRT3 : 1; /*!< [3..3] Channel 3 Count Start */ + __IOM uint32_t CSTRT4 : 1; /*!< [4..4] Channel 4 Count Start */ + __IOM uint32_t CSTRT5 : 1; /*!< [5..5] Channel 5 Count Start */ + __IOM uint32_t CSTRT6 : 1; /*!< [6..6] Channel 6 Count Start */ + uint32_t : 25; + } GTSTR_b; + }; + + union + { + __IOM uint32_t GTSTP; /*!< (@ 0x00000008) General PWM Timer Software Stop Register */ + + struct + { + __IOM uint32_t CSTOP0 : 1; /*!< [0..0] Channel 0 Count Stop */ + __IOM uint32_t CSTOP1 : 1; /*!< [1..1] Channel 1 Count Stop */ + __IOM uint32_t CSTOP2 : 1; /*!< [2..2] Channel 2 Count Stop */ + __IOM uint32_t CSTOP3 : 1; /*!< [3..3] Channel 3 Count Stop */ + __IOM uint32_t CSTOP4 : 1; /*!< [4..4] Channel 4 Count Stop */ + __IOM uint32_t CSTOP5 : 1; /*!< [5..5] Channel 5 Count Stop */ + __IOM uint32_t CSTOP6 : 1; /*!< [6..6] Channel 6 Count Stop */ + uint32_t : 25; + } GTSTP_b; + }; + + union + { + __OM uint32_t GTCLR; /*!< (@ 0x0000000C) General PWM Timer Software Clear Register */ + + struct + { + __OM uint32_t CCLR0 : 1; /*!< [0..0] Channel 0 Count Clear */ + __OM uint32_t CCLR1 : 1; /*!< [1..1] Channel 1 Count Clear */ + __OM uint32_t CCLR2 : 1; /*!< [2..2] Channel 2 Count Clear */ + __OM uint32_t CCLR3 : 1; /*!< [3..3] Channel 3 Count Clear */ + __OM uint32_t CCLR4 : 1; /*!< [4..4] Channel 4 Count Clear */ + __OM uint32_t CCLR5 : 1; /*!< [5..5] Channel 5 Count Clear */ + __OM uint32_t CCLR6 : 1; /*!< [6..6] Channel 6 Count Clear */ + uint32_t : 25; + } GTCLR_b; + }; + + union + { + __IOM uint32_t GTSSR; /*!< (@ 0x00000010) General PWM Timer Start Source Select Register */ + + struct + { + __IOM uint32_t SSGTRGAFR : 2; /*!< [1..0] SSGTRGAFR */ + __IOM uint32_t SSGTRGBFR : 2; /*!< [3..2] SSGTRGBFR */ + __IOM uint32_t SSGTRGCFR : 2; /*!< [5..4] SSGTRGCFR */ + __IOM uint32_t SSGTRGDFR : 2; /*!< [7..6] SSGTRGDFR */ + __IOM uint32_t SSCARBHL : 2; /*!< [9..8] SSCARBHL */ + __IOM uint32_t SSCAFBHL : 2; /*!< [11..10] SSCAFBHL */ + __IOM uint32_t SSCBRAHL : 2; /*!< [13..12] SSCBRAHL */ + __IOM uint32_t SSCBFAHL : 2; /*!< [15..14] SSCBFAHL */ + __IOM uint32_t SSELCA : 1; /*!< [16..16] SSELCA */ + __IOM uint32_t SSELCB : 1; /*!< [17..17] SSELCB */ + __IOM uint32_t SSELCC : 1; /*!< [18..18] SSELCC */ + __IOM uint32_t SSELCD : 1; /*!< [19..19] SSELCD */ + __IOM uint32_t SSELCE : 1; /*!< [20..20] SSELCE */ + __IOM uint32_t SSELCF : 1; /*!< [21..21] SSELCF */ + __IOM uint32_t SSELCG : 1; /*!< [22..22] SSELCG */ + __IOM uint32_t SSELCH : 1; /*!< [23..23] SSELCH */ + uint32_t : 7; + __IOM uint32_t CSTRT : 1; /*!< [31..31] Software Source Count Start Enable */ + } GTSSR_b; + }; + + union + { + __IOM uint32_t GTPSR; /*!< (@ 0x00000014) General PWM Timer Stop Source Select Register */ + + struct + { + __IOM uint32_t PSGTRGAFR : 2; /*!< [1..0] PSGTRGAFR */ + __IOM uint32_t PSGTRGBFR : 2; /*!< [3..2] PSGTRGBFR */ + __IOM uint32_t PSGTRGCFR : 2; /*!< [5..4] PSGTRGCFR */ + __IOM uint32_t PSGTRGDFR : 2; /*!< [7..6] PSGTRGDFR */ + __IOM uint32_t PSCARBHL : 2; /*!< [9..8] PSCARBHL */ + __IOM uint32_t PSCAFBHL : 2; /*!< [11..10] PSCAFBHL */ + __IOM uint32_t PSCBRAHL : 2; /*!< [13..12] PSCBRAHL */ + __IOM uint32_t PSCBFAHL : 2; /*!< [15..14] PSCBFAHL */ + __IOM uint32_t PSELCA : 1; /*!< [16..16] PSELCA */ + __IOM uint32_t PSELCB : 1; /*!< [17..17] PSELCB */ + __IOM uint32_t PSELCC : 1; /*!< [18..18] PSELCC */ + __IOM uint32_t PSELCD : 1; /*!< [19..19] PSELCD */ + __IOM uint32_t PSELCE : 1; /*!< [20..20] PSELCE */ + __IOM uint32_t PSELCF : 1; /*!< [21..21] PSELCF */ + __IOM uint32_t PSELCG : 1; /*!< [22..22] PSELCG */ + __IOM uint32_t PSELCH : 1; /*!< [23..23] PSELCH */ + uint32_t : 7; + __IOM uint32_t CSTOP : 1; /*!< [31..31] CSTOP */ + } GTPSR_b; + }; + + union + { + __IOM uint32_t GTCSR; /*!< (@ 0x00000018) General PWM Timer Clear Source Select Register */ + + struct + { + __IOM uint32_t CSGTRGAFR : 2; /*!< [1..0] CSGTRGAFR */ + __IOM uint32_t CSGTRGBFR : 2; /*!< [3..2] CSGTRGBFR */ + __IOM uint32_t CSGTRGCFR : 2; /*!< [5..4] CSGTRGCFR */ + __IOM uint32_t CSGTRGDFR : 2; /*!< [7..6] CSGTRGDFR */ + __IOM uint32_t CSCARBHL : 2; /*!< [9..8] CSCARBHL */ + __IOM uint32_t CSCAFBHL : 2; /*!< [11..10] CSCAFBHL */ + __IOM uint32_t CSCBRAHL : 2; /*!< [13..12] CSCBRAHL */ + __IOM uint32_t CSCBFAHL : 2; /*!< [15..14] CSCBFAHL */ + __IOM uint32_t CSELCA : 1; /*!< [16..16] CSELCA */ + __IOM uint32_t CSELCB : 1; /*!< [17..17] CSELCB */ + __IOM uint32_t CSELCC : 1; /*!< [18..18] CSELCC */ + __IOM uint32_t CSELCD : 1; /*!< [19..19] CSELCD */ + __IOM uint32_t CSELCE : 1; /*!< [20..20] CSELCE */ + __IOM uint32_t CSELCF : 1; /*!< [21..21] CSELCF */ + __IOM uint32_t CSELCG : 1; /*!< [22..22] CSELCG */ + __IOM uint32_t CSELCH : 1; /*!< [23..23] CSELCH */ + uint32_t : 7; + __IOM uint32_t CCLR : 1; /*!< [31..31] CCLR */ + } GTCSR_b; + }; + + union + { + __IOM uint32_t GTUPSR; /*!< (@ 0x0000001C) General PWM Timer Count-Up Source Select Register */ + + struct + { + __IOM uint32_t USGTRGAFR : 2; /*!< [1..0] USGTRGAFR */ + __IOM uint32_t USGTRGBFR : 2; /*!< [3..2] USGTRGBFR */ + __IOM uint32_t USGTRGCFR : 2; /*!< [5..4] USGTRGCFR */ + __IOM uint32_t USGTRGDFR : 2; /*!< [7..6] USGTRGDFR */ + __IOM uint32_t USCARBHL : 2; /*!< [9..8] USCARBHL */ + __IOM uint32_t USCAFBHL : 2; /*!< [11..10] USCAFBHL */ + __IOM uint32_t USCBRAHL : 2; /*!< [13..12] USCBRAHL */ + __IOM uint32_t USCBFAHL : 2; /*!< [15..14] USCBFAHL */ + __IOM uint32_t USELCA : 1; /*!< [16..16] USELCA */ + __IOM uint32_t USELCB : 1; /*!< [17..17] USELCB */ + __IOM uint32_t USELCC : 1; /*!< [18..18] USELCC */ + __IOM uint32_t USELCD : 1; /*!< [19..19] USELCD */ + __IOM uint32_t USELCE : 1; /*!< [20..20] USELCE */ + __IOM uint32_t USELCF : 1; /*!< [21..21] USELCF */ + __IOM uint32_t USELCG : 1; /*!< [22..22] USELCG */ + __IOM uint32_t USELCH : 1; /*!< [23..23] USELCH */ + uint32_t : 8; + } GTUPSR_b; + }; + + union + { + __IOM uint32_t GTDNSR; /*!< (@ 0x00000020) General PWM Timer Count-Down Source Select Register */ + + struct + { + __IOM uint32_t DSGTRGAFR : 2; /*!< [1..0] DSGTRGAFR */ + __IOM uint32_t DSGTRGBFR : 2; /*!< [3..2] DSGTRGBFR */ + __IOM uint32_t DSGTRGCFR : 2; /*!< [5..4] DSGTRGCFR */ + __IOM uint32_t DSGTRGDFR : 2; /*!< [7..6] DSGTRGDFR */ + __IOM uint32_t DSCARBHL : 2; /*!< [9..8] DSCARBHL */ + __IOM uint32_t DSCAFBHL : 2; /*!< [11..10] DSCAFBHL */ + __IOM uint32_t DSCBRAHL : 2; /*!< [13..12] DSCBRAHL */ + __IOM uint32_t DSCBFAHL : 2; /*!< [15..14] DSCBFAHL */ + __IOM uint32_t DSELCA : 1; /*!< [16..16] DSELCA */ + __IOM uint32_t DSELCB : 1; /*!< [17..17] DSELCB */ + __IOM uint32_t DSELCC : 1; /*!< [18..18] DSELCC */ + __IOM uint32_t DSELCD : 1; /*!< [19..19] DSELCD */ + __IOM uint32_t DSELCE : 1; /*!< [20..20] DSELCE */ + __IOM uint32_t DSELCF : 1; /*!< [21..21] DSELCF */ + __IOM uint32_t DSELCG : 1; /*!< [22..22] DSELCG */ + __IOM uint32_t DSELCH : 1; /*!< [23..23] DSELCH */ + uint32_t : 8; + } GTDNSR_b; + }; + + union + { + __IOM uint32_t GTICASR; /*!< (@ 0x00000024) General PWM Timer Input Capture Source Select + * Register A */ + + struct + { + __IOM uint32_t ASGTRGAFR : 2; /*!< [1..0] ASGTRGAFR */ + __IOM uint32_t ASGTRGBFR : 2; /*!< [3..2] ASGTRGBFR */ + __IOM uint32_t ASGTRGCFR : 2; /*!< [5..4] ASGTRGCFR */ + __IOM uint32_t ASGTRGDFR : 2; /*!< [7..6] ASGTRGDFR */ + __IOM uint32_t ASCARBHL : 2; /*!< [9..8] ASCARBHL */ + __IOM uint32_t ASCAFBHL : 2; /*!< [11..10] ASCAFBHL */ + __IOM uint32_t ASCBRAHL : 2; /*!< [13..12] ASCBRAHL */ + __IOM uint32_t ASCBFAHL : 2; /*!< [15..14] ASCBFAHL */ + __IOM uint32_t ASELCA : 1; /*!< [16..16] ASELCA */ + __IOM uint32_t ASELCB : 1; /*!< [17..17] ASELCB */ + __IOM uint32_t ASELCC : 1; /*!< [18..18] ASELCC */ + __IOM uint32_t ASELCD : 1; /*!< [19..19] ASELCD */ + __IOM uint32_t ASELCE : 1; /*!< [20..20] ASELCE */ + __IOM uint32_t ASELCF : 1; /*!< [21..21] ASELCF */ + __IOM uint32_t ASELCG : 1; /*!< [22..22] ASELCG */ + __IOM uint32_t ASELCH : 1; /*!< [23..23] ASELCH */ + uint32_t : 8; + } GTICASR_b; + }; + + union + { + __IOM uint32_t GTICBSR; /*!< (@ 0x00000028) General PWM Timer Input Capture Source Select + * Register B */ + + struct + { + __IOM uint32_t BSGTRGAFR : 2; /*!< [1..0] BSGTRGAFR */ + __IOM uint32_t BSGTRGBFR : 2; /*!< [3..2] BSGTRGBFR */ + __IOM uint32_t BSGTRGCFR : 2; /*!< [5..4] BSGTRGCFR */ + __IOM uint32_t BSGTRGDFR : 2; /*!< [7..6] BSGTRGDFR */ + __IOM uint32_t BSCARBHL : 2; /*!< [9..8] BSCARBHL */ + __IOM uint32_t BSCAFBHL : 2; /*!< [11..10] BSCAFBHL */ + __IOM uint32_t BSCBRAHL : 2; /*!< [13..12] BSCBRAHL */ + __IOM uint32_t BSCBFAHL : 2; /*!< [15..14] BSCBFAHL */ + __IOM uint32_t BSELCA : 1; /*!< [16..16] BSELCA */ + __IOM uint32_t BSELCB : 1; /*!< [17..17] BSELCB */ + __IOM uint32_t BSELCC : 1; /*!< [18..18] BSELCC */ + __IOM uint32_t BSELCD : 1; /*!< [19..19] BSELCD */ + __IOM uint32_t BSELCE : 1; /*!< [20..20] BSELCE */ + __IOM uint32_t BSELCF : 1; /*!< [21..21] BSELCF */ + __IOM uint32_t BSELCG : 1; /*!< [22..22] BSELCG */ + __IOM uint32_t BSELCH : 1; /*!< [23..23] BSELCH */ + uint32_t : 8; + } GTICBSR_b; + }; + + union + { + __IOM uint32_t GTCR; /*!< (@ 0x0000002C) General PWM Timer Control Register */ + + struct + { + __IOM uint32_t CST : 1; /*!< [0..0] Count Start */ + uint32_t : 7; + __IOM uint32_t ICDS : 1; /*!< [8..8] Input Capture Operation Select at Count Stop */ + uint32_t : 7; + __IOM uint32_t MD : 3; /*!< [18..16] Mode Select */ + uint32_t : 4; + __IOM uint32_t TPCS : 4; /*!< [26..23] Timer Prescaler Select */ + uint32_t : 2; + __IOM uint32_t SWMD : 3; /*!< [31..29] Switch Mode Select */ + } GTCR_b; + }; + + union + { + __IOM uint32_t GTUDDTYC; /*!< (@ 0x00000030) General PWM Timer Count Direction and Duty Setting + * Register */ + + struct + { + __IOM uint32_t UD : 1; /*!< [0..0] Count Direction Setting */ + __IOM uint32_t UDF : 1; /*!< [1..1] Forcible Count Direction Setting */ + uint32_t : 14; + __IOM uint32_t OADTY : 2; /*!< [17..16] GTIOCnA Pin Output Duty Setting */ + __IOM uint32_t OADTYF : 1; /*!< [18..18] GTIOCnA Pin Output Duty Forced Setting */ + __IOM uint32_t OADTYR : 1; /*!< [19..19] Output after Release of GTIOCnA Pin Output 0%/100% + * Duty Cycle Settings */ + uint32_t : 4; + __IOM uint32_t OBDTY : 2; /*!< [25..24] GTIOCnB Pin Output Duty Setting */ + __IOM uint32_t OBDTYF : 1; /*!< [26..26] GTIOCnB Pin Output Duty Forced Setting */ + __IOM uint32_t OBDTYR : 1; /*!< [27..27] Output after Release of GTIOCnB Pin Output 0%/100% + * Duty Cycle Settings */ + uint32_t : 4; + } GTUDDTYC_b; + }; + + union + { + __IOM uint32_t GTIOR; /*!< (@ 0x00000034) General PWM Timer I/O Control Register */ + + struct + { + __IOM uint32_t GTIOA : 5; /*!< [4..0] GTIOCnA Pin Function Select */ + uint32_t : 1; + __IOM uint32_t OADFLT : 1; /*!< [6..6] GTIOCnA Pin Output Value Setting at the Count Stop */ + __IOM uint32_t OAHLD : 1; /*!< [7..7] GTIOCnA Pin Output Retention at the Start/Stop Count */ + __IOM uint32_t OAE : 1; /*!< [8..8] GTIOCnA Pin Output Enable */ + __IOM uint32_t OADF : 2; /*!< [10..9] GTIOCnA Pin Negate Value Setting */ + uint32_t : 2; + __IOM uint32_t NFAEN : 1; /*!< [13..13] GTIOCnA Pin Input Noise Filter Enable */ + __IOM uint32_t NFCSA : 2; /*!< [15..14] GTIOCnA Pin Input Noise Filter Sampling Clock Select */ + __IOM uint32_t GTIOB : 5; /*!< [20..16] GTIOCnB Pin Function Select */ + uint32_t : 1; + __IOM uint32_t OBDFLT : 1; /*!< [22..22] GTIOCnB Pin Output Value Setting at the Count Stop */ + __IOM uint32_t OBHLD : 1; /*!< [23..23] GTIOCnB Pin Output Retention at the Start/Stop Count */ + __IOM uint32_t OBE : 1; /*!< [24..24] GTIOCnB Pin Output Enable */ + __IOM uint32_t OBDF : 2; /*!< [26..25] GTIOCnB Pin Negate Value Setting */ + uint32_t : 2; + __IOM uint32_t NFBEN : 1; /*!< [29..29] GTIOCnB Pin Input Noise Filter Enable */ + __IOM uint32_t NFCSB : 2; /*!< [31..30] GTIOCnB Pin Input Noise Filter Sampling Clock Select */ + } GTIOR_b; + }; + + union + { + __IOM uint32_t GTINTAD; /*!< (@ 0x00000038) General PWM Timer Interrupt Output Setting Register */ + + struct + { + __IOM uint32_t GTINTA : 1; /*!< [0..0] GTINTA */ + __IOM uint32_t GTINTB : 1; /*!< [1..1] GTINTB */ + __IOM uint32_t GTINTC : 1; /*!< [2..2] GTINTC */ + __IOM uint32_t GTINTD : 1; /*!< [3..3] GTINTD */ + __IOM uint32_t GTINTE : 1; /*!< [4..4] GTINTE */ + __IOM uint32_t GTINTF : 1; /*!< [5..5] GTINTF */ + __IOM uint32_t GTINTPR : 2; /*!< [7..6] GTINTPR */ + uint32_t : 8; + __IOM uint32_t ADTRAUEN : 1; /*!< [16..16] ADTRAUEN */ + __IOM uint32_t ADTRADEN : 1; /*!< [17..17] ADTRADEN */ + __IOM uint32_t ADTRBUEN : 1; /*!< [18..18] ADTRBUEN */ + __IOM uint32_t ADTRBDEN : 1; /*!< [19..19] ADTRBDEN */ + uint32_t : 4; + __IOM uint32_t GRP : 2; /*!< [25..24] Select the group to detect disabling of output (dead-time + * error or simultaneous driving of outputs to the high or + * low level) to POEG and to request of disabling of output + * from POEG. */ + uint32_t : 2; + __IOM uint32_t GRPDTE : 1; /*!< [28..28] GRPDTE */ + __IOM uint32_t GRPABH : 1; /*!< [29..29] (GTIOCnA pin and GTIOCnB output) */ + __IOM uint32_t GRPABL : 1; /*!< [30..30] (GTIOCnA pin and GTIOCnB output) */ + uint32_t : 1; + } GTINTAD_b; + }; + + union + { + __IOM uint32_t GTST; /*!< (@ 0x0000003C) General PWM Timer Status Register */ + + struct + { + uint32_t : 8; + __IM uint32_t ITCNT : 3; /*!< [10..8] GPTn_OVF/GPTn_UDF Interrupt Skipping Count Counter */ + uint32_t : 4; + __IM uint32_t TUCF : 1; /*!< [15..15] Count Direction Flag */ + __IOM uint32_t ADTRAUF : 1; /*!< [16..16] GTADTRA Register Compare Match (Up-Counting) A/D Converter + * Start Request Flag */ + __IOM uint32_t ADTRADF : 1; /*!< [17..17] GTADTRA Register Compare Match (Down-Counting) A/D + * Converter Start Request Flag */ + __IOM uint32_t ADTRBUF : 1; /*!< [18..18] GTADTRB Register Compare Match (Up-Counting) A/D Converter + * Start Request Flag */ + __IOM uint32_t ADTRBDF : 1; /*!< [19..19] GTADTRB Register Compare Match (Down-Counting) A/D + * Converter Start Request Flag */ + uint32_t : 4; + __IM uint32_t ODF : 1; /*!< [24..24] Output Stop Request Flag */ + uint32_t : 3; + __IM uint32_t DTEF : 1; /*!< [28..28] Dead Time Error Flag */ + __IM uint32_t OABHF : 1; /*!< [29..29] Simultaneous High Output Flag */ + __IM uint32_t OABLF : 1; /*!< [30..30] Simultaneous Low Output Flag */ + uint32_t : 1; + } GTST_b; + }; + + union + { + __IOM uint32_t GTBER; /*!< (@ 0x00000040) General PWM Timer Buffer Enable Register */ + + struct + { + __IOM uint32_t BD0 : 1; /*!< [0..0] GTCCRA/GTCCRB Registers Buffer Operation Disable */ + __IOM uint32_t BD1 : 1; /*!< [1..1] GTPR Register Buffer Operation Disable */ + __IOM uint32_t BD2 : 1; /*!< [2..2] GTADTRA/GTADTRB Registers Buffer Operation Disable */ + __IOM uint32_t BD3 : 1; /*!< [3..3] GTDVU/GTDVD Registers Buffer Operation Disable */ + uint32_t : 4; + __IOM uint32_t DBRTECA : 1; /*!< [8..8] GTCCRA Register Double Buffer Repeat Operation Enable */ + uint32_t : 1; + __IOM uint32_t DBRTECB : 1; /*!< [10..10] GTCCRB Register Double Buffer Repeat Operation Enable */ + uint32_t : 5; + __IOM uint32_t CCRA : 2; /*!< [17..16] GTCCRA Register Buffer Operation */ + __IOM uint32_t CCRB : 2; /*!< [19..18] GTCCRB Register Buffer Operation */ + __IOM uint32_t PR : 2; /*!< [21..20] GTPR Register Buffer Operation */ + __IOM uint32_t CCRSWT : 1; /*!< [22..22] GTCCRA and GTCCRB Registers Forcible Buffer Operation */ + uint32_t : 1; + __IOM uint32_t ADTTA : 2; /*!< [25..24] GTADTRA Register Buffer Transfer Timing Select */ + __IOM uint32_t ADTDA : 1; /*!< [26..26] GTADTRA Register Double Buffer Operation */ + uint32_t : 1; + __IOM uint32_t ADTTB : 2; /*!< [29..28] GTADTRB Register Buffer Transfer Timing Select */ + __IOM uint32_t ADTDB : 1; /*!< [30..30] GTADTRB Register Double Buffer Operation */ + uint32_t : 1; + } GTBER_b; + }; + + union + { + __IOM uint32_t GTITC; /*!< (@ 0x00000044) General PWM Timer Interrupt and A/D Converter + * Start Request Skipping Setting Register */ + + struct + { + __IOM uint32_t ITLA : 1; /*!< [0..0] ITLA */ + __IOM uint32_t ITLB : 1; /*!< [1..1] ITLB */ + __IOM uint32_t ITLC : 1; /*!< [2..2] ITLC */ + __IOM uint32_t ITLD : 1; /*!< [3..3] ITLD */ + __IOM uint32_t ITLE : 1; /*!< [4..4] ITLE */ + __IOM uint32_t ITLF : 1; /*!< [5..5] ITLF */ + __IOM uint32_t IVTC : 2; /*!< [7..6] IVTC */ + __IOM uint32_t IVTT : 3; /*!< [10..8] IVTT */ + uint32_t : 1; + __IOM uint32_t ADTAL : 1; /*!< [12..12] ADTAL */ + uint32_t : 1; + __IOM uint32_t ADTBL : 1; /*!< [14..14] ADTBL */ + uint32_t : 17; + } GTITC_b; + }; + __IOM uint32_t GTCNT; /*!< (@ 0x00000048) General PWM Timer Counter */ + __IOM uint32_t GTCCR[6]; /*!< (@ 0x0000004C) General PWM Timer Compare Capture Register m + * (m = A to F) */ + __IOM uint32_t GTPR; /*!< (@ 0x00000064) General PWM Timer Cycle Setting Register */ + __IOM uint32_t GTPBR; /*!< (@ 0x00000068) General PWM Timer Cycle Setting Buffer Register */ + __IOM uint32_t GTPDBR; /*!< (@ 0x0000006C) General PWM Timer Cycle Setting Double-Buffer + * Register */ + __IOM uint32_t GTADTRA; /*!< (@ 0x00000070) A/D Converter Start Request Timing Register A + * (m = A, B) */ + __IOM uint32_t GTADTBRA; /*!< (@ 0x00000074) A/D Converter Start Request Timing Buffer Register + * A (m = A, B) */ + __IOM uint32_t GTADTDBRA; /*!< (@ 0x00000078) A/D Converter Start Request Timing Double-Buffer + * Register A */ + __IOM uint32_t GTADTRB; /*!< (@ 0x0000007C) A/D Converter Start Request Timing Register B + * (m = A, B) */ + __IOM uint32_t GTADTBRB; /*!< (@ 0x00000080) A/D Converter Start Request Timing Buffer Register + * B (m = A, B) */ + __IOM uint32_t GTADTDBRB; /*!< (@ 0x00000084) A/D Converter Start Request Timing Double-Buffer + * Register B */ + + union + { + __IOM uint32_t GTDTCR; /*!< (@ 0x00000088) General PWM Timer Dead Time Control Register */ + + struct + { + __IOM uint32_t TDE : 1; /*!< [0..0] Negative-Phase Waveform Setting */ + uint32_t : 3; + __IOM uint32_t TDBUE : 1; /*!< [4..4] GTDVU Register Buffer Operation Enable */ + __IOM uint32_t TDBDE : 1; /*!< [5..5] GTDVD Register Buffer Operation Enable */ + uint32_t : 2; + __IOM uint32_t TDFER : 1; /*!< [8..8] GTDVD Register Setting */ + uint32_t : 23; + } GTDTCR_b; + }; + __IOM uint32_t GTDVU; /*!< (@ 0x0000008C) General PWM Timer Dead Time Value Register U + * (m = U, D) */ + __IOM uint32_t GTDVD; /*!< (@ 0x00000090) General PWM Timer Dead Time Value Register D + * (m = U, D) */ + __IOM uint32_t GTDBU; /*!< (@ 0x00000094) General PWM Timer Dead Time Value Buffer Register + * U (m = U, D) */ + __IOM uint32_t GTDBD; /*!< (@ 0x00000098) General PWM Timer Dead Time Value Buffer Register + * D (m = U, D) */ + + union + { + __IM uint32_t GTSOS; /*!< (@ 0x0000009C) General PWM Timer Output Protection Function + * Status Register */ + + struct + { + __IM uint32_t SOS : 2; /*!< [1..0] Output Protection Function Status */ + uint32_t : 30; + } GTSOS_b; + }; + + union + { + __IOM uint32_t GTSOTR; /*!< (@ 0x000000A0) General PWM Timer Output Protection Function + * Temporary Release Register */ + + struct + { + __IOM uint32_t SOTR : 1; /*!< [0..0] Output Protection Function Temporary Release */ + uint32_t : 31; + } GTSOTR_b; + }; + + union + { + __IOM uint32_t GTADSMR; /*!< (@ 0x000000A4) General PWM Timer A/D Conversion Start Request + * Signal Monitoring Register */ + + struct + { + __IOM uint32_t ADSMS0 : 2; /*!< [1..0] A/D Conversion Start Request Signal Monitor 0 Selection */ + uint32_t : 6; + __IOM uint32_t ADSMEN0 : 1; /*!< [8..8] A/D Conversion Start Request Signal Monitor 0 Output + * Enabling */ + uint32_t : 7; + __IOM uint32_t ADSMS1 : 2; /*!< [17..16] A/D Conversion Start Request Signal Monitor 1 Selection */ + uint32_t : 6; + __IOM uint32_t ADSMEN1 : 1; /*!< [24..24] A/D Conversion Start Request Signal Monitor 1 Output + * Enabling */ + uint32_t : 7; + } GTADSMR_b; + }; + + union + { + __IOM uint32_t GTEITC; /*!< (@ 0x000000A8) General PWM Timer Extended Interrupt Skipping + * Counter Control Register */ + + struct + { + __IOM uint32_t EIVTC1 : 2; /*!< [1..0] Extended Interrupt Skipping Counter 1 Count Source Select */ + uint32_t : 2; + __IOM uint32_t EIVTT1 : 4; /*!< [7..4] Extended Interrupt Skipping 1 Skipping Count Setting */ + uint32_t : 4; + __IM uint32_t EITCNT1 : 4; /*!< [15..12] Extended Interrupt Skipping Counter 1 */ + __IOM uint32_t EIVTC2 : 2; /*!< [17..16] Extended Interrupt Skipping Counter 2 Count Source + * Select */ + uint32_t : 2; + __IOM uint32_t EIVTT2 : 4; /*!< [23..20] Extended Interrupt Skipping 2 Skipping Count Setting */ + __IOM uint32_t EITCNT2IV : 4; /*!< [27..24] Extended Interrupt Skipping Counter 2 Initial Value */ + __IM uint32_t EITCNT2 : 4; /*!< [31..28] Extended Interrupt Skipping Counter 2 */ + } GTEITC_b; + }; + + union + { + __IOM uint32_t GTEITLI1; /*!< (@ 0x000000AC) General PWM Timer Extended Interrupt Skipping + * Setting Register 1 */ + + struct + { + __IOM uint32_t EITLA : 3; /*!< [2..0] GTCCRA Register Compare Match / Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLB : 3; /*!< [6..4] GTCCRB Register Compare Match / Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLC : 3; /*!< [10..8] GTCCRC Register Compare Match / Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLD : 3; /*!< [14..12] GTCCRD Register Compare Match / Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLE : 3; /*!< [18..16] GTCCRE Register Compare Match / Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLF : 3; /*!< [22..20] GTCCRF Register Compare Match / Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLV : 3; /*!< [26..24] Overflow Interrupt Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLU : 3; /*!< [30..28] Underflow Interrupt Extended Skipping Function Select */ + uint32_t : 1; + } GTEITLI1_b; + }; + + union + { + __IOM uint32_t GTEITLI2; /*!< (@ 0x000000B0) General PWM Timer Extended Interrupt Skipping + * Setting Register 2 */ + + struct + { + __IOM uint32_t EADTAL : 3; /*!< [2..0] GTADTRA A/D Converter Start Request Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EADTBL : 3; /*!< [6..4] GTADTRB A/D Converter Start Request Extended Skipping + * Function Select */ + uint32_t : 25; + } GTEITLI2_b; + }; + + union + { + __IOM uint32_t GTEITLB; /*!< (@ 0x000000B4) General PWM Timer Extended Buffer Transfer Skipping + * Setting Register */ + + struct + { + __IOM uint32_t EBTLCA : 3; /*!< [2..0] GTCCRA Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + __IOM uint32_t EBTLCB : 3; /*!< [6..4] GTCCRB Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + __IOM uint32_t EBTLPR : 3; /*!< [10..8] GTPR Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 5; + __IOM uint32_t EBTLADA : 3; /*!< [18..16] GTADTRA Register Buffer Transfer Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EBTLADB : 3; /*!< [22..20] GTADTRB Register Buffer Transfer Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EBTLDVU : 3; /*!< [26..24] GTDVU Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + __IOM uint32_t EBTLDVD : 3; /*!< [30..28] GTDVD Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + } GTEITLB_b; + }; + __IM uint32_t RESERVED[6]; + + union + { + __IOM uint32_t GTSECSR; /*!< (@ 0x000000D0) General PWM Timer Operation Enable Bit Simultaneous + * Control Channel Select Register */ + + struct + { + __IOM uint32_t SECSEL0 : 1; /*!< [0..0] Channel 0 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL1 : 1; /*!< [1..1] Channel 1 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL2 : 1; /*!< [2..2] Channel 2 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL3 : 1; /*!< [3..3] Channel 3 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL4 : 1; /*!< [4..4] Channel 4 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL5 : 1; /*!< [5..5] Channel 5 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL6 : 1; /*!< [6..6] Channel 6 Operation Enable Bit Simultaneous Control Channel + * Select */ + uint32_t : 25; + } GTSECSR_b; + }; + + union + { + __IOM uint32_t GTSECR; /*!< (@ 0x000000D4) General PWM Timer Operation Enable Bit Simultaneous + * Control Register */ + + struct + { + __IOM uint32_t SBDCE : 1; /*!< [0..0] GTCCR Register Buffer Operation Simultaneous Enable */ + __IOM uint32_t SBDPE : 1; /*!< [1..1] GTPR Register Buffer Operation Simultaneous Enable */ + __IOM uint32_t SBDAE : 1; /*!< [2..2] GTADTR Register Buffer Operation Simultaneous Enable */ + __IOM uint32_t SBDDE : 1; /*!< [3..3] GTDV Register Buffer Operation Simultaneous Enable */ + uint32_t : 4; + __IOM uint32_t SBDCD : 1; /*!< [8..8] GTCCR Register Buffer Operation Simultaneous Disable */ + __IOM uint32_t SBDPD : 1; /*!< [9..9] GTPR Register Buffer Operation Simultaneous Disable */ + __IOM uint32_t SBDAD : 1; /*!< [10..10] GTADTR Register Buffer Operation Simultaneous Disable */ + __IOM uint32_t SBDDD : 1; /*!< [11..11] GTDV Register Buffer Operation Simultaneous Disable */ + uint32_t : 20; + } GTSECR_b; + }; + + union + { + __IOM uint32_t GTSWSR; /*!< (@ 0x000000D8) General PWM Timer Switch Source Select Register */ + + struct + { + __IOM uint32_t WSGTRGA : 2; /*!< [1..0] GTETRGA Signal Edge Select to Switch Counter (GTETRGSA + * Signal for SAFTY) */ + __IOM uint32_t WSGTRGB : 2; /*!< [3..2] GTETRGB Signal Edge Select to Switch Counter (GTETRGSB + * Signal for SAFTY) */ + __IOM uint32_t WSGTRGC : 2; /*!< [5..4] GTETRGC Signal Edge Select to Switch Counter (GTETRGSC + * Signal for SAFTY) */ + __IOM uint32_t WSGTRGD : 2; /*!< [7..6] GTETRGD Signal Edge Select to Switch Counter (GTETRGSD + * Signal for SAFTY) */ + uint32_t : 8; + __IOM uint32_t WSELCA : 1; /*!< [16..16] Event Source Counter Switch Enable */ + __IOM uint32_t WSELCB : 1; /*!< [17..17] Event Source Counter Switch Enable */ + __IOM uint32_t WSELCC : 1; /*!< [18..18] Event Source Counter Switch Enable */ + __IOM uint32_t WSELCD : 1; /*!< [19..19] Event Source Counter Switch Enable */ + __IOM uint32_t WSELCE : 1; /*!< [20..20] Event Source Counter Switch Enable */ + __IOM uint32_t WSELCF : 1; /*!< [21..21] Event Source Counter Switch Enable */ + __IOM uint32_t WSELCG : 1; /*!< [22..22] Event Source Counter Switch Enable */ + __IOM uint32_t CSELCH : 1; /*!< [23..23] Event Source Counter Switch Enable */ + uint32_t : 8; + } GTSWSR_b; + }; + __IOM uint32_t GTSWOS; /*!< (@ 0x000000DC) General PWM Timer Switch Offset Setting Register */ +} R_GPT0_Type; /*!< Size = 224 (0xe0) */ + +/* =========================================================================================================================== */ +/* ================ R_SCI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Communication Interface 0 (R_SCI0) + */ + +typedef struct /*!< (@ 0x80001000) R_SCI0 Structure */ +{ + union + { + __IM uint32_t RDR; /*!< (@ 0x00000000) Receive Data Register */ + + struct + { + __IM uint32_t RDAT : 9; /*!< [8..0] Serial receive data */ + __IM uint32_t MPB : 1; /*!< [9..9] Multi-processor flag */ + __IM uint32_t DR : 1; /*!< [10..10] Receive data ready flag */ + __IM uint32_t FPER : 1; /*!< [11..11] FIFO parity error flag */ + __IM uint32_t FFER : 1; /*!< [12..12] FIFO framing error flag */ + uint32_t : 11; + __IM uint32_t ORER : 1; /*!< [24..24] Overrun Error flag */ + uint32_t : 2; + __IM uint32_t PER : 1; /*!< [27..27] Parity error flag */ + __IM uint32_t FER : 1; /*!< [28..28] Framing error flag */ + uint32_t : 3; + } RDR_b; + }; + + union + { + __IOM uint32_t TDR; /*!< (@ 0x00000004) Transmit Data Register */ + + struct + { + __IOM uint32_t TDAT : 9; /*!< [8..0] Serial transmit data */ + __IOM uint32_t MPBT : 1; /*!< [9..9] Multi-processor transfer bit flag */ + uint32_t : 22; + } TDR_b; + }; + + union + { + __IOM uint32_t CCR0; /*!< (@ 0x00000008) Common Control Register 0 */ + + struct + { + __IOM uint32_t RE : 1; /*!< [0..0] Receive Enable */ + uint32_t : 3; + __IOM uint32_t TE : 1; /*!< [4..4] Transmit Enable */ + uint32_t : 3; + __IOM uint32_t MPIE : 1; /*!< [8..8] Multi-Processor Interrupt Enable */ + __IOM uint32_t DCME : 1; /*!< [9..9] Data Compare Match Enable */ + __IOM uint32_t IDSEL : 1; /*!< [10..10] ID frame select */ + uint32_t : 5; + __IOM uint32_t RIE : 1; /*!< [16..16] Receive Interrupt Enable */ + uint32_t : 3; + __IOM uint32_t TIE : 1; /*!< [20..20] Transmit Interrupt Enable */ + __IOM uint32_t TEIE : 1; /*!< [21..21] Transmit End Interrupt Enable */ + uint32_t : 2; + __IOM uint32_t SSE : 1; /*!< [24..24] SSn# Pin Function Enable */ + uint32_t : 7; + } CCR0_b; + }; + + union + { + __IOM uint32_t CCR1; /*!< (@ 0x0000000C) Common Control Register 1 */ + + struct + { + __IOM uint32_t CTSE : 1; /*!< [0..0] CTS Enable */ + __IOM uint32_t CTSPEN : 1; /*!< [1..1] CTS external pin Enable */ + uint32_t : 2; + __IOM uint32_t SPB2DT : 1; /*!< [4..4] Serial port break data select */ + __IOM uint32_t SPB2IO : 1; /*!< [5..5] Serial port break I/O */ + uint32_t : 2; + __IOM uint32_t PE : 1; /*!< [8..8] Parity Enable */ + __IOM uint32_t PM : 1; /*!< [9..9] Parity Mode */ + uint32_t : 2; + __IOM uint32_t TINV : 1; /*!< [12..12] TXD invert */ + __IOM uint32_t RINV : 1; /*!< [13..13] RXD invert */ + uint32_t : 2; + __IOM uint32_t SPLP : 1; /*!< [16..16] Loopback Control */ + uint32_t : 3; + __IOM uint32_t SHARPS : 1; /*!< [20..20] Half-duplex communication select */ + uint32_t : 3; + __IOM uint32_t NFCS : 3; /*!< [26..24] Noise Filter Clock Select */ + uint32_t : 1; + __IOM uint32_t NFEN : 1; /*!< [28..28] Digital Noise Filter Function Enable */ + uint32_t : 3; + } CCR1_b; + }; + + union + { + __IOM uint32_t CCR2; /*!< (@ 0x00000010) Common Control Register 2 */ + + struct + { + __IOM uint32_t BCP : 3; /*!< [2..0] Base Clock Pulse */ + uint32_t : 1; + __IOM uint32_t BGDM : 1; /*!< [4..4] Baud Rate Generator Double-Speed Mode Select */ + __IOM uint32_t ABCS : 1; /*!< [5..5] Asynchronous Mode Base Clock Select */ + __IOM uint32_t ABCSE : 1; /*!< [6..6] Asynchronous Mode Extended Base Clock Select */ + uint32_t : 1; + __IOM uint32_t BRR : 8; /*!< [15..8] Bit rate setting */ + __IOM uint32_t BRME : 1; /*!< [16..16] BRME */ + uint32_t : 3; + __IOM uint32_t CKS : 2; /*!< [21..20] Clock Select */ + uint32_t : 2; + __IOM uint32_t MDDR : 8; /*!< [31..24] Modulation Duty setting */ + } CCR2_b; + }; + + union + { + __IOM uint32_t CCR3; /*!< (@ 0x00000014) Common Control Register 3 */ + + struct + { + __IOM uint32_t CPHA : 1; /*!< [0..0] Clock Phase Select */ + __IOM uint32_t CPOL : 1; /*!< [1..1] Clock Polarity Select */ + uint32_t : 5; + __IOM uint32_t BPEN : 1; /*!< [7..7] Synchronizer bypass enable */ + __IOM uint32_t CHR : 2; /*!< [9..8] Character Length */ + uint32_t : 2; + __IOM uint32_t LSBF : 1; /*!< [12..12] LSB First select */ + __IOM uint32_t SINV : 1; /*!< [13..13] Transmitted/Received Data Invert */ + __IOM uint32_t STP : 1; /*!< [14..14] Stop Bit Length */ + __IOM uint32_t RXDESEL : 1; /*!< [15..15] Asynchronous Start Bit Edge Detection Select */ + __IOM uint32_t MOD : 3; /*!< [18..16] Communication mode select */ + __IOM uint32_t MP : 1; /*!< [19..19] Multi-Processor Mode */ + __IOM uint32_t FM : 1; /*!< [20..20] FIFO Mode select */ + __IOM uint32_t DEN : 1; /*!< [21..21] Driver enable */ + uint32_t : 2; + __IOM uint32_t CKE : 2; /*!< [25..24] Clock enable */ + uint32_t : 2; + __IOM uint32_t GM : 1; /*!< [28..28] GSM Mode */ + __IOM uint32_t BLK : 1; /*!< [29..29] Block Transfer Mode */ + uint32_t : 2; + } CCR3_b; + }; + + union + { + __IOM uint32_t CCR4; /*!< (@ 0x00000018) Common Control Register 4 */ + + struct + { + __IOM uint32_t CMPD : 9; /*!< [8..0] Compare Match Data */ + uint32_t : 7; + __IOM uint32_t ASEN : 1; /*!< [16..16] Adjust receive sampling timing enable */ + __IOM uint32_t ATEN : 1; /*!< [17..17] Adjust transmit timing enable */ + uint32_t : 6; + __IOM uint32_t AST : 3; /*!< [26..24] Adjustment value for receive Sampling Timing */ + __IOM uint32_t AJD : 1; /*!< [27..27] Adjustment Direction for receive sampling timing */ + __IOM uint32_t ATT : 3; /*!< [30..28] Adjustment value for Transmit timing */ + __IOM uint32_t AET : 1; /*!< [31..31] Adjustment edge for transmit timing */ + } CCR4_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t ICR; /*!< (@ 0x00000020) Simple I2C Control Register */ + + struct + { + __IOM uint32_t IICDL : 5; /*!< [4..0] SDA Delay Output Select */ + uint32_t : 3; + __IOM uint32_t IICINTM : 1; /*!< [8..8] IICINTM */ + __IOM uint32_t IICCSC : 1; /*!< [9..9] IICCSC */ + uint32_t : 3; + __IOM uint32_t IICACKT : 1; /*!< [13..13] IICACKT */ + uint32_t : 2; + __IOM uint32_t IICSTAREQ : 1; /*!< [16..16] IICSTAREQ */ + __IOM uint32_t IICRSTAREQ : 1; /*!< [17..17] IICRSTAREQ */ + __IOM uint32_t IICSTPREQ : 1; /*!< [18..18] IICSTPREQ */ + uint32_t : 1; + __IOM uint32_t IICSDAS : 2; /*!< [21..20] IICSDAS */ + __IOM uint32_t IICSCLS : 2; /*!< [23..22] IICSCLS */ + uint32_t : 8; + } ICR_b; + }; + + union + { + __IOM uint32_t FCR; /*!< (@ 0x00000024) FIFO Control Register */ + + struct + { + __IOM uint32_t DRES : 1; /*!< [0..0] Receive data ready error select */ + uint32_t : 7; + __IOM uint32_t TTRG : 5; /*!< [12..8] Transmit FIFO data trigger number */ + uint32_t : 2; + __OM uint32_t TFRST : 1; /*!< [15..15] Transmit FIFO Data Register Reset */ + __IOM uint32_t RTRG : 5; /*!< [20..16] Receive FIFO data trigger number */ + uint32_t : 2; + __OM uint32_t RFRST : 1; /*!< [23..23] Receive FIFO Data Register Reset */ + __IOM uint32_t RSTRG : 5; /*!< [28..24] RTS# Output Active Trigger Number Select */ + uint32_t : 3; + } FCR_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t DCR; /*!< (@ 0x00000030) Driver Control Register */ + + struct + { + __IOM uint32_t DEPOL : 1; /*!< [0..0] Driver effective polarity select */ + uint32_t : 7; + __IOM uint32_t DEAST : 5; /*!< [12..8] Driver Assertion Time */ + uint32_t : 3; + __IOM uint32_t DENGT : 5; /*!< [20..16] Driver negate time */ + uint32_t : 11; + } DCR_b; + }; + __IM uint32_t RESERVED2[5]; + + union + { + __IM uint32_t CSR; /*!< (@ 0x00000048) Common Status Register */ + + struct + { + uint32_t : 4; + __IM uint32_t ERS : 1; /*!< [4..4] Error Signal Status Flag */ + uint32_t : 10; + __IM uint32_t RXDMON : 1; /*!< [15..15] Serial input data monitor */ + __IM uint32_t DCMF : 1; /*!< [16..16] Data Compare Match Flag */ + __IM uint32_t DPER : 1; /*!< [17..17] Data Compare Match Parity Error Flag */ + __IM uint32_t DFER : 1; /*!< [18..18] Data Compare Match Framing Error Flag */ + uint32_t : 5; + __IM uint32_t ORER : 1; /*!< [24..24] ORER */ + uint32_t : 1; + __IM uint32_t MFF : 1; /*!< [26..26] Mode Fault Error Flag */ + __IM uint32_t PER : 1; /*!< [27..27] PER */ + __IM uint32_t FER : 1; /*!< [28..28] FER */ + __IM uint32_t TDRE : 1; /*!< [29..29] Transmit Data Empty Flag */ + __IM uint32_t TEND : 1; /*!< [30..30] TEND */ + __IM uint32_t RDRF : 1; /*!< [31..31] RDRF */ + } CSR_b; + }; + + union + { + __IM uint32_t ISR; /*!< (@ 0x0000004C) Simple I2C Status Register */ + + struct + { + __IM uint32_t IICACKR : 1; /*!< [0..0] ACK Reception Data Flag */ + uint32_t : 2; + __IM uint32_t IICSTIF : 1; /*!< [3..3] Issuing of Start, Restart, or Stop Condition Completed + * Flag */ + uint32_t : 28; + } ISR_b; + }; + + union + { + __IM uint32_t FRSR; /*!< (@ 0x00000050) FIFO Receive Status Register */ + + struct + { + __IM uint32_t DR : 1; /*!< [0..0] DR */ + uint32_t : 7; + __IM uint32_t R : 6; /*!< [13..8] Receive FIFO Data Count */ + uint32_t : 2; + __IM uint32_t PNUM : 6; /*!< [21..16] Parity Error Count */ + uint32_t : 2; + __IM uint32_t FNUM : 6; /*!< [29..24] Framing Error Count */ + uint32_t : 2; + } FRSR_b; + }; + + union + { + __IM uint32_t FTSR; /*!< (@ 0x00000054) FIFO Transmit Status Register */ + + struct + { + __IM uint32_t T : 6; /*!< [5..0] Transmit FIFO Data Count */ + uint32_t : 26; + } FTSR_b; + }; + __IM uint32_t RESERVED3[4]; + + union + { + __OM uint32_t CFCLR; /*!< (@ 0x00000068) Common Flag Clear Register */ + + struct + { + uint32_t : 4; + __OM uint32_t ERSC : 1; /*!< [4..4] ERSC */ + uint32_t : 11; + __OM uint32_t DCMFC : 1; /*!< [16..16] DCMFC */ + __OM uint32_t DPERC : 1; /*!< [17..17] DPERC */ + __OM uint32_t DFERC : 1; /*!< [18..18] DFERC */ + uint32_t : 5; + __OM uint32_t ORERC : 1; /*!< [24..24] ORERC */ + uint32_t : 1; + __OM uint32_t MFFC : 1; /*!< [26..26] MFFC */ + __OM uint32_t PERC : 1; /*!< [27..27] PERC */ + __OM uint32_t FERC : 1; /*!< [28..28] FERC */ + __OM uint32_t TDREC : 1; /*!< [29..29] TDREC */ + uint32_t : 1; + __OM uint32_t RDRFC : 1; /*!< [31..31] RDRFC */ + } CFCLR_b; + }; + + union + { + __OM uint32_t ICFCLR; /*!< (@ 0x0000006C) Simple I2C Flag Clear Register */ + + struct + { + uint32_t : 3; + __OM uint32_t IICSTIFC : 1; /*!< [3..3] IICSTIFC */ + uint32_t : 28; + } ICFCLR_b; + }; + + union + { + __OM uint32_t FFCLR; /*!< (@ 0x00000070) FIFO Flag Clear Register */ + + struct + { + __OM uint32_t DRC : 1; /*!< [0..0] DRC */ + uint32_t : 31; + } FFCLR_b; + }; +} R_SCI0_Type; /*!< Size = 116 (0x74) */ + +/* =========================================================================================================================== */ +/* ================ R_SPI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Peripheral Interface 0 (R_SPI0) + */ + +typedef struct /*!< (@ 0x80003000) R_SPI0 Structure */ +{ + union + { + union + { + __IOM uint32_t SPDR; /*!< (@ 0x00000000) SPI Data Register */ + + struct + { + __IOM uint32_t SPD : 32; /*!< [31..0] The SPI data register (SPDR) is used to store SPI's + * transmit data and receive data. Transmit buffers and receive + * buffers independently function. */ + } SPDR_b; + }; + __IOM uint16_t SPDR_HA; /*!< (@ 0x00000000) SPI Data Register */ + __IOM uint8_t SPDR_BY; /*!< (@ 0x00000000) SPI Data Register */ + }; + + union + { + __IOM uint8_t SPCKD; /*!< (@ 0x00000004) SPI Clock Delay Register */ + + struct + { + __IOM uint8_t SCKDL : 3; /*!< [2..0] RSPCK Delay Setting */ + uint8_t : 5; + } SPCKD_b; + }; + + union + { + __IOM uint8_t SSLND; /*!< (@ 0x00000005) SPI Slave Select Negation Delay Register */ + + struct + { + __IOM uint8_t SLNDL : 3; /*!< [2..0] SSL Negation Delay Bits */ + uint8_t : 5; + } SSLND_b; + }; + + union + { + __IOM uint8_t SPND; /*!< (@ 0x00000006) SPI Next-Access Delay Register */ + + struct + { + __IOM uint8_t SPNDL : 3; /*!< [2..0] SPI Next-Access Delay Bits */ + uint8_t : 5; + } SPND_b; + }; + + union + { + __IOM uint8_t MRCKD; /*!< (@ 0x00000007) SPI ClocK Digital control Register for Master + * Receive */ + + struct + { + __IOM uint8_t ARST : 3; /*!< [2..0] Receive Sampling Timing Adjustment Bits */ + uint8_t : 5; + } MRCKD_b; + }; + + union + { + __IOM uint32_t SPCR; /*!< (@ 0x00000008) SPI Control Register */ + + struct + { + __IOM uint32_t SPE : 1; /*!< [0..0] SPI Function Enable */ + uint32_t : 6; + __IOM uint32_t SPSCKSEL : 1; /*!< [7..7] SPI Master Receive Clock Select */ + __IOM uint32_t SPPE : 1; /*!< [8..8] Parity Enable */ + __IOM uint32_t SPOE : 1; /*!< [9..9] Parity Mode */ + uint32_t : 1; + __IOM uint32_t PTE : 1; /*!< [11..11] Parity Self-Diagnosis Enable */ + __IOM uint32_t SCKASE : 1; /*!< [12..12] RSPCK Auto-Stop Function Enable */ + __IOM uint32_t BFDS : 1; /*!< [13..13] Between Burst Transfer Frames Delay Select */ + __IOM uint32_t MODFEN : 1; /*!< [14..14] Mode Fault Error Detection Enable */ + uint32_t : 1; + __IOM uint32_t SPEIE : 1; /*!< [16..16] SPI Error Interrupt Enable */ + __IOM uint32_t SPRIE : 1; /*!< [17..17] SPI Receive Buffer Full Interrupt Enable */ + __IOM uint32_t SPIIE : 1; /*!< [18..18] SPI Idle Interrupt Enable */ + __IOM uint32_t SPDRES : 1; /*!< [19..19] SPI Receive Data Ready Error Select */ + __IOM uint32_t SPTIE : 1; /*!< [20..20] SPI Transmit Buffer Empty Interrupt Enable */ + __IOM uint32_t CENDIE : 1; /*!< [21..21] SPI Communication End Interrupt Enable */ + uint32_t : 2; + __IOM uint32_t SPMS : 1; /*!< [24..24] SPI Function Enable */ + __IOM uint32_t SPFRF : 1; /*!< [25..25] SPI Frame Format Select */ + uint32_t : 2; + __IOM uint32_t TXMD : 2; /*!< [29..28] Communication Mode Select */ + __IOM uint32_t MSTR : 1; /*!< [30..30] SPI Master/Slave Mode Select */ + __IOM uint32_t BPEN : 1; /*!< [31..31] Synchronization Circuit Bypass Enable */ + } SPCR_b; + }; + + union + { + __IOM uint8_t SPCRRM; /*!< (@ 0x0000000C) SPI Control Register for Master Receive only */ + + struct + { + __IOM uint8_t RMFM : 5; /*!< [4..0] Frame processing count setting in Master Receive only */ + uint8_t : 1; + __OM uint8_t RMEDTG : 1; /*!< [6..6] Reading value is always 0. */ + __OM uint8_t RMSTTG : 1; /*!< [7..7] Reading value is always 0. */ + } SPCRRM_b; + }; + + union + { + __IOM uint8_t SPDRCR; /*!< (@ 0x0000000D) SPI Control Register for Received Data Ready + * Detection */ + + struct + { + __IOM uint8_t SPDRC : 8; /*!< [7..0] SPDRC */ + } SPDRCR_b; + }; + + union + { + __IOM uint8_t SPPCR; /*!< (@ 0x0000000E) SPI Pin Control Register */ + + struct + { + __IOM uint8_t SPLP : 1; /*!< [0..0] SPI Loopback */ + __IOM uint8_t SPLP2 : 1; /*!< [1..1] SPI Loopback 2 */ + __IOM uint8_t SPOM : 1; /*!< [2..2] SPI Output Pin Mode */ + uint8_t : 1; + __IOM uint8_t MOIFV : 1; /*!< [4..4] MOSI Idle Fixed Value */ + __IOM uint8_t MOIFE : 1; /*!< [5..5] MOSI Idle Value Fixing Enable */ + uint8_t : 2; + } SPPCR_b; + }; + + union + { + __IOM uint8_t SPCR2; /*!< (@ 0x0000000F) SPI Control Register 2 */ + + struct + { + __IOM uint8_t SPSCKDL : 3; /*!< [2..0] SPI Master Receive Clock Analog Delay */ + uint8_t : 5; + } SPCR2_b; + }; + + union + { + __IOM uint8_t SSLP; /*!< (@ 0x00000010) SPI Slave Select Polarity Register */ + + struct + { + __IOM uint8_t SSL0P : 1; /*!< [0..0] SSL0 Signal Polarity Setting */ + __IOM uint8_t SSL1P : 1; /*!< [1..1] SSL1 Signal Polarity Setting */ + __IOM uint8_t SSL2P : 1; /*!< [2..2] SSL2 Signal Polarity Setting */ + __IOM uint8_t SSL3P : 1; /*!< [3..3] SSL3 Signal Polarity Setting */ + uint8_t : 4; + } SSLP_b; + }; + + union + { + __IOM uint8_t SPBR; /*!< (@ 0x00000011) SPI Bit Rate Register */ + + struct + { + __IOM uint8_t SPR : 8; /*!< [7..0] The SPBR register is used to set the bit rate in master + * mode. If SPBR is modified while SPCR.MSTR = 1 and SPCR.SPE + * = 1, subsequent operation is not guaranteed. */ + } SPBR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t SPSCR; /*!< (@ 0x00000013) SPI Sequence Control Register */ + + struct + { + __IOM uint8_t SPSLN : 3; /*!< [2..0] SPI Sequence Length Specification */ + uint8_t : 5; + } SPSCR_b; + }; + + union + { + __IOM uint32_t SPCMD[8]; /*!< (@ 0x00000014) SPI Command Register [0..7] (m = 0 to 7) */ + + struct + { + __IOM uint32_t CPHA : 1; /*!< [0..0] RSPCK Phase */ + __IOM uint32_t CPOL : 1; /*!< [1..1] RSPCK Polarity */ + __IOM uint32_t BRDV : 2; /*!< [3..2] Bit Rate Division */ + uint32_t : 3; + __IOM uint32_t SSLKP : 1; /*!< [7..7] SSL Signal Level Hold */ + uint32_t : 4; + __IOM uint32_t LSBF : 1; /*!< [12..12] SPI LSB First */ + __IOM uint32_t SPNDEN : 1; /*!< [13..13] SPI Next-Access Delay Enable */ + __IOM uint32_t SLNDEN : 1; /*!< [14..14] SSL Negation Delay Setting Enable */ + __IOM uint32_t SCKDEN : 1; /*!< [15..15] RSPCK Delay Setting Enable */ + __IOM uint32_t SPB : 5; /*!< [20..16] SPI Data Length */ + uint32_t : 3; + __IOM uint32_t SSLA : 2; /*!< [25..24] SSL Signal Assertion */ + uint32_t : 6; + } SPCMD_b[8]; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint16_t SPDCR; /*!< (@ 0x00000040) SPI Data Control Register */ + + struct + { + __IOM uint16_t BYSW : 1; /*!< [0..0] Byte Swap Operating Mode Select */ + __IOM uint16_t SLSEL : 2; /*!< [2..1] SSL Pin Output Select */ + __IOM uint16_t SPRDTD : 1; /*!< [3..3] SPI Receive Data or Transmit Data Selection */ + __IOM uint16_t SINV : 1; /*!< [4..4] Serial data invert */ + uint16_t : 3; + __IOM uint16_t SPFC : 2; /*!< [9..8] Frame Count */ + uint16_t : 6; + } SPDCR_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint16_t SPDCR2; /*!< (@ 0x00000044) SPI Data Control Register 2 */ + + struct + { + __IOM uint16_t RTRG : 2; /*!< [1..0] Receive FIFO threshold setting */ + uint16_t : 6; + __IOM uint16_t TTRG : 2; /*!< [9..8] Transmission FIFO threshold setting */ + uint16_t : 6; + } SPDCR2_b; + }; + __IM uint16_t RESERVED3; + __IM uint32_t RESERVED4[2]; + __IM uint8_t RESERVED5; + + union + { + __IM uint8_t SPSSR; /*!< (@ 0x00000051) SPI Sequence Status Register */ + + struct + { + __IM uint8_t SPCP : 3; /*!< [2..0] SPI Command Pointer */ + uint8_t : 1; + __IM uint8_t SPECM : 3; /*!< [6..4] SPI Error Command */ + uint8_t : 1; + } SPSSR_b; + }; + + union + { + __IM uint16_t SPSR; /*!< (@ 0x00000052) SPI Status Register */ + + struct + { + uint16_t : 7; + __IM uint16_t SPDRF : 1; /*!< [7..7] SPI Receive Data Ready Flag */ + __IM uint16_t OVRF : 1; /*!< [8..8] Overrun Error Flag */ + __IM uint16_t IDLNF : 1; /*!< [9..9] SPI Idle Flag */ + __IM uint16_t MODF : 1; /*!< [10..10] Mode Fault Error Flag */ + __IM uint16_t PERF : 1; /*!< [11..11] Parity Error Flag */ + __IM uint16_t UDRF : 1; /*!< [12..12] Underrun Error Flag */ + __IM uint16_t SPTEF : 1; /*!< [13..13] SPI Transmit Buffer Empty Flag */ + __IM uint16_t CENDF : 1; /*!< [14..14] Communication End Flag */ + __IM uint16_t SPRF : 1; /*!< [15..15] SPI Receive Buffer Full Flag */ + } SPSR_b; + }; + __IM uint32_t RESERVED6; + + union + { + __IM uint8_t SPTFSR; /*!< (@ 0x00000058) SPI Transfer FIFO Status Register */ + + struct + { + __IM uint8_t TFDN : 3; /*!< [2..0] Transmit FIFO data empty stage number */ + uint8_t : 5; + } SPTFSR_b; + }; + __IM uint8_t RESERVED7; + __IM uint16_t RESERVED8; + + union + { + __IM uint8_t SPRFSR; /*!< (@ 0x0000005C) SPI Receive FIFO Status Register */ + + struct + { + __IM uint8_t RFDN : 3; /*!< [2..0] Receive FIFO data store stage number */ + uint8_t : 5; + } SPRFSR_b; + }; + __IM uint8_t RESERVED9; + __IM uint16_t RESERVED10; + + union + { + __IM uint32_t SPPSR; /*!< (@ 0x00000060) SPI Poling Register */ + + struct + { + __IM uint32_t SPEPS : 1; /*!< [0..0] SPI Polling Status */ + uint32_t : 31; + } SPPSR_b; + }; + __IM uint32_t RESERVED11; + __IM uint16_t RESERVED12; + + union + { + __IOM uint16_t SPSRC; /*!< (@ 0x0000006A) SPI Status Clear Register */ + + struct + { + uint16_t : 7; + __OM uint16_t SPDRFC : 1; /*!< [7..7] SPI Receive Data Ready Flag Clear */ + __OM uint16_t OVRFC : 1; /*!< [8..8] Overrun Error Flag Clear */ + uint16_t : 1; + __OM uint16_t MODFC : 1; /*!< [10..10] Mode Fault Error Flag Clear */ + __OM uint16_t PERFC : 1; /*!< [11..11] Parity Error Flag Clear */ + __OM uint16_t UDRFC : 1; /*!< [12..12] Underrun Error Flag Clear */ + __OM uint16_t SPTEFC : 1; /*!< [13..13] SPI Transmit Buffer Empty Flag Clear */ + __OM uint16_t CENDFC : 1; /*!< [14..14] Communication End Flag Clear */ + __OM uint16_t SPRFC : 1; /*!< [15..15] SPI Receive Buffer Full Flag Clear */ + } SPSRC_b; + }; + + union + { + __OM uint8_t SPFCR; /*!< (@ 0x0000006C) SPI FIFO Clear Register */ + + struct + { + __OM uint8_t SPFRST : 1; /*!< [0..0] SPI FIFO clear */ + uint8_t : 7; + } SPFCR_b; + }; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14; +} R_SPI0_Type; /*!< Size = 112 (0x70) */ + +/* =========================================================================================================================== */ +/* ================ R_CRC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CRC Unit 0 (R_CRC0) + */ + +typedef struct /*!< (@ 0x80004000) R_CRC0 Structure */ +{ + union + { + __IOM uint8_t CRCCR0; /*!< (@ 0x00000000) CRC Control Register 0 */ + + struct + { + __IOM uint8_t GPS : 3; /*!< [2..0] CRC Generating Polynomial Switching */ + uint8_t : 3; + __IOM uint8_t LMS : 1; /*!< [6..6] CRC Calculation Switching */ + __OM uint8_t DORCLR : 1; /*!< [7..7] CRCDOR Register Clear */ + } CRCCR0_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + + union + { + __IOM uint32_t CRCDIR; /*!< (@ 0x00000004) CRC Data Input Register */ + __IOM uint8_t CRCDIR_BY; /*!< (@ 0x00000004) CRC Data Input Register */ + }; + + union + { + __IOM uint32_t CRCDOR; /*!< (@ 0x00000008) CRC Data Output Register */ + __IOM uint16_t CRCDOR_HA; /*!< (@ 0x00000008) CRC Data Output Register */ + __IOM uint8_t CRCDOR_BY; /*!< (@ 0x00000008) CRC Data Output Register */ + }; +} R_CRC0_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ R_CANFD ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CAN-FD (R_CANFD) + */ + +typedef struct /*!< (@ 0x80020000) R_CANFD Structure */ +{ + __IOM R_CANFD_CFDC_Type CFDC[2]; /*!< (@ 0x00000000) CANFD Channel [0..1] Registers */ + __IM uint32_t RESERVED[24]; + + union + { + __IM uint32_t CFDGIPV; /*!< (@ 0x00000080) Global IP Version Register */ + + struct + { + __IM uint32_t IPV : 8; /*!< [7..0] IP Version */ + __IM uint32_t IPT : 2; /*!< [9..8] IP Type */ + uint32_t : 6; + __IM uint32_t PSI : 14; /*!< [29..16] Parameter Status Information */ + uint32_t : 2; + } CFDGIPV_b; + }; + + union + { + __IOM uint32_t CFDGCFG; /*!< (@ 0x00000084) Global Configuration Register */ + + struct + { + __IOM uint32_t TPRI : 1; /*!< [0..0] Transmission Priority */ + __IOM uint32_t DCE : 1; /*!< [1..1] DLC Check Enable */ + __IOM uint32_t DRE : 1; /*!< [2..2] DLC Replacement Enable */ + __IOM uint32_t MME : 1; /*!< [3..3] Mirror Mode Enable */ + __IOM uint32_t DCS : 1; /*!< [4..4] Data Link Controller Clock Select */ + __IOM uint32_t CMPOC : 1; /*!< [5..5] CAN-FD Message Payload Overflow Configuration */ + uint32_t : 2; + __IOM uint32_t TSP : 4; /*!< [11..8] Timestamp Prescaler */ + __IOM uint32_t TSSS : 1; /*!< [12..12] Timestamp Source Select */ + __IOM uint32_t TSBTCS : 3; /*!< [15..13] Timestamp Bit Time Channel Select */ + __IOM uint32_t ITRCP : 16; /*!< [31..16] Interval Timer Reference Clock Prescaler */ + } CFDGCFG_b; + }; + + union + { + __IOM uint32_t CFDGCTR; /*!< (@ 0x00000088) Global Control Register */ + + struct + { + __IOM uint32_t GMDC : 2; /*!< [1..0] Global Mode Control */ + __IOM uint32_t GSLPR : 1; /*!< [2..2] Global Sleep Request */ + uint32_t : 5; + __IOM uint32_t DEIE : 1; /*!< [8..8] DLC Check Interrupt Enable */ + __IOM uint32_t MEIE : 1; /*!< [9..9] Message Lost Error Interrupt Enable */ + __IOM uint32_t THLEIE : 1; /*!< [10..10] TX History List Entry Lost Interrupt Enable */ + __IOM uint32_t CMPOFIE : 1; /*!< [11..11] CAN-FD Message Payload Overflow Flag Interrupt Enable */ + __IOM uint32_t QOWEIE : 1; /*!< [12..12] TXQ Message Overwrite Error Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t QMEIE : 1; /*!< [14..14] TXQ Message Lost Error Interrupt Enable */ + __IOM uint32_t MOWEIE : 1; /*!< [15..15] Message Lost Error Interrupt Enable */ + __IOM uint32_t TSRST : 1; /*!< [16..16] Timestamp Reset */ + uint32_t : 15; + } CFDGCTR_b; + }; + + union + { + __IM uint32_t CFDGSTS; /*!< (@ 0x0000008C) Global Status Register */ + + struct + { + __IM uint32_t GRSTSTS : 1; /*!< [0..0] Global Reset Status */ + __IM uint32_t GHLTSTS : 1; /*!< [1..1] Global Halt Status */ + __IM uint32_t GSLPSTS : 1; /*!< [2..2] Global Sleep Status */ + __IM uint32_t GRAMINIT : 1; /*!< [3..3] Global RAM Initialization */ + uint32_t : 28; + } CFDGSTS_b; + }; + + union + { + __IOM uint32_t CFDGERFL; /*!< (@ 0x00000090) Global Error Flag Register */ + + struct + { + __IOM uint32_t DEF : 1; /*!< [0..0] DLC Error Flag */ + __IM uint32_t MES : 1; /*!< [1..1] Message Lost Error Status */ + __IM uint32_t THLES : 1; /*!< [2..2] TX History List Entry Lost Error Status */ + __IOM uint32_t CMPOF : 1; /*!< [3..3] CAN-FD Message Payload Overflow Flag */ + __IM uint32_t QOWES : 1; /*!< [4..4] TXQ Message Overwrite Error Status */ + uint32_t : 1; + __IM uint32_t QMES : 1; /*!< [6..6] TXQ Message Lost Error Status */ + __IM uint32_t MOWES : 1; /*!< [7..7] Message Overwrite Error Status */ + uint32_t : 8; + __IOM uint32_t EEF0 : 1; /*!< [16..16] ECC Error Flag for Channel 0 */ + __IOM uint32_t EEF1 : 1; /*!< [17..17] ECC Error Flag for Channel 1 */ + uint32_t : 14; + } CFDGERFL_b; + }; + + union + { + __IM uint32_t CFDGTSC; /*!< (@ 0x00000094) Global Timestamp Counter Register */ + + struct + { + __IM uint32_t TS : 16; /*!< [15..0] Timestamp value */ + uint32_t : 16; + } CFDGTSC_b; + }; + + union + { + __IOM uint32_t CFDGAFLECTR; /*!< (@ 0x00000098) Global Acceptance Filter List Entry Control Register */ + + struct + { + __IOM uint32_t AFLPN : 4; /*!< [3..0] Acceptance Filter List Page Number */ + uint32_t : 4; + __IOM uint32_t AFLDAE : 1; /*!< [8..8] Acceptance Filter List Data Access Enable */ + uint32_t : 23; + } CFDGAFLECTR_b; + }; + + union + { + __IOM uint32_t CFDGAFLCFG0; /*!< (@ 0x0000009C) Global Acceptance Filter List Configuration Register + * 0 */ + + struct + { + __IOM uint32_t RNC1 : 9; /*!< [8..0] Rule Number for Channel 1 */ + uint32_t : 7; + __IOM uint32_t RNC0 : 9; /*!< [24..16] Rule Number for Channel 0 */ + uint32_t : 7; + } CFDGAFLCFG0_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t CFDRMNB; /*!< (@ 0x000000AC) RX Message Buffer Number Register */ + + struct + { + __IOM uint32_t NRXMB : 8; /*!< [7..0] Number of RX Message Buffers */ + __IOM uint32_t RMPLS : 3; /*!< [10..8] Reception Message Buffer Payload Data Size */ + uint32_t : 21; + } CFDRMNB_b; + }; + + union + { + __IOM uint32_t CFDRMND0; /*!< (@ 0x000000B0) RX Message Buffer New Data Register 0 */ + + struct + { + __IOM uint32_t RMNS : 32; /*!< [31..0] RX Message Buffer New Data Status */ + } CFDRMND0_b; + }; + __IM uint32_t RESERVED2[3]; + + union + { + __IOM uint32_t CFDRFCC[8]; /*!< (@ 0x000000C0) RX FIFO Configuration/Control Register [0..7] */ + + struct + { + __IOM uint32_t RFE : 1; /*!< [0..0] RX FIFO Enable */ + __IOM uint32_t RFIE : 1; /*!< [1..1] RX FIFO Interrupt Enable */ + uint32_t : 2; + __IOM uint32_t RFPLS : 3; /*!< [6..4] Rx FIFO Payload Data Size Configuration */ + uint32_t : 1; + __IOM uint32_t RFDC : 3; /*!< [10..8] RX FIFO Depth Configuration */ + uint32_t : 1; + __IOM uint32_t RFIM : 1; /*!< [12..12] RX FIFO Interrupt Mode */ + __IOM uint32_t RFIGCV : 3; /*!< [15..13] RX FIFO Interrupt Generation Counter Value */ + __IOM uint32_t RFFIE : 1; /*!< [16..16] RX FIFO Full Interrupt Enable */ + uint32_t : 15; + } CFDRFCC_b[8]; + }; + + union + { + __IOM uint32_t CFDRFSTS[8]; /*!< (@ 0x000000E0) RX FIFO Status Register [0..7] */ + + struct + { + __IM uint32_t RFEMP : 1; /*!< [0..0] RX FIFO Empty */ + __IM uint32_t RFFLL : 1; /*!< [1..1] RX FIFO Full */ + __IOM uint32_t RFMLT : 1; /*!< [2..2] RX FIFO Message Lost */ + __IOM uint32_t RFIF : 1; /*!< [3..3] RX FIFO Interrupt Flag */ + uint32_t : 4; + __IM uint32_t RFMC : 8; /*!< [15..8] RX FIFO Message Count */ + __IOM uint32_t RFFIF : 1; /*!< [16..16] RX FIFO Full Interrupt Flag */ + uint32_t : 15; + } CFDRFSTS_b[8]; + }; + + union + { + __IOM uint32_t CFDRFPCTR[8]; /*!< (@ 0x00000100) RX FIFO Pointer Control Register [0..7] */ + + struct + { + __IOM uint32_t RFPC : 8; /*!< [7..0] RX FIFO Pointer Control */ + uint32_t : 24; + } CFDRFPCTR_b[8]; + }; + + union + { + __IOM uint32_t CFDCFCC[6]; /*!< (@ 0x00000120) Common FIFO Configuration/Control Register [0..5] */ + + struct + { + __IOM uint32_t CFE : 1; /*!< [0..0] Common FIFO Enable */ + __IOM uint32_t CFRXIE : 1; /*!< [1..1] Common FIFO RX Interrupt Enable */ + __IOM uint32_t CFTXIE : 1; /*!< [2..2] Common FIFO TX Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t CFPLS : 3; /*!< [6..4] Common FIFO Payload Data Size Configuration */ + uint32_t : 1; + __IOM uint32_t CFM : 2; /*!< [9..8] Common FIFO Mode */ + __IOM uint32_t CFITSS : 1; /*!< [10..10] Common FIFO Interval Timer Source Select */ + __IOM uint32_t CFITR : 1; /*!< [11..11] Common FIFO Interval Timer Resolution */ + __IOM uint32_t CFIM : 1; /*!< [12..12] Common FIFO Interrupt Mode */ + __IOM uint32_t CFIGCV : 3; /*!< [15..13] Common FIFO Interrupt Generation Counter Value */ + __IOM uint32_t CFTML : 5; /*!< [20..16] Common FIFO TX Message Buffer Link */ + __IOM uint32_t CFDC : 3; /*!< [23..21] Common FIFO Depth Configuration */ + __IOM uint32_t CFITT : 8; /*!< [31..24] Common FIFO Interval Transmission Time */ + } CFDCFCC_b[6]; + }; + __IM uint32_t RESERVED3[18]; + + union + { + __IOM uint32_t CFDCFCCE[6]; /*!< (@ 0x00000180) Common FIFO Configuration/Control Enhancement + * Register [0..5] */ + + struct + { + __IOM uint32_t CFFIE : 1; /*!< [0..0] Common FIFO Full Interrupt Enable */ + __IOM uint32_t CFOFRXIE : 1; /*!< [1..1] Common FIFO One Frame Reception Interrupt Enable */ + __IOM uint32_t CFOFTXIE : 1; /*!< [2..2] Common FIFO One Frame Transmission Interrupt Enable */ + uint32_t : 5; + __IOM uint32_t CFMOWM : 1; /*!< [8..8] Common FIFO Message Overwrite Mode */ + uint32_t : 7; + __IOM uint32_t CFBME : 1; /*!< [16..16] Common FIFO Buffering Mode Enable */ + uint32_t : 15; + } CFDCFCCE_b[6]; + }; + __IM uint32_t RESERVED4[18]; + + union + { + __IOM uint32_t CFDCFSTS[6]; /*!< (@ 0x000001E0) Common FIFO Status Register [0..5] */ + + struct + { + __IM uint32_t CFEMP : 1; /*!< [0..0] Common FIFO Empty */ + __IM uint32_t CFFLL : 1; /*!< [1..1] Common FIFO Full */ + __IOM uint32_t CFMLT : 1; /*!< [2..2] Common FIFO Message Lost */ + __IOM uint32_t CFRXIF : 1; /*!< [3..3] Common RX FIFO Interrupt Flag */ + __IOM uint32_t CFTXIF : 1; /*!< [4..4] Common TX FIFO Interrupt Flag */ + uint32_t : 3; + __IM uint32_t CFMC : 8; /*!< [15..8] Common FIFO Message Count */ + __IOM uint32_t CFFIF : 1; /*!< [16..16] Common FIFO Full Interrupt Flag */ + __IOM uint32_t CFOFRXIF : 1; /*!< [17..17] Common FIFO One Frame Reception Interrupt Flag */ + __IOM uint32_t CFOFTXIF : 1; /*!< [18..18] Common FIFO One Frame Transmission Interrupt Flag */ + uint32_t : 5; + __IOM uint32_t CFMOW : 1; /*!< [24..24] Common FIFO Message Overwrite */ + uint32_t : 7; + } CFDCFSTS_b[6]; + }; + __IM uint32_t RESERVED5[18]; + + union + { + __OM uint32_t CFDCFPCTR[6]; /*!< (@ 0x00000240) Common FIFO Pointer Control Register [0..5] */ + + struct + { + __OM uint32_t CFPC : 8; /*!< [7..0] Common FIFO Pointer Control */ + uint32_t : 24; + } CFDCFPCTR_b[6]; + }; + __IM uint32_t RESERVED6[18]; + + union + { + __IM uint32_t CFDFESTS; /*!< (@ 0x000002A0) FIFO Empty Status Register */ + + struct + { + __IM uint32_t RFXEMP : 8; /*!< [7..0] RX FIFO Empty Status */ + __IM uint32_t CFXEMP : 6; /*!< [13..8] Common FIFO Empty Status */ + uint32_t : 18; + } CFDFESTS_b; + }; + + union + { + __IM uint32_t CFDFFSTS; /*!< (@ 0x000002A4) FIFO Full Status Register */ + + struct + { + __IM uint32_t RFXFLL : 8; /*!< [7..0] RX FIFO Full Status */ + __IM uint32_t CFXFLL : 6; /*!< [13..8] Common FIFO Full Status */ + uint32_t : 18; + } CFDFFSTS_b; + }; + + union + { + __IM uint32_t CFDFMSTS; /*!< (@ 0x000002A8) FIFO Message Lost Status Register */ + + struct + { + __IM uint32_t RFXMLT : 8; /*!< [7..0] RX FIFO Message Lost Status */ + __IM uint32_t CFXMLT : 6; /*!< [13..8] Common FIFO Message Lost Status */ + uint32_t : 18; + } CFDFMSTS_b; + }; + + union + { + __IM uint32_t CFDRFISTS; /*!< (@ 0x000002AC) RX FIFO Interrupt Flag Status Register */ + + struct + { + __IM uint32_t RFXIF : 8; /*!< [7..0] RX FIFO[x] Interrupt Flag Status */ + uint32_t : 8; + __IM uint32_t RFXFFLL : 8; /*!< [23..16] RX FIFO[x] Interrupt Full Flag Status */ + uint32_t : 8; + } CFDRFISTS_b; + }; + + union + { + __IM uint32_t CFDCFRISTS; /*!< (@ 0x000002B0) Common FIFO RX Interrupt Flag Status Register */ + + struct + { + __IM uint32_t CFXRXIF : 6; /*!< [5..0] Common FIFO RX Interrupt Flag Status */ + uint32_t : 26; + } CFDCFRISTS_b; + }; + + union + { + __IM uint32_t CFDCFTISTS; /*!< (@ 0x000002B4) Common FIFO TX Interrupt Flag Status Register */ + + struct + { + __IM uint32_t CFXTXIF : 6; /*!< [5..0] Common FIFO TX Interrupt Flag Status */ + uint32_t : 26; + } CFDCFTISTS_b; + }; + + union + { + __IM uint32_t CFDCFOFRISTS; /*!< (@ 0x000002B8) Common FIFO One Frame RX Interrupt Flag Status + * Register */ + + struct + { + __IM uint32_t CFXOFRXIF : 6; /*!< [5..0] Common FIFO One Frame RX Interrupt Flag Status */ + uint32_t : 26; + } CFDCFOFRISTS_b; + }; + + union + { + __IM uint32_t CFDCFOFTISTS; /*!< (@ 0x000002BC) Common FIFO One Frame TX Interrupt Flag Status + * Register */ + + struct + { + __IM uint32_t CFXOFTXIF : 6; /*!< [5..0] Common FIFO One Frame TX Interrupt Flag Status */ + uint32_t : 26; + } CFDCFOFTISTS_b; + }; + + union + { + __IM uint32_t CFDCFMOWSTS; /*!< (@ 0x000002C0) Common FIFO Message Overwrite Status Register */ + + struct + { + __IM uint32_t CFXMOW : 6; /*!< [5..0] Common FIFO Massage Overwrite Status */ + uint32_t : 26; + } CFDCFMOWSTS_b; + }; + + union + { + __IM uint32_t CFDFFFSTS; /*!< (@ 0x000002C4) FIFO FDC Full Status Register */ + + struct + { + __IM uint32_t RFXFFLL : 8; /*!< [7..0] RX FIFO FDC Level Full Status */ + __IM uint32_t CFXFFLL : 6; /*!< [13..8] COMMON FIFO FDC Level Full Status */ + uint32_t : 18; + } CFDFFFSTS_b; + }; + __IM uint32_t RESERVED7[2]; + + union + { + __IOM uint8_t CFDTMC[128]; /*!< (@ 0x000002D0) TX Message Buffer Control Register [0..127] */ + + struct + { + __IOM uint8_t TMTR : 1; /*!< [0..0] TX Message Buffer Transmission Request */ + __IOM uint8_t TMTAR : 1; /*!< [1..1] TX Message Buffer Transmission Abort Request */ + __IOM uint8_t TMOM : 1; /*!< [2..2] TX Message Buffer One-shot Mode */ + uint8_t : 5; + } CFDTMC_b[128]; + }; + __IM uint32_t RESERVED8[288]; + + union + { + __IOM uint8_t CFDTMSTS[128]; /*!< (@ 0x000007D0) TX Message Buffer Status Register [0..127] */ + + struct + { + __IM uint8_t TMTSTS : 1; /*!< [0..0] TX Message Buffer Transmission Status */ + __IOM uint8_t TMTRF : 2; /*!< [2..1] TX Message Buffer Transmission Result Flag */ + __IM uint8_t TMTRM : 1; /*!< [3..3] TX Message Buffer Transmission Request Mirrored */ + __IM uint8_t TMTARM : 1; /*!< [4..4] TX Message Buffer Transmission Abort Request Mirrored */ + uint8_t : 3; + } CFDTMSTS_b[128]; + }; + __IM uint32_t RESERVED9[288]; + + union + { + __IM uint32_t CFDTMTRSTS[4]; /*!< (@ 0x00000CD0) TX Message Buffer Transmission Request Status + * Register [0..3] */ + + struct + { + __IM uint32_t TMTRSTS : 16; /*!< [15..0] TX Message Buffer Transmission Request Status */ + uint32_t : 16; + } CFDTMTRSTS_b[4]; + }; + __IM uint32_t RESERVED10[36]; + + union + { + __IM uint32_t CFDTMTARSTS[4]; /*!< (@ 0x00000D70) TX Message Buffer Transmission Abort Request + * Status Register [0..3] */ + + struct + { + __IM uint32_t TMTARSTS : 16; /*!< [15..0] TX Message Buffer Transmission Abort Request Status */ + uint32_t : 16; + } CFDTMTARSTS_b[4]; + }; + __IM uint32_t RESERVED11[36]; + + union + { + __IM uint32_t CFDTMTCSTS[4]; /*!< (@ 0x00000E10) TX Message Buffer Transmission Completion Status + * Register [0..3] */ + + struct + { + __IM uint32_t TMTCSTS : 16; /*!< [15..0] TX Message Buffer Transmission Completion Status */ + uint32_t : 16; + } CFDTMTCSTS_b[4]; + }; + __IM uint32_t RESERVED12[36]; + + union + { + __IM uint32_t CFDTMTASTS[4]; /*!< (@ 0x00000EB0) TX Message Buffer Transmission Abort Status Register + * [0..3] */ + + struct + { + __IM uint32_t TMTASTS : 16; /*!< [15..0] TX Message Buffer Transmission Abort Status */ + uint32_t : 16; + } CFDTMTASTS_b[4]; + }; + __IM uint32_t RESERVED13[36]; + + union + { + __IOM uint32_t CFDTMIEC[4]; /*!< (@ 0x00000F50) TX Message Buffer Transmission Interrupt Enable + * Register [0..3] */ + + struct + { + __IOM uint32_t TMIE : 16; /*!< [15..0] TX Message Buffer Interrupt Enable */ + uint32_t : 16; + } CFDTMIEC_b[4]; + }; + __IM uint32_t RESERVED14[40]; + + union + { + __IOM uint32_t CFDTXQCC0[2]; /*!< (@ 0x00001000) TX Queue Configuration/Control Register 0[0..1] */ + + struct + { + __IOM uint32_t TXQE : 1; /*!< [0..0] TX Queue Enable */ + __IOM uint32_t TXQGWE : 1; /*!< [1..1] TX Queue Gateway Mode Enable */ + __IOM uint32_t TXQOWE : 1; /*!< [2..2] TX Queue Overwrite Mode Enable */ + uint32_t : 2; + __IOM uint32_t TXQTXIE : 1; /*!< [5..5] TX Queue TX Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t TXQIM : 1; /*!< [7..7] TX Queue Interrupt Mode */ + __IOM uint32_t TXQDC : 5; /*!< [12..8] TX Queue Depth Configuration */ + uint32_t : 3; + __IOM uint32_t TXQFIE : 1; /*!< [16..16] TXQ Full Interrupt Enable */ + __IOM uint32_t TXQOFRXIE : 1; /*!< [17..17] TXQ One Frame Reception Interrupt Enable */ + __IOM uint32_t TXQOFTXIE : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Enable */ + uint32_t : 13; + } CFDTXQCC0_b[2]; + }; + __IM uint32_t RESERVED15[6]; + + union + { + __IOM uint32_t CFDTXQSTS0[2]; /*!< (@ 0x00001020) TX Queue Status Register 0[0..1] */ + + struct + { + __IM uint32_t TXQEMP : 1; /*!< [0..0] TX Queue Empty */ + __IM uint32_t TXQFLL : 1; /*!< [1..1] TX Queue Full */ + __IOM uint32_t TXQTXIF : 1; /*!< [2..2] TX Queue TX Interrupt Flag */ + uint32_t : 5; + __IM uint32_t TXQMC : 6; /*!< [13..8] TX Queue Message Count */ + uint32_t : 2; + __IOM uint32_t TXQFIF : 1; /*!< [16..16] TXQ Full Interrupt Flag */ + __IOM uint32_t TXQOFRXIF : 1; /*!< [17..17] TXQ One Frame Reception Interrupt Flag */ + __IOM uint32_t TXQOFTXIF : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Flag */ + __IOM uint32_t TXQMLT : 1; /*!< [19..19] TXQ Message Lost */ + __IOM uint32_t TXQMOW : 1; /*!< [20..20] TXQ Message Overwrite */ + uint32_t : 11; + } CFDTXQSTS0_b[2]; + }; + __IM uint32_t RESERVED16[6]; + + union + { + __OM uint32_t CFDTXQPCTR0[2]; /*!< (@ 0x00001040) TX Queue Pointer Control Register 0[0..1] */ + + struct + { + __OM uint32_t TXQPC : 8; /*!< [7..0] TX Queue Pointer Control */ + uint32_t : 24; + } CFDTXQPCTR0_b[2]; + }; + __IM uint32_t RESERVED17[6]; + + union + { + __IOM uint32_t CFDTXQCC1[2]; /*!< (@ 0x00001060) TX Queue Configuration/Control Register 1[0..1] */ + + struct + { + __IOM uint32_t TXQE : 1; /*!< [0..0] TX Queue Enable */ + __IOM uint32_t TXQGWE : 1; /*!< [1..1] TX Queue Gateway Mode Enable */ + __IOM uint32_t TXQOWE : 1; /*!< [2..2] TX Queue Overwrite Mode Enable */ + uint32_t : 2; + __IOM uint32_t TXQTXIE : 1; /*!< [5..5] TX Queue TX Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t TXQIM : 1; /*!< [7..7] TX Queue Interrupt Mode */ + __IOM uint32_t TXQDC : 5; /*!< [12..8] TX Queue Depth Configuration */ + uint32_t : 3; + __IOM uint32_t TXQFIE : 1; /*!< [16..16] TXQ Full Interrupt Enable */ + __IOM uint32_t TXQOFRXIE : 1; /*!< [17..17] TXQ One Frame Reception Interrupt Enable */ + __IOM uint32_t TXQOFTXIE : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Enable */ + uint32_t : 13; + } CFDTXQCC1_b[2]; + }; + __IM uint32_t RESERVED18[6]; + + union + { + __IOM uint32_t CFDTXQSTS1[2]; /*!< (@ 0x00001080) TX Queue Status Register 1[0..1] */ + + struct + { + __IM uint32_t TXQEMP : 1; /*!< [0..0] TX Queue Empty */ + __IM uint32_t TXQFLL : 1; /*!< [1..1] TX Queue Full */ + __IOM uint32_t TXQTXIF : 1; /*!< [2..2] TX Queue TX Interrupt Flag */ + uint32_t : 5; + __IM uint32_t TXQMC : 6; /*!< [13..8] TX Queue Message Count */ + uint32_t : 2; + __IOM uint32_t TXQFIF : 1; /*!< [16..16] TXQ Full Interrupt Flag */ + __IOM uint32_t TXQOFRXIF : 1; /*!< [17..17] TXQ One Frame Reception Interrupt Flag */ + __IOM uint32_t TXQOFTXIF : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Flag */ + __IOM uint32_t TXQMLT : 1; /*!< [19..19] TXQ Message Lost */ + __IOM uint32_t TXQMOW : 1; /*!< [20..20] TXQ Message Overwrite */ + uint32_t : 11; + } CFDTXQSTS1_b[2]; + }; + __IM uint32_t RESERVED19[6]; + + union + { + __OM uint32_t CFDTXQPCTR1[2]; /*!< (@ 0x000010A0) TX Queue Pointer Control Register 1[0..1] */ + + struct + { + __OM uint32_t TXQPC : 8; /*!< [7..0] TX Queue Pointer Control */ + uint32_t : 24; + } CFDTXQPCTR1_b[2]; + }; + __IM uint32_t RESERVED20[6]; + + union + { + __IOM uint32_t CFDTXQCC2[2]; /*!< (@ 0x000010C0) TX Queue Configuration/Control Register 2[0..1] */ + + struct + { + __IOM uint32_t TXQE : 1; /*!< [0..0] TX Queue Enable */ + __IOM uint32_t TXQGWE : 1; /*!< [1..1] TX Queue Gateway Mode Enable */ + __IOM uint32_t TXQOWE : 1; /*!< [2..2] TX Queue Overwrite Mode Enable */ + uint32_t : 2; + __IOM uint32_t TXQTXIE : 1; /*!< [5..5] TX Queue TX Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t TXQIM : 1; /*!< [7..7] TX Queue Interrupt Mode */ + __IOM uint32_t TXQDC : 5; /*!< [12..8] TX Queue Depth Configuration */ + uint32_t : 3; + __IOM uint32_t TXQFIE : 1; /*!< [16..16] TXQ Full Interrupt Enable */ + __IOM uint32_t TXQOFRXIE : 1; /*!< [17..17] TXQ One Frame Reception Interrupt Enable */ + __IOM uint32_t TXQOFTXIE : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Enable */ + uint32_t : 13; + } CFDTXQCC2_b[2]; + }; + __IM uint32_t RESERVED21[6]; + + union + { + __IOM uint32_t CFDTXQSTS2[2]; /*!< (@ 0x000010E0) TX Queue Status Register 2[0..1] */ + + struct + { + __IM uint32_t TXQEMP : 1; /*!< [0..0] TX Queue Empty */ + __IM uint32_t TXQFLL : 1; /*!< [1..1] TX Queue Full */ + __IOM uint32_t TXQTXIF : 1; /*!< [2..2] TX Queue TX Interrupt Flag */ + uint32_t : 5; + __IM uint32_t TXQMC : 6; /*!< [13..8] TX Queue Message Count */ + uint32_t : 2; + __IOM uint32_t TXQFIF : 1; /*!< [16..16] TXQ Full Interrupt Flag */ + __IOM uint32_t TXQOFRXIF : 1; /*!< [17..17] TXQ One Frame Reception Interrupt Flag */ + __IOM uint32_t TXQOFTXIF : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Flag */ + __IOM uint32_t TXQMLT : 1; /*!< [19..19] TXQ Message Lost */ + __IOM uint32_t TXQMOW : 1; /*!< [20..20] TXQ Message Overwrite */ + uint32_t : 11; + } CFDTXQSTS2_b[2]; + }; + __IM uint32_t RESERVED22[6]; + + union + { + __OM uint32_t CFDTXQPCTR2[2]; /*!< (@ 0x00001100) TX Queue Pointer Control Register 2[0..1] */ + + struct + { + __OM uint32_t TXQPC : 8; /*!< [7..0] TX Queue Pointer Control */ + uint32_t : 24; + } CFDTXQPCTR2_b[2]; + }; + __IM uint32_t RESERVED23[6]; + + union + { + __IOM uint32_t CFDTXQCC3[2]; /*!< (@ 0x00001120) TX Queue Configuration/Control Register 3[0..1] */ + + struct + { + __IOM uint32_t TXQE : 1; /*!< [0..0] TX Queue Enable */ + uint32_t : 1; + __IOM uint32_t TXQOWE : 1; /*!< [2..2] TX Queue Overwrite Mode Enable */ + uint32_t : 2; + __IOM uint32_t TXQTXIE : 1; /*!< [5..5] TX Queue TX Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t TXQIM : 1; /*!< [7..7] TX Queue Interrupt Mode */ + __IOM uint32_t TXQDC : 5; /*!< [12..8] TX Queue Depth Configuration */ + uint32_t : 5; + __IOM uint32_t TXQOFTXIE : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Enable */ + uint32_t : 13; + } CFDTXQCC3_b[2]; + }; + __IM uint32_t RESERVED24[6]; + + union + { + __IOM uint32_t CFDTXQSTS3[2]; /*!< (@ 0x00001140) TX Queue Status Register 3[0..1] */ + + struct + { + __IM uint32_t TXQEMP : 1; /*!< [0..0] TX Queue Empty */ + __IM uint32_t TXQFLL : 1; /*!< [1..1] TX Queue Full */ + __IOM uint32_t TXQTXIF : 1; /*!< [2..2] TX Queue TX Interrupt Flag */ + uint32_t : 5; + __IM uint32_t TXQMC : 6; /*!< [13..8] TX Queue Message Count */ + uint32_t : 4; + __IOM uint32_t TXQOFTXIF : 1; /*!< [18..18] TXQ One Frame Transmission Interrupt Flag */ + uint32_t : 1; + __IOM uint32_t TXQMOW : 1; /*!< [20..20] TXQ Message Overwrite */ + uint32_t : 11; + } CFDTXQSTS3_b[2]; + }; + __IM uint32_t RESERVED25[6]; + + union + { + __OM uint32_t CFDTXQPCTR3[2]; /*!< (@ 0x00001160) TX Queue Pointer Control Register 3[0..1] */ + + struct + { + __OM uint32_t TXQPC : 8; /*!< [7..0] TX Queue Pointer Control */ + uint32_t : 24; + } CFDTXQPCTR3_b[2]; + }; + __IM uint32_t RESERVED26[6]; + + union + { + __IM uint32_t CFDTXQESTS; /*!< (@ 0x00001180) TX Queue Empty Status Register */ + + struct + { + __IM uint32_t TXQxEMP : 8; /*!< [7..0] TXQ Empty Status */ + uint32_t : 24; + } CFDTXQESTS_b; + }; + + union + { + __IM uint32_t CFDTXQFISTS; /*!< (@ 0x00001184) TX Queue Full Interrupt Status Register */ + + struct + { + __IM uint32_t TXQ0FULL : 3; /*!< [2..0] TXQ Full Interrupt Status Flag for Channel 0 */ + uint32_t : 1; + __IM uint32_t TXQ1FULL : 3; /*!< [6..4] TXQ Full Interrupt Status Flag for Channel 1 */ + uint32_t : 25; + } CFDTXQFISTS_b; + }; + + union + { + __IM uint32_t CFDTXQMSTS; /*!< (@ 0x00001188) TX Queue Message Lost Status Register */ + + struct + { + __IM uint32_t TXQ0ML : 3; /*!< [2..0] TXQ Message Lost Status Flag for Channel 0 */ + uint32_t : 1; + __IM uint32_t TXQ1ML : 3; /*!< [6..4] TXQ Message Lost Status Flag for Channel 1 */ + uint32_t : 25; + } CFDTXQMSTS_b; + }; + __IM uint32_t RESERVED27; + + union + { + __IM uint32_t CFDTXQISTS; /*!< (@ 0x00001190) TX Queue Interrupt Status Register */ + + struct + { + __IM uint32_t TXQ0ISF : 4; /*!< [3..0] TXQ Interrupt Status Flag for Channel 0 */ + __IM uint32_t TXQ1ISF : 4; /*!< [7..4] TXQ Interrupt Status Flag for Channel 1 */ + uint32_t : 24; + } CFDTXQISTS_b; + }; + + union + { + __IM uint32_t CFDTXQOFTISTS; /*!< (@ 0x00001194) TX Queue One Frame TX Interrupt Status Register */ + + struct + { + __IM uint32_t TXQ0OFTISF : 4; /*!< [3..0] TXQ One Frame TX Interrupt Status Flag for Channel 0 */ + __IM uint32_t TXQ1OFTISF : 4; /*!< [7..4] TXQ One Frame TX Interrupt Status Flag for Channel 1 */ + uint32_t : 24; + } CFDTXQOFTISTS_b; + }; + + union + { + __IM uint32_t CFDTXQOFRISTS; /*!< (@ 0x00001198) TX Queue One Frame RX Interrupt Status Register */ + + struct + { + __IM uint32_t TXQ0OFRISF : 3; /*!< [2..0] TXQ One Frame RX Interrupt Status Flag for Channel 0 */ + uint32_t : 1; + __IM uint32_t TXQ1OFRISF : 3; /*!< [6..4] TXQ One Frame RX Interrupt Status Flag for Channel 1 */ + uint32_t : 25; + } CFDTXQOFRISTS_b; + }; + + union + { + __IM uint32_t CFDTXQFSTS; /*!< (@ 0x0000119C) TX Queue Full Status Register */ + + struct + { + __IM uint32_t TXQ0FSF : 4; /*!< [3..0] TXQ Full Status Flag for Channel 0 */ + __IM uint32_t TXQ1FSF : 4; /*!< [7..4] TXQ Full Status Flag for Channel 1 */ + uint32_t : 24; + } CFDTXQFSTS_b; + }; + __IM uint32_t RESERVED28[24]; + + union + { + __IOM uint32_t CFDTHLCC[2]; /*!< (@ 0x00001200) TX History List Configuration/Control Register + * [0..1] */ + + struct + { + __IOM uint32_t THLE : 1; /*!< [0..0] TX History List Enable */ + uint32_t : 7; + __IOM uint32_t THLIE : 1; /*!< [8..8] TX History List Interrupt Enable */ + __IOM uint32_t THLIM : 1; /*!< [9..9] TX History List Interrupt Mode */ + __IOM uint32_t THLDTE : 1; /*!< [10..10] TX History List Dedicated TX Enable */ + __IOM uint32_t THLDGE : 1; /*!< [11..11] TX History List Dedicated Gateway Enable */ + uint32_t : 20; + } CFDTHLCC_b[2]; + }; + __IM uint32_t RESERVED29[6]; + + union + { + __IOM uint32_t CFDTHLSTS[2]; /*!< (@ 0x00001220) TX History List Status Register [0..1] */ + + struct + { + __IM uint32_t THLEMP : 1; /*!< [0..0] TX History List Empty */ + __IM uint32_t THLFLL : 1; /*!< [1..1] TX History List Full */ + __IOM uint32_t THLELT : 1; /*!< [2..2] TX History List Entry Lost */ + __IOM uint32_t THLIF : 1; /*!< [3..3] TX History List Interrupt Flag */ + uint32_t : 4; + __IM uint32_t THLMC : 6; /*!< [13..8] TX History List Message Count */ + uint32_t : 18; + } CFDTHLSTS_b[2]; + }; + __IM uint32_t RESERVED30[6]; + + union + { + __OM uint32_t CFDTHLPCTR[2]; /*!< (@ 0x00001240) TX History List Pointer Control Register [0..1] */ + + struct + { + __OM uint32_t THLPC : 8; /*!< [7..0] TX History List Pointer Control */ + uint32_t : 24; + } CFDTHLPCTR_b[2]; + }; + __IM uint32_t RESERVED31[46]; + + union + { + __IM uint32_t CFDGTINTSTS0; /*!< (@ 0x00001300) Global TX Interrupt Status Register 0 */ + + struct + { + __IM uint32_t TSIF0 : 1; /*!< [0..0] TX Successful Interrupt Flag Channel 0 */ + __IM uint32_t TAIF0 : 1; /*!< [1..1] TX Abort Interrupt Flag Channel 0 */ + __IM uint32_t TQIF0 : 1; /*!< [2..2] TX Queue Interrupt Flag Channel 0 */ + __IM uint32_t CFTIF0 : 1; /*!< [3..3] COM FIFO TX/GW Mode Interrupt Flag Channel 0 */ + __IM uint32_t THIF0 : 1; /*!< [4..4] TX History List Interrupt Channel 0 */ + __IM uint32_t TQOFIF0 : 1; /*!< [5..5] TX Queue One Frame Transmission Interrupt Flag Channel + * 0 */ + __IM uint32_t CFOTIF0 : 1; /*!< [6..6] COM FIFO One Frame Transmission Interrupt Flag Channel + * 0 */ + uint32_t : 1; + __IM uint32_t TSIF1 : 1; /*!< [8..8] TX Successful Interrupt Flag Channel 1 */ + __IM uint32_t TAIF1 : 1; /*!< [9..9] TX Abort Interrupt Flag Channel 1 */ + __IM uint32_t TQIF1 : 1; /*!< [10..10] TX Queue Interrupt Flag Channel 1 */ + __IM uint32_t CFTIF1 : 1; /*!< [11..11] COM FIFO TX/GW Mode Interrupt Flag Channel 1 */ + __IM uint32_t THIF1 : 1; /*!< [12..12] TX History List Interrupt Channel 1 */ + __IM uint32_t TQOFIF1 : 1; /*!< [13..13] TX Queue One Frame Transmission Interrupt Flag Channel + * 1 */ + __IM uint32_t CFOTIF1 : 1; /*!< [14..14] COM FIFO One Frame Transmission Interrupt Flag Channel + * 1 */ + uint32_t : 17; + } CFDGTINTSTS0_b; + }; + __IM uint32_t RESERVED32; + + union + { + __IOM uint32_t CFDGTSTCFG; /*!< (@ 0x00001308) Global Test Configuration Register */ + + struct + { + __IOM uint32_t C0ICBCE : 1; /*!< [0..0] Channel 0 Internal CAN Bus Communication Test Mode Enable */ + __IOM uint32_t C1ICBCE : 1; /*!< [1..1] Channel 1 Internal CAN Bus Communication Test Mode Enable */ + uint32_t : 14; + __IOM uint32_t RTMPS : 10; /*!< [25..16] RAM Test Mode Page Select */ + uint32_t : 6; + } CFDGTSTCFG_b; + }; + + union + { + __IOM uint32_t CFDGTSTCTR; /*!< (@ 0x0000130C) Global Test Control Register */ + + struct + { + __IOM uint32_t ICBCTME : 1; /*!< [0..0] Internal CAN Bus Communication Test Mode Enable */ + uint32_t : 1; + __IOM uint32_t RTME : 1; /*!< [2..2] RAM Test Mode Enable */ + uint32_t : 29; + } CFDGTSTCTR_b; + }; + __IM uint32_t RESERVED33; + + union + { + __IOM uint32_t CFDGFDCFG; /*!< (@ 0x00001314) Global FD Configuration Register */ + + struct + { + __IOM uint32_t RPED : 1; /*!< [0..0] RES Bit Protocol Exception Disable */ + uint32_t : 7; + __IOM uint32_t TSCCFG : 2; /*!< [9..8] Timestamp Capture Configuration */ + uint32_t : 22; + } CFDGFDCFG_b; + }; + __IM uint32_t RESERVED34; + + union + { + __OM uint32_t CFDGLOCKK; /*!< (@ 0x0000131C) Global Lock Key Register */ + + struct + { + __OM uint32_t LOCK : 16; /*!< [15..0] Lock Key */ + uint32_t : 16; + } CFDGLOCKK_b; + }; + __IM uint32_t RESERVED35[4]; + + union + { + __IOM uint32_t CFDCDTCT; /*!< (@ 0x00001330) DMA Transfer Control Register */ + + struct + { + __IOM uint32_t RFDMAE0 : 1; /*!< [0..0] DMA Transfer Enable for RX FIFO 0 */ + __IOM uint32_t RFDMAE1 : 1; /*!< [1..1] DMA Transfer Enable for RX FIFO 1 */ + __IOM uint32_t RFDMAE2 : 1; /*!< [2..2] DMA Transfer Enable for RX FIFO 2 */ + __IOM uint32_t RFDMAE3 : 1; /*!< [3..3] DMA Transfer Enable for RX FIFO 3 */ + __IOM uint32_t RFDMAE4 : 1; /*!< [4..4] DMA Transfer Enable for RX FIFO 4 */ + __IOM uint32_t RFDMAE5 : 1; /*!< [5..5] DMA Transfer Enable for RX FIFO 5 */ + __IOM uint32_t RFDMAE6 : 1; /*!< [6..6] DMA Transfer Enable for RX FIFO 6 */ + __IOM uint32_t RFDMAE7 : 1; /*!< [7..7] DMA Transfer Enable for RX FIFO 7 */ + __IOM uint32_t CFDMAE0 : 1; /*!< [8..8] DMA Transfer Enable for Common FIFO 0 of Channel 0 */ + __IOM uint32_t CFDMAE1 : 1; /*!< [9..9] DMA Transfer Enable for Common FIFO 0 of Channel 1 */ + uint32_t : 22; + } CFDCDTCT_b; + }; + + union + { + __IM uint32_t CFDCDTSTS; /*!< (@ 0x00001334) DMA Transfer Status Register */ + + struct + { + __IM uint32_t RFDMASTS0 : 1; /*!< [0..0] DMA Transfer Status for RX FIFO 0 */ + __IM uint32_t RFDMASTS1 : 1; /*!< [1..1] DMA Transfer Status for RX FIFO 1 */ + __IM uint32_t RFDMASTS2 : 1; /*!< [2..2] DMA Transfer Status for RX FIFO 2 */ + __IM uint32_t RFDMASTS3 : 1; /*!< [3..3] DMA Transfer Status for RX FIFO 3 */ + __IM uint32_t RFDMASTS4 : 1; /*!< [4..4] DMA Transfer Status for RX FIFO 4 */ + __IM uint32_t RFDMASTS5 : 1; /*!< [5..5] DMA Transfer Status for RX FIFO 5 */ + __IM uint32_t RFDMASTS6 : 1; /*!< [6..6] DMA Transfer Status for RX FIFO 6 */ + __IM uint32_t RFDMASTS7 : 1; /*!< [7..7] DMA Transfer Status for RX FIFO 7 */ + __IM uint32_t CFDMASTS0 : 1; /*!< [8..8] DMA Transfer Status only for Common FIFO 0 of Channel + * 0 */ + __IM uint32_t CFDMASTS1 : 1; /*!< [9..9] DMA Transfer Status only for Common FIFO 0 of Channel + * 1 */ + uint32_t : 22; + } CFDCDTSTS_b; + }; + __IM uint32_t RESERVED36[2]; + + union + { + __IOM uint32_t CFDCDTTCT; /*!< (@ 0x00001340) DMA TX Transfer Control Register */ + + struct + { + __IOM uint32_t TQ0DMAE0 : 1; /*!< [0..0] DMA TX Transfer Enable for TXQ 0 of Channel 0 */ + __IOM uint32_t TQ0DMAE1 : 1; /*!< [1..1] DMA TX Transfer Enable for TXQ 0 of Channel 1 */ + uint32_t : 6; + __IOM uint32_t TQ3DMAE0 : 1; /*!< [8..8] DMA TX Transfer Enable for TXQ 3 of Channel 0 */ + __IOM uint32_t TQ3DMAE1 : 1; /*!< [9..9] DMA TX Transfer Enable for TXQ 3 of Channel 1 */ + uint32_t : 6; + __IOM uint32_t CFDMAE0 : 1; /*!< [16..16] DMA TX Transfer Enable for Common FIFO 2 of Channel + * 0 */ + __IOM uint32_t CFDMAE1 : 1; /*!< [17..17] DMA TX Transfer Enable for Common FIFO 2 of Channel + * 1 */ + uint32_t : 14; + } CFDCDTTCT_b; + }; + + union + { + __IM uint32_t CFDCDTTSTS; /*!< (@ 0x00001344) DMA TX Transfer Status Register */ + + struct + { + __IM uint32_t TQ0DMASTS0 : 1; /*!< [0..0] DMA TX Transfer Status for TXQ0 of Channel 0 */ + __IM uint32_t TQ0DMASTS1 : 1; /*!< [1..1] DMA TX Transfer Status for TXQ0 of Channel 1 */ + uint32_t : 6; + __IM uint32_t TQ3DMASTS0 : 1; /*!< [8..8] DMA TX Transfer Status for TXQ3 of Channel 0 */ + __IM uint32_t TQ3DMASTS1 : 1; /*!< [9..9] DMA TX Transfer Status for TXQ3 of Channel 1 */ + uint32_t : 6; + __IM uint32_t CFDMASTS0 : 1; /*!< [16..16] DMA TX Transfer Status for Common FIFO 2 of Channel + * 0 */ + __IM uint32_t CFDMASTS1 : 1; /*!< [17..17] DMA TX Transfer Status for Common FIFO 2 of Channel + * 1 */ + uint32_t : 14; + } CFDCDTTSTS_b; + }; + __IM uint32_t RESERVED37[2]; + + union + { + __IM uint32_t CFDGRINTSTS[2]; /*!< (@ 0x00001350) Global RX Interrupt Status Register [0..1] */ + + struct + { + __IM uint32_t QFIF : 3; /*!< [2..0] TXQ Full Interrupt Flag Channel n (n = 0, 1) */ + uint32_t : 1; + __IM uint32_t BQFIF : 2; /*!< [5..4] Borrowed TXQ Full Interrupt Flag Channel n (n = 0, 1) */ + uint32_t : 2; + __IM uint32_t QOFRIF : 3; /*!< [10..8] TXQ One Frame RX Interrupt Flag Channel n (n = 0, 1) */ + uint32_t : 1; + __IM uint32_t BQOFRIF : 2; /*!< [13..12] Borrowed TXQ One Frame RX Interrupt Flag Channel n + * (n = 0, 1) */ + uint32_t : 2; + __IM uint32_t CFRIF : 3; /*!< [18..16] Common FIFO RX Interrupt Flag Channel n (n = 0, 1) */ + uint32_t : 5; + __IM uint32_t CFRFIF : 3; /*!< [26..24] Common FIFO FDC Level Full Interrupt Flag Channel n + * (n = 0, 1) */ + uint32_t : 1; + __IM uint32_t CFOFRIF : 3; /*!< [30..28] Common FIFO One Frame RX Interrupt Flag Channel n (n + * = 0, 1) */ + uint32_t : 1; + } CFDGRINTSTS_b[2]; + }; + __IM uint32_t RESERVED38[10]; + + union + { + __IOM uint32_t CFDGRSTC; /*!< (@ 0x00001380) Global Reset Control Register */ + + struct + { + __IOM uint32_t SRST : 1; /*!< [0..0] Software Reset */ + uint32_t : 7; + __OM uint32_t KEY : 8; /*!< [15..8] Key Code */ + uint32_t : 16; + } CFDGRSTC_b; + }; + + union + { + __IOM uint32_t CFDGFCMC; /*!< (@ 0x00001384) Global Flexible CAN Mode Configuration Register */ + + struct + { + __IOM uint32_t FLXC0 : 1; /*!< [0..0] Flexible CAN Mode between Channel 0 and Channel 1 */ + uint32_t : 31; + } CFDGFCMC_b; + }; + __IM uint32_t RESERVED39; + + union + { + __IOM uint32_t CFDGFTBAC; /*!< (@ 0x0000138C) Global Flexible Transmission Buffer Assignment + * Configuration Register */ + + struct + { + __IOM uint32_t FLXMB0 : 4; /*!< [3..0] Flexible Transmission Buffer Assignment between Channel + * 0 and Channel 1 */ + uint32_t : 28; + } CFDGFTBAC_b; + }; + __IM uint32_t RESERVED40[28]; + __IOM R_CANFD_CFDC2_Type CFDC2[2]; /*!< (@ 0x00001400) Channel Configuration Registers */ + __IM uint32_t RESERVED41[240]; + __IOM R_CANFD_CFDGAFL_Type CFDGAFL[16]; /*!< (@ 0x00001800) Global Acceptance Filter List Registers */ + __IM uint32_t RESERVED42[448]; + __IOM R_CANFD_CFDRM_Type CFDRM[32]; /*!< (@ 0x00002000) RX Message Buffer Access Registers */ + __IM uint32_t RESERVED43[3072]; + __IOM R_CANFD_CFDRF_Type CFDRF[8]; /*!< (@ 0x00006000) RX FIFO Access Registers */ + __IOM R_CANFD_CFDCF_Type CFDCF[6]; /*!< (@ 0x00006400) Common FIFO Access Registers */ + __IM uint32_t RESERVED44[1600]; + __IOM R_CANFD_CFDTHL_Type CFDTHL[2]; /*!< (@ 0x00008000) Channel TX History List */ + __IM uint32_t RESERVED45[252]; + + union + { + __IOM uint32_t CFDRPGACC[64]; /*!< (@ 0x00008400) RAM Test Page Access Register [0..63] */ + + struct + { + __IOM uint32_t RDTA : 32; /*!< [31..0] RAM Data Test Access */ + } CFDRPGACC_b[64]; + }; + __IM uint32_t RESERVED46[7872]; + __IOM R_CANFD_CFDTM_Type CFDTM[128]; /*!< (@ 0x00010000) TX Message Buffer Registers */ +} R_CANFD_Type; /*!< Size = 81920 (0x14000) */ + +/* =========================================================================================================================== */ +/* ================ R_CMT ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Compare Match Timer Control (R_CMT) + */ + +typedef struct /*!< (@ 0x80040000) R_CMT Structure */ +{ + __IOM R_CMT_UNT_Type UNT[3]; /*!< (@ 0x00000000) 3 Timer Start Register Units */ +} R_CMT_Type; /*!< Size = 3072 (0xc00) */ + +/* =========================================================================================================================== */ +/* ================ R_CMTW0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Compare Match Timer W (R_CMTW0) + */ + +typedef struct /*!< (@ 0x80041000) R_CMTW0 Structure */ +{ + union + { + __IOM uint16_t CMWSTR; /*!< (@ 0x00000000) Timer Start Register */ + + struct + { + __IOM uint16_t STR : 1; /*!< [0..0] Counter Start */ + uint16_t : 15; + } CMWSTR_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t CMWCR; /*!< (@ 0x00000004) Timer Control Register */ + + struct + { + __IOM uint16_t CKS : 2; /*!< [1..0] Clock Select */ + uint16_t : 1; + __IOM uint16_t CMWIE : 1; /*!< [3..3] Compare Match Interrupt Enable */ + __IOM uint16_t IC0IE : 1; /*!< [4..4] Input Capture 0 Interrupt Enable */ + __IOM uint16_t IC1IE : 1; /*!< [5..5] Input Capture 1 Interrupt Enable */ + __IOM uint16_t OC0IE : 1; /*!< [6..6] Output Compare 0 Interrupt Enable */ + __IOM uint16_t OC1IE : 1; /*!< [7..7] Output Compare 1 Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t CMS : 1; /*!< [9..9] Timer Counter Size */ + uint16_t : 3; + __IOM uint16_t CCLR : 3; /*!< [15..13] Counter Clear */ + } CMWCR_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t CMWIOR; /*!< (@ 0x00000008) Timer I/O Control Register */ + + struct + { + __IOM uint16_t IC0 : 2; /*!< [1..0] Input Capture Control 0 */ + __IOM uint16_t IC1 : 2; /*!< [3..2] Input Capture Control 1 */ + __IOM uint16_t IC0E : 1; /*!< [4..4] Input Capture Enable 0 */ + __IOM uint16_t IC1E : 1; /*!< [5..5] Input Capture Enable 1 */ + uint16_t : 2; + __IOM uint16_t OC0 : 2; /*!< [9..8] Output Compare Control 0 */ + __IOM uint16_t OC1 : 2; /*!< [11..10] Output Compare Control 1 */ + __IOM uint16_t OC0E : 1; /*!< [12..12] Compare Match Enable 0 */ + __IOM uint16_t OC1E : 1; /*!< [13..13] Compare Match Enable 1 */ + uint16_t : 1; + __IOM uint16_t CMWE : 1; /*!< [15..15] Compare Match Enable */ + } CMWIOR_b; + }; + __IM uint16_t RESERVED2; + __IM uint32_t RESERVED3; + __IOM uint32_t CMWCNT; /*!< (@ 0x00000010) Timer Counter */ + __IOM uint32_t CMWCOR; /*!< (@ 0x00000014) Compare Match Constant Register */ + __IM uint32_t CMWICR0; /*!< (@ 0x00000018) Input Capture Registers */ + __IM uint32_t CMWICR1; /*!< (@ 0x0000001C) Input Capture Registers */ + __IOM uint32_t CMWOCR0; /*!< (@ 0x00000020) Output Compare Registers */ + __IOM uint32_t CMWOCR1; /*!< (@ 0x00000024) Output Compare Registers */ +} R_CMTW0_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ R_WDT0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Watchdog Timer 0 (R_WDT0) + */ + +typedef struct /*!< (@ 0x80042000) R_WDT0 Structure */ +{ + __IOM uint8_t WDTRR; /*!< (@ 0x00000000) WDT Refresh Register */ + __IM uint8_t RESERVED; + + union + { + __IOM uint16_t WDTCR; /*!< (@ 0x00000002) WDT Control Register */ + + struct + { + __IOM uint16_t TOPS : 2; /*!< [1..0] Timeout Period Selection */ + uint16_t : 2; + __IOM uint16_t CKS : 4; /*!< [7..4] Clock Division Ratio Selection */ + __IOM uint16_t RPES : 2; /*!< [9..8] Window End Position Selection */ + uint16_t : 2; + __IOM uint16_t RPSS : 2; /*!< [13..12] Window Start Position Selection */ + uint16_t : 2; + } WDTCR_b; + }; + + union + { + __IOM uint16_t WDTSR; /*!< (@ 0x00000004) WDT Status Register */ + + struct + { + __IM uint16_t CNTVAL : 14; /*!< [13..0] Down-Counter Value */ + __IOM uint16_t UNDFF : 1; /*!< [14..14] Underflow Flag */ + __IOM uint16_t REFEF : 1; /*!< [15..15] Refresh Error Flag */ + } WDTSR_b; + }; + + union + { + __IOM uint8_t WDTRCR; /*!< (@ 0x00000006) WDT Reset Control Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t RSTIRQS : 1; /*!< [7..7] Reset Interrupt Request Selection */ + } WDTRCR_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; +} R_WDT0_Type; /*!< Size = 10 (0xa) */ + +/* =========================================================================================================================== */ +/* ================ R_IIC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I2C Bus Interface 0 (R_IIC0) + */ + +typedef struct /*!< (@ 0x80043000) R_IIC0 Structure */ +{ + union + { + __IOM uint8_t ICCR1; /*!< (@ 0x00000000) I2C Bus Control Register 1 */ + + struct + { + __IM uint8_t SDAI : 1; /*!< [0..0] SDA Line Monitor */ + __IM uint8_t SCLI : 1; /*!< [1..1] SCL Line Monitor */ + __IOM uint8_t SDAO : 1; /*!< [2..2] SDA Output Control/Monitor */ + __IOM uint8_t SCLO : 1; /*!< [3..3] SCL Output Control/Monitor */ + __OM uint8_t SOWP : 1; /*!< [4..4] SCLO/SDAO Write Protect */ + __IOM uint8_t CLO : 1; /*!< [5..5] Extra SCL Clock Cycle Output */ + __IOM uint8_t IICRST : 1; /*!< [6..6] IIC-Bus Interface Internal Reset */ + __IOM uint8_t ICE : 1; /*!< [7..7] IIC-Bus Interface Enable */ + } ICCR1_b; + }; + + union + { + __IOM uint8_t ICCR2; /*!< (@ 0x00000001) I2C Bus Control Register 2 */ + + struct + { + uint8_t : 1; + __IOM uint8_t ST : 1; /*!< [1..1] Start Condition Issuance Request */ + __IOM uint8_t RS : 1; /*!< [2..2] Restart Condition Issuance Request */ + __IOM uint8_t SP : 1; /*!< [3..3] Stop Condition Issuance Request */ + uint8_t : 1; + __IOM uint8_t TRS : 1; /*!< [5..5] Transmit/Receive Mode */ + __IOM uint8_t MST : 1; /*!< [6..6] Master/Slave Mode */ + __IM uint8_t BBSY : 1; /*!< [7..7] Bus Busy Detection Flag */ + } ICCR2_b; + }; + + union + { + __IOM uint8_t ICMR1; /*!< (@ 0x00000002) I2C Bus Mode Register 1 */ + + struct + { + __IOM uint8_t BC : 3; /*!< [2..0] Bit Counter */ + __OM uint8_t BCWP : 1; /*!< [3..3] BC Write Protect */ + __IOM uint8_t CKS : 3; /*!< [6..4] Internal Reference Clock Select */ + __IOM uint8_t MTWP : 1; /*!< [7..7] MST/TRS Write Protect */ + } ICMR1_b; + }; + + union + { + __IOM uint8_t ICMR2; /*!< (@ 0x00000003) I2C Bus Mode Register 2 */ + + struct + { + __IOM uint8_t TMOS : 1; /*!< [0..0] Timeout Detection Time Select */ + __IOM uint8_t TMOL : 1; /*!< [1..1] Timeout L Count Control */ + __IOM uint8_t TMOH : 1; /*!< [2..2] Timeout H Count Control */ + uint8_t : 1; + __IOM uint8_t SDDL : 3; /*!< [6..4] SDA Output Delay Counter */ + __IOM uint8_t DLCS : 1; /*!< [7..7] SDA Output Delay Clock Source Select */ + } ICMR2_b; + }; + + union + { + __IOM uint8_t ICMR3; /*!< (@ 0x00000004) I2C Bus Mode Register 3 */ + + struct + { + __IOM uint8_t NF : 2; /*!< [1..0] Noise Filter Stage Select */ + __IM uint8_t ACKBR : 1; /*!< [2..2] Receive Acknowledge */ + __IOM uint8_t ACKBT : 1; /*!< [3..3] Transmit Acknowledge */ + __IOM uint8_t ACKWP : 1; /*!< [4..4] ACKBT Write Protect */ + __IOM uint8_t RDRFS : 1; /*!< [5..5] RDRF Flag Set Timing Select */ + __IOM uint8_t WAIT : 1; /*!< [6..6] WAIT */ + __IOM uint8_t SMBS : 1; /*!< [7..7] SMBus/IIC-Bus Select */ + } ICMR3_b; + }; + + union + { + __IOM uint8_t ICFER; /*!< (@ 0x00000005) I2C Bus Function Enable Register */ + + struct + { + __IOM uint8_t TMOE : 1; /*!< [0..0] Timeout Function Enable */ + __IOM uint8_t MALE : 1; /*!< [1..1] Master Arbitration-Lost Detection Enable */ + __IOM uint8_t NALE : 1; /*!< [2..2] NACK Transmission Arbitration-Lost Detection Enable */ + __IOM uint8_t SALE : 1; /*!< [3..3] Slave Arbitration-Lost Detection Enable */ + __IOM uint8_t NACKE : 1; /*!< [4..4] NACK Reception Transfer Suspension Enable */ + __IOM uint8_t NFE : 1; /*!< [5..5] Digital Noise Filter Circuit Enable */ + __IOM uint8_t SCLE : 1; /*!< [6..6] SCL Synchronous Circuit Enable */ + uint8_t : 1; + } ICFER_b; + }; + + union + { + __IOM uint8_t ICSER; /*!< (@ 0x00000006) I2C Bus Status Enable Register */ + + struct + { + __IOM uint8_t SAR0E : 1; /*!< [0..0] Slave Address Register 0 Enable */ + __IOM uint8_t SAR1E : 1; /*!< [1..1] Slave Address Register 1 Enable */ + __IOM uint8_t SAR2E : 1; /*!< [2..2] Slave Address Register 2 Enable */ + __IOM uint8_t GCAE : 1; /*!< [3..3] General Call Address Enable */ + uint8_t : 1; + __IOM uint8_t DIDE : 1; /*!< [5..5] Device ID Address Detection Enable */ + uint8_t : 1; + __IOM uint8_t HOAE : 1; /*!< [7..7] Host Address Enable */ + } ICSER_b; + }; + + union + { + __IOM uint8_t ICIER; /*!< (@ 0x00000007) I2C Bus Interrupt Enable Register */ + + struct + { + __IOM uint8_t TMOIE : 1; /*!< [0..0] Timeout Interrupt Request Enable */ + __IOM uint8_t ALIE : 1; /*!< [1..1] Arbitration-Lost Interrupt Request Enable */ + __IOM uint8_t STIE : 1; /*!< [2..2] Start Condition Detection Interrupt Request Enable */ + __IOM uint8_t SPIE : 1; /*!< [3..3] Stop Condition Detection Interrupt Request Enable */ + __IOM uint8_t NAKIE : 1; /*!< [4..4] NACK Reception Interrupt Request Enable */ + __IOM uint8_t RIE : 1; /*!< [5..5] Receive Data Full Interrupt Request Enable */ + __IOM uint8_t TEIE : 1; /*!< [6..6] Transmit End Interrupt Request Enable */ + __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Data Empty Interrupt Request Enable */ + } ICIER_b; + }; + + union + { + __IOM uint8_t ICSR1; /*!< (@ 0x00000008) I2C Bus Status Register 1 */ + + struct + { + __IOM uint8_t AAS0 : 1; /*!< [0..0] Slave Address 0 Detection Flag */ + __IOM uint8_t AAS1 : 1; /*!< [1..1] Slave Address 1 Detection Flag */ + __IOM uint8_t AAS2 : 1; /*!< [2..2] Slave Address 2 Detection Flag */ + __IOM uint8_t GCA : 1; /*!< [3..3] General Call Address Detection Flag */ + uint8_t : 1; + __IOM uint8_t DID : 1; /*!< [5..5] Device ID Address Detection Flag */ + uint8_t : 1; + __IOM uint8_t HOA : 1; /*!< [7..7] Host Address Detection Flag */ + } ICSR1_b; + }; + + union + { + __IOM uint8_t ICSR2; /*!< (@ 0x00000009) I2C Bus Status Register 2 */ + + struct + { + __IOM uint8_t TMOF : 1; /*!< [0..0] Timeout Detection Flag */ + __IOM uint8_t AL : 1; /*!< [1..1] Arbitration-Lost Flag */ + __IOM uint8_t START : 1; /*!< [2..2] Start Condition Detection Flag */ + __IOM uint8_t STOP : 1; /*!< [3..3] Stop Condition Detection Flag */ + __IOM uint8_t NACKF : 1; /*!< [4..4] NACK Detection Flag */ + __IOM uint8_t RDRF : 1; /*!< [5..5] Receive Data Full Flag */ + __IOM uint8_t TEND : 1; /*!< [6..6] Transmit End Flag */ + __IM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } ICSR2_b; + }; + __IOM R_IIC0_SAR_Type SAR[3]; /*!< (@ 0x0000000A) Slave Address Registers */ + + union + { + __IOM uint8_t ICBRL; /*!< (@ 0x00000010) I2C Bus Bit Rate Low-Level Register */ + + struct + { + __IOM uint8_t BRL : 5; /*!< [4..0] Bit Rate Low-Level Period */ + uint8_t : 3; + } ICBRL_b; + }; + + union + { + __IOM uint8_t ICBRH; /*!< (@ 0x00000011) I2C Bus Bit Rate High-Level Register */ + + struct + { + __IOM uint8_t BRH : 5; /*!< [4..0] Bit Rate High-Level Period */ + uint8_t : 3; + } ICBRH_b; + }; + __IOM uint8_t ICDRT; /*!< (@ 0x00000012) I2C Bus Transmit Data Register */ + __IM uint8_t ICDRR; /*!< (@ 0x00000013) I2C Bus Receive Data Register */ +} R_IIC0_Type; /*!< Size = 20 (0x14) */ + +/* =========================================================================================================================== */ +/* ================ R_DOC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Data Operation Circuit (R_DOC) + */ + +typedef struct /*!< (@ 0x80044000) R_DOC Structure */ +{ + union + { + __IOM uint8_t DOCR; /*!< (@ 0x00000000) DOC Control Register */ + + struct + { + __IOM uint8_t OMS : 2; /*!< [1..0] Operating Mode Select */ + __IOM uint8_t DCSEL : 1; /*!< [2..2] Detection Condition Select */ + uint8_t : 1; + __IOM uint8_t DOPCIE : 1; /*!< [4..4] Data Operation Circuit Interrupt Enable */ + __IM uint8_t DOPCF : 1; /*!< [5..5] Data Operation Circuit Flag */ + __OM uint8_t DOPCFCL : 1; /*!< [6..6] DOPCF Flag Clear */ + uint8_t : 1; + } DOCR_b; + }; + __IM uint8_t RESERVED; + __IOM uint16_t DODIR; /*!< (@ 0x00000002) DOC Data Input Register */ + __IOM uint16_t DODSR; /*!< (@ 0x00000004) DOC Data Setting Register */ +} R_DOC_Type; /*!< Size = 6 (0x6) */ + +/* =========================================================================================================================== */ +/* ================ R_ADC121 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief 12-Bit A/D converter (R_ADC121) + */ + +typedef struct /*!< (@ 0x80045000) R_ADC121 Structure */ +{ + union + { + __IOM uint16_t ADCSR; /*!< (@ 0x00000000) A/D Control Register */ + + struct + { + __IOM uint16_t DBLANS : 5; /*!< [4..0] Double Trigger Channel Select */ + uint16_t : 1; + __IOM uint16_t GBADIE : 1; /*!< [6..6] Group B Scan End Interrupt Enable */ + __IOM uint16_t DBLE : 1; /*!< [7..7] Double Trigger Mode Select */ + __IOM uint16_t EXTRG : 1; /*!< [8..8] Trigger Select */ + __IOM uint16_t TRGE : 1; /*!< [9..9] Trigger Start Enable */ + uint16_t : 2; + __IOM uint16_t ADIE : 1; /*!< [12..12] Scan End Interrupt Enable */ + __IOM uint16_t ADCS : 2; /*!< [14..13] Scan Mode Select */ + __IOM uint16_t ADST : 1; /*!< [15..15] A/D conversion Start */ + } ADCSR_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t ADANSA0; /*!< (@ 0x00000004) A/D Channel Select Register A0 */ + + struct + { + __IOM uint16_t ANSA0 : 8; /*!< [7..0] A/D conversion Analog input Channel Select */ + uint16_t : 8; + } ADANSA0_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t ADADS0; /*!< (@ 0x00000008) A/D-Converted Value Addition/Average Function + * Channel Select Register 0 */ + + struct + { + __IOM uint16_t ADS0 : 8; /*!< [7..0] A/D-Converted Value Addition/Average Channel Select */ + uint16_t : 8; + } ADADS0_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint8_t ADADC; /*!< (@ 0x0000000C) A/D-Converted Value Addition/Average Count Select + * Register */ + + struct + { + __IOM uint8_t ADC : 3; /*!< [2..0] Addition Count Select */ + uint8_t : 4; + __IOM uint8_t AVEE : 1; /*!< [7..7] Average Mode Enable */ + } ADADC_b; + }; + __IM uint8_t RESERVED3; + + union + { + __IOM uint16_t ADCER; /*!< (@ 0x0000000E) A/D Control Extended Register */ + + struct + { + uint16_t : 1; + __IOM uint16_t ADPRC : 2; /*!< [2..1] A/D Conversion Accuracy Specify */ + uint16_t : 2; + __IOM uint16_t ACE : 1; /*!< [5..5] A/D Data Register Automatic Clearing Enable */ + uint16_t : 9; + __IOM uint16_t ADRFMT : 1; /*!< [15..15] A/D Data Register Format Select */ + } ADCER_b; + }; + + union + { + __IOM uint16_t ADSTRGR; /*!< (@ 0x00000010) A/D Conversion Start Trigger Select Register */ + + struct + { + __IOM uint16_t TRSB : 6; /*!< [5..0] A/D Conversion Start Trigger Select for Group B */ + uint16_t : 2; + __IOM uint16_t TRSA : 6; /*!< [13..8] A/D Conversion Start Trigger Select */ + uint16_t : 2; + } ADSTRGR_b; + }; + __IM uint16_t RESERVED4; + + union + { + __IOM uint16_t ADANSB0; /*!< (@ 0x00000014) A/D Channel Select Register B0 */ + + struct + { + __IOM uint16_t ANSB0 : 8; /*!< [7..0] A/D Conversion Analog Input Channel Select */ + uint16_t : 8; + } ADANSB0_b; + }; + __IM uint16_t RESERVED5; + + union + { + __IM uint16_t ADDBLDR; /*!< (@ 0x00000018) A/D Data Duplication Register */ + + struct + { + __IM uint16_t DBLDR : 16; /*!< [15..0] The result of A/D conversion in response to the second + * trigger in double trigger mode. */ + } ADDBLDR_b; + }; + __IM uint16_t RESERVED6[3]; + + union + { + __IM uint16_t ADDR[8]; /*!< (@ 0x00000020) A/D Data Register n (n = 0 to 3 for unit 0, n + * = 0 to 7 for unit1) */ + + struct + { + __IM uint16_t DR : 16; /*!< [15..0] The result of A/D conversion (n: Number of channel) */ + } ADDR_b[8]; + }; + __IM uint16_t RESERVED7[27]; + + union + { + __IOM uint16_t ADSHCR; /*!< (@ 0x00000066) A/D Sample and Hold Control Register */ + + struct + { + __IOM uint16_t SSTSH : 8; /*!< [7..0] Sample and hold period setting */ + __IOM uint16_t SHANS : 3; /*!< [10..8] Sample and hold use or bypass select for ch0-2 */ + uint16_t : 5; + } ADSHCR_b; + }; + __IM uint16_t RESERVED8[10]; + __IM uint8_t RESERVED9; + + union + { + __IOM uint8_t ADELCCR; /*!< (@ 0x0000007D) A/D Event Link Control Register */ + + struct + { + __IOM uint8_t ELCC : 2; /*!< [1..0] Event link control bits */ + __IOM uint8_t GCELC : 1; /*!< [2..2] Event control bit for Group C */ + uint8_t : 5; + } ADELCCR_b; + }; + __IM uint16_t RESERVED10; + + union + { + __IOM uint16_t ADGSPCR; /*!< (@ 0x00000080) A/D Group Scan Priority Control Register */ + + struct + { + __IOM uint16_t PGS : 1; /*!< [0..0] Group Priority Control Setting */ + __IOM uint16_t GBRSCN : 1; /*!< [1..1] Group B Restart Setting */ + uint16_t : 12; + __IOM uint16_t LGRRS : 1; /*!< [14..14] Restart Channel Select */ + __IOM uint16_t GBRP : 1; /*!< [15..15] Group B Single Scan Continuous Start */ + } ADGSPCR_b; + }; + __IM uint16_t RESERVED11; + + union + { + __IM uint16_t ADDBLDRA; /*!< (@ 0x00000084) A/D Data Duplication Register A */ + + struct + { + __IM uint16_t DBLDRA : 16; /*!< [15..0] The result of A/D conversion during extended operation + * in double trigger mode */ + } ADDBLDRA_b; + }; + + union + { + __IM uint16_t ADDBLDRB; /*!< (@ 0x00000086) A/D Data Duplication Register B */ + + struct + { + __IM uint16_t DBLDRB : 16; /*!< [15..0] The result of A/D conversion during extended operation + * in double trigger mode */ + } ADDBLDRB_b; + }; + __IM uint16_t RESERVED12[2]; + + union + { + __IM uint8_t ADWINMON; /*!< (@ 0x0000008C) A/D Compare Function Window A/B Status Monitoring + * Register */ + + struct + { + __IM uint8_t MONCOMB : 1; /*!< [0..0] Combination result monitor */ + uint8_t : 3; + __IM uint8_t MONCMPA : 1; /*!< [4..4] Comparing result monitor for window A */ + __IM uint8_t MONCMPB : 1; /*!< [5..5] Comparing result monitor for window B */ + uint8_t : 2; + } ADWINMON_b; + }; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14; + + union + { + __IOM uint16_t ADCMPCR; /*!< (@ 0x00000090) A/D Compare Function Control Register */ + + struct + { + __IOM uint16_t CMPAB : 2; /*!< [1..0] Window A/B combination condition setting */ + uint16_t : 7; + __IOM uint16_t CMPBE : 1; /*!< [9..9] Window B operation permission */ + uint16_t : 1; + __IOM uint16_t CMPAE : 1; /*!< [11..11] Window A operation permission */ + uint16_t : 1; + __IOM uint16_t CMPBIE : 1; /*!< [13..13] Compare window B Interrupt Enable */ + __IOM uint16_t WCMPE : 1; /*!< [14..14] Window Function enable */ + __IOM uint16_t CMPAIE : 1; /*!< [15..15] Compare window A Interrupt Enable */ + } ADCMPCR_b; + }; + __IM uint16_t RESERVED15; + + union + { + __IOM uint16_t ADCMPANSR0; /*!< (@ 0x00000094) A/D Compare Function Window A Channel Select + * Register 0 */ + + struct + { + __IOM uint16_t CMPCHA0 : 8; /*!< [7..0] Window A Channel Select */ + uint16_t : 8; + } ADCMPANSR0_b; + }; + __IM uint16_t RESERVED16; + + union + { + __IOM uint16_t ADCMPLR0; /*!< (@ 0x00000098) A/D Compare Function Window A Comparison Condition + * Setting Register 0 */ + + struct + { + __IOM uint16_t CMPLCHA0 : 8; /*!< [7..0] Window A comparison condition for target channel (ch0-7) + * setting */ + uint16_t : 8; + } ADCMPLR0_b; + }; + __IM uint16_t RESERVED17; + + union + { + __IOM uint16_t ADCMPDR0; /*!< (@ 0x0000009C) A/D Comparison Function Window A Lower Level + * Setting Register */ + + struct + { + __IOM uint16_t CMPLLA : 16; /*!< [15..0] Reference data setting when using the compare function + * window A */ + } ADCMPDR0_b; + }; + + union + { + __IOM uint16_t ADCMPDR1; /*!< (@ 0x0000009E) AD Comparison Function Window A Upper Level Setting + * Register */ + + struct + { + __IOM uint16_t CMPULA : 16; /*!< [15..0] Reference data setting when using the compare function + * window A */ + } ADCMPDR1_b; + }; + + union + { + __IOM uint16_t ADCMPSR0; /*!< (@ 0x000000A0) A/D Comparison Function Window A Channel Status + * Register 0 */ + + struct + { + __IOM uint16_t CMPSTCHA0 : 8; /*!< [7..0] Window A Status Flag */ + uint16_t : 8; + } ADCMPSR0_b; + }; + __IM uint16_t RESERVED18[2]; + + union + { + __IOM uint8_t ADCMPBNSR; /*!< (@ 0x000000A6) A/D Compare Function Window B Channel Select + * Register */ + + struct + { + __IOM uint8_t CMPCHB : 6; /*!< [5..0] Window B Channel Select */ + uint8_t : 1; + __IOM uint8_t CMPLB : 1; /*!< [7..7] Window B Comparison Condition Setting */ + } ADCMPBNSR_b; + }; + __IM uint8_t RESERVED19; + + union + { + __IOM uint16_t ADWINLLB; /*!< (@ 0x000000A8) A/D Compare Function Window B Lower-Side Level + * Setting Register */ + + struct + { + __IOM uint16_t CMPLLB : 16; /*!< [15..0] Reference lower data setting when using the compare + * function window B */ + } ADWINLLB_b; + }; + + union + { + __IOM uint16_t ADWINULB; /*!< (@ 0x000000AA) A/D Compare Function Window B Upper-Side Level + * Setting Register */ + + struct + { + __IOM uint16_t CMPULB : 16; /*!< [15..0] Reference upper data setting when using the compare + * function window B */ + } ADWINULB_b; + }; + + union + { + __IOM uint8_t ADCMPBSR; /*!< (@ 0x000000AC) A/D Compare Function Window B Status Register */ + + struct + { + __IOM uint8_t CMPSTB : 1; /*!< [0..0] Window B Flag */ + uint8_t : 7; + } ADCMPBSR_b; + }; + __IM uint8_t RESERVED20; + __IM uint16_t RESERVED21[19]; + + union + { + __IOM uint16_t ADANSC0; /*!< (@ 0x000000D4) A/D Channel Select Register C0 */ + + struct + { + __IOM uint16_t ANSC0 : 8; /*!< [7..0] A/D-Converted Channel Select for Group C in Group Scan + * Mode */ + uint16_t : 8; + } ADANSC0_b; + }; + __IM uint16_t RESERVED22; + __IM uint8_t RESERVED23; + + union + { + __IOM uint8_t ADGCTRGR; /*!< (@ 0x000000D9) A/D Group C Trigger Select Register */ + + struct + { + __IOM uint8_t TRSC : 6; /*!< [5..0] Group C A/D Conversion Start Trigger Select */ + __IOM uint8_t GCADIE : 1; /*!< [6..6] Group C Scan Completion Interrupt Enable */ + __IOM uint8_t GRCE : 1; /*!< [7..7] Group C A/D Conversion Enable */ + } ADGCTRGR_b; + }; + __IM uint16_t RESERVED24[3]; + + union + { + __IOM uint8_t ADSSTR[8]; /*!< (@ 0x000000E0) A/D Sampling State Register n (n = 0 to 3 for + * unit 0, n = 0 to 7 for unit1) */ + + struct + { + __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting */ + } ADSSTR_b[8]; + }; +} R_ADC121_Type; /*!< Size = 232 (0xe8) */ + +/* =========================================================================================================================== */ +/* ================ R_TSU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Temperature Sensor Unit (R_TSU) + */ + +typedef struct /*!< (@ 0x80046000) R_TSU Structure */ +{ + union + { + __IOM uint32_t TSUSM; /*!< (@ 0x00000000) Sensor Mode Register */ + + struct + { + __IOM uint32_t TSEN : 1; /*!< [0..0] Temperature Sensor Enable */ + __IOM uint32_t ADCEN : 1; /*!< [1..1] ADC Enable */ + uint32_t : 30; + } TSUSM_b; + }; + + union + { + __IOM uint32_t TSUST; /*!< (@ 0x00000004) Sensor Trigger Register */ + + struct + { + __IOM uint32_t START : 1; /*!< [0..0] A/D Conversion Control */ + uint32_t : 31; + } TSUST_b; + }; + + union + { + __IOM uint32_t TSUSCS; /*!< (@ 0x00000008) Sensor Configuration Setting Register */ + + struct + { + uint32_t : 3; + __IOM uint32_t CKDIV : 1; /*!< [3..3] Divider Value for PCLKL */ + uint32_t : 28; + } TSUSCS_b; + }; + + union + { + __IM uint32_t TSUSAD; /*!< (@ 0x0000000C) Sensor ADC Data Register */ + + struct + { + __IM uint32_t DOUT : 12; /*!< [11..0] Temperature Sensor Data Output */ + uint32_t : 20; + } TSUSAD_b; + }; + + union + { + __IM uint32_t TSUSS; /*!< (@ 0x00000010) Sensor Status Register */ + + struct + { + __IM uint32_t CONV : 1; /*!< [0..0] A/D Conversion Status */ + uint32_t : 31; + } TSUSS_b; + }; +} R_TSU_Type; /*!< Size = 20 (0x14) */ + +/* =========================================================================================================================== */ +/* ================ R_POEG1 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief GPT Port Output Enable 1 (R_POEG1) + */ + +typedef struct /*!< (@ 0x80047000) R_POEG1 Structure */ +{ + union + { + __IOM uint32_t POEG1GA; /*!< (@ 0x00000000) POEG1 Group A Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG1GA_b; + }; + __IM uint32_t RESERVED[255]; + + union + { + __IOM uint32_t POEG1GB; /*!< (@ 0x00000400) POEG1 Group B Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG1GB_b; + }; + __IM uint32_t RESERVED1[255]; + + union + { + __IOM uint32_t POEG1GC; /*!< (@ 0x00000800) POEG1 Group C Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG1GC_b; + }; + __IM uint32_t RESERVED2[255]; + + union + { + __IOM uint32_t POEG1GD; /*!< (@ 0x00000C00) POEG1 Group D Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG1GD_b; + }; +} R_POEG1_Type; /*!< Size = 3076 (0xc04) */ + +/* =========================================================================================================================== */ +/* ================ R_DMAC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DMA Controller 0 (R_DMAC0) + */ + +typedef struct /*!< (@ 0x80080000) R_DMAC0 Structure */ +{ + __IOM R_DMAC0_GRP_Type GRP[1]; /*!< (@ 0x00000000) 8 channel Registers */ +} R_DMAC0_Type; /*!< Size = 804 (0x324) */ + +/* =========================================================================================================================== */ +/* ================ R_ICU_NS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Interrupt Controller in Non Safety Domain (R_ICU_NS) + */ + +typedef struct /*!< (@ 0x80090000) R_ICU_NS Structure */ +{ + union + { + __OM uint32_t NS_SWINT; /*!< (@ 0x00000000) Software Interrupt Register */ + + struct + { + __OM uint32_t IC0 : 1; /*!< [0..0] Software Interrupt register */ + __OM uint32_t IC1 : 1; /*!< [1..1] Software Interrupt register */ + __OM uint32_t IC2 : 1; /*!< [2..2] Software Interrupt register */ + __OM uint32_t IC3 : 1; /*!< [3..3] Software Interrupt register */ + __OM uint32_t IC4 : 1; /*!< [4..4] Software Interrupt register */ + __OM uint32_t IC5 : 1; /*!< [5..5] Software Interrupt register */ + uint32_t : 26; + } NS_SWINT_b; + }; + + union + { + __IOM uint32_t NS_PORTNF_FLTSEL; /*!< (@ 0x00000004) Interrupt Noise Filter Enable Register */ + + struct + { + __IOM uint32_t FLT0 : 1; /*!< [0..0] Noise filter enable for IRQ0 */ + __IOM uint32_t FLT1 : 1; /*!< [1..1] Noise filter enable for IRQ1 */ + __IOM uint32_t FLT2 : 1; /*!< [2..2] Noise filter enable for IRQ2 */ + __IOM uint32_t FLT3 : 1; /*!< [3..3] Noise filter enable for IRQ3 */ + __IOM uint32_t FLT4 : 1; /*!< [4..4] Noise filter enable for IRQ4 */ + __IOM uint32_t FLT5 : 1; /*!< [5..5] Noise filter enable for IRQ5 */ + __IOM uint32_t FLT6 : 1; /*!< [6..6] Noise filter enable for IRQ6 */ + __IOM uint32_t FLT7 : 1; /*!< [7..7] Noise filter enable for IRQ7 */ + __IOM uint32_t FLT8 : 1; /*!< [8..8] Noise filter enable for IRQ8 */ + __IOM uint32_t FLT9 : 1; /*!< [9..9] Noise filter enable for IRQ9 */ + __IOM uint32_t FLT10 : 1; /*!< [10..10] Noise filter enable for IRQ10 */ + __IOM uint32_t FLT11 : 1; /*!< [11..11] Noise filter enable for IRQ11 */ + __IOM uint32_t FLT12 : 1; /*!< [12..12] Noise filter enable for IRQ12 */ + __IOM uint32_t FLT13 : 1; /*!< [13..13] Noise filter enable for IRQ13 */ + __IOM uint32_t FLTDRQ : 1; /*!< [14..14] Noise filter enable for External DMA request (DREQ) */ + uint32_t : 17; + } NS_PORTNF_FLTSEL_b; + }; + + union + { + __IOM uint32_t NS_PORTNF_CLKSEL; /*!< (@ 0x00000008) Interrupt Noise Filter Setting Register */ + + struct + { + __IOM uint32_t CKSEL0 : 2; /*!< [1..0] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL1 : 2; /*!< [3..2] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL2 : 2; /*!< [5..4] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL3 : 2; /*!< [7..6] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL4 : 2; /*!< [9..8] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL5 : 2; /*!< [11..10] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL6 : 2; /*!< [13..12] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL7 : 2; /*!< [15..14] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL8 : 2; /*!< [17..16] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL9 : 2; /*!< [19..18] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL10 : 2; /*!< [21..20] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL11 : 2; /*!< [23..22] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL12 : 2; /*!< [25..24] Noise filter sampling clock selector */ + __IOM uint32_t CKSEL13 : 2; /*!< [27..26] Noise filter sampling clock selector */ + __IOM uint32_t CKSELDREQ : 2; /*!< [29..28] Noise filter sampling clock selector */ + uint32_t : 2; + } NS_PORTNF_CLKSEL_b; + }; + + union + { + __IOM uint32_t NS_PORTNF_MD; /*!< (@ 0x0000000C) Interrupt Edge Detection Setting Register */ + + struct + { + __IOM uint32_t MD0 : 2; /*!< [1..0] Select detection mode for IRQ0 */ + __IOM uint32_t MD1 : 2; /*!< [3..2] Select detection mode for IRQ1 */ + __IOM uint32_t MD2 : 2; /*!< [5..4] Select detection mode for IRQ2 */ + __IOM uint32_t MD3 : 2; /*!< [7..6] Select detection mode for IRQ3 */ + __IOM uint32_t MD4 : 2; /*!< [9..8] Select detection mode for IRQ4 */ + __IOM uint32_t MD5 : 2; /*!< [11..10] Select detection mode for IRQ5 */ + __IOM uint32_t MD6 : 2; /*!< [13..12] Select detection mode for IRQ6 */ + __IOM uint32_t MD7 : 2; /*!< [15..14] Select detection mode for IRQ7 */ + __IOM uint32_t MD8 : 2; /*!< [17..16] Select detection mode for IRQ8 */ + __IOM uint32_t MD9 : 2; /*!< [19..18] Select detection mode for IRQ9 */ + __IOM uint32_t MD10 : 2; /*!< [21..20] Select detection mode for IRQ10 */ + __IOM uint32_t MD11 : 2; /*!< [23..22] Select detection mode for IRQ11 */ + __IOM uint32_t MD12 : 2; /*!< [25..24] Select detection mode for IRQ12 */ + __IOM uint32_t MD13 : 2; /*!< [27..26] Select detection mode for IRQ13 */ + __IOM uint32_t MDDRQ : 2; /*!< [29..28] Select detection mode for DREQ of DMAC */ + uint32_t : 2; + } NS_PORTNF_MD_b; + }; +} R_ICU_NS_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ R_ELC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Evnet Link Controller (R_ELC) + */ + +typedef struct /*!< (@ 0x80090010) R_ELC Structure */ +{ + union + { + __IOM uint32_t ELC_SSEL[19]; /*!< (@ 0x00000000) ELC Event Source Select Register [0..18] */ + + struct + { + __IOM uint32_t ELC_SEL0 : 10; /*!< [9..0] Set the number for ELC event source to be linked to the + * ELC destination. */ + __IOM uint32_t ELC_SEL1 : 10; /*!< [19..10] Set the number for ELC event source to be linked to + * the ELC destination. */ + __IOM uint32_t ELC_SEL2 : 10; /*!< [29..20] Set the number for ELC event source to be linked to + * the ELC destination. */ + uint32_t : 2; + } ELC_SSEL_b[19]; + }; +} R_ELC_Type; /*!< Size = 76 (0x4c) */ + +/* =========================================================================================================================== */ +/* ================ R_DMA ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DMAC Configuration (R_DMA) + */ + +typedef struct /*!< (@ 0x80090060) R_DMA Structure */ +{ + __IM uint32_t RESERVED[3]; + + union + { + __IOM uint32_t DMAC0_RSSEL[3]; /*!< (@ 0x0000000C) DMAC Unit 0 Resource Select Register [0..2] */ + + struct + { + __IOM uint32_t REQ_SELA : 9; /*!< [8..0] DMA Resource Select for Channel n */ + uint32_t : 1; + __IOM uint32_t REQ_SELB : 9; /*!< [18..10] DMA Resource Select for Channel n + 1 */ + uint32_t : 1; + __IOM uint32_t REQ_SELC : 9; /*!< [28..20] DMA Resource Select for Channel n + 2 */ + uint32_t : 3; + } DMAC0_RSSEL_b[3]; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t DMAC1_RSSEL[3]; /*!< (@ 0x00000024) DMAC Unit 1 Resource Select Register [0..2] */ + + struct + { + __IOM uint32_t REQ_SELA : 9; /*!< [8..0] DMA Resource Select for Channel n */ + uint32_t : 1; + __IOM uint32_t REQ_SELB : 9; /*!< [18..10] DMA Resource Select for Channel n + 1 */ + uint32_t : 1; + __IOM uint32_t REQ_SELC : 9; /*!< [28..20] DMA Resource Select for Channel n + 2 */ + uint32_t : 3; + } DMAC1_RSSEL_b[3]; + }; +} R_DMA_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ R_PORT_NSR ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I/O Ports (Non safety region) (R_PORT_NSR) + */ + +typedef struct /*!< (@ 0x800A0000) R_PORT_NSR Structure */ +{ + union + { + __IOM uint8_t P[25]; /*!< (@ 0x00000000) Port [0..24] Register */ + + struct + { + __IOM uint8_t POUT_0 : 1; /*!< [0..0] Pm_n Output Data Store (n: bit position) */ + __IOM uint8_t POUT_1 : 1; /*!< [1..1] Pm_n Output Data Store (n: bit position) */ + __IOM uint8_t POUT_2 : 1; /*!< [2..2] Pm_n Output Data Store (n: bit position) */ + __IOM uint8_t POUT_3 : 1; /*!< [3..3] Pm_n Output Data Store (n: bit position) */ + __IOM uint8_t POUT_4 : 1; /*!< [4..4] Pm_n Output Data Store (n: bit position) */ + __IOM uint8_t POUT_5 : 1; /*!< [5..5] Pm_n Output Data Store (n: bit position) */ + __IOM uint8_t POUT_6 : 1; /*!< [6..6] Pm_n Output Data Store (n: bit position) */ + __IOM uint8_t POUT_7 : 1; /*!< [7..7] Pm_n Output Data Store (n: bit position) */ + } P_b[25]; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[121]; + + union + { + __IOM uint16_t PM[25]; /*!< (@ 0x00000200) Port 0 Mode Register */ + + struct + { + __IOM uint16_t PM0 : 2; /*!< [1..0] Pm_0 I/O Select */ + __IOM uint16_t PM1 : 2; /*!< [3..2] Pm_1 I/O Select */ + __IOM uint16_t PM2 : 2; /*!< [5..4] Pm_2 I/O Select */ + __IOM uint16_t PM3 : 2; /*!< [7..6] Pm_3 I/O Select */ + __IOM uint16_t PM4 : 2; /*!< [9..8] Pm_4 I/O Select */ + __IOM uint16_t PM5 : 2; /*!< [11..10] Pm_5 I/O Select */ + __IOM uint16_t PM6 : 2; /*!< [13..12] Pm_6 I/O Select */ + __IOM uint16_t PM7 : 2; /*!< [15..14] Pm_7 I/O Select */ + } PM_b[25]; + }; + __IM uint16_t RESERVED3; + __IM uint32_t RESERVED4[115]; + + union + { + __IOM uint8_t PMC[25]; /*!< (@ 0x00000400) Port [0..24] Mode Control Register */ + + struct + { + __IOM uint8_t PMC0 : 1; /*!< [0..0] Pm_n Pin Mode Control (n: bit position) */ + __IOM uint8_t PMC1 : 1; /*!< [1..1] Pm_n Pin Mode Control (n: bit position) */ + __IOM uint8_t PMC2 : 1; /*!< [2..2] Pm_n Pin Mode Control (n: bit position) */ + __IOM uint8_t PMC3 : 1; /*!< [3..3] Pm_n Pin Mode Control (n: bit position) */ + __IOM uint8_t PMC4 : 1; /*!< [4..4] Pm_n Pin Mode Control (n: bit position) */ + __IOM uint8_t PMC5 : 1; /*!< [5..5] Pm_n Pin Mode Control (n: bit position) */ + __IOM uint8_t PMC6 : 1; /*!< [6..6] Pm_n Pin Mode Control (n: bit position) */ + __IOM uint8_t PMC7 : 1; /*!< [7..7] Pm_n Pin Mode Control (n: bit position) */ + } PMC_b[25]; + }; + __IM uint8_t RESERVED5; + __IM uint16_t RESERVED6; + __IM uint32_t RESERVED7[121]; + + union + { + __IOM uint32_t PFC[25]; /*!< (@ 0x00000600) Port [0..24] Function Control Register */ + + struct + { + __IOM uint32_t PFC0 : 4; /*!< [3..0] Pm_0 Pin function Select */ + __IOM uint32_t PFC1 : 4; /*!< [7..4] Pm_1 Pin function Select */ + __IOM uint32_t PFC2 : 4; /*!< [11..8] Pm_2 Pin function Select */ + __IOM uint32_t PFC3 : 4; /*!< [15..12] Pm_3 Pin function Select */ + __IOM uint32_t PFC4 : 4; /*!< [19..16] Pm_4 Pin function Select */ + __IOM uint32_t PFC5 : 4; /*!< [23..20] Pm_5 Pin function Select */ + __IOM uint32_t PFC6 : 4; /*!< [27..24] Pm_6 Pin function Select */ + __IOM uint32_t PFC7 : 4; /*!< [31..28] Pm_7 Pin function Select */ + } PFC_b[25]; + }; + __IM uint32_t RESERVED8[103]; + + union + { + __IM uint8_t PIN[25]; /*!< (@ 0x00000800) Port [0..24] Input Register */ + + struct + { + __IM uint8_t PIN0 : 1; /*!< [0..0] Pm_n Pin Input (n: bit position) */ + __IM uint8_t PIN1 : 1; /*!< [1..1] Pm_n Pin Input (n: bit position) */ + __IM uint8_t PIN2 : 1; /*!< [2..2] Pm_n Pin Input (n: bit position) */ + __IM uint8_t PIN3 : 1; /*!< [3..3] Pm_n Pin Input (n: bit position) */ + __IM uint8_t PIN4 : 1; /*!< [4..4] Pm_n Pin Input (n: bit position) */ + __IM uint8_t PIN5 : 1; /*!< [5..5] Pm_n Pin Input (n: bit position) */ + __IM uint8_t PIN6 : 1; /*!< [6..6] Pm_n Pin Input (n: bit position) */ + __IM uint8_t PIN7 : 1; /*!< [7..7] Pm_n Pin Input (n: bit position) */ + } PIN_b[25]; + }; + __IM uint8_t RESERVED9; + __IM uint16_t RESERVED10; + __IM uint32_t RESERVED11[121]; + __IOM R_PORT_DRCTL_Type DRCTL[25]; /*!< (@ 0x00000A00) I/O Buffer [0..24] Function Switching Register */ + __IM uint32_t RESERVED12[206]; + + union + { + __IOM uint8_t ELC_PGR[2]; /*!< (@ 0x00000E00) ELC Port Group Setting Register [0..1] */ + + struct + { + __IOM uint8_t PG0 : 1; /*!< [0..0] Port Group Setting */ + __IOM uint8_t PG1 : 1; /*!< [1..1] Port Group Setting */ + __IOM uint8_t PG2 : 1; /*!< [2..2] Port Group Setting */ + __IOM uint8_t PG3 : 1; /*!< [3..3] Port Group Setting */ + __IOM uint8_t PG4 : 1; /*!< [4..4] Port Group Setting */ + __IOM uint8_t PG5 : 1; /*!< [5..5] Port Group Setting */ + __IOM uint8_t PG6 : 1; /*!< [6..6] Port Group Setting */ + __IOM uint8_t PG7 : 1; /*!< [7..7] Port Group Setting */ + } ELC_PGR_b[2]; + }; + + union + { + __IOM uint8_t ELC_PGC[2]; /*!< (@ 0x00000E02) ELC Port Group Control Register [0..1] */ + + struct + { + __IOM uint8_t PGCI : 2; /*!< [1..0] Event Output Edge Select */ + __IOM uint8_t PGCOVE : 1; /*!< [2..2] PDBF Overwrite */ + uint8_t : 1; + __IOM uint8_t PGCO : 3; /*!< [6..4] Port Group Operation Select */ + uint8_t : 1; + } ELC_PGC_b[2]; + }; + __IOM R_PORT_NSR_ELC_PDBF_Type ELC_PDBF[2]; /*!< (@ 0x00000E04) ELC Port Buffer Register [0..1] */ + + union + { + __IOM uint8_t ELC_PEL[4]; /*!< (@ 0x00000E0C) ELC Port Setting Register [0..3] */ + + struct + { + __IOM uint8_t PSB : 3; /*!< [2..0] Bit Number Specification */ + __IOM uint8_t PSP : 2; /*!< [4..3] Port Number Specification */ + __IOM uint8_t PSM : 2; /*!< [6..5] Event Link Specification */ + uint8_t : 1; + } ELC_PEL_b[4]; + }; + + union + { + __IOM uint8_t ELC_DPTC; /*!< (@ 0x00000E10) ELC Edge Detection Control Register */ + + struct + { + __IOM uint8_t PTC0 : 1; /*!< [0..0] Single Input Port n Edge Detection */ + __IOM uint8_t PTC1 : 1; /*!< [1..1] Single Input Port n Edge Detection */ + __IOM uint8_t PTC2 : 1; /*!< [2..2] Single Input Port n Edge Detection */ + __IOM uint8_t PTC3 : 1; /*!< [3..3] Single Input Port n Edge Detection */ + uint8_t : 4; + } ELC_DPTC_b; + }; + + union + { + __IOM uint8_t ELC_ELSR2; /*!< (@ 0x00000E11) ELC Port Event Control Register */ + + struct + { + uint8_t : 2; + __IOM uint8_t PEG1 : 1; /*!< [2..2] ELC Port Buffer Register (ELC_PDBFn) write access control. + * When set to 1, writing to the ELC_PDBFn register via Internal + * peripheral bus is disabled, preventing overwriting. */ + __IOM uint8_t PEG2 : 1; /*!< [3..3] ELC Port Buffer Register (ELC_PDBFn) write access control. + * When set to 1, writing to the ELC_PDBFn register via Internal + * peripheral bus is disabled, preventing overwriting. */ + __IOM uint8_t PES0 : 1; /*!< [4..4] Single Port n Event Link Function Enable */ + __IOM uint8_t PES1 : 1; /*!< [5..5] Single Port n Event Link Function Enable */ + __IOM uint8_t PES2 : 1; /*!< [6..6] Single Port n Event Link Function Enable */ + __IOM uint8_t PES3 : 1; /*!< [7..7] Single Port n Event Link Function Enable */ + } ELC_ELSR2_b; + }; + __IM uint16_t RESERVED13; +} R_PORT_COMMON_Type; /*!< Size = 3604 (0xe14) */ + +/* =========================================================================================================================== */ +/* ================ R_GMAC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Ethernet MAC (R_GMAC) + */ + +typedef struct /*!< (@ 0x80100000) R_GMAC Structure */ +{ + union + { + __IOM uint32_t MAC_Configuration; /*!< (@ 0x00000000) MAC Configuration Register */ + + struct + { + __IOM uint32_t PRELEN : 2; /*!< [1..0] Preamble Length for Transmit Frames */ + __IOM uint32_t RE : 1; /*!< [2..2] Receiver Enable */ + __IOM uint32_t TE : 1; /*!< [3..3] Transmitter Enable */ + __IOM uint32_t DC : 1; /*!< [4..4] Deferral Check */ + __IOM uint32_t BL : 2; /*!< [6..5] Back-Off Limit */ + __IOM uint32_t ACS : 1; /*!< [7..7] Automatic Pad or CRC Stripping */ + uint32_t : 1; + __IOM uint32_t DR : 1; /*!< [9..9] Disable Retry */ + __IOM uint32_t IPC : 1; /*!< [10..10] Checksum Offload */ + __IOM uint32_t DM : 1; /*!< [11..11] Duplex Mode */ + __IOM uint32_t LM : 1; /*!< [12..12] Loopback Mode */ + __IOM uint32_t DO : 1; /*!< [13..13] Disable Receive Own */ + __IOM uint32_t FES : 1; /*!< [14..14] Speed */ + __IOM uint32_t PS : 1; /*!< [15..15] Port Select */ + __IOM uint32_t DCRS : 1; /*!< [16..16] Disable Carrier Sense During Transmission */ + __IOM uint32_t IFG : 3; /*!< [19..17] Inter-Frame Gap */ + __IOM uint32_t JE : 1; /*!< [20..20] Jumbo Frame Enable */ + __IOM uint32_t BE : 1; /*!< [21..21] Frame Burst Enable */ + __IOM uint32_t JD : 1; /*!< [22..22] Jabber Disable */ + __IOM uint32_t WD : 1; /*!< [23..23] Watchdog Disable */ + uint32_t : 1; + __IOM uint32_t CST : 1; /*!< [25..25] CRC Stripping for Type Frames */ + uint32_t : 1; + __IOM uint32_t TWOKPE : 1; /*!< [27..27] IEEE 802.3 as Support for 2 K Packets */ + uint32_t : 4; + } MAC_Configuration_b; + }; + + union + { + __IOM uint32_t MAC_Frame_Filter; /*!< (@ 0x00000004) MAC Frame Filter Register */ + + struct + { + __IOM uint32_t PR : 1; /*!< [0..0] Promiscuous Mode */ + __IOM uint32_t HUC : 1; /*!< [1..1] Hash Unicast */ + __IOM uint32_t HMC : 1; /*!< [2..2] Hash Multicast */ + __IOM uint32_t DAIF : 1; /*!< [3..3] DA Inverse Filtering */ + __IOM uint32_t PM : 1; /*!< [4..4] Pass All Multicast */ + __IOM uint32_t DBF : 1; /*!< [5..5] Disable Broadcast Frames */ + __IOM uint32_t PCF : 2; /*!< [7..6] Pass Control Frames */ + __IOM uint32_t SAIF : 1; /*!< [8..8] SA Inverse Filtering */ + __IOM uint32_t SAF : 1; /*!< [9..9] Source Address Filter Enable */ + __IOM uint32_t HPF : 1; /*!< [10..10] Hash or Perfect Filter */ + uint32_t : 5; + __IOM uint32_t VTFE : 1; /*!< [16..16] VLAN Tag Filter Enable */ + uint32_t : 14; + __IOM uint32_t RA : 1; /*!< [31..31] Receive All */ + } MAC_Frame_Filter_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t GMII_Address; /*!< (@ 0x00000010) GMII Address Register */ + + struct + { + __IOM uint32_t GB : 1; /*!< [0..0] GMII Busy */ + __IOM uint32_t GW : 1; /*!< [1..1] GMII Write */ + __IOM uint32_t CR : 4; /*!< [5..2] CSR Clock Range */ + __IOM uint32_t GR : 5; /*!< [10..6] GMII Register */ + __IOM uint32_t PA : 5; /*!< [15..11] Physical Layer Address */ + uint32_t : 16; + } GMII_Address_b; + }; + + union + { + __IOM uint32_t GMII_Data; /*!< (@ 0x00000014) GMII Data Register */ + + struct + { + __IOM uint32_t GD : 16; /*!< [15..0] GMII Data */ + uint32_t : 16; + } GMII_Data_b; + }; + + union + { + __IOM uint32_t Flow_Control; /*!< (@ 0x00000018) Flow Control Register */ + + struct + { + __IOM uint32_t FCA_BPA : 1; /*!< [0..0] Flow Control Busy or Backpressure Activate */ + __IOM uint32_t TFE : 1; /*!< [1..1] Transmit Flow Control Enable */ + __IOM uint32_t RFE : 1; /*!< [2..2] Receive Flow Control Enable */ + __IOM uint32_t UP : 1; /*!< [3..3] Unicast Pause Frame Detect */ + __IOM uint32_t PLT : 2; /*!< [5..4] Pause Low Threshold */ + uint32_t : 1; + __IOM uint32_t DZPQ : 1; /*!< [7..7] Disable Zero-Quanta Pause */ + uint32_t : 8; + __IOM uint32_t PT : 16; /*!< [31..16] Pause Time */ + } Flow_Control_b; + }; + + union + { + __IOM uint32_t VLAN_Tag; /*!< (@ 0x0000001C) VLAN Tag Register */ + + struct + { + __IOM uint32_t VL : 16; /*!< [15..0] VLAN Tag Identifier for Receive Frames */ + __IOM uint32_t ETV : 1; /*!< [16..16] Enable 12-Bit VLAN Tag Comparison */ + __IOM uint32_t VTIM : 1; /*!< [17..17] VLAN Tag Inverse Match Enable */ + __IOM uint32_t ESVL : 1; /*!< [18..18] Enable S-VLAN */ + __IOM uint32_t VTHM : 1; /*!< [19..19] VLAN Tag Hash Table Match Enable */ + uint32_t : 12; + } VLAN_Tag_b; + }; + + union + { + __IM uint32_t Version; /*!< (@ 0x00000020) Version Register */ + + struct + { + __IM uint32_t VER : 16; /*!< [15..0] Version (GMAC: 0x3037) */ + uint32_t : 16; + } Version_b; + }; + + union + { + __IM uint32_t Debug; /*!< (@ 0x00000024) Debug Register */ + + struct + { + __IM uint32_t RPESTS : 1; /*!< [0..0] GMAC GMII or MII Receive Protocol Engine Status */ + __IM uint32_t RFCFCSTS : 2; /*!< [2..1] GMAC Receive Frame Controller FIFO Status */ + uint32_t : 1; + __IM uint32_t RWCSTS : 1; /*!< [4..4] MTL RX FIFO Write Controller Active Status */ + __IM uint32_t RRCSTS : 2; /*!< [6..5] MTL RX FIFO Read Controller State */ + uint32_t : 1; + __IM uint32_t RXFSTS : 2; /*!< [9..8] MTL RX FIFO Fill-level Status */ + uint32_t : 6; + __IM uint32_t TPESTS : 1; /*!< [16..16] GMAC GMII or MII Transmit Protocol Engine Status */ + __IM uint32_t TFCSTS : 2; /*!< [18..17] GMAC Transmit Frame Controller Status */ + __IM uint32_t TXPAUSED : 1; /*!< [19..19] GMAC transmitter in PAUSE */ + __IM uint32_t TRCSTS : 2; /*!< [21..20] MTL TX FIFO Read Controller Status */ + __IM uint32_t TWCSTS : 1; /*!< [22..22] MTL TX FIFO Write Controller Active Status */ + uint32_t : 1; + __IM uint32_t TXFSTS : 1; /*!< [24..24] MTL TX FIFO Not Empty Status */ + __IM uint32_t TXSTSFSTS : 1; /*!< [25..25] MTL TX Status FIFO Full Status */ + uint32_t : 6; + } Debug_b; + }; + + union + { + __IOM uint32_t Remote_Wake_Up_Frame_Filter; /*!< (@ 0x00000028) Remote Wake-Up Frame Filter Register */ + + struct + { + __IOM uint32_t WKUPFRMFTR : 32; /*!< [31..0] Remote Wake-Up Frame Filter */ + } Remote_Wake_Up_Frame_Filter_b; + }; + + union + { + __IOM uint32_t PMT_Control_Status; /*!< (@ 0x0000002C) PMT Control and Status Register */ + + struct + { + __IOM uint32_t PWRDWN : 1; /*!< [0..0] Power Down */ + __IOM uint32_t MGKPKTEN : 1; /*!< [1..1] Magic Packet Enable */ + __IOM uint32_t RWKPKTEN : 1; /*!< [2..2] Wake-Up Frame Enable */ + uint32_t : 2; + __IM uint32_t MGKPRCVD : 1; /*!< [5..5] Magic Packet Received */ + __IM uint32_t RWKPRCVD : 1; /*!< [6..6] Wake-Up Frame Received */ + uint32_t : 2; + __IOM uint32_t GLBLUCAST : 1; /*!< [9..9] Global Unicast */ + uint32_t : 14; + __IM uint32_t RWKPTR : 3; /*!< [26..24] Remote Wake-Up FIFO Pointer */ + uint32_t : 4; + __IOM uint32_t RWKFILTRST : 1; /*!< [31..31] Wake-Up Frame Filter Register Pointer Reset */ + } PMT_Control_Status_b; + }; + + union + { + __IOM uint32_t LPI_Control_Status; /*!< (@ 0x00000030) LPI Control and Status Register */ + + struct + { + __IM uint32_t TLPIEN : 1; /*!< [0..0] Transmit LPI Entry */ + __IM uint32_t TLPIEX : 1; /*!< [1..1] Transmit LPI Exit */ + __IM uint32_t RLPIEN : 1; /*!< [2..2] Receive LPI Entry */ + __IM uint32_t RLPIEX : 1; /*!< [3..3] Receive LPI Exit */ + uint32_t : 4; + __IM uint32_t TLPIST : 1; /*!< [8..8] Transmit LPI State */ + __IM uint32_t RLPIST : 1; /*!< [9..9] Receive LPI State */ + uint32_t : 6; + __IOM uint32_t LPIEN : 1; /*!< [16..16] LPI Enable */ + __IOM uint32_t PLS : 1; /*!< [17..17] PHY Link Status */ + uint32_t : 1; + __IOM uint32_t LPITXA : 1; /*!< [19..19] LPI TX Automate */ + uint32_t : 12; + } LPI_Control_Status_b; + }; + + union + { + __IOM uint32_t LPI_Timers_Control; /*!< (@ 0x00000034) LPI Timers Control Register */ + + struct + { + __IOM uint32_t TWT : 16; /*!< [15..0] LPI TW Timer */ + __IOM uint32_t LST : 10; /*!< [25..16] LPI LS Timer */ + uint32_t : 6; + } LPI_Timers_Control_b; + }; + + union + { + __IM uint32_t Interrupt_Status; /*!< (@ 0x00000038) Interrupt Status Register */ + + struct + { + uint32_t : 3; + __IM uint32_t PMTIS : 1; /*!< [3..3] PMT Interrupt Status */ + __IM uint32_t MMCIS : 1; /*!< [4..4] MMC Interrupt Status */ + __IM uint32_t MMCRXIS : 1; /*!< [5..5] MMC Receive Interrupt Status */ + __IM uint32_t MMCTXIS : 1; /*!< [6..6] MMC Transmit Interrupt Status */ + __IM uint32_t MMCRXIPIS : 1; /*!< [7..7] MMC Receive Checksum Offload Interrupt Status */ + uint32_t : 1; + __IM uint32_t TSIS : 1; /*!< [9..9] Timestamp Interrupt Status */ + __IM uint32_t LPIIS : 1; /*!< [10..10] LPI Interrupt Status */ + uint32_t : 21; + } Interrupt_Status_b; + }; + + union + { + __IOM uint32_t Interrupt_Mask; /*!< (@ 0x0000003C) Interrupt Mask Register */ + + struct + { + uint32_t : 3; + __IOM uint32_t PMTIM : 1; /*!< [3..3] PMT Interrupt Mask */ + uint32_t : 5; + __IOM uint32_t TSIM : 1; /*!< [9..9] Timestamp Interrupt Mask */ + __IOM uint32_t LPIIM : 1; /*!< [10..10] LPI Interrupt Mask */ + uint32_t : 21; + } Interrupt_Mask_b; + }; + + union + { + __IOM uint32_t MAR0_H; /*!< (@ 0x00000040) MAC Address 0 High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address0[47:32] */ + uint32_t : 15; + __IM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR0_H_b; + }; + + union + { + __IOM uint32_t MAR0_L; /*!< (@ 0x00000044) MAC Address 0 Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address0[31:0] */ + } MAR0_L_b; + }; + + union + { + __IOM uint32_t MAR1_H; /*!< (@ 0x00000048) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR1_H_b; + }; + + union + { + __IOM uint32_t MAR1_L; /*!< (@ 0x0000004C) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR1_L_b; + }; + + union + { + __IOM uint32_t MAR2_H; /*!< (@ 0x00000050) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR2_H_b; + }; + + union + { + __IOM uint32_t MAR2_L; /*!< (@ 0x00000054) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR2_L_b; + }; + + union + { + __IOM uint32_t MAR3_H; /*!< (@ 0x00000058) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR3_H_b; + }; + + union + { + __IOM uint32_t MAR3_L; /*!< (@ 0x0000005C) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR3_L_b; + }; + + union + { + __IOM uint32_t MAR4_H; /*!< (@ 0x00000060) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR4_H_b; + }; + + union + { + __IOM uint32_t MAR4_L; /*!< (@ 0x00000064) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR4_L_b; + }; + + union + { + __IOM uint32_t MAR5_H; /*!< (@ 0x00000068) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR5_H_b; + }; + + union + { + __IOM uint32_t MAR5_L; /*!< (@ 0x0000006C) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR5_L_b; + }; + + union + { + __IOM uint32_t MAR6_H; /*!< (@ 0x00000070) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR6_H_b; + }; + + union + { + __IOM uint32_t MAR6_L; /*!< (@ 0x00000074) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR6_L_b; + }; + + union + { + __IOM uint32_t MAR7_H; /*!< (@ 0x00000078) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR7_H_b; + }; + + union + { + __IOM uint32_t MAR7_L; /*!< (@ 0x0000007C) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR7_L_b; + }; + + union + { + __IOM uint32_t MAR8_H; /*!< (@ 0x00000080) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR8_H_b; + }; + + union + { + __IOM uint32_t MAR8_L; /*!< (@ 0x00000084) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR8_L_b; + }; + + union + { + __IOM uint32_t MAR9_H; /*!< (@ 0x00000088) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR9_H_b; + }; + + union + { + __IOM uint32_t MAR9_L; /*!< (@ 0x0000008C) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR9_L_b; + }; + + union + { + __IOM uint32_t MAR10_H; /*!< (@ 0x00000090) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR10_H_b; + }; + + union + { + __IOM uint32_t MAR10_L; /*!< (@ 0x00000094) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR10_L_b; + }; + + union + { + __IOM uint32_t MAR11_H; /*!< (@ 0x00000098) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR11_H_b; + }; + + union + { + __IOM uint32_t MAR11_L; /*!< (@ 0x0000009C) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR11_L_b; + }; + + union + { + __IOM uint32_t MAR12_H; /*!< (@ 0x000000A0) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR12_H_b; + }; + + union + { + __IOM uint32_t MAR12_L; /*!< (@ 0x000000A4) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR12_L_b; + }; + + union + { + __IOM uint32_t MAR13_H; /*!< (@ 0x000000A8) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR13_H_b; + }; + + union + { + __IOM uint32_t MAR13_L; /*!< (@ 0x000000AC) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR13_L_b; + }; + + union + { + __IOM uint32_t MAR14_H; /*!< (@ 0x000000B0) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR14_H_b; + }; + + union + { + __IOM uint32_t MAR14_L; /*!< (@ 0x000000B4) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR14_L_b; + }; + + union + { + __IOM uint32_t MAR15_H; /*!< (@ 0x000000B8) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR15_H_b; + }; + + union + { + __IOM uint32_t MAR15_L; /*!< (@ 0x000000BC) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR15_L_b; + }; + __IM uint32_t RESERVED1[7]; + + union + { + __IOM uint32_t WDog_Timeout; /*!< (@ 0x000000DC) Watchdog Timeout Register */ + + struct + { + __IOM uint32_t WTO : 14; /*!< [13..0] Watchdog Timeout */ + uint32_t : 2; + __IOM uint32_t PWE : 1; /*!< [16..16] Programmable Watchdog Enable */ + uint32_t : 15; + } WDog_Timeout_b; + }; + __IM uint32_t RESERVED2[8]; + + union + { + __IOM uint32_t MMC_Control; /*!< (@ 0x00000100) MMC Control Register */ + + struct + { + __IOM uint32_t CNTRST : 1; /*!< [0..0] Counters Reset */ + __IOM uint32_t CNTSTOPRO : 1; /*!< [1..1] Counters Stop Rollover */ + __IOM uint32_t RSTONRD : 1; /*!< [2..2] Reset on Read */ + __IOM uint32_t CNTFREEZ : 1; /*!< [3..3] MMC Counter Freeze */ + __IOM uint32_t CNTPRST : 1; /*!< [4..4] Counters Preset */ + __IOM uint32_t CNTPRSTLVL : 1; /*!< [5..5] Full-Half Preset */ + uint32_t : 2; + __IOM uint32_t UCDBC : 1; /*!< [8..8] Update MMC Counters for Dropped Broadcast Frames */ + uint32_t : 23; + } MMC_Control_b; + }; + + union + { + __IM uint32_t MMC_Receive_Interrupt; /*!< (@ 0x00000104) MMC Receive Interrupt Register */ + + struct + { + __IM uint32_t RXGBFRMIS : 1; /*!< [0..0] MMC Receive Good Bad Frame Counter Interrupt Status */ + __IM uint32_t RXGBOCTIS : 1; /*!< [1..1] MMC Receive Good Bad Octet Counter Interrupt Status */ + __IM uint32_t RXGOCTIS : 1; /*!< [2..2] MMC Receive Good Octet Counter Interrupt Status */ + __IM uint32_t RXBCGFIS : 1; /*!< [3..3] MMC Receive Broadcast Good Frame Counter Interrupt Status */ + __IM uint32_t RXMCGFIS : 1; /*!< [4..4] MMC Receive Multicast Good Frame Counter Interrupt Status */ + __IM uint32_t RXCRCERFIS : 1; /*!< [5..5] MMC Receive CRC Error Frame Counter Interrupt Status */ + __IM uint32_t RXALGNERFIS : 1; /*!< [6..6] MMC Receive Alignment Error Frame Counter Interrupt Status */ + __IM uint32_t RXRUNTFIS : 1; /*!< [7..7] MMC Receive Runt Frame Counter Interrupt Status */ + __IM uint32_t RXJABERFIS : 1; /*!< [8..8] MMC Receive Jabber Error Frame Counter Interrupt Status */ + __IM uint32_t RXUSIZEGFIS : 1; /*!< [9..9] MMC Receive Undersize Good Frame Counter Interrupt Status */ + __IM uint32_t RXOSIZEGFIS : 1; /*!< [10..10] MMC Receive Oversize Good Frame Counter Interrupt Status */ + __IM uint32_t RX64OCTGBFIS : 1; /*!< [11..11] MMC Receive 64 Octet Good Bad Frame Counter Interrupt + * Status */ + __IM uint32_t RX65T127OCTGBFIS : 1; /*!< [12..12] MMC Receive 65 to 127 Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t RX128T255OCTGBFIS : 1; /*!< [13..13] MMC Receive 128 to 255 Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t RX256T511OCTGBFIS : 1; /*!< [14..14] MMC Receive 256 to 511 Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t RX512T1023OCTGBFIS : 1; /*!< [15..15] MMC Receive 512 to 1023 Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t RX1024TMAXOCTGBFIS : 1; /*!< [16..16] MMC Receive 1024 to Maximum Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t RXUCGFIS : 1; /*!< [17..17] MMC Receive Unicast Good Frame Counter Interrupt Status */ + __IM uint32_t RXLENERFIS : 1; /*!< [18..18] MMC Receive Length Error Frame Counter Interrupt Status */ + __IM uint32_t RXORANGEFIS : 1; /*!< [19..19] MMC Receive Out Of Range Error Frame Counter Interrupt + * Status */ + __IM uint32_t RXPAUSFIS : 1; /*!< [20..20] MMC Receive Pause Frame Counter Interrupt Status */ + __IM uint32_t RXFOVFIS : 1; /*!< [21..21] MMC Receive FIFO Overflow Frame Counter Interrupt Status */ + __IM uint32_t RXVLANGBFIS : 1; /*!< [22..22] MMC Receive VLAN Good Bad Frame Counter Interrupt Status */ + __IM uint32_t RXWDOGFIS : 1; /*!< [23..23] MMC Receive Watchdog Error Frame Counter Interrupt + * Status */ + __IM uint32_t RXRCVERRFIS : 1; /*!< [24..24] MMC Receive Error Frame Counter Interrupt Status */ + __IM uint32_t RXCTRLFIS : 1; /*!< [25..25] MMC Receive Control Frame Counter Interrupt Status */ + uint32_t : 6; + } MMC_Receive_Interrupt_b; + }; + + union + { + __IM uint32_t MMC_Transmit_Interrupt; /*!< (@ 0x00000108) MMC Transmit Interrupt Register */ + + struct + { + __IM uint32_t TXGBOCTIS : 1; /*!< [0..0] MMC Transmit Good Bad Octet Counter Interrupt Status */ + __IM uint32_t TXGBFRMIS : 1; /*!< [1..1] MMC Transmit Good Bad Frame Counter Interrupt Status */ + __IM uint32_t TXBCGFIS : 1; /*!< [2..2] MMC Transmit Broadcast Good Frame Counter Interrupt Status */ + __IM uint32_t TXMCGFIS : 1; /*!< [3..3] MMC Transmit Multicast Good Frame Counter Interrupt Status */ + __IM uint32_t TX64OCTGBFIS : 1; /*!< [4..4] MMC Transmit 64 Octet Good Bad Frame Counter Interrupt + * Status */ + __IM uint32_t TX65T127OCTGBFIS : 1; /*!< [5..5] MMC Transmit 65 to 127 Octet Good Bad Frame Counter Interrupt + * Status */ + __IM uint32_t TX128T255OCTGBFIS : 1; /*!< [6..6] MMC Transmit 128 to 255 Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t TX256T511OCTGBFIS : 1; /*!< [7..7] MMC Transmit 256 to 511 Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t TX512T1023OCTGBFIS : 1; /*!< [8..8] MMC Transmit 512 to 1023 Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t TX1024TMAXOCTGBFIS : 1; /*!< [9..9] MMC Transmit 1024 to Maximum Octet Good Bad Frame Counter + * Interrupt Status */ + __IM uint32_t TXUCGBFIS : 1; /*!< [10..10] MMC Transmit Unicast Good Bad Frame Counter Interrupt + * Status */ + __IM uint32_t TXMCGBFIS : 1; /*!< [11..11] MMC Transmit Multicast Good Bad Frame Counter Interrupt + * Status */ + __IM uint32_t TXBCGBFIS : 1; /*!< [12..12] MMC Transmit Broadcast Good Bad Frame Counter Interrupt + * Status */ + __IM uint32_t TXUFLOWERFIS : 1; /*!< [13..13] MMC Transmit Underflow Error Frame Counter Interrupt + * Status */ + __IM uint32_t TXSCOLGFIS : 1; /*!< [14..14] MMC Transmit Single Collision Good Frame Counter Interrupt + * Status */ + __IM uint32_t TXMCOLGFIS : 1; /*!< [15..15] MMC Transmit Multiple Collision Good Frame Counter + * Interrupt Status */ + __IM uint32_t TXDEFFIS : 1; /*!< [16..16] MMC Transmit Deferred Frame Counter Interrupt Status */ + __IM uint32_t TXLATCOLFIS : 1; /*!< [17..17] MMC Transmit Late Collision Frame Counter Interrupt + * Status */ + __IM uint32_t TXEXCOLFIS : 1; /*!< [18..18] MMC Transmit Excessive Collision Frame Counter Interrupt + * Status */ + __IM uint32_t TXCARERFIS : 1; /*!< [19..19] MMC Transmit Carrier Error Frame Counter Interrupt + * Status */ + __IM uint32_t TXGOCTIS : 1; /*!< [20..20] MMC Transmit Good Octet Counter Interrupt Status */ + __IM uint32_t TXGFRMIS : 1; /*!< [21..21] MMC Transmit Good Frame Counter Interrupt Status */ + __IM uint32_t TXEXDEFFIS : 1; /*!< [22..22] MMC Transmit Excessive Deferral Frame Counter Interrupt + * Status */ + __IM uint32_t TXPAUSFIS : 1; /*!< [23..23] MMC Transmit Pause Frame Counter Interrupt Status */ + __IM uint32_t TXVLANGFIS : 1; /*!< [24..24] MMC Transmit VLAN Good Frame Counter Interrupt Status */ + __IM uint32_t TXOSIZEGFIS : 1; /*!< [25..25] MMC Transmit Oversize Good Frame Counter Interrupt + * Status */ + uint32_t : 6; + } MMC_Transmit_Interrupt_b; + }; + + union + { + __IOM uint32_t MMC_Receive_Interrupt_Mask; /*!< (@ 0x0000010C) MMC Receive Interrupt Mask Register */ + + struct + { + __IOM uint32_t RXGBFRMIM : 1; /*!< [0..0] MMC Receive Good Bad Frame Counter Interrupt Mask */ + __IOM uint32_t RXGBOCTIM : 1; /*!< [1..1] MMC Receive Good Bad Octet Counter Interrupt Mask */ + __IOM uint32_t RXGOCTIM : 1; /*!< [2..2] MMC Receive Good Octet Counter Interrupt Mask */ + __IOM uint32_t RXBCGFIM : 1; /*!< [3..3] MMC Receive Broadcast Good Frame Counter Interrupt Mask */ + __IOM uint32_t RXMCGFIM : 1; /*!< [4..4] MMC Receive Multicast Good Frame Counter Interrupt Mask */ + __IOM uint32_t RXCRCERFIM : 1; /*!< [5..5] MMC Receive CRC Error Frame Counter Interrupt Mask */ + __IOM uint32_t RXALGNERFIM : 1; /*!< [6..6] MMC Receive Alignment Error Frame Counter Interrupt Mask */ + __IOM uint32_t RXRUNTFIM : 1; /*!< [7..7] MMC Receive Runt Frame Counter Interrupt Mask */ + __IOM uint32_t RXJABERFIM : 1; /*!< [8..8] MMC Receive Jabber Error Frame Counter Interrupt Mask */ + __IOM uint32_t RXUSIZEGFIM : 1; /*!< [9..9] MMC Receive Undersize Good Frame Counter Interrupt Mask */ + __IOM uint32_t RXOSIZEGFIM : 1; /*!< [10..10] MMC Receive Oversize Good Frame Counter Interrupt Mask */ + __IOM uint32_t RX64OCTGBFIM : 1; /*!< [11..11] MMC Receive 64 Octet Good Bad Frame Counter Interrupt + * Mask */ + __IOM uint32_t RX65T127OCTGBFIM : 1; /*!< [12..12] MMC Receive 65 to 127 Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t RX128T255OCTGBFIM : 1; /*!< [13..13] MMC Receive 128 to 255 Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t RX256T511OCTGBFIM : 1; /*!< [14..14] MMC Receive 256 to 511 Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t RX512T1023OCTGBFIM : 1; /*!< [15..15] MMC Receive 512 to 1023 Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t RX1024TMAXOCTGBFIM : 1; /*!< [16..16] MMC Receive 1024 to Maximum Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t RXUCGFIM : 1; /*!< [17..17] MMC Receive Unicast Good Frame Counter Interrupt Mask */ + __IOM uint32_t RXLENERFIM : 1; /*!< [18..18] MMC Receive Length Error Frame Counter Interrupt Mask */ + __IOM uint32_t RXORANGEFIM : 1; /*!< [19..19] MMC Receive Out Of Range Error Frame Counter Interrupt + * Mask */ + __IOM uint32_t RXPAUSFIM : 1; /*!< [20..20] MMC Receive Pause Frame Counter Interrupt Mask */ + __IOM uint32_t RXFOVFIM : 1; /*!< [21..21] MMC Receive FIFO Overflow Frame Counter Interrupt Mask */ + __IOM uint32_t RXVLANGBFIM : 1; /*!< [22..22] MMC Receive VLAN Good Bad Frame Counter Interrupt Mask */ + __IOM uint32_t RXWDOGFIM : 1; /*!< [23..23] MMC Receive Watchdog Error Frame Counter Interrupt + * Mask */ + __IOM uint32_t RXRCVERRFIM : 1; /*!< [24..24] MMC Receive Error Frame Counter Interrupt Mask */ + __IOM uint32_t RXCTRLFIM : 1; /*!< [25..25] MMC Receive Control Frame Counter Interrupt Mask */ + uint32_t : 6; + } MMC_Receive_Interrupt_Mask_b; + }; + + union + { + __IOM uint32_t MMC_Transmit_Interrupt_Mask; /*!< (@ 0x00000110) MMC Transmit Interrupt Mask Register */ + + struct + { + __IOM uint32_t TXGBOCTIM : 1; /*!< [0..0] MMC Transmit Good Bad Octet Counter Interrupt Mask */ + __IOM uint32_t TXGBFRMIM : 1; /*!< [1..1] MMC Transmit Good Bad Frame Counter Interrupt Mask */ + __IOM uint32_t TXBCGFIM : 1; /*!< [2..2] MMC Transmit Broadcast Good Frame Counter Interrupt Mask */ + __IOM uint32_t TXMCGFIM : 1; /*!< [3..3] MMC Transmit Multicast Good Frame Counter Interrupt Mask */ + __IOM uint32_t TX64OCTGBFIM : 1; /*!< [4..4] MMC Transmit 64 Octet Good Bad Frame Counter Interrupt + * Mask */ + __IOM uint32_t TX65T127OCTGBFIM : 1; /*!< [5..5] MMC Transmit 65 to 127 Octet Good Bad Frame Counter Interrupt + * Mask */ + __IOM uint32_t TX128T255OCTGBFIM : 1; /*!< [6..6] MMC Transmit 128 to 255 Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t TX256T511OCTGBFIM : 1; /*!< [7..7] MMC Transmit 256 to 511 Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t TX512T1023OCTGBFIM : 1; /*!< [8..8] MMC Transmit 512 to 1023 Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t TX1024TMAXOCTGBFIM : 1; /*!< [9..9] MMC Transmit 1024 to Maximum Octet Good Bad Frame Counter + * Interrupt Mask */ + __IOM uint32_t TXUCGBFIM : 1; /*!< [10..10] MMC Transmit Unicast Good Bad Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXMCGBFIM : 1; /*!< [11..11] MMC Transmit Multicast Good Bad Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXBCGBFIM : 1; /*!< [12..12] MMC Transmit Broadcast Good Bad Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXUFLOWERFIM : 1; /*!< [13..13] MMC Transmit Underflow Error Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXSCOLGFIM : 1; /*!< [14..14] MMC Transmit Single Collision Good Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXMCOLGFIM : 1; /*!< [15..15] MMC Transmit Multiple Collision Good Frame Counter + * Interrupt Mask */ + __IOM uint32_t TXDEFFIM : 1; /*!< [16..16] MMC Transmit Deferred Frame Counter Interrupt Mask */ + __IOM uint32_t TXLATCOLFIM : 1; /*!< [17..17] MMC Transmit Late Collision Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXEXCOLFIM : 1; /*!< [18..18] MMC Transmit Excessive Collision Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXCARERFIM : 1; /*!< [19..19] MMC Transmit Carrier Error Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXGOCTIM : 1; /*!< [20..20] MMC Transmit Good Octet Counter Interrupt Mask */ + __IOM uint32_t TXGFRMIM : 1; /*!< [21..21] MMC Transmit Good Frame Counter Interrupt Mask */ + __IOM uint32_t TXEXDEFFIM : 1; /*!< [22..22] MMC Transmit Excessive Deferral Frame Counter Interrupt + * Mask */ + __IOM uint32_t TXPAUSFIM : 1; /*!< [23..23] MMC Transmit Pause Frame Counter Interrupt Mask */ + __IOM uint32_t TXVLANGFIM : 1; /*!< [24..24] MMC Transmit VLAN Good Frame Counter Interrupt Mask */ + __IOM uint32_t TXOSIZEGFIM : 1; /*!< [25..25] MMC Transmit Oversize Good Frame Counter Interrupt + * Mask */ + uint32_t : 6; + } MMC_Transmit_Interrupt_Mask_b; + }; + + union + { + __IM uint32_t Tx_Octet_Count_Good_Bad; /*!< (@ 0x00000114) Transmit Octet Count for Good and Bad Frames */ + + struct + { + __IM uint32_t TXOCTGB : 32; /*!< [31..0] This field indicates the number of bytes transmitted + * in good and bad frames exclusive of preamble and retried + * bytes. */ + } Tx_Octet_Count_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_Frame_Count_Good_Bad; /*!< (@ 0x00000118) Transmit Frame Count for Good and Bad Frames */ + + struct + { + __IM uint32_t TXFRMGB : 32; /*!< [31..0] This field indicates the number of good and bad frames + * transmitted, exclusive of retried frames. */ + } Tx_Frame_Count_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_Broadcast_Frames_Good; /*!< (@ 0x0000011C) Transmit Frame Count for Good Broadcast Frames */ + + struct + { + __IM uint32_t TXBCASTG : 32; /*!< [31..0] This field indicates the number of transmitted good + * broadcast frames. */ + } Tx_Broadcast_Frames_Good_b; + }; + + union + { + __IM uint32_t Tx_Multicast_Frames_Good; /*!< (@ 0x00000120) Transmit Frame Count for Good Multicast Frames */ + + struct + { + __IM uint32_t TXMCASTG : 32; /*!< [31..0] This field indicates the number of transmitted good + * multicast frames. */ + } Tx_Multicast_Frames_Good_b; + }; + + union + { + __IM uint32_t Tx_64Octets_Frames_Good_Bad; /*!< (@ 0x00000124) Transmit Octet Count for Good and Bad 64 Byte + * Frames */ + + struct + { + __IM uint32_t TX64OCTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad frames with length of 64 bytes, exclusive of preamble + * and retried frames. */ + } Tx_64Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_65To127Octets_Frames_Good_Bad; /*!< (@ 0x00000128) Transmit Octet Count for Good and Bad 65 to 127 + * Bytes Frames */ + + struct + { + __IM uint32_t TX65_127OCTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad frames with length between 65 and 127 (inclusive) + * bytes, exclusive of preamble and retried frames. */ + } Tx_65To127Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_128To255Octets_Frames_Good_Bad; /*!< (@ 0x0000012C) Transmit Octet Count for Good and Bad 128 to + * 255 Bytes Frames */ + + struct + { + __IM uint32_t TX128_255OCTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad frames with length between 128 and 255 (inclusive) + * bytes, exclusive of preamble and retried frames. */ + } Tx_128To255Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_256To511Octets_Frames_Good_Bad; /*!< (@ 0x00000130) Transmit Octet Count for Good and Bad 256 to + * 511 Bytes Frames */ + + struct + { + __IM uint32_t TX256_511OCTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad frames with length between 256 and 511 (inclusive) + * bytes, exclusive of preamble and retried frames. */ + } Tx_256To511Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_512To1023Octets_Frames_Good_Bad; /*!< (@ 0x00000134) Transmit Octet Count for Good and Bad 512 to + * 1023 Bytes Frames */ + + struct + { + __IM uint32_t TX512_1023OCTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad frames with length between 512 and 1,023 (inclusive) + * bytes, exclusive of preamble and retried frames. */ + } Tx_512To1023Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_1024ToMaxOctets_Frames_Good_Bad; /*!< (@ 0x00000138) Transmit Octet Count for Good and Bad 1024 to + * Maxsize Bytes Frames */ + + struct + { + __IM uint32_t TX1024_MAXOCTGB : 32; /*!< [31..0] This field indicates the number of good and bad frames + * transmitted with length between 1,024 and maxsize (inclusive) + * bytes, exclusive of preamble and retried frames. */ + } Tx_1024ToMaxOctets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_Unicast_Frames_Good_Bad; /*!< (@ 0x0000013C) Transmit Frame Count for Good and Bad Unicast + * Frames */ + + struct + { + __IM uint32_t TXUCASTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad unicast frames. */ + } Tx_Unicast_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_Multicast_Frames_Good_Bad; /*!< (@ 0x00000140) Transmit Frame Count for Good and Bad Multicast + * Frames */ + + struct + { + __IM uint32_t TXMCASTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad multicast frames. */ + } Tx_Multicast_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_Broadcast_Frames_Good_Bad; /*!< (@ 0x00000144) Transmit Frame Count for Good and Bad Broadcast + * Frames */ + + struct + { + __IM uint32_t TXBCASTGB : 32; /*!< [31..0] This field indicates the number of transmitted good + * and bad broadcast frames. */ + } Tx_Broadcast_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Tx_Underflow_Error_Frames; /*!< (@ 0x00000148) Transmit Frame Count for Underflow Error Frames */ + + struct + { + __IM uint32_t TXUNDRFLW : 16; /*!< [15..0] This field indicates the number of frames aborted because + * of frame underflow error. */ + uint32_t : 16; + } Tx_Underflow_Error_Frames_b; + }; + + union + { + __IM uint32_t Tx_Single_Collision_Good_Frames; /*!< (@ 0x0000014C) Transmit Frame Count for Frames Transmitted after + * Single Collision */ + + struct + { + __IM uint32_t TXSNGLCOLG : 16; /*!< [15..0] This field indicates the number of successfully transmitted + * frames after a single collision in the half-duplex mode. */ + uint32_t : 16; + } Tx_Single_Collision_Good_Frames_b; + }; + + union + { + __IM uint32_t Tx_Multiple_Collision_Good_Frames; /*!< (@ 0x00000150) Transmit Frame Count for Frames Transmitted after + * Multiple Collision */ + + struct + { + __IM uint32_t TXMULTCOLG : 16; /*!< [15..0] This field indicates the number of successfully transmitted + * frames after multiple collisions in the half-duplex mode. */ + uint32_t : 16; + } Tx_Multiple_Collision_Good_Frames_b; + }; + + union + { + __IM uint32_t Tx_Deferred_Frames; /*!< (@ 0x00000154) Transmit Frame Count for Deferred Frames */ + + struct + { + __IM uint32_t TXDEFRD : 16; /*!< [15..0] This field indicates the number of successfully transmitted + * frames after a deferral in the half-duplex mode. */ + uint32_t : 16; + } Tx_Deferred_Frames_b; + }; + + union + { + __IM uint32_t Tx_Late_Collision_Frames; /*!< (@ 0x00000158) Transmit Frame Count for Late Collision Error + * Frames */ + + struct + { + __IM uint32_t TXLATECOL : 16; /*!< [15..0] This field indicates the number of frames aborted because + * of late collision error. */ + uint32_t : 16; + } Tx_Late_Collision_Frames_b; + }; + + union + { + __IM uint32_t Tx_Excessive_Collision_Frames; /*!< (@ 0x0000015C) Transmit Frame Count for Excessive Collision + * Error Frames */ + + struct + { + __IM uint32_t TXEXSCOL : 16; /*!< [15..0] This field indicates the number of frames aborted because + * of excessive (16) collision error. */ + uint32_t : 16; + } Tx_Excessive_Collision_Frames_b; + }; + + union + { + __IM uint32_t Tx_Carrier_Error_Frames; /*!< (@ 0x00000160) Transmit Frame Count for Carrier Sense Error + * Frames */ + + struct + { + __IM uint32_t TXCARR : 16; /*!< [15..0] This field indicates the number of frames aborted because + * of carrier sense error (no carrier or loss of carrier). */ + uint32_t : 16; + } Tx_Carrier_Error_Frames_b; + }; + + union + { + __IM uint32_t Tx_Octet_Count_Good; /*!< (@ 0x00000164) Transmit Octet Count for Good Frames */ + + struct + { + __IM uint32_t TXOCTG : 32; /*!< [31..0] TXOCTG */ + } Tx_Octet_Count_Good_b; + }; + + union + { + __IM uint32_t Tx_Frame_Count_Good; /*!< (@ 0x00000168) Transmit Frame Count for Good Frames */ + + struct + { + __IM uint32_t TXFRMG : 32; /*!< [31..0] This field indicates the number of transmitted good + * frames, exclusive of preamble. */ + } Tx_Frame_Count_Good_b; + }; + + union + { + __IM uint32_t Tx_Excessive_Deferral_Error; /*!< (@ 0x0000016C) Transmit Frame Count for Excessive Deferral Error + * Frames */ + + struct + { + __IM uint32_t TXEXSDEF : 16; /*!< [15..0] This field indicates the number of frames aborted because + * of excessive deferral error, that is, frames deferred for + * more than two max sized frame times. */ + uint32_t : 16; + } Tx_Excessive_Deferral_Error_b; + }; + + union + { + __IM uint32_t Tx_Pause_Frames; /*!< (@ 0x00000170) Transmit Frame Count for Good PAUSE Frames */ + + struct + { + __IM uint32_t TXPAUSE : 16; /*!< [15..0] This field indicates the number of transmitted good + * PAUSE frames. */ + uint32_t : 16; + } Tx_Pause_Frames_b; + }; + + union + { + __IM uint32_t Tx_VLAN_Frames_Good; /*!< (@ 0x00000174) Transmit Frame Count for Good VLAN Frames */ + + struct + { + __IM uint32_t TXVLANG : 32; /*!< [31..0] This register maintains the number of transmitted good + * VLAN frames, exclusive of retried frames. */ + } Tx_VLAN_Frames_Good_b; + }; + + union + { + __IM uint32_t Tx_OSize_Frames_Good; /*!< (@ 0x00000178) Transmit Frame Count for Good Oversize Frames */ + + struct + { + __IM uint32_t TXOSIZG : 16; /*!< [15..0] This field indicates the number of frames transmitted + * without errors and with length greater than the maxsize + * (1,518 or 1,522 bytes for VLAN tagged frames; 2000 bytes + * if enabled in bit [27] of MAC Configuration Register (MAC_Configuration)) + */ + uint32_t : 16; + } Tx_OSize_Frames_Good_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IM uint32_t Rx_Frames_Count_Good_Bad; /*!< (@ 0x00000180) Receive Frame Count for Good and Bad Frames */ + + struct + { + __IM uint32_t RXFRMGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad frames. */ + } Rx_Frames_Count_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_Octet_Count_Good_Bad; /*!< (@ 0x00000184) Receive Octet Count for Good and Bad Frames */ + + struct + { + __IM uint32_t RXOCTGB : 32; /*!< [31..0] This field indicates the number of bytes received, exclusive + * of preamble, in good and bad frames. */ + } Rx_Octet_Count_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_Octet_Count_Good; /*!< (@ 0x00000188) Receive Octet Count for Good Frames */ + + struct + { + __IM uint32_t RXOCTG : 32; /*!< [31..0] This field indicates the number of bytes received, exclusive + * of preamble, only in good frames. */ + } Rx_Octet_Count_Good_b; + }; + + union + { + __IM uint32_t Rx_Broadcast_Frames_Good; /*!< (@ 0x0000018C) Receive Frame Count for Good Broadcast Frames */ + + struct + { + __IM uint32_t RXBCASTG : 32; /*!< [31..0] This field indicates the number of received good broadcast + * frames. */ + } Rx_Broadcast_Frames_Good_b; + }; + + union + { + __IM uint32_t Rx_Multicast_Frames_Good; /*!< (@ 0x00000190) Receive Frame Count for Good Multicast Frames */ + + struct + { + __IM uint32_t RXMCASTG : 32; /*!< [31..0] This field indicates the number of received good multicast + * frames. */ + } Rx_Multicast_Frames_Good_b; + }; + + union + { + __IM uint32_t Rx_CRC_Error_Frames; /*!< (@ 0x00000194) Receive Frame Count for CRC Error Frames */ + + struct + { + __IM uint32_t RXCRCERR : 16; /*!< [15..0] This field indicates the number of frames received with + * CRC error. */ + uint32_t : 16; + } Rx_CRC_Error_Frames_b; + }; + + union + { + __IM uint32_t Rx_Alignment_Error_Frames; /*!< (@ 0x00000198) Receive Frame Count for Alignment Error Frames */ + + struct + { + __IM uint32_t RXALGNERR : 16; /*!< [15..0] This field indicates the number of frames received with + * alignment (dribble) error. This field is valid only in + * the 10 or 100 Mbps mode. */ + uint32_t : 16; + } Rx_Alignment_Error_Frames_b; + }; + + union + { + __IM uint32_t Rx_Runt_Error_Frames; /*!< (@ 0x0000019C) Receive Frame Count for Runt Error Frames */ + + struct + { + __IM uint32_t RXRUNTERR : 16; /*!< [15..0] This field indicates the number of frames received with + * runt error (< 64 bytes and CRC error). */ + uint32_t : 16; + } Rx_Runt_Error_Frames_b; + }; + + union + { + __IM uint32_t Rx_Jabber_Error_Frames; /*!< (@ 0x000001A0) Receive Frame Count for Jabber Error Frames */ + + struct + { + __IM uint32_t RXJABERR : 16; /*!< [15..0] This field indicates the number of giant frames received + * with length (including CRC) greater than 1,518 bytes (1,522 + * bytes for VLAN tagged) and with CRC error. If Jumbo Frame + * mode is enabled, then frames of length greater than 9,018 + * bytes (9,022 for VLAN tagged) are considered as giant frames. */ + uint32_t : 16; + } Rx_Jabber_Error_Frames_b; + }; + + union + { + __IM uint32_t Rx_Undersize_Frames_Good; /*!< (@ 0x000001A4) Receive Frame Count for Undersize Frames */ + + struct + { + __IM uint32_t RXUNDERSZG : 16; /*!< [15..0] This field indicates the number of frames received with + * length less than 64 bytes and without errors. */ + uint32_t : 16; + } Rx_Undersize_Frames_Good_b; + }; + + union + { + __IM uint32_t Rx_Oversize_Frames_Good; /*!< (@ 0x000001A8) Receive Frame Count for Oversize Frames */ + + struct + { + __IM uint32_t RXOVERSZG : 16; /*!< [15..0] This field indicates the number of frames received without + * errors, with length greater than the maxsize (1,518 or + * 1,522 for VLAN tagged frames; 2,000 bytes if enabled in + * bit [27] of MAC Configuration Register (MAC_Configuration)). */ + uint32_t : 16; + } Rx_Oversize_Frames_Good_b; + }; + + union + { + __IM uint32_t Rx_64Octets_Frames_Good_Bad; /*!< (@ 0x000001AC) Receive Frame Count for Good and Bad 64 Byte + * Frames */ + + struct + { + __IM uint32_t RX64OCTGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad frames with length 64 bytes, exclusive of preamble. */ + } Rx_64Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_65To127Octets_Frames_Good_Bad; /*!< (@ 0x000001B0) Receive Frame Count for Good and Bad 65 to 127 + * Bytes Frames */ + + struct + { + __IM uint32_t RX65_127OCTGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad frames received with length between 65 and 127 (inclusive) + * bytes, exclusive of preamble. */ + } Rx_65To127Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_128To255Octets_Frames_Good_Bad; /*!< (@ 0x000001B4) Receive Frame Count for Good and Bad 128 to 255 + * Bytes Frames */ + + struct + { + __IM uint32_t RX128_255OCTGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad frames with length between 128 and 255 (inclusive) + * bytes, exclusive of preamble. */ + } Rx_128To255Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_256To511Octets_Frames_Good_Bad; /*!< (@ 0x000001B8) Receive Frame Count for Good and Bad 256 to 511 + * Bytes Frames */ + + struct + { + __IM uint32_t RX256_511OCTGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad frames with length between 256 and 511 (inclusive) + * bytes, exclusive of preamble. */ + } Rx_256To511Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_512To1023Octets_Frames_Good_Bad; /*!< (@ 0x000001BC) Receive Frame Count for Good and Bad 512 to 1,023 + * Bytes Frames */ + + struct + { + __IM uint32_t RX512_1023OCTGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad frames with length between 512 and 1,023 (inclusive) + * bytes, exclusive of preamble. */ + } Rx_512To1023Octets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_1024ToMaxOctets_Frames_Good_Bad; /*!< (@ 0x000001C0) Receive Frame Count for Good and Bad 1,024 to + * Maxsize Bytes Frames */ + + struct + { + __IM uint32_t RX1024_MAXOCTGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad frames with length between 1,024 and maxsize (inclusive) + * bytes, exclusive of preamble and retried frames. */ + } Rx_1024ToMaxOctets_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_Unicast_Frames_Good; /*!< (@ 0x000001C4) Receive Frame Count for Good Unicast Frames */ + + struct + { + __IM uint32_t RXUCASTG : 32; /*!< [31..0] This field indicates the number of received good unicast + * frames. */ + } Rx_Unicast_Frames_Good_b; + }; + + union + { + __IM uint32_t Rx_Length_Error_Frames; /*!< (@ 0x000001C8) Receive Frame Count for Length Error Frames */ + + struct + { + __IM uint32_t RXLENERR : 16; /*!< [15..0] RXLENERR */ + uint32_t : 16; + } Rx_Length_Error_Frames_b; + }; + + union + { + __IM uint32_t Rx_Out_Of_Range_Type_Frames; /*!< (@ 0x000001CC) Receive Frame Count for Out of Range Frames */ + + struct + { + __IM uint32_t RXOUTOFRNG : 16; /*!< [15..0] This field indicates the number of received frames with + * length field not equal to the valid frame size (greater + * than 1,500 but less than 1,536). */ + uint32_t : 16; + } Rx_Out_Of_Range_Type_Frames_b; + }; + + union + { + __IM uint32_t Rx_Pause_Frames; /*!< (@ 0x000001D0) Receive Frame Count for PAUSE Frames */ + + struct + { + __IM uint32_t RXPAUSEFRM : 16; /*!< [15..0] This field indicates the number of received good and + * valid PAUSE frames. */ + uint32_t : 16; + } Rx_Pause_Frames_b; + }; + + union + { + __IM uint32_t Rx_FIFO_Overflow_Frames; /*!< (@ 0x000001D4) Receive Frame Count for FIFO Overflow Frames */ + + struct + { + __IM uint32_t RXFIFOOVFL : 16; /*!< [15..0] This field indicates the number of received frames missed + * because of FIFO overflow. */ + uint32_t : 16; + } Rx_FIFO_Overflow_Frames_b; + }; + + union + { + __IM uint32_t Rx_VLAN_Frames_Good_Bad; /*!< (@ 0x000001D8) Receive Frame Count for Good and Bad VLAN Frames */ + + struct + { + __IM uint32_t RXVLANFRGB : 32; /*!< [31..0] This field indicates the number of received good and + * bad VLAN frames. */ + } Rx_VLAN_Frames_Good_Bad_b; + }; + + union + { + __IM uint32_t Rx_Watchdog_Error_Frames; /*!< (@ 0x000001DC) Receive Frame Count for Watchdog Error Frames */ + + struct + { + __IM uint32_t RXWDGERR : 16; /*!< [15..0] This field indicates the number of frames received with + * error because of the watchdog timeout error (frames with + * more than 2,048 bytes or value programmed in Watchdog Timeout + * Register (WDog_Timeout)). */ + uint32_t : 16; + } Rx_Watchdog_Error_Frames_b; + }; + + union + { + __IM uint32_t Rx_Receive_Error_Frames; /*!< (@ 0x000001E0) Receive Frame Count for Receive Error Frames */ + + struct + { + __IM uint32_t RXRCVERR : 16; /*!< [15..0] This field indicates the number of frames received with + * error because of the GMII/MII RXER error or Frame Extension + * error on GMII. */ + uint32_t : 16; + } Rx_Receive_Error_Frames_b; + }; + + union + { + __IM uint32_t Rx_Control_Frames_Good; /*!< (@ 0x000001E4) Receive Frame Count for Good Control Frames */ + + struct + { + __IM uint32_t RXCTRLG : 32; /*!< [31..0] This field indicates the number of good control frames + * received. */ + } Rx_Control_Frames_Good_b; + }; + __IM uint32_t RESERVED4[134]; + + union + { + __IOM uint32_t GMACTRGSEL; /*!< (@ 0x00000400) GMAC PTP Trigger Select Register */ + + struct + { + __IOM uint32_t TRGSEL : 2; /*!< [1..0] Select PTP Timestamp Trigger for GMAC IP */ + uint32_t : 30; + } GMACTRGSEL_b; + }; + __IM uint32_t RESERVED5[63]; + + union + { + __IOM uint32_t HASH_TABLE_REG[8]; /*!< (@ 0x00000500) Hash Table Register [0..7] (n = 0 to 7) */ + + struct + { + __IOM uint32_t HT : 32; /*!< [31..0] This field contains the nth 32 bits [31:0] of the Hash + * table. */ + } HASH_TABLE_REG_b[8]; + }; + __IM uint32_t RESERVED6[26]; + + union + { + __IOM uint32_t VLAN_Hash_Table_Reg; /*!< (@ 0x00000588) VLAN Hash Table Register */ + + struct + { + __IOM uint32_t VLHT : 16; /*!< [15..0] VLAN Hash Table */ + uint32_t : 16; + } VLAN_Hash_Table_Reg_b; + }; + __IM uint32_t RESERVED7[93]; + + union + { + __IOM uint32_t Timestamp_Control; /*!< (@ 0x00000700) Timestamp Control Register */ + + struct + { + __IOM uint32_t TSENA : 1; /*!< [0..0] Timestamp Enable */ + uint32_t : 7; + __IOM uint32_t TSENALL : 1; /*!< [8..8] Enable Timestamp for all Frames */ + __IOM uint32_t TSCTRLSSR : 1; /*!< [9..9] Timestamp Digital or Binary Rollover Control */ + __IOM uint32_t TSVER2ENA : 1; /*!< [10..10] Enable PTP packet Processing for Version 2 Format */ + __IOM uint32_t TSIPENA : 1; /*!< [11..11] Enable Processing of PTP over Ethernet Frames */ + __IOM uint32_t TSIPV6ENA : 1; /*!< [12..12] Enable Processing of PTP Frames Sent Over IPv6 UDP */ + __IOM uint32_t TSIPV4ENA : 1; /*!< [13..13] Enable Processing of PTP Frames Sent over IPv4 UDP */ + __IOM uint32_t TSEVNTENA : 1; /*!< [14..14] Enable Timestamp Snapshot for Event Messages */ + __IOM uint32_t TSMSTRENA : 1; /*!< [15..15] Enable Snapshot for Messages Relevant to Master */ + __IOM uint32_t SNAPTYPSEL : 2; /*!< [17..16] Select PTP packets for Taking Snapshots */ + __IOM uint32_t TSENMACADDR : 1; /*!< [18..18] Enable MAC address for PTP Frame Filtering */ + uint32_t : 5; + __IOM uint32_t ATSFC : 1; /*!< [24..24] Auxiliary Snapshot FIFO Clear */ + __IOM uint32_t ATSEN0 : 1; /*!< [25..25] Auxiliary Snapshot 0 Enable */ + __IOM uint32_t ATSEN1 : 1; /*!< [26..26] Auxiliary Snapshot 1 Enable */ + uint32_t : 5; + } Timestamp_Control_b; + }; + __IM uint32_t RESERVED8[9]; + + union + { + __IM uint32_t Timestamp_Status; /*!< (@ 0x00000728) Timestamp Status Register */ + + struct + { + uint32_t : 2; + __IM uint32_t AUXTSTRIG : 1; /*!< [2..2] Auxiliary Timestamp Trigger Snapshot */ + uint32_t : 13; + __IM uint32_t ATSSTN : 4; /*!< [19..16] Auxiliary Timestamp Snapshot Trigger Identifier */ + uint32_t : 4; + __IM uint32_t ATSSTM : 1; /*!< [24..24] Auxiliary Timestamp Snapshot Trigger Missed */ + __IM uint32_t ATSNS : 5; /*!< [29..25] Number of Auxiliary Timestamp Snapshots */ + uint32_t : 2; + } Timestamp_Status_b; + }; + __IM uint32_t RESERVED9; + + union + { + __IM uint32_t Auxiliary_Timestamp_Nanoseconds; /*!< (@ 0x00000730) Auxiliary Timestamp - Nanoseconds Register */ + + struct + { + __IM uint32_t AUXTSLO : 31; /*!< [30..0] Contains the lower 32 bits (nanoseconds field) of the + * auxiliary timestamp. */ + uint32_t : 1; + } Auxiliary_Timestamp_Nanoseconds_b; + }; + + union + { + __IM uint32_t Auxiliary_Timestamp_Seconds; /*!< (@ 0x00000734) Auxiliary Timestamp - Seconds Register */ + + struct + { + __IM uint32_t AUXTSHI : 32; /*!< [31..0] Contains the upper 32 bits (Seconds field) of the auxiliary + * timestamp. */ + } Auxiliary_Timestamp_Seconds_b; + }; + __IM uint32_t RESERVED10[50]; + + union + { + __IOM uint32_t MAR16_H; /*!< (@ 0x00000800) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR16_H_b; + }; + + union + { + __IOM uint32_t MAR16_L; /*!< (@ 0x00000804) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR16_L_b; + }; + + union + { + __IOM uint32_t MAR17_H; /*!< (@ 0x00000808) MAC ADDRESS High Register */ + + struct + { + __IOM uint32_t ADDRHI : 16; /*!< [15..0] MAC Address n[47:32] */ + uint32_t : 8; + __IOM uint32_t MBC : 6; /*!< [29..24] Mask Byte Control */ + __IOM uint32_t SA : 1; /*!< [30..30] Source Address */ + __IOM uint32_t AE : 1; /*!< [31..31] Address Enable */ + } MAR17_H_b; + }; + + union + { + __IOM uint32_t MAR17_L; /*!< (@ 0x0000080C) MAC ADDRESS Low Register */ + + struct + { + __IOM uint32_t ADDRLO : 32; /*!< [31..0] MAC Address n[31:0] */ + } MAR17_L_b; + }; + __IM uint32_t RESERVED11[508]; + + union + { + __IOM uint32_t Bus_Mode; /*!< (@ 0x00001000) Bus Mode Register */ + + struct + { + __IOM uint32_t SWR : 1; /*!< [0..0] Software Reset */ + __IM uint32_t DA : 1; /*!< [1..1] DMA Arbitration Scheme */ + __IOM uint32_t DSL : 5; /*!< [6..2] Descriptor Skip Length */ + __IOM uint32_t ATDS : 1; /*!< [7..7] Enhanced Descriptor Size */ + __IOM uint32_t PBL : 6; /*!< [13..8] Programmable Burst Length */ + __IM uint32_t PR : 2; /*!< [15..14] Priority Ratio */ + __IOM uint32_t FB : 1; /*!< [16..16] Fixed Burst */ + __IOM uint32_t RPBL : 6; /*!< [22..17] RX DMA PBL */ + __IOM uint32_t USP : 1; /*!< [23..23] Use Separate PBL */ + __IOM uint32_t PBLx8 : 1; /*!< [24..24] PBLx8 Mode */ + __IOM uint32_t AAL : 1; /*!< [25..25] Address Aligned Beats */ + __IM uint32_t MB : 1; /*!< [26..26] Mixed Burst */ + __IM uint32_t TXPR : 1; /*!< [27..27] Transmit Priority */ + __IM uint32_t PRWG : 2; /*!< [29..28] Channel Priority Weights */ + uint32_t : 1; + __IM uint32_t RIB : 1; /*!< [31..31] Rebuild INCRx Burst */ + } Bus_Mode_b; + }; + + union + { + __IOM uint32_t Transmit_Poll_Demand; /*!< (@ 0x00001004) Transmit Poll Demand Register */ + + struct + { + __IOM uint32_t TPD : 32; /*!< [31..0] Transmit Poll Demand */ + } Transmit_Poll_Demand_b; + }; + + union + { + __IOM uint32_t Receive_Poll_Demand; /*!< (@ 0x00001008) Receive Poll Demand Register */ + + struct + { + __IOM uint32_t RPD : 32; /*!< [31..0] Receive Poll Demand */ + } Receive_Poll_Demand_b; + }; + + union + { + __IOM uint32_t Receive_Descriptor_List_Address; /*!< (@ 0x0000100C) Receive Descriptor List Address Register */ + + struct + { + uint32_t : 2; + __IOM uint32_t RDESLA_32bit : 30; /*!< [31..2] Start of Receive List */ + } Receive_Descriptor_List_Address_b; + }; + + union + { + __IOM uint32_t Transmit_Descriptor_List_Address; /*!< (@ 0x00001010) Transmit Descriptor List Address Register */ + + struct + { + uint32_t : 2; + __IOM uint32_t TDESLA_32bit : 30; /*!< [31..2] Start of Transmit List */ + } Transmit_Descriptor_List_Address_b; + }; + + union + { + __IOM uint32_t Status; /*!< (@ 0x00001014) Status Register */ + + struct + { + __IOM uint32_t TI : 1; /*!< [0..0] Transmit Interrupt */ + __IOM uint32_t TPS : 1; /*!< [1..1] Transmit Process Stopped */ + __IOM uint32_t TU : 1; /*!< [2..2] Transmit Buffer Unavailable */ + __IOM uint32_t TJT : 1; /*!< [3..3] Transmit Jabber Timeout */ + __IOM uint32_t OVF : 1; /*!< [4..4] Receive Overflow */ + __IOM uint32_t UNF : 1; /*!< [5..5] Transmit Underflow */ + __IOM uint32_t RI : 1; /*!< [6..6] Receive Interrupt */ + __IOM uint32_t RU : 1; /*!< [7..7] Receive Buffer Unavailable */ + __IOM uint32_t RPS : 1; /*!< [8..8] Receive Process Stopped */ + __IOM uint32_t RWT : 1; /*!< [9..9] Receive Watchdog Timeout */ + __IOM uint32_t ETI : 1; /*!< [10..10] Early Transmit Interrupt */ + uint32_t : 2; + __IOM uint32_t FBI : 1; /*!< [13..13] Fatal Bus Error Interrupt */ + __IOM uint32_t ERI : 1; /*!< [14..14] Early Receive Interrupt */ + __IOM uint32_t AIS : 1; /*!< [15..15] Abnormal Interrupt Summary */ + __IOM uint32_t NIS : 1; /*!< [16..16] Normal Interrupt Summary */ + __IM uint32_t RS : 3; /*!< [19..17] Received Process State */ + __IM uint32_t TS : 3; /*!< [22..20] Transmit Process State */ + __IM uint32_t EB : 3; /*!< [25..23] Error Bits */ + uint32_t : 1; + __IM uint32_t GMI : 1; /*!< [27..27] GMAC MMC Interrupt */ + __IM uint32_t GPI : 1; /*!< [28..28] GMAC PMT Interrupt */ + __IM uint32_t TTI : 1; /*!< [29..29] Timestamp Trigger Interrupt */ + __IM uint32_t GLPII : 1; /*!< [30..30] GMAC LPI Interrupt */ + uint32_t : 1; + } Status_b; + }; + + union + { + __IOM uint32_t Operation_Mode; /*!< (@ 0x00001018) Operation Mode Register */ + + struct + { + uint32_t : 1; + __IOM uint32_t SR : 1; /*!< [1..1] Start or Stop Receive */ + __IOM uint32_t OSF : 1; /*!< [2..2] Operate on Second Frame */ + __IOM uint32_t RTC : 2; /*!< [4..3] Receive Threshold Control */ + __IOM uint32_t DGF : 1; /*!< [5..5] Drop Giant Frames */ + __IOM uint32_t FUF : 1; /*!< [6..6] Forward Undersized Good Frames */ + __IOM uint32_t FEF : 1; /*!< [7..7] Forward Error Frames */ + __IOM uint32_t EFC : 1; /*!< [8..8] Enable HW Flow Control */ + __IOM uint32_t RFA : 2; /*!< [10..9] Threshold for Activating Flow Control (in half-duplex + * and full-duplex) */ + __IOM uint32_t RFD : 2; /*!< [12..11] Threshold for Deactivating Flow Control (in half-duplex + * and full-duplex) */ + __IOM uint32_t ST : 1; /*!< [13..13] Start or Stop Transmission Command */ + __IOM uint32_t TTC : 3; /*!< [16..14] Transmit Threshold Control */ + uint32_t : 3; + __IOM uint32_t FTF : 1; /*!< [20..20] Flush Transmit FIFO */ + __IOM uint32_t TSF : 1; /*!< [21..21] Transmit Store and Forward */ + uint32_t : 3; + __IOM uint32_t RSF : 1; /*!< [25..25] Receive Store and Forward */ + __IOM uint32_t DT : 1; /*!< [26..26] Disable Dropping of TCP/IP Checksum Error Frames */ + uint32_t : 5; + } Operation_Mode_b; + }; + + union + { + __IOM uint32_t Interrupt_Enable; /*!< (@ 0x0000101C) Interrupt Enable Register */ + + struct + { + __IOM uint32_t TIE : 1; /*!< [0..0] Transmit Interrupt Enable */ + __IOM uint32_t TSE : 1; /*!< [1..1] Transmit Stopped Enable */ + __IOM uint32_t TUE : 1; /*!< [2..2] Transmit Buffer Unavailable Enable */ + __IOM uint32_t TJE : 1; /*!< [3..3] Transmit Jabber Timeout Enable */ + __IOM uint32_t OVE : 1; /*!< [4..4] Overflow Interrupt Enable */ + __IOM uint32_t UNE : 1; /*!< [5..5] Underflow Interrupt Enable */ + __IOM uint32_t RIE : 1; /*!< [6..6] Receive Interrupt Enable */ + __IOM uint32_t RUE : 1; /*!< [7..7] Receive Buffer Unavailable Enable */ + __IOM uint32_t RSE : 1; /*!< [8..8] Receive Stopped Enable */ + __IOM uint32_t RWE : 1; /*!< [9..9] Receive Watchdog Timeout Enable */ + __IOM uint32_t ETE : 1; /*!< [10..10] Early Transmit Interrupt Enable */ + uint32_t : 2; + __IOM uint32_t FBE : 1; /*!< [13..13] Fatal Bus Error Enable */ + __IOM uint32_t ERE : 1; /*!< [14..14] Early Receive Interrupt Enable */ + __IOM uint32_t AIE : 1; /*!< [15..15] Abnormal Interrupt Summary Enable */ + __IOM uint32_t NIE : 1; /*!< [16..16] Normal Interrupt Summary Enable */ + uint32_t : 15; + } Interrupt_Enable_b; + }; + + union + { + __IM uint32_t Missed_Frame_And_Buffer_Overflow_Counter; /*!< (@ 0x00001020) Missed Frame and Buffer Overflow Counter Register */ + + struct + { + __IM uint32_t MISFRMCNT : 16; /*!< [15..0] Missed Frame Counter */ + __IM uint32_t MISCNTOVF : 1; /*!< [16..16] Overflow Bit for Missed Frame Counter */ + __IM uint32_t OVFFRMCNT : 11; /*!< [27..17] Overflow Frame Counter */ + __IM uint32_t OVFCNTOVF : 1; /*!< [28..28] Overflow Bit for FIFO Overflow Counter */ + uint32_t : 3; + } Missed_Frame_And_Buffer_Overflow_Counter_b; + }; + + union + { + __IOM uint32_t Receive_Interrupt_Watchdog_Timer; /*!< (@ 0x00001024) Receive Interrupt Watchdog Timer Register */ + + struct + { + __IOM uint32_t RIWT : 8; /*!< [7..0] RI Watchdog Timer Count */ + uint32_t : 24; + } Receive_Interrupt_Watchdog_Timer_b; + }; + + union + { + __IOM uint32_t AXI_Bus_Mode; /*!< (@ 0x00001028) AXI Bus Mode Register */ + + struct + { + __IM uint32_t UNDEF : 1; /*!< [0..0] AXI Undefined Burst Length */ + __IOM uint32_t BLEN4 : 1; /*!< [1..1] AXI Burst Length 4 */ + __IOM uint32_t BLEN8 : 1; /*!< [2..2] AXI Burst Length 8 */ + __IOM uint32_t BLEN16 : 1; /*!< [3..3] AXI Burst Length 16 */ + uint32_t : 8; + __IM uint32_t AXI_AAL : 1; /*!< [12..12] Address-Aligned Beats */ + __IOM uint32_t ONEKBBE : 1; /*!< [13..13] 1 KB Boundary Crossing Enable for the GMAC-AXI Master */ + uint32_t : 2; + __IOM uint32_t RD_OSR_LMT : 2; /*!< [17..16] AXI Maximum Read OutStanding Request Limit */ + uint32_t : 2; + __IOM uint32_t WR_OSR_LMT : 2; /*!< [21..20] AXI Maximum Write OutStanding Request Limit */ + uint32_t : 8; + __IOM uint32_t LPI_XIT_FRM : 1; /*!< [30..30] Unlock on Magic Packet or Remote Wake-Up Frame */ + __IOM uint32_t EN_LPI : 1; /*!< [31..31] Enable Low Power Interface (LPI) */ + } AXI_Bus_Mode_b; + }; + + union + { + __IM uint32_t AXI_Status; /*!< (@ 0x0000102C) AXI Status Register */ + + struct + { + __IM uint32_t AXWHSTS : 1; /*!< [0..0] AXI Master Write Channel */ + __IM uint32_t AXIRDSTS : 1; /*!< [1..1] AXI Master Read Channel Status */ + uint32_t : 30; + } AXI_Status_b; + }; + __IM uint32_t RESERVED12[6]; + + union + { + __IM uint32_t Current_Host_Transmit_Descriptor; /*!< (@ 0x00001048) Current Host Transmit Descriptor Register */ + + struct + { + __IM uint32_t CURTDESAPTR : 32; /*!< [31..0] Host Transmit Descriptor Address Pointer */ + } Current_Host_Transmit_Descriptor_b; + }; + + union + { + __IM uint32_t Current_Host_Receive_Descriptor; /*!< (@ 0x0000104C) Current Host Receive Descriptor Register */ + + struct + { + __IM uint32_t CURRDESAPTR : 32; /*!< [31..0] Host Receive Descriptor Address Pointer */ + } Current_Host_Receive_Descriptor_b; + }; + + union + { + __IM uint32_t Current_Host_Transmit_Buffer_Address; /*!< (@ 0x00001050) Current Host Transmit Buffer Address Register */ + + struct + { + __IM uint32_t CURTBUFAPTR : 32; /*!< [31..0] Host Transmit Buffer Address Pointer */ + } Current_Host_Transmit_Buffer_Address_b; + }; + + union + { + __IM uint32_t Current_Host_Receive_Buffer_Address; /*!< (@ 0x00001054) Current Host Receive Buffer Address Register */ + + struct + { + __IM uint32_t CURRBUFAPTR : 32; /*!< [31..0] Host Receive Buffer Address Pointer */ + } Current_Host_Receive_Buffer_Address_b; + }; + + union + { + __IM uint32_t HW_Feature; /*!< (@ 0x00001058) HW Feature Register */ + + struct + { + __IM uint32_t MIISEL : 1; /*!< [0..0] 10 or 100 Mbps support */ + __IM uint32_t GMIISEL : 1; /*!< [1..1] 1000 Mbps support */ + __IM uint32_t HDSEL : 1; /*!< [2..2] Half-Duplex support */ + __IM uint32_t EXTHASHEN : 1; /*!< [3..3] Expanded DA Hash Filter */ + __IM uint32_t HASHSEL : 1; /*!< [4..4] HASH Filter */ + __IM uint32_t ADDMACADRSEL : 1; /*!< [5..5] Multiple MAC Address Registers */ + uint32_t : 1; + __IM uint32_t L3L4FLTREN : 1; /*!< [7..7] Layer 3 and Layer 4 Filter Feature */ + __IM uint32_t SMASEL : 1; /*!< [8..8] SMA (MDIO) Interface */ + __IM uint32_t RWKSEL : 1; /*!< [9..9] PMT Remote wakeup */ + __IM uint32_t MGKSEL : 1; /*!< [10..10] PMT Magic Packet */ + __IM uint32_t MMCSEL : 1; /*!< [11..11] RMON Module */ + __IM uint32_t TSVER1SEL : 1; /*!< [12..12] Only IEEE 1588-2002 Timestamp */ + __IM uint32_t TSVER2SEL : 1; /*!< [13..13] IEEE 1588-2008 Advanced Timestamp */ + __IM uint32_t EEESEL : 1; /*!< [14..14] Energy Efficient Ethernet */ + __IM uint32_t AVSEL : 1; /*!< [15..15] AV Feature */ + __IM uint32_t TXCOESEL : 1; /*!< [16..16] Checksum Offload in TX */ + __IM uint32_t RXTYP1COE : 1; /*!< [17..17] IP Checksum Offload (Type 1) in RX */ + __IM uint32_t RXTYP2COE : 1; /*!< [18..18] IP Checksum Offload (Type 2) in RX */ + __IM uint32_t RXFIFOSIZE : 1; /*!< [19..19] RX FIFO > 2,048 Bytes */ + __IM uint32_t RXCHCNT : 2; /*!< [21..20] Number of additional RX channels */ + __IM uint32_t TXCHCNT : 2; /*!< [23..22] Number of additional TX channels */ + __IM uint32_t ENHDESSEL : 1; /*!< [24..24] Enhanced Descriptor */ + __IM uint32_t INTTSEN : 1; /*!< [25..25] Timestamping with Internal System Time */ + __IM uint32_t FLEXIPPSEN : 1; /*!< [26..26] Flexible Pulse-Per-Second Output (GMAC: 0) */ + __IM uint32_t SAVLANINS : 1; /*!< [27..27] Source Address or VLAN Insertion */ + __IM uint32_t ACTPHYIF : 3; /*!< [30..28] Active or Selected PHY interface */ + uint32_t : 1; + } HW_Feature_b; + }; +} R_GMAC_Type; /*!< Size = 4188 (0x105c) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHSS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Ethernet Subsystem (R_ETHSS) + */ + +typedef struct /*!< (@ 0x80110000) R_ETHSS Structure */ +{ + __IOM uint32_t PRCMD; /*!< (@ 0x00000000) Ethernet Protect Register */ + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t MODCTRL; /*!< (@ 0x00000008) Mode Control Register */ + + struct + { + __IOM uint32_t SW_MODE : 3; /*!< [2..0] Media I/F connectionSW_MODE[2:0]Media I/FPort 0Port 1Port + * 2000bETHSW Port 0ETHSW Port 1ETHSW Port 2001bESC Port 0ESC + * Port 1GMAC Port010bESC Port 0ESC Port 1ETHSW Port 2011bESC + * Port 0ESC Port 1ESC Port 2100bETHSW Port 0ESC Port 1ESC + * Port 2101bETHSW Port 0ESC Port 1ETHSW Port 2110b-ETHSW + * Port 1ETHSW Port 0111b-ESC Port 1ESC Port 0 */ + uint32_t : 29; + } MODCTRL_b; + }; + + union + { + __IOM uint32_t PTPMCTRL; /*!< (@ 0x0000000C) PTP Mode Control Register */ + + struct + { + __IOM uint32_t PTP_MODE : 1; /*!< [0..0] Select the unit number of PTP Timer for GMAC and Pulse + * Generator (unit 0 - 3) */ + uint32_t : 15; + __IOM uint32_t PTP_PLS_RSTn : 1; /*!< [16..16] Reset control for Pulse Generator (unit 0 - 3) */ + uint32_t : 15; + } PTPMCTRL_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t PHYLNK; /*!< (@ 0x00000014) Ethernet PHY Link Mode Register */ + + struct + { + __IOM uint32_t SWLINK : 3; /*!< [2..0] Specify the active level of the ETHSW_PHYLINKn signal + * using the Ethernet switch interface */ + uint32_t : 1; + __IOM uint32_t CATLNK : 3; /*!< [6..4] Specify the active level of the ESC_PHYLINKn signal using + * the EtherCAT interface */ + uint32_t : 25; + } PHYLNK_b; + }; + __IM uint32_t RESERVED2[58]; + + union + { + __IOM uint32_t CONVCTRL[3]; /*!< (@ 0x00000100) RGMII/RMII Converter [0..2] Control Register */ + + struct + { + __IOM uint32_t CONV_MODE : 5; /*!< [4..0] Converter operation mode */ + uint32_t : 3; + __IOM uint32_t FULLD : 1; /*!< [8..8] FULLD */ + __IOM uint32_t RMII_RX_ER_EN : 1; /*!< [9..9] RMII_RX_ER_EN */ + __IOM uint32_t RMII_CRS_MODE : 1; /*!< [10..10] RMII_CRS_MODE */ + uint32_t : 1; + __IM uint32_t RGMII_LINK : 1; /*!< [12..12] RGMII_LINK */ + __IM uint32_t RGMII_DUPLEX : 1; /*!< [13..13] RGMII_DUPLEX */ + __IM uint32_t RGMII_SPEED : 2; /*!< [15..14] RGMII_SPEED */ + uint32_t : 16; + } CONVCTRL_b[3]; + }; + __IM uint32_t RESERVED3[2]; + + union + { + __IOM uint32_t CONVRST; /*!< (@ 0x00000114) RGMII/RMII Converter Reset Control Register */ + + struct + { + __IOM uint32_t PHYIR : 3; /*!< [2..0] PHYIR */ + uint32_t : 29; + } CONVRST_b; + }; + __IM uint32_t RESERVED4[123]; + + union + { + __IOM uint32_t SWCTRL; /*!< (@ 0x00000304) Switch Core Control Register */ + + struct + { + __IOM uint32_t SET10 : 3; /*!< [2..0] Port control to select use of 10 Mbps. Bit 0 = port 0, + * bit 1 = port 1, bit 2 = port 2. */ + uint32_t : 1; + __IOM uint32_t SET1000 : 3; /*!< [6..4] Port control to select use of 1000 Mbps. Bit 0 = port + * 0, bit 1 = port 1, bit 2 = port 2. */ + uint32_t : 9; + __IOM uint32_t STRAP_SX_ENB : 1; /*!< [16..16] Initialize switch after reset (set during module reset + * of ETHSW) */ + __IOM uint32_t STRAP_HUB_ENB : 1; /*!< [17..17] Initialize switch port 0 and 1 (set during module reset + * of ETHSW) */ + uint32_t : 14; + } SWCTRL_b; + }; + + union + { + __IOM uint32_t SWDUPC; /*!< (@ 0x00000308) Switch Core Duplex Mode Register */ + + struct + { + __IOM uint32_t PHY_DUPLEX : 3; /*!< [2..0] Configure the MAC of each port for full-duplex or half-duplex + * operation. Bit 0 = port 0, bit 1 = port 1, bit 2 = port + * 2. */ + uint32_t : 29; + } SWDUPC_b; + }; + __IM uint32_t RESERVED5[573]; + + union + { + __IOM uint32_t CDCR; /*!< (@ 0x00000C00) RGMII Clock Delay Control Register */ + + struct + { + __IOM uint32_t RXDLYEN : 1; /*!< [0..0] Enable delay for ETH2_RXCLK */ + __IOM uint32_t TXDLYEN : 1; /*!< [1..1] Enable delay for ETH2_TXCLK */ + __IOM uint32_t OSCCLKEN : 1; /*!< [2..2] Enable Oscillation mode for calibration */ + __IOM uint32_t CLKINEN : 1; /*!< [3..3] Enable Phase shift mode for normal operation */ + uint32_t : 28; + } CDCR_b; + }; + __IM uint32_t RESERVED6[3]; + + union + { + __IM uint32_t RXFCNT; /*!< (@ 0x00000C10) RGMII RX OSC Frequency Measurement Counter Register */ + + struct + { + __IM uint32_t RXFCNT : 16; /*!< [15..0] Oscillation frequency measurement counter for ETH2_RXCLK + * delay */ + uint32_t : 16; + } RXFCNT_b; + }; + + union + { + __IM uint32_t TXFCNT; /*!< (@ 0x00000C14) RGMII TX OSC Frequency Measurement Counter Register */ + + struct + { + __IM uint32_t TXFCNT : 16; /*!< [15..0] Oscillation frequency measurement counter for ETH2_TXCLK + * delay */ + uint32_t : 16; + } TXFCNT_b; + }; + + union + { + __IOM uint32_t RXTAPSEL; /*!< (@ 0x00000C18) RGMII RX TAP Selection Register */ + + struct + { + __IOM uint32_t RXTAPSEL : 7; /*!< [6..0] TAP selection for ETH2_RXCLK delay (number of taps for + * 90 degree phase shift) */ + uint32_t : 25; + } RXTAPSEL_b; + }; + + union + { + __IOM uint32_t TXTAPSEL; /*!< (@ 0x00000C1C) RGMII TX TAP Selection Register */ + + struct + { + __IOM uint32_t TXTAPSEL : 7; /*!< [6..0] TAP selection for ETH2_TXCLK delay (Number of taps for + * 90 degree phase shift) */ + uint32_t : 25; + } TXTAPSEL_b; + }; + + union + { + __IOM uint32_t MIIMCR; /*!< (@ 0x00000C20) MII Mode Control Register */ + + struct + { + __IOM uint32_t MIIM2MEN : 1; /*!< [0..0] Enable MAC-to-MAC MII Mode */ + uint32_t : 31; + } MIIMCR_b; + }; +} R_ETHSS_Type; /*!< Size = 3108 (0xc24) */ + +/* =========================================================================================================================== */ +/* ================ R_ESC_INI ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Initial Configuration 1 for EtherCAT Slave Controller (R_ESC_INI) + */ + +typedef struct /*!< (@ 0x80110200) R_ESC_INI Structure */ +{ + union + { + __IOM uint32_t ECATOFFADR; /*!< (@ 0x00000000) EtherCAT PHY Offset Address Setting Register */ + + struct + { + __IOM uint32_t OADD : 5; /*!< [4..0] PHY Offset Address Setting */ + uint32_t : 27; + } ECATOFFADR_b; + }; + + union + { + __IOM uint32_t ECATOPMOD; /*!< (@ 0x00000004) EtherCAT Operation Mode Register */ + + struct + { + __IOM uint32_t EEPROMSIZE : 1; /*!< [0..0] EEPROM Memory Size Specification */ + uint32_t : 31; + } ECATOPMOD_b; + }; + + union + { + __IOM uint32_t ECATDBGC; /*!< (@ 0x00000008) EtherCAT Debug Control Register */ + + struct + { + __IOM uint32_t TXSFT0 : 2; /*!< [1..0] Set the delay time for ETH0_TXEN and ETH0_TXDn of the + * EtherCAT */ + __IOM uint32_t TXSFT1 : 2; /*!< [3..2] Set the delay time for ETH1_TXEN and ETH1_TXDn of the + * EtherCAT */ + __IOM uint32_t TXSFT2 : 2; /*!< [5..4] Set the delay time for ETH2_TXEN and ETH2_TXDn of the + * EtherCAT */ + uint32_t : 26; + } ECATDBGC_b; + }; + + union + { + __IOM uint32_t ECATTRGSEL; /*!< (@ 0x0000000C) EtherCAT DC Latch Trigger Select Register */ + + struct + { + __IOM uint32_t TRGSEL0 : 1; /*!< [0..0] Select DC Latch Trigger 0 for ESC */ + __IOM uint32_t TRGSEL1 : 1; /*!< [1..1] Select DC Latch Trigger 1 for ESC */ + uint32_t : 30; + } ECATTRGSEL_b; + }; +} R_ESC_INI_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHSW_PTP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Ethernet Switch for PTP (R_ETHSW_PTP) + */ + +typedef struct /*!< (@ 0x80110400) R_ETHSW_PTP Structure */ +{ + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t SWPTPOUTSEL; /*!< (@ 0x00000004) ETHSW_PTPOUT Select Register */ + + struct + { + __IOM uint32_t IOSEL0 : 1; /*!< [0..0] Select the source of the ETHSW_PTPOUT0 output signal */ + __IOM uint32_t IOSEL1 : 1; /*!< [1..1] Select the source of the ETHSW_PTPOUT1 output signal */ + __IOM uint32_t IOSEL2 : 1; /*!< [2..2] Select the source of the ETHSW_PTPOUT2 output signal */ + __IOM uint32_t IOSEL3 : 1; /*!< [3..3] Select the source of the ETHSW_PTPOUT3 output signal */ + __IOM uint32_t EVTSEL0 : 1; /*!< [4..4] Select the source of the ETHSW_PTPOUT0 event for GIC, + * DMAC, and ELC */ + __IOM uint32_t EVTSEL1 : 1; /*!< [5..5] Select the source of the ETHSW_PTPOUT1 event for GIC, + * DMAC, and ELC */ + __IOM uint32_t EVTSEL2 : 1; /*!< [6..6] Select the source of the ETHSW_PTPOUT2 event for GIC, + * DMAC, and ELC */ + __IOM uint32_t EVTSEL3 : 1; /*!< [7..7] Select the source of the ETHSW_PTPOUT3 event for GIC, + * DMAC, and ELC */ + uint32_t : 24; + } SWPTPOUTSEL_b; + }; + __IM uint32_t RESERVED1[254]; + __IOM R_ETHSW_PTP_SWTM_Type SWTM[4]; /*!< (@ 0x00000400) Ethernet Switch Timer output pins 0-3 Registers */ +} R_ETHSW_PTP_Type; /*!< Size = 2048 (0x800) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHSW ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Ethernet Switch (R_ETHSW) + */ + +typedef struct /*!< (@ 0x80120000) R_ETHSW Structure */ +{ + union + { + __IM uint32_t REVISION; /*!< (@ 0x00000000) Switch Core Version Register */ + + struct + { + __IM uint32_t REV : 32; /*!< [31..0] Revision */ + } REVISION_b; + }; + + union + { + __IOM uint32_t SCRATCH; /*!< (@ 0x00000004) Scratch Register */ + + struct + { + __IOM uint32_t SCRATCH : 32; /*!< [31..0] The Scratch Register provides a memory location to test + * the register access. */ + } SCRATCH_b; + }; + + union + { + __IOM uint32_t PORT_ENA; /*!< (@ 0x00000008) Port Enable Register */ + + struct + { + __IOM uint32_t TXENA : 4; /*!< [3..0] Transmit Enable Mask */ + uint32_t : 12; + __IOM uint32_t RXENA : 4; /*!< [19..16] Receive Enable Mask */ + uint32_t : 12; + } PORT_ENA_b; + }; + + union + { + __IOM uint32_t UCAST_DEFAULT_MASK0; /*!< (@ 0x0000000C) Unicast Default Mask Register 0 */ + + struct + { + __IOM uint32_t UCASTDM : 4; /*!< [3..0] Default Unicast Resolution */ + uint32_t : 28; + } UCAST_DEFAULT_MASK0_b; + }; + + union + { + __IOM uint32_t VLAN_VERIFY; /*!< (@ 0x00000010) Verify VLAN Domain Register */ + + struct + { + __IOM uint32_t VLANVERI : 4; /*!< [3..0] Verify VLAN Domain */ + uint32_t : 12; + __IOM uint32_t VLANDISC : 4; /*!< [19..16] Discard Unknown */ + uint32_t : 12; + } VLAN_VERIFY_b; + }; + + union + { + __IOM uint32_t BCAST_DEFAULT_MASK0; /*!< (@ 0x00000014) Broadcast Default Mask Register 0 */ + + struct + { + __IOM uint32_t BCASTDM : 4; /*!< [3..0] Default Broadcast Resolution */ + uint32_t : 28; + } BCAST_DEFAULT_MASK0_b; + }; + + union + { + __IOM uint32_t MCAST_DEFAULT_MASK0; /*!< (@ 0x00000018) Multicast Default Mask Register 0 */ + + struct + { + __IOM uint32_t MCASTDM : 4; /*!< [3..0] Default Multicast Resolution */ + uint32_t : 28; + } MCAST_DEFAULT_MASK0_b; + }; + + union + { + __IOM uint32_t INPUT_LEARN_BLOCK; /*!< (@ 0x0000001C) Input Learning Block Register */ + + struct + { + __IOM uint32_t BLOCKEN : 4; /*!< [3..0] Blocking Enable */ + uint32_t : 12; + __IOM uint32_t LEARNDIS : 4; /*!< [19..16] Learning Disable */ + uint32_t : 12; + } INPUT_LEARN_BLOCK_b; + }; + + union + { + __IOM uint32_t MGMT_CONFIG; /*!< (@ 0x00000020) Management Configuration Register */ + + struct + { + __IOM uint32_t PORT : 4; /*!< [3..0] The Port number of the port that should act as a management + * port. Keep the initial value. */ + uint32_t : 1; + __IOM uint32_t MSG_TRANS : 1; /*!< [5..5] Set (latched) when a BPDU message is transmitted from + * the management port to any output port. This bit can be + * used for handshaking to indicate that the port mask bits + * are used and can now be changed again by setting it to + * 0. */ + __IOM uint32_t ENABLE : 1; /*!< [6..6] If set, all Bridge Protocol Frames (BPDU) are forwarded + * exclusively to the management port specified in bits [3:0]. */ + __IOM uint32_t DISCARD : 1; /*!< [7..7] If set, BPDU frames are discarded always. */ + __IOM uint32_t MGMT_EN : 1; /*!< [8..8] If set, BPDU frames received at the management port are + * forwarded to the ports given in the portmask given in this + * register, bypassing the normal forwarding decisions (except + * forced forwarding). */ + __IOM uint32_t MGMT_DISC : 1; /*!< [9..9] This bit is the same as DISCARD (bit 7) but for the management + * port. */ + uint32_t : 3; + __IOM uint32_t PRIORITY : 3; /*!< [15..13] Priority to use for transmitted BPDU frames if non-zero. */ + __IOM uint32_t PORTMASK : 4; /*!< [19..16] Portmask for transmission of management frames. When + * the management port transmits a frame to the switch, it + * is forwarded to all ports in this portmask (bit 16 = port + * 0, bit 17 = port 1, ..., bit 19 = port 3). */ + uint32_t : 12; + } MGMT_CONFIG_b; + }; + + union + { + __IOM uint32_t MODE_CONFIG; /*!< (@ 0x00000024) Mode Configuration Register */ + + struct + { + uint32_t : 8; + __IOM uint32_t CUT_THRU_EN : 4; /*!< [11..8] Port Cut through Support Enable */ + uint32_t : 19; + __IOM uint32_t STATSRESET : 1; /*!< [31..31] Reset Statistics Counters Command. */ + } MODE_CONFIG_b; + }; + + union + { + __IOM uint32_t VLAN_IN_MODE; /*!< (@ 0x00000028) VLAN Input Manipulation Mode Register */ + + struct + { + __IOM uint32_t P0VLANINMD : 2; /*!< [1..0] Port 0 Define Behavior of VLAN Input Manipulation Function */ + __IOM uint32_t P1VLANINMD : 2; /*!< [3..2] Port 1 Define Behavior of VLAN Input Manipulation Function */ + __IOM uint32_t P2VLANINMD : 2; /*!< [5..4] Port 2 Define Behavior of VLAN Input Manipulation Function */ + __IOM uint32_t P3VLANINMD : 2; /*!< [7..6] Port3 Define Behavior of VLAN Input Manipulation Function */ + uint32_t : 24; + } VLAN_IN_MODE_b; + }; + + union + { + __IOM uint32_t VLAN_OUT_MODE; /*!< (@ 0x0000002C) VLAN Output Manipulation Mode Register */ + + struct + { + __IOM uint32_t P0VLANOUTMD : 2; /*!< [1..0] Port 0 Define Behavior of VLAN Output Manipulation Function */ + __IOM uint32_t P1VLANOUTMD : 2; /*!< [3..2] Port 1 Define Behavior of VLAN Output Manipulation Function */ + __IOM uint32_t P2VLANOUTMD : 2; /*!< [5..4] Port 2 Define Behavior of VLAN Output Manipulation Function */ + __IOM uint32_t P3VLANOUTMD : 2; /*!< [7..6] Port 3 Define Behavior of VLAN Output Manipulation Function */ + uint32_t : 24; + } VLAN_OUT_MODE_b; + }; + + union + { + __IOM uint32_t VLAN_IN_MODE_ENA; /*!< (@ 0x00000030) VLAN Input Mode Enable Register */ + + struct + { + __IOM uint32_t VLANINMDEN : 4; /*!< [3..0] Enable the input processing according to the VLAN_IN_MODE + * for a port (1 bit per port). */ + uint32_t : 28; + } VLAN_IN_MODE_ENA_b; + }; + + union + { + __IOM uint32_t VLAN_TAG_ID; /*!< (@ 0x00000034) VLAN Tag ID Register */ + + struct + { + __IOM uint32_t VLANTAGID : 16; /*!< [15..0] The VLAN type field (TPID) value to expect to identify + * a VLAN tagged frame. */ + uint32_t : 16; + } VLAN_TAG_ID_b; + }; + + union + { + __IOM uint32_t BCAST_STORM_LIMIT; /*!< (@ 0x00000038) Broadcast Storm Protection Register */ + + struct + { + __IOM uint32_t TMOUT : 16; /*!< [15..0] Timeout in steps of 65535 switch operating clock cycles. */ + __IOM uint32_t BCASTLIMIT : 16; /*!< [31..16] Number of broadcast frames (-1) that can be accepted + * on a port during a timeout period. If more are received, + * they are discarded. The counter is implemented per port + * independently. However, the limit is used for all ports. */ + } BCAST_STORM_LIMIT_b; + }; + + union + { + __IOM uint32_t MCAST_STORM_LIMIT; /*!< (@ 0x0000003C) Multicast Storm Protection Register */ + + struct + { + uint32_t : 16; + __IOM uint32_t MCASTLIMIT : 16; /*!< [31..16] Number of multicast frames (-1) that can be accepted + * on a port during a timeout period. If more are received, + * they are discarded. The counter is implemented per port + * independently. However, the limit is used for all ports. */ + } MCAST_STORM_LIMIT_b; + }; + + union + { + __IOM uint32_t MIRROR_CONTROL; /*!< (@ 0x00000040) Port Mirroring Configuration Register */ + + struct + { + __IOM uint32_t PORT : 2; /*!< [1..0] The port number of the port that acts as the mirror port + * and receives all mirrored frames. Valid setting range is + * 0 to 3. */ + uint32_t : 2; + __IOM uint32_t MIRROR_EN : 1; /*!< [4..4] MIRROR_EN */ + __IOM uint32_t ING_MAP_EN : 1; /*!< [5..5] If set, the ingress map is enabled (MIRROR_ING_MAP). */ + __IOM uint32_t EG_MAP_EN : 1; /*!< [6..6] If set, the egress map is enabled (MIRROR_EG_MAP). */ + __IOM uint32_t ING_SA_MATCH : 1; /*!< [7..7] If set, only frames received on an ingress port with + * a source address matching the value programmed in MIRROR_ISRC + * registers are mirrored. Other frames are not mirrored. */ + __IOM uint32_t ING_DA_MATCH : 1; /*!< [8..8] If set, only frames received on an ingress port with + * a destination address matching the value programmed in + * MIRROR_IDST registers are mirrored. Other frames are not + * mirrored. */ + __IOM uint32_t EG_SA_MATCH : 1; /*!< [9..9] If set, only frames transmitted on an egress port with + * a source address matching the value programmed in MIRROR_ESRC + * registers are mirrored. Other frames are not mirrored. */ + __IOM uint32_t EG_DA_MATCH : 1; /*!< [10..10] If set, only frames transmitted on an egress port with + * a destination address matching the value programmed in + * MIRROR_EDST registers are mirrored. Other frames are not + * mirrored. */ + uint32_t : 21; + } MIRROR_CONTROL_b; + }; + + union + { + __IOM uint32_t MIRROR_EG_MAP; /*!< (@ 0x00000044) Port Mirroring Egress Port Definition Register */ + + struct + { + __IOM uint32_t EMAP : 4; /*!< [3..0] Port Mirroring Egress Port Definitions */ + uint32_t : 28; + } MIRROR_EG_MAP_b; + }; + + union + { + __IOM uint32_t MIRROR_ING_MAP; /*!< (@ 0x00000048) Port Mirroring Ingress Port Definition Register */ + + struct + { + __IOM uint32_t IMAP : 4; /*!< [3..0] Port Mirroring Ingress Port Definitions */ + uint32_t : 28; + } MIRROR_ING_MAP_b; + }; + + union + { + __IOM uint32_t MIRROR_ISRC_0; /*!< (@ 0x0000004C) Ingress Source MAC Address for Mirror Filtering + * Register 0 */ + + struct + { + __IOM uint32_t ISRC : 32; /*!< [31..0] Ingress Source MAC Address for Mirror Filtering */ + } MIRROR_ISRC_0_b; + }; + + union + { + __IOM uint32_t MIRROR_ISRC_1; /*!< (@ 0x00000050) Ingress Source MAC Address for Mirror Filtering + * Register 1 */ + + struct + { + __IOM uint32_t ISRC : 16; /*!< [15..0] Ingress Source MAC Address for Mirror Filtering */ + uint32_t : 16; + } MIRROR_ISRC_1_b; + }; + + union + { + __IOM uint32_t MIRROR_IDST_0; /*!< (@ 0x00000054) Ingress Destination MAC Address for Mirror Filtering + * Register 0 */ + + struct + { + __IOM uint32_t IDST : 32; /*!< [31..0] Ingress Destination MAC Address for Mirror Filtering */ + } MIRROR_IDST_0_b; + }; + + union + { + __IOM uint32_t MIRROR_IDST_1; /*!< (@ 0x00000058) Ingress Destination MAC Address for Mirror Filtering + * Register 1 */ + + struct + { + __IOM uint32_t IDST : 16; /*!< [15..0] Ingress Destination MAC Address for Mirror Filtering */ + uint32_t : 16; + } MIRROR_IDST_1_b; + }; + + union + { + __IOM uint32_t MIRROR_ESRC_0; /*!< (@ 0x0000005C) Egress Source MAC Address for Mirror Filtering + * Register 0 */ + + struct + { + __IOM uint32_t ESRC : 32; /*!< [31..0] Egress Source MAC Address for Mirror Filtering */ + } MIRROR_ESRC_0_b; + }; + + union + { + __IOM uint32_t MIRROR_ESRC_1; /*!< (@ 0x00000060) Egress Source MAC Address for Mirror Filtering + * Register 1 */ + + struct + { + __IOM uint32_t ESRC : 16; /*!< [15..0] Egress Source MAC Address for Mirror Filtering */ + uint32_t : 16; + } MIRROR_ESRC_1_b; + }; + + union + { + __IOM uint32_t MIRROR_EDST_0; /*!< (@ 0x00000064) Egress Destination MAC Address for Mirror Filtering + * Register 0 */ + + struct + { + __IOM uint32_t EDST : 32; /*!< [31..0] Egress Destination MAC Address for Mirror Filtering */ + } MIRROR_EDST_0_b; + }; + + union + { + __IOM uint32_t MIRROR_EDST_1; /*!< (@ 0x00000068) Egress Destination MAC Address for Mirror Filtering + * Register 1 */ + + struct + { + __IOM uint32_t EDST : 16; /*!< [15..0] Egress Destination MAC Address for Mirror Filtering */ + uint32_t : 16; + } MIRROR_EDST_1_b; + }; + + union + { + __IOM uint32_t MIRROR_CNT; /*!< (@ 0x0000006C) Mirror Filtering Count Value Register */ + + struct + { + __IOM uint32_t CNT : 8; /*!< [7..0] Count Value for Mirror Filtering */ + uint32_t : 24; + } MIRROR_CNT_b; + }; + + union + { + __IOM uint32_t UCAST_DEFAULT_MASK1; /*!< (@ 0x00000070) Unicast Default Mask Register 1 */ + + struct + { + __IOM uint32_t UCASTDM1 : 4; /*!< [3..0] Default Unicast Resolution Mask 1 */ + uint32_t : 28; + } UCAST_DEFAULT_MASK1_b; + }; + + union + { + __IOM uint32_t BCAST_DEFAULT_MASK1; /*!< (@ 0x00000074) Broadcast Default Mask Register 1 */ + + struct + { + __IOM uint32_t BCASTDM1 : 4; /*!< [3..0] Default Broadcast Resolution Mask 1 */ + uint32_t : 28; + } BCAST_DEFAULT_MASK1_b; + }; + + union + { + __IOM uint32_t MCAST_DEFAULT_MASK1; /*!< (@ 0x00000078) Multicast Default Mask Register 1 */ + + struct + { + __IOM uint32_t MCASTDM1 : 4; /*!< [3..0] Default Multicast Resolution Mask 1 */ + uint32_t : 28; + } MCAST_DEFAULT_MASK1_b; + }; + + union + { + __IOM uint32_t PORT_XCAST_MASK_SEL; /*!< (@ 0x0000007C) Port Mask Select Register */ + + struct + { + __IOM uint32_t MSEL : 4; /*!< [3..0] Mask Select */ + uint32_t : 28; + } PORT_XCAST_MASK_SEL_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t QMGR_ST_MINCELLS; /*!< (@ 0x00000088) Minimum Memory Cell Statistics Register */ + + struct + { + __IOM uint32_t STMINCELLS : 11; /*!< [10..0] Minimum Free Cell Indication */ + uint32_t : 21; + } QMGR_ST_MINCELLS_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t QMGR_RED_MIN4; /*!< (@ 0x00000094) RED Minimum Threshold Register */ + + struct + { + __IOM uint32_t CFGRED_MINTH4 : 32; /*!< [31..0] Random Early Detection (RED) Minimum Threshold for Queues + * 0 to 3 */ + } QMGR_RED_MIN4_b; + }; + + union + { + __IOM uint32_t QMGR_RED_MAX4; /*!< (@ 0x00000098) RED Maximum Threshold Register */ + + struct + { + __IOM uint32_t CFGRED_MAXTH4 : 32; /*!< [31..0] Random Early Detection (RED) Maximum Threshold for Queues + * 0 to 3 */ + } QMGR_RED_MAX4_b; + }; + + union + { + __IOM uint32_t QMGR_RED_CONFIG; /*!< (@ 0x0000009C) RED Configuration Register */ + + struct + { + __IOM uint32_t QUEUE_RED_EN : 4; /*!< [3..0] Enable Random Early Detection (RED) (when this bit is + * 1) or Tail Drop (when this bit is 0) congestion management + * for a queue. */ + uint32_t : 4; + __IOM uint32_t GACTIVITY_EN : 1; /*!< [8..8] Enable Averaging on Global Switch Activity (when this + * bit is 1) or on port local activity (when this bit is 0) + * only. */ + uint32_t : 23; + } QMGR_RED_CONFIG_b; + }; + + union + { + __IM uint32_t IMC_STATUS; /*!< (@ 0x000000A0) Input Memory Controller Status Register */ + + struct + { + __IM uint32_t CELLS_AVAILABLE : 24; /*!< [23..0] Total number of memory cells (128-byte units) available + * in the shared memory (real time). */ + __IM uint32_t CF_ERR : 1; /*!< [24..24] Cell Factory Empty Error */ + __IM uint32_t DE_ERR : 1; /*!< [25..25] Deallocation Error */ + __IM uint32_t DE_INIT : 1; /*!< [26..26] Asserts during Memory Initialization (deallocation + * module) */ + __IM uint32_t MEM_FULL : 1; /*!< [27..27] Latched Indication that Memory is or was Full */ + uint32_t : 4; + } IMC_STATUS_b; + }; + + union + { + __IM uint32_t IMC_ERR_FULL; /*!< (@ 0x000000A4) Input Port Memory Full and Truncation Indicator + * Register */ + + struct + { + __IM uint32_t IPC_ERR_FULL : 4; /*!< [3..0] Memory was full at start of a frame reception. */ + uint32_t : 12; + __IM uint32_t IPC_ERR_TRUNC : 4; /*!< [19..16] Memory became full while a frame was received and was + * partly written into memory. */ + uint32_t : 12; + } IMC_ERR_FULL_b; + }; + + union + { + __IM uint32_t IMC_ERR_IFACE; /*!< (@ 0x000000A8) Input Port Memory Error Indicator Register */ + + struct + { + __IM uint32_t IPC_ERR_IFACE : 4; /*!< [3..0] Error indication on memory input (receive from MAC) that + * a frame has been truncated and discarded. */ + uint32_t : 12; + __IM uint32_t WBUF_OVF : 4; /*!< [19..16] Error indicating an overflow in the input write buffer + * to the memory controller (a small decoupling FIFO at every + * MAC RX). */ + uint32_t : 12; + } IMC_ERR_IFACE_b; + }; + + union + { + __IM uint32_t IMC_ERR_QOFLOW; /*!< (@ 0x000000AC) Output Port Queue Overflow Indicator Register */ + + struct + { + __IM uint32_t OP_ERR : 4; /*!< [3..0] A frame cannot be stored in an output queue of the port + * as the queue FIFO overflowed (write occurred into full + * fifo). The frame is ignored but stays stored in memory. + * This should not occur during normal operation. This is + * a fatal error as the memory allocated by that frame is + * not freed, and resulting in memory leakage. */ + uint32_t : 28; + } IMC_ERR_QOFLOW_b; + }; + + union + { + __IOM uint32_t IMC_CONFIG; /*!< (@ 0x000000B0) Input Memory Controller Configuration Register */ + + struct + { + __IOM uint32_t WFQ_EN : 1; /*!< [0..0] Enable weighted fair queuing (when this bit is 1) or + * strict priority (when this bit is 0, default) output queue + * scheduling. */ + __IOM uint32_t RSV_ENA : 1; /*!< [1..1] Enable Memory Reservations to Operate */ + __IOM uint32_t SPEED_HIPRI_THR : 3; /*!< [4..2] High-Priority Speed Threshold */ + __IOM uint32_t CTFL_EMPTY_MD : 1; /*!< [5..5] When this bit is set to 0, a frame received in Cut-Through + * mode that cannot allocate an entry in the CTFL is forwarded + * as store and forward. */ + uint32_t : 26; + } IMC_CONFIG_b; + }; + + union + { + __IM uint32_t IMC_ERR_ALLOC; /*!< (@ 0x000000B4) Input Port Error Indicator Register */ + + struct + { + __IM uint32_t DISC_FULL : 4; /*!< [3..0] Per port discard indication due to memory pool going + * empty. Per port indication that one of the queues was full + * and a frame was discarded. */ + uint32_t : 12; + __IM uint32_t DISC_LATE : 4; /*!< [19..16] Per port discard indication due to lateness in the + * priority resolution. The priority resolution can be delayed + * by the pattern matchers. If it arrives too late (after + * approximately 100 bytes into the frame), the frame is discarded. */ + uint32_t : 12; + } IMC_ERR_ALLOC_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t GPARSER0; /*!< (@ 0x000000C0) [n + 1]th Parser of 1st Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask will be compared with the data in the frame. + * All bits having a 0 will be 0 for the compare, however + * this requires the compare value to have those bits also + * set to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes where to find the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type/length field of the frame, that + * is, 0 = first byte of type/length field) or the payload + * following an IP header (see IPDATA). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicate that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field found within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represent the byte at + * the given offset and MASK_VAL2[7:0] represent the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields. For example, setting a compare + * value of 0x0800 and offset 0 matches IP frames. No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use the MASK_VAL2[7:0] bits as a 2nd compare value. + * When set, the parser reports a match if the byte at given + * offset matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER0_b; + }; + + union + { + __IOM uint32_t GPARSER1; /*!< (@ 0x000000C4) [n + 1]th Parser of 1st Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask will be compared with the data in the frame. + * All bits having a 0 will be 0 for the compare, however + * this requires the compare value to have those bits also + * set to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes where to find the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type/length field of the frame, that + * is, 0 = first byte of type/length field) or the payload + * following an IP header (see IPDATA). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicate that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field found within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represent the byte at + * the given offset and MASK_VAL2[7:0] represent the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields. For example, setting a compare + * value of 0x0800 and offset 0 matches IP frames. No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use the MASK_VAL2[7:0] bits as a 2nd compare value. + * When set, the parser reports a match if the byte at given + * offset matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER1_b; + }; + + union + { + __IOM uint32_t GPARSER2; /*!< (@ 0x000000C8) [n + 1]th Parser of 1st Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask will be compared with the data in the frame. + * All bits having a 0 will be 0 for the compare, however + * this requires the compare value to have those bits also + * set to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes where to find the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type/length field of the frame, that + * is, 0 = first byte of type/length field) or the payload + * following an IP header (see IPDATA). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicate that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field found within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represent the byte at + * the given offset and MASK_VAL2[7:0] represent the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields. For example, setting a compare + * value of 0x0800 and offset 0 matches IP frames. No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use the MASK_VAL2[7:0] bits as a 2nd compare value. + * When set, the parser reports a match if the byte at given + * offset matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER2_b; + }; + + union + { + __IOM uint32_t GPARSER3; /*!< (@ 0x000000CC) [n + 1]th Parser of 1st Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask will be compared with the data in the frame. + * All bits having a 0 will be 0 for the compare, however + * this requires the compare value to have those bits also + * set to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes where to find the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type/length field of the frame, that + * is, 0 = first byte of type/length field) or the payload + * following an IP header (see IPDATA). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicate that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field found within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represent the byte at + * the given offset and MASK_VAL2[7:0] represent the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields. For example, setting a compare + * value of 0x0800 and offset 0 matches IP frames. No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use the MASK_VAL2[7:0] bits as a 2nd compare value. + * When set, the parser reports a match if the byte at given + * offset matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER3_b; + }; + + union + { + __IOM uint32_t GARITH0; /*!< (@ 0x000000D0) Snoop Configuration for Arithmetic [n + 1]th + * Stage of 1st Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH0_b; + }; + + union + { + __IOM uint32_t GARITH1; /*!< (@ 0x000000D4) Snoop Configuration for Arithmetic [n + 1]th + * Stage of 1st Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH1_b; + }; + + union + { + __IOM uint32_t GARITH2; /*!< (@ 0x000000D8) Snoop Configuration for Arithmetic [n + 1]th + * Stage of 1st Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH2_b; + }; + + union + { + __IOM uint32_t GARITH3; /*!< (@ 0x000000DC) Snoop Configuration for Arithmetic [n + 1]th + * Stage of 1st Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH3_b; + }; + + union + { + __IOM uint32_t GPARSER4; /*!< (@ 0x000000E0) [n - 3]th Parser of 2nd Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask are compared with the data in the frame. All + * bits having a 0 will be 0 for the compare, however this + * requires the compare value to have those bits also set + * to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes to locate the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type or length field of the frame, for + * example 0 = first byte of type/length field) or the payload + * following an IP header (see bit 26). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicates that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field located within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. If the bit is set, but the frame is not + * an IPv4/v6 frame the parser reports a no match and does + * not continue to inspect the frame. When cleared, the offset + * is used normally on all frames. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represents the byte + * at the given offset and MASK_VAL2[7:0] represents the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields, (for example setting a compare + * value of 0x0800 and offset 0 matches IP frames). No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use MASK_VAL2[7:0] as a second compare value. When + * set, the parser reports a match if the byte at given offset + * matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER4_b; + }; + + union + { + __IOM uint32_t GPARSER5; /*!< (@ 0x000000E4) [n - 3]th Parser of 2nd Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask are compared with the data in the frame. All + * bits having a 0 will be 0 for the compare, however this + * requires the compare value to have those bits also set + * to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes to locate the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type or length field of the frame, for + * example 0 = first byte of type/length field) or the payload + * following an IP header (see bit 26). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicates that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field located within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. If the bit is set, but the frame is not + * an IPv4/v6 frame the parser reports a no match and does + * not continue to inspect the frame. When cleared, the offset + * is used normally on all frames. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represents the byte + * at the given offset and MASK_VAL2[7:0] represents the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields, (for example setting a compare + * value of 0x0800 and offset 0 matches IP frames). No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use MASK_VAL2[7:0] as a second compare value. When + * set, the parser reports a match if the byte at given offset + * matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER5_b; + }; + + union + { + __IOM uint32_t GPARSER6; /*!< (@ 0x000000E8) [n - 3]th Parser of 2nd Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask are compared with the data in the frame. All + * bits having a 0 will be 0 for the compare, however this + * requires the compare value to have those bits also set + * to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes to locate the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type or length field of the frame, for + * example 0 = first byte of type/length field) or the payload + * following an IP header (see bit 26). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicates that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field located within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. If the bit is set, but the frame is not + * an IPv4/v6 frame the parser reports a no match and does + * not continue to inspect the frame. When cleared, the offset + * is used normally on all frames. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represents the byte + * at the given offset and MASK_VAL2[7:0] represents the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields, (for example setting a compare + * value of 0x0800 and offset 0 matches IP frames). No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use MASK_VAL2[7:0] as a second compare value. When + * set, the parser reports a match if the byte at given offset + * matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER6_b; + }; + + union + { + __IOM uint32_t GPARSER7; /*!< (@ 0x000000EC) [n - 3]th Parser of 2nd Block */ + + struct + { + __IOM uint32_t MASK_VAL2 : 8; /*!< [7..0] Mask for single byte compares or 2nd compare value (if + * bit 30 = 1) or least significant bits of a 16-bit compare + * value (if bit 28 = 1). When used as a mask (bit 28, 30 + * = 0, 0), the data from the frame is ANDed with this mask, + * then compared to the compare value. All bits having a 1 + * in the mask are compared with the data in the frame. All + * bits having a 0 will be 0 for the compare, however this + * requires the compare value to have those bits also set + * to 0. */ + __IOM uint32_t COMPARE_VAL : 8; /*!< [15..8] The value to compare the frame data with at the given + * offset. */ + __IOM uint32_t OFFSET : 6; /*!< [21..16] An offset in bytes to locate the data for comparison + * within the frame. The offset value starts at 0 to indicate + * the very first byte after offset start. The offset start + * can be either the type or length field of the frame, for + * example 0 = first byte of type/length field) or the payload + * following an IP header (see bit 26). Valid values range + * from 0 to 60. */ + uint32_t : 1; + __IOM uint32_t OFFSET_DA : 1; /*!< [23..23] When set, the offset starts counting from the first + * byte of the MAC destination address. */ + __IOM uint32_t VALID : 1; /*!< [24..24] Indicates that this entry is valid (when this bit is + * 1) and should be used. When this bit is 0, the parser result + * always indicates "no match" and none of the other bits + * are relevant. */ + __IOM uint32_t SKIPVLAN : 1; /*!< [25..25] When set, any optional VLAN tags found in the frame + * are skipped and the parser starts operating at the first + * byte following any VLAN tags. When cleared, the parser + * starts with the first byte following the source MAC address. */ + __IOM uint32_t IPDATA : 1; /*!< [26..26] When set, the offset starts with the first byte following + * an IP header if an IP frame is processed. The following + * fields are skipped: */ + __IOM uint32_t IPPROTOCOL : 1; /*!< [27..27] When set, the compare value is compared with the protocol + * field located within the IP header for both IPv4 and IPv6 + * frames. It implicitly acts as SKIPVLAN = 1 skipping any + * VLAN tags if present. The offset setting has no meaning + * and is ignored. If the bit is set, but the frame is not + * an IPv4/v6 frame the parser reports a no match and does + * not continue to inspect the frame. When cleared, the offset + * is used normally on all frames. */ + __IOM uint32_t CMP16 : 1; /*!< [28..28] When set, MASK_VAL2[7:0] is used as a value to perform + * a 16-bit compare. COMPARE_VAL[7:0] represents the byte + * at the given offset and MASK_VAL2[7:0] represents the byte + * following at offset + 1 which matches the network byte + * order for 16-bit fields, (for example setting a compare + * value of 0x0800 and offset 0 matches IP frames). No mask + * is available in this mode. */ + __IOM uint32_t OFFSET_PLUS2 : 1; /*!< [29..29] Repeats the comparison at offset + 2, if the comparison + * at offset failed. */ + __IOM uint32_t CMP_MASK_OR : 1; /*!< [30..30] Use MASK_VAL2[7:0] as a second compare value. When + * set, the parser reports a match if the byte at given offset + * matches COMPARE_VAL[7:0] or MASK_VAL2[7:0]. */ + uint32_t : 1; + } GPARSER7_b; + }; + + union + { + __IOM uint32_t GARITH4; /*!< (@ 0x000000F0) Snoop Configuration for Arithmetic [n - 3]th + * Stage of 2nd Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH4_b; + }; + + union + { + __IOM uint32_t GARITH5; /*!< (@ 0x000000F4) Snoop Configuration for Arithmetic [n - 3]th + * Stage of 2nd Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH5_b; + }; + + union + { + __IOM uint32_t GARITH6; /*!< (@ 0x000000F8) Snoop Configuration for Arithmetic [n - 3]th + * Stage of 2nd Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH6_b; + }; + + union + { + __IOM uint32_t GARITH7; /*!< (@ 0x000000FC) Snoop Configuration for Arithmetic [n - 3]th + * Stage of 2nd Block */ + + struct + { + __IOM uint32_t NOT_INP : 4; /*!< [3..0] Not Input */ + uint32_t : 4; + __IOM uint32_t SEL_MATCH : 4; /*!< [11..8] Select Match */ + __IOM uint32_t SEL_ARITH0 : 1; /*!< [12..12] Select Arithmetic Stage 0 */ + __IOM uint32_t SEL_ARITH1 : 1; /*!< [13..13] Select Arithmetic Stage 1 */ + __IOM uint32_t SEL_ARITH2 : 1; /*!< [14..14] Select Arithmetic Stage 2 */ + uint32_t : 1; + __IOM uint32_t OP : 1; /*!< [16..16] Operation */ + __IOM uint32_t RESULT_INV : 1; /*!< [17..17] Result Invert */ + uint32_t : 2; + __IOM uint32_t SNP_MD : 2; /*!< [21..20] Snoop Mode */ + uint32_t : 10; + } GARITH7_b; + }; + + union + { + __IOM uint32_t VLAN_PRIORITY[4]; /*!< (@ 0x00000100) VLAN Priority Register [0..3] */ + + struct + { + __IOM uint32_t PRIORITY0 : 3; /*!< [2..0] Priority 0 Setting */ + __IOM uint32_t PRIORITY1 : 3; /*!< [5..3] Priority 1 Setting */ + __IOM uint32_t PRIORITY2 : 3; /*!< [8..6] Priority 2 Setting */ + __IOM uint32_t PRIORITY3 : 3; /*!< [11..9] Priority 3 Setting */ + __IOM uint32_t PRIORITY4 : 3; /*!< [14..12] Priority 4 Setting */ + __IOM uint32_t PRIORITY5 : 3; /*!< [17..15] Priority 5 Setting */ + __IOM uint32_t PRIORITY6 : 3; /*!< [20..18] Priority 6 Setting */ + __IOM uint32_t PRIORITY7 : 3; /*!< [23..21] Priority 7 Setting */ + uint32_t : 8; + } VLAN_PRIORITY_b[4]; + }; + __IM uint32_t RESERVED3[12]; + + union + { + __IOM uint32_t IP_PRIORITY[4]; /*!< (@ 0x00000140) IP Priority Register [0..3] */ + + struct + { + __IOM uint32_t ADDRESS : 8; /*!< [7..0] COS Table Address Specifying */ + __IOM uint32_t IPV6SELECT : 1; /*!< [8..8] IPv6 COS Table Selection */ + __IOM uint32_t PRIORITY : 3; /*!< [11..9] COS Table Priority */ + uint32_t : 19; + __IOM uint32_t READ : 1; /*!< [31..31] COS Table Operation Switching */ + } IP_PRIORITY_b[4]; + }; + __IM uint32_t RESERVED4[12]; + + union + { + __IOM uint32_t PRIORITY_CFG[4]; /*!< (@ 0x00000180) Priority Configuration Register [0..3] */ + + struct + { + __IOM uint32_t VLANEN : 1; /*!< [0..0] VLAN Priority Enable */ + __IOM uint32_t IPEN : 1; /*!< [1..1] IP Priority Enable */ + __IOM uint32_t MACEN : 1; /*!< [2..2] MAC Based Priority Enable */ + __IOM uint32_t TYPE_EN : 1; /*!< [3..3] TYPE Based Priority Enable */ + __IOM uint32_t DEFAULTPRI : 3; /*!< [6..4] Default Priority Enable Setting */ + __IOM uint32_t PCP_REMAP_DIS : 1; /*!< [7..7] Disables PCP remapping when set to 1. */ + __IOM uint32_t PCP_REMAP : 24; /*!< [31..8] PCP Remapping function */ + } PRIORITY_CFG_b[4]; + }; + __IM uint32_t RESERVED5[10]; + + union + { + __IOM uint32_t PRIORITY_TYPE1; /*!< (@ 0x000001B8) Priority Type Register 1 */ + + struct + { + __IOM uint32_t TYPEVAL : 16; /*!< [15..0] Type Priority */ + __IOM uint32_t VALID : 1; /*!< [16..16] If set indicates, this register contains valid data. */ + __IOM uint32_t PRIORITY : 3; /*!< [19..17] The priority value to use if a match occurs. */ + uint32_t : 12; + } PRIORITY_TYPE1_b; + }; + + union + { + __IOM uint32_t PRIORITY_TYPE2; /*!< (@ 0x000001BC) Priority Type Register 2 */ + + struct + { + __IOM uint32_t TYPEVAL : 16; /*!< [15..0] Type Priority */ + __IOM uint32_t VALID : 1; /*!< [16..16] If set indicates, this register contains valid data. */ + __IOM uint32_t PRIORITY : 3; /*!< [19..17] The priority value to use if a match occurs. */ + uint32_t : 12; + } PRIORITY_TYPE2_b; + }; + __IOM R_ETHSW_MGMT_ADDR_Type MGMT_ADDR[4]; /*!< (@ 0x000001C0) MAC Address [0..3] for Bridge Protocol Frame + * Register */ + + union + { + __IOM uint32_t SRCFLT_ENA; /*!< (@ 0x000001E0) MAC Source Address Filtering Enable Register */ + + struct + { + __IOM uint32_t SRCENA : 3; /*!< [2..0] Per-Source Port Enable */ + uint32_t : 13; + __IOM uint32_t DSTENA : 4; /*!< [19..16] Per-Destination Port Enable */ + uint32_t : 12; + } SRCFLT_ENA_b; + }; + + union + { + __IOM uint32_t SRCFLT_CONTROL; /*!< (@ 0x000001E4) MAC Source Address Filtering Control Register */ + + struct + { + __IOM uint32_t MGMT_FWD : 1; /*!< [0..0] Management Forward Enable */ + __IOM uint32_t WATCHDOG_ENA : 1; /*!< [1..1] When set to 1, a watchdog is enabled. */ + uint32_t : 14; + __IOM uint32_t WATCHDOG_TIME : 16; /*!< [31..16] Defines the watchdog expire time in milliseconds. The + * default is 2000 milliseconds. */ + } SRCFLT_CONTROL_b; + }; + + union + { + __IOM uint32_t SRCFLT_MACADDR_LO; /*!< (@ 0x000001E8) Lower MAC Filtering Address Register */ + + struct + { + __IOM uint32_t SRCFLT_MACADDR : 32; /*!< [31..0] MAC address to use in source filtering */ + } SRCFLT_MACADDR_LO_b; + }; + + union + { + __IOM uint32_t SRCFLT_MACADDR_HI; /*!< (@ 0x000001EC) Higher MAC Filtering Address Register */ + + struct + { + __IOM uint32_t SRCFLT_MACADDR : 16; /*!< [15..0] MAC address to use in source filtering */ + __IOM uint32_t MASK : 16; /*!< [31..16] The mask to apply to the last 16 bits of the MAC address */ + } SRCFLT_MACADDR_HI_b; + }; + __IM uint32_t RESERVED6[3]; + + union + { + __IOM uint32_t PHY_FILTER_CFG; /*!< (@ 0x000001FC) Debounce Filter Configuration Register */ + + struct + { + __IOM uint32_t FILTER_DURATION : 9; /*!< [8..0] This is the amount of time to wait after the last phy_link + * (ETHSW_PHYLINKn: n = port) transition from 0 to 1 to acknowledge + * the link-up condition. */ + uint32_t : 7; + __IOM uint32_t FLT_EN : 3; /*!< [18..16] Per-port Enable Mask */ + uint32_t : 13; + } PHY_FILTER_CFG_b; + }; + + union + { + __IOM uint32_t SYSTEM_TAGINFO[4]; /*!< (@ 0x00000200) One VLAN ID Field [0..3] for VLAN Input Manipulation */ + + struct + { + __IOM uint32_t SYSVLANINFO : 16; /*!< [15..0] System VLAN Info (prio/cfi/vid) for Port n */ + uint32_t : 16; + } SYSTEM_TAGINFO_b[4]; + }; + __IM uint32_t RESERVED7[12]; + + union + { + __IOM uint32_t AUTH_PORT[4]; /*!< (@ 0x00000240) Port [0..3] Authentication Control and Configuration */ + + struct + { + __IOM uint32_t AUTH : 1; /*!< [0..0] Authorized */ + __IOM uint32_t CTRL_BOTH : 1; /*!< [1..1] Controlled Both */ + __IOM uint32_t EAPOL_EN : 1; /*!< [2..2] EAPOL Enable */ + __IOM uint32_t GUEST_EN : 1; /*!< [3..3] Guest Enable */ + __IOM uint32_t BPDU_EN : 1; /*!< [4..4] BPDU Enable */ + __IOM uint32_t EAPOL_UC_EN : 1; /*!< [5..5] EAPOL Unicast Enable */ + uint32_t : 5; + __IOM uint32_t ACHG_UNAUTH : 1; /*!< [11..11] Automatic Port Change to Unauthorized */ + __IOM uint32_t EAPOL_PNUM : 4; /*!< [15..12] EAPOL Port Number */ + __IOM uint32_t GUEST_MASK : 4; /*!< [19..16] Destination port mask with all ports that are allowed + * to receive non-EAPOL frames from this port while it is + * unauthorized and guest (GUEST_EN) is enabled. */ + uint32_t : 12; + } AUTH_PORT_b[4]; + }; + __IM uint32_t RESERVED8[12]; + + union + { + __IOM uint32_t VLAN_RES_TABLE[32]; /*!< (@ 0x00000280) 32 VLAN Domain Entries */ + + struct + { + __IOM uint32_t PORTMASK : 4; /*!< [3..0] When this bit is set to 1, it defines a port as a member + * of the VLAN. When bit [28] or bit [29] is set, the tagged + * bit mask is read/written instead of port mask. */ + __IOM uint32_t VLANID : 12; /*!< [15..4] The 12-bit VLAN identifier (VLAN ID) of the entry. */ + uint32_t : 12; + __IOM uint32_t RD_TAGMSK : 1; /*!< [28..28] Read TAG Mask */ + __IOM uint32_t WT_TAGMSK : 1; /*!< [29..29] Write TAG Mask */ + __IOM uint32_t WT_PRTMSK : 1; /*!< [30..30] Write Port Mask */ + uint32_t : 1; + } VLAN_RES_TABLE_b[32]; + }; + + union + { + __IM uint32_t TOTAL_DISC; /*!< (@ 0x00000300) Discarded Frame Total Number Register */ + + struct + { + __IM uint32_t TOTAL_DISC : 32; /*!< [31..0] Total number of incoming frames accepted by MAC RX but + * discarded in the switch */ + } TOTAL_DISC_b; + }; + + union + { + __IM uint32_t TOTAL_BYT_DISC; /*!< (@ 0x00000304) Discarded Frame Total Bytes Register */ + + struct + { + __IM uint32_t TOTAL_BYT_DISC : 32; /*!< [31..0] Sum of bytes of frames counted in TOTAL_DISC */ + } TOTAL_BYT_DISC_b; + }; + + union + { + __IM uint32_t TOTAL_FRM; /*!< (@ 0x00000308) Processed Frame Total Number Register */ + + struct + { + __IM uint32_t TOTAL_FRM : 32; /*!< [31..0] Total number of incoming frames processed by the switch */ + } TOTAL_FRM_b; + }; + + union + { + __IM uint32_t TOTAL_BYT_FRM; /*!< (@ 0x0000030C) Processed Frame Total Bytes Register */ + + struct + { + __IM uint32_t TOTAL_BYT_FRM : 32; /*!< [31..0] Sum of bytes of frames counted in TOTAL_FRM */ + } TOTAL_BYT_FRM_b; + }; + __IM uint32_t RESERVED9[12]; + + union + { + __IOM uint32_t IALK_CONTROL; /*!< (@ 0x00000340) IA Lookup Function Enable Register */ + + struct + { + __IOM uint32_t IA_LKUP_ENA : 4; /*!< [3..0] Per-port Enable to the IA Lookup Table */ + uint32_t : 12; + __IOM uint32_t CT_ENA : 4; /*!< [19..16] Per-port Cut-Through Mode Enable */ + uint32_t : 12; + } IALK_CONTROL_b; + }; + + union + { + __IOM uint32_t IALK_OUI; /*!< (@ 0x00000344) IA Frames MAC Address OUI Register */ + + struct + { + __IOM uint32_t IALK_OUI : 24; /*!< [23..0] IA Frames MAC Address OUI */ + uint32_t : 8; + } IALK_OUI_b; + }; + + union + { + __IOM uint32_t IALK_ID_MIN; /*!< (@ 0x00000348) Minimum Value ID MAC Address Register */ + + struct + { + __IOM uint32_t IALK_ID_MIN : 24; /*!< [23..0] Minimum value for the 24-bit ID in the MAC address */ + uint32_t : 8; + } IALK_ID_MIN_b; + }; + + union + { + __IOM uint32_t IALK_ID_MAX; /*!< (@ 0x0000034C) Maximum Value ID MAC Address Register */ + + struct + { + __IOM uint32_t IALK_ID_MAX : 24; /*!< [23..0] Maximum value for the 24-bit ID in the MAC address */ + uint32_t : 8; + } IALK_ID_MAX_b; + }; + + union + { + __IOM uint32_t IALK_ID_SUB; /*!< (@ 0x00000350) Offset Value ID MAC Address Register */ + + struct + { + __IOM uint32_t IALK_ID_SUB : 24; /*!< [23..0] Offset value to subtract from the 24-bit ID in the MAC + * address */ + uint32_t : 8; + } IALK_ID_SUB_b; + }; + + union + { + __IOM uint32_t IALK_ID_CONFIG; /*!< (@ 0x00000354) Configures Lookup Response Unknown IDs Register */ + + struct + { + __IOM uint32_t INVLD_ID_FLOOD : 1; /*!< [0..0] Setting this bit to 1 causes the IA table to return a + * found response for frames whose ID lies outside the ID + * range defined by [IA_LK_MAX:IA_LK_MIN] using INVLD_ID_FLOOD_MASK[3:0] + * bits. */ + __IOM uint32_t INVLD_ID_LRN_ENA : 1; /*!< [1..1] Setting this bit to 1 allows automatic learning into + * the L2 FDB for frames with unknown IDs. When 0, learning + * is inhibited. This bit is only valid when INVLD_ID_FLOOD + * bit is set to 1. */ + uint32_t : 2; + __IOM uint32_t INVLD_ID_PRIO : 3; /*!< [6..4] Priority to use for found responses of an invalid ID. + * This bit is only valid when INVLD_ID_FLOOD bit is set to + * 1. */ + __IOM uint32_t INVLD_ID_PRIO_VLD : 1; /*!< [7..7] Indicates if the priority in INVLD_ID_PRIO is valid. + * This bit is valid only when INVLD_ID_FLOOD bit is set to + * 1. */ + uint32_t : 8; + __IOM uint32_t INVLD_ID_FLOOD_MASK : 4; /*!< [19..16] Forwarding mask used for frames whose ID is invalid. + * This bit is only valid when INVLD_ID_FLOOD bit is set to + * 1. Setting this mask to 0 causes the frame to be dropped. */ + uint32_t : 12; + } IALK_ID_CONFIG_b; + }; + + union + { + __IOM uint32_t IALK_VLAN_CONFIG; /*!< (@ 0x00000358) Configure Lookup Response Unknown VLAN Register */ + + struct + { + __IOM uint32_t UNKWN_VLAN_FLOOD : 1; /*!< [0..0] When this bit is set to 1, a frame matching the OUI and + * with a valid ID but having a VLAN ID not matching any of + * the enabled values in IALK_VLANIDn causes the IA table + * to return a found response using the forwarding mask in + * UNKWN_VLAN_FLOOD_MASK[3:0]. */ + __IOM uint32_t UNKWN_VLAN_LRN_ENA : 1; /*!< [1..1] Setting this bit to 1 allows automatic learning into + * the L2 FDB for frames with unknown VLANs. When 0, learning + * is inhibited. This bit is only valid when UNKWN_VLAN_FLOOD + * bit is set to 1. */ + uint32_t : 2; + __IOM uint32_t UNKWN_VLAN_PRIO : 3; /*!< [6..4] Priority to use for found responses for an unknown VLAN. + * This bit is only valid when UNKWN_VLAN_FLOOD bit is set + * to 1. */ + __IOM uint32_t UNKWN_VLAN_PRIO_VLD : 1; /*!< [7..7] Indicates if the priority in UNKWN_VLAN_PRIO[2:0] is + * valid. This bit is only valid when UNKWN_VLAN_FLOOD bit + * is set to 1. */ + __IOM uint32_t VLANS_ENABLED : 3; /*!< [10..8] Configures the logical geometry of the IA table by specifying + * the number of distinct VLAN IDs enabled. When set to 0, + * no VLANs are supported and the VLAN ID for the frames is + * ignored. */ + uint32_t : 5; + __IOM uint32_t UNKWN_VLAN_FLOOD_MASK : 4; /*!< [19..16] Forwarding mask used for frames with an unknown VLAN + * ID. */ + uint32_t : 12; + } IALK_VLAN_CONFIG_b; + }; + + union + { + __IOM uint32_t IALK_TBL_ADDR; /*!< (@ 0x0000035C) IA Lookup Database Address Register */ + + struct + { + __IOM uint32_t ADDR : 13; /*!< [12..0] Defines the address to write to or read from the IA + * Lookup table */ + uint32_t : 15; + __IOM uint32_t AINC : 4; /*!< [31..28] Auto-Increment Control */ + } IALK_TBL_ADDR_b; + }; + + union + { + __IOM uint32_t IALK_TBL_DATA; /*!< (@ 0x00000360) IA Lookup Database Data Register */ + + struct + { + __IOM uint32_t VALID : 1; /*!< [0..0] Indicates whether the entry indicated by ADDR is valid + * or not. */ + __IOM uint32_t FWD_MASK : 4; /*!< [4..1] Forwarding mask used for lookups that hit the entry and + * when VALID is set to 1. */ + uint32_t : 27; + } IALK_TBL_DATA_b; + }; + __IM uint32_t RESERVED10[7]; + + union + { + __IOM uint32_t IALK_VLANID[4]; /*!< (@ 0x00000380) IA Lookup VLANIDn Register */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] Configure the VLAN ID to be used for VLAN n (n: IALK_VLAN_CONFIG.VLANS + * ENABLED). This bit is only valid when VLANID_ENA bit is + * set to 1. A value of 0 matches any VLAN ID. */ + __IOM uint32_t VLANID_ENA : 1; /*!< [12..12] Enables this VLAN ID. When set to 1, the VLAN ID of + * the frame is compared against VLANID[11:0]. */ + __IOM uint32_t VLANID_LRN_ENA : 1; /*!< [13..13] Configures whether automatic learning in the L2 FDB + * is allowed for frames matching VLAN ID. This also includes + * frames that match the VLAN ID and that the entry in the + * IA table is invalid. */ + uint32_t : 2; + __IOM uint32_t VLANID_FLOOD_MASK : 4; /*!< [19..16] Flooding mask to be used for frames matching this VLAN + * ID but with an invalid entry in the IA table. */ + uint32_t : 8; + __IOM uint32_t VLANID_PRIO : 3; /*!< [30..28] Priority to use for found responses. */ + __IOM uint32_t VLANID_PRIO_VLD : 1; /*!< [31..31] Indicates if the priority in VLANID_PRIO[2:0] is valid. */ + } IALK_VLANID_b[4]; + }; + __IM uint32_t RESERVED11[12]; + + union + { + __IM uint32_t IMC_QLEVEL_P[4]; /*!< (@ 0x000003C0) Port [0..3] Queued Frame Count Register */ + + struct + { + __IM uint32_t QUEUE0 : 4; /*!< [3..0] A 4-bit value per queue indicating the number of frames + * stored in queue 0 */ + __IM uint32_t QUEUE1 : 4; /*!< [7..4] A 4-bit value per queue indicating the number of frames + * stored in queue 1 */ + __IM uint32_t QUEUE2 : 4; /*!< [11..8] A 4-bit value per queue indicating the number of frames + * stored in queue 2 */ + __IM uint32_t QUEUE3 : 4; /*!< [15..12] A 4-bit value per queue indicating the number of frames + * stored in queue 3 */ + __IM uint32_t QUEUE4 : 4; /*!< [19..16] A 4-bit value per queue indicating the number of frames + * stored in queue 4 */ + __IM uint32_t QUEUE5 : 4; /*!< [23..20] A 4-bit value per queue indicating the number of frames + * stored in queue 5 */ + __IM uint32_t QUEUE6 : 4; /*!< [27..24] A 4-bit value per queue indicating the number of frames + * stored in queue 6 */ + __IM uint32_t QUEUE7 : 4; /*!< [31..28] A 4-bit value per queue indicating the number of frames + * stored in queue 7 */ + } IMC_QLEVEL_P_b[4]; + }; + __IM uint32_t RESERVED12[12]; + + union + { + __IOM uint32_t LK_CTRL; /*!< (@ 0x00000400) Learning/Lookup Function Global Configuration + * Register */ + + struct + { + __IOM uint32_t LKUP_EN : 1; /*!< [0..0] Lookup Controller Enable */ + __IOM uint32_t LEARN_EN : 1; /*!< [1..1] Learning Enable */ + __IOM uint32_t AGING_EN : 1; /*!< [2..2] Aging Enable */ + __IOM uint32_t ALW_MGRT : 1; /*!< [3..3] Allow Migration */ + __IOM uint32_t DISC_UNK_DEST : 1; /*!< [4..4] Discard Unknown Destination */ + uint32_t : 1; + __IOM uint32_t CLRTBL : 1; /*!< [6..6] Clear Table */ + __IOM uint32_t IND_VLAN : 1; /*!< [7..7] Enable Independent VLAN Learning */ + uint32_t : 8; + __IOM uint32_t DISC_UNK_SRC : 4; /*!< [19..16] Discard Unknown Source */ + uint32_t : 12; + } LK_CTRL_b; + }; + + union + { + __IOM uint32_t LK_STATUS; /*!< (@ 0x00000404) Status Bits and Table Overflow Counter Register */ + + struct + { + __IM uint32_t AGEADDR : 16; /*!< [15..0] Address the aging process will inspect when the aging + * timer expires next time. */ + __IOM uint32_t OVRF : 14; /*!< [29..16] Counts number of table overflows that occurred (a new + * address was learned but the table had no storage and an + * older entry was deleted). The counter is cleared by writing + * into the register and having bit 16 set to 1. */ + uint32_t : 1; + __IOM uint32_t LRNEVNT : 1; /*!< [31..31] Learn Event */ + } LK_STATUS_b; + }; + + union + { + __IOM uint32_t LK_ADDR_CTRL; /*!< (@ 0x00000408) Address Table Transaction Control and Read/Write + * Address */ + + struct + { + __IOM uint32_t ADDR_MSK : 12; /*!< [11..0] Memory address for read and write transactions. This + * is the address of a 69-bit entry. For the DEL_PORT bit, + * a port mask can be provided in these bits instead of the + * address. Bit 0 represents port 0, bit 1 port 1, and so + * on. */ + uint32_t : 10; + __IOM uint32_t CLR_DYNAMIC : 1; /*!< [22..22] When set to 1, scans the complete table for valid dynamic + * entries and deletes them (writes entry with all 0s). This + * bit is cleared when the function has completed. */ + __IOM uint32_t CLR_STATIC : 1; /*!< [23..23] When set to 1, scans the complete table for valid static + * entries and deletes them (writes entry with all 0s). This + * bit is cleared when the function has completed. */ + __IOM uint32_t GETLASTNEW : 1; /*!< [24..24] When set to 1, retrieves the last source address that + * was not found in the table and places it into LK_DATA_LO/HI/HI2. + * The valid bit of the entry (bit LK_DATA_HI[16]) indicates + * if the address is new (when valid bit is 1) or not (when + * valid bit is 0) since the command was last issued. */ + __IOM uint32_t WRITE : 1; /*!< [25..25] When set to 1, perform a single write transaction. */ + __IOM uint32_t READ : 1; /*!< [26..26] When set to 1, perform a single read transaction. */ + __IOM uint32_t WAIT_COMP : 1; /*!< [27..27] When set to 1, instructs to stall the processor bus + * until the transaction is completed. This allows performing + * of consecutive writes into this register with varying commands + * without the need for polling the BUSY bit. */ + __IM uint32_t LOOKUP : 1; /*!< [28..28] When set to 1, perform a lookup of the MAC address + * given in LK_DATA_LO/HI/HI2. */ + __IOM uint32_t CLEAR : 1; /*!< [29..29] When set to 1, writes all 0s to the entry selected + * by the given address set in ADDR_MSK[11:0]. If this bit + * is set together with the LOOKUP bit, first a lookup is + * performed and if the lookup succeeds, the entry is then + * deleted. The registers LK_DATA_LO/HI/HI2 are also cleared. + * The memory address in this register is set from the lookup + * result. If the lookup failed, the clear command is ignored + * and memory address is arbitrary. */ + __IOM uint32_t DEL_PORT : 1; /*!< [30..30] When set to 1, scans the complete table for valid dynamic + * entries that contain the given ports in their destination + * port mask and deletes the ports or the complete entry. + * The port mask is provided in the ADDR_MSK[3:0] when writing + * this register (1 bit per port, bit 0 = port 0, bit 1 = + * port 1, and so on). */ + __IM uint32_t BUSY : 1; /*!< [31..31] Transaction Busy Indication */ + } LK_ADDR_CTRL_b; + }; + + union + { + __IOM uint32_t LK_DATA_LO; /*!< (@ 0x0000040C) Lower 32-Bit Data of Lookup Memory Entry */ + + struct + { + __IOM uint32_t MEMDATA : 32; /*!< [31..0] Memory Data [31:0] */ + } LK_DATA_LO_b; + }; + + union + { + __IOM uint32_t LK_DATA_HI; /*!< (@ 0x00000410) Higher 25-Bit Data of Lookup Memory Entry */ + + struct + { + __IOM uint32_t MEMDATA : 25; /*!< [24..0] Memory Data [56:32] */ + uint32_t : 7; + } LK_DATA_HI_b; + }; + + union + { + __IOM uint32_t LK_DATA_HI2; /*!< (@ 0x00000414) Higher2 12-Bit Data of Lookup Memory Entry */ + + struct + { + uint32_t : 8; + __IOM uint32_t MEMDATA : 12; /*!< [19..8] Memory Data [68:57] */ + uint32_t : 12; + } LK_DATA_HI2_b; + }; + + union + { + __IOM uint32_t LK_LEARNCOUNT; /*!< (@ 0x00000418) Learned Address Count Register */ + + struct + { + __IOM uint32_t LEARNCOUNT : 13; /*!< [12..0] Number of Learned Addresses */ + uint32_t : 17; + __IOM uint32_t WRITE_MD : 2; /*!< [31..30] These bits define how the LEARNCOUNT value is modified + * when writing into the register: */ + } LK_LEARNCOUNT_b; + }; + + union + { + __IOM uint32_t LK_AGETIME; /*!< (@ 0x0000041C) Period of the Aging Timer */ + + struct + { + __IOM uint32_t AGETIME : 24; /*!< [23..0] 24-bit Timer Value */ + uint32_t : 8; + } LK_AGETIME_b; + }; + __IM uint32_t RESERVED13[24]; + + union + { + __IOM uint32_t MGMT_TAG_CONFIG; /*!< (@ 0x00000480) Management Tag Configuration Register */ + + struct + { + __IOM uint32_t ENABLE : 1; /*!< [0..0] Enable Management Tag Insertion Module */ + __IOM uint32_t AL_FRAMES : 1; /*!< [1..1] Enable Tag Insertion for All Frames */ + uint32_t : 2; + __IOM uint32_t TYPE1_EN : 1; /*!< [4..4] When set, frames with a Type field that match the value + * in PRIORITY_TYPE1.TYPEVAL[15:0] have management tag inserted. + * This is in addition to BPDU frames which always have tag + * inserted. */ + __IOM uint32_t TYPE2_EN : 1; /*!< [5..5] When set, frames with a Type field that match the value + * in PRIORITY_TYPE2.TYPEVAL[15:0] have management tag inserted. + * This is in addition to BPDU frames which always have tag + * inserted. */ + uint32_t : 10; + __IOM uint32_t TAGFIELD : 16; /*!< [31..16] The value of the tag that is found in the first Type/Length + * field of the frame to identify that the control information + * is present within a frame. For example, [31:24] = first + * octet, [23:16] = 2nd octet. */ + } MGMT_TAG_CONFIG_b; + }; + __IM uint32_t RESERVED14[32]; + + union + { + __IOM uint32_t TSM_CONFIG; /*!< (@ 0x00000504) Timestamping Control Module Configuration Register */ + + struct + { + __IOM uint32_t IRQ_EN : 1; /*!< [0..0] Final Interrupt enable */ + __IOM uint32_t IRQ_TEST : 1; /*!< [1..1] Software controlled interrupt for testing purposes */ + __IOM uint32_t IRQ_TSFIFO_OVR : 1; /*!< [2..2] Trigger interrupt enable for Transmit Timestamp Capture + * Overflow event */ + uint32_t : 1; + __IOM uint32_t IRQ_EVT_OFFSET : 2; /*!< [5..4] Per-timer Trigger interrupt enable for the timer offset + * event */ + uint32_t : 2; + __IOM uint32_t IRQ_EVT_PERIOD : 2; /*!< [9..8] Per-timer Trigger interrupt enable for the timer periodical + * event */ + uint32_t : 2; + __IOM uint32_t IRQ_ATIME_OVER : 2; /*!< [13..12] Per-timer Trigger interrupt enable for the timer wrap + * (reached its maximum) */ + uint32_t : 2; + __IOM uint32_t IRQ_TX_EN : 4; /*!< [19..16] Per Port Transmit Timestamp Capture Interrupt Enable */ + uint32_t : 12; + } TSM_CONFIG_b; + }; + + union + { + __IOM uint32_t TSM_IRQ_STAT_ACK; /*!< (@ 0x00000508) Interrupt Status/Acknowledge Register */ + + struct + { + __IM uint32_t IRQ_STAT : 1; /*!< [0..0] Interrupt Pending Status */ + __IOM uint32_t IRQ_TEST : 1; /*!< [1..1] Test Interrupt Pending Status */ + __IM uint32_t IRQ_TSFIFO_OVR : 1; /*!< [2..2] Transmit Timestamp Capture Overflow Interrupt Pending + * Status */ + uint32_t : 1; + __IOM uint32_t IRQ_EVT_OFFSET : 2; /*!< [5..4] Per-timer Offset Interrupt Pending Status */ + uint32_t : 2; + __IOM uint32_t IRQ_EVT_PERIOD : 2; /*!< [9..8] Per-timer Periodical Interrupt Pending Status */ + uint32_t : 2; + __IOM uint32_t IRQ_ATIME_OVER : 2; /*!< [13..12] Per-timer Overflow Interrupt Pending Status */ + uint32_t : 2; + __IOM uint32_t IRQ_TX : 4; /*!< [19..16] Per Port Transmit Timestamp Capture Interrupt */ + uint32_t : 12; + } TSM_IRQ_STAT_ACK_b; + }; + + union + { + __IOM uint32_t PTP_DOMAIN; /*!< (@ 0x0000050C) Domain Number of PTP Frame */ + + struct + { + __IOM uint32_t DOMAIN0 : 8; /*!< [7..0] DomainNumber to Match Against for Timer 0 */ + __IOM uint32_t DOMAIN1 : 8; /*!< [15..8] DomainNumber to Match Against for Timer 1 */ + uint32_t : 16; + } PTP_DOMAIN_b; + }; + __IM uint32_t RESERVED15[12]; + + union + { + __IOM uint32_t PEERDELAY_P0_T0; /*!< (@ 0x00000540) Port 0 Peer Delay Value for Timer 0 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 0 */ + uint32_t : 2; + } PEERDELAY_P0_T0_b; + }; + + union + { + __IOM uint32_t PEERDELAY_P0_T1; /*!< (@ 0x00000544) Port 0 Peer Delay Value for Timer 1 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 1 */ + uint32_t : 2; + } PEERDELAY_P0_T1_b; + }; + __IM uint32_t RESERVED16[2]; + + union + { + __IOM uint32_t PEERDELAY_P1_T0; /*!< (@ 0x00000550) Port 1 Peer Delay Value for Timer 0 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 0 */ + uint32_t : 2; + } PEERDELAY_P1_T0_b; + }; + + union + { + __IOM uint32_t PEERDELAY_P1_T1; /*!< (@ 0x00000554) Port 1 Peer Delay Value for Timer 1 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 1 */ + uint32_t : 2; + } PEERDELAY_P1_T1_b; + }; + __IM uint32_t RESERVED17[2]; + + union + { + __IOM uint32_t PEERDELAY_P2_T0; /*!< (@ 0x00000560) Port 2 Peer Delay Value for Timer 0 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 0 */ + uint32_t : 2; + } PEERDELAY_P2_T0_b; + }; + + union + { + __IOM uint32_t PEERDELAY_P2_T1; /*!< (@ 0x00000564) Port 2 Peer Delay Value for Timer 1 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 1 */ + uint32_t : 2; + } PEERDELAY_P2_T1_b; + }; + __IM uint32_t RESERVED18[2]; + + union + { + __IOM uint32_t PEERDELAY_P3_T0; /*!< (@ 0x00000570) Port 3 Peer Delay Value for Timer 0 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 0 */ + uint32_t : 2; + } PEERDELAY_P3_T0_b; + }; + + union + { + __IOM uint32_t PEERDELAY_P3_T1; /*!< (@ 0x00000574) Port 3 Peer Delay Value for Timer 1 (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t PEERDELAY : 30; /*!< [29..0] Peer Delay Value Determined at the Port n for Timer + * 1 */ + uint32_t : 2; + } PEERDELAY_P3_T1_b; + }; + __IM uint32_t RESERVED19[18]; + + union + { + __IOM uint32_t TS_FIFO_STATUS; /*!< (@ 0x000005C0) Transmit Timestamp FIFO Status Register */ + + struct + { + __IM uint32_t FF_VALID : 4; /*!< [3..0] Per-port indication that a valid timestamp is available + * in the corresponding FIFO of the port */ + uint32_t : 12; + __IOM uint32_t FF_OVR : 4; /*!< [19..16] Per-port indication that a timestamp cannot be written + * to the FIFO because of the FIFO being full. */ + uint32_t : 12; + } TS_FIFO_STATUS_b; + }; + + union + { + __IOM uint32_t TS_FIFO_READ_CTRL; /*!< (@ 0x000005C4) Transmit Timestamp FIFO Read Control Register */ + + struct + { + __IOM uint32_t PORT_NUM : 2; /*!< [1..0] Port Number to Read from */ + uint32_t : 2; + __IM uint32_t TS_VALID : 1; /*!< [4..4] When reading from this register, this bit is 1 if the + * FIFO indicated by PORT_NUM contained valid data. */ + uint32_t : 1; + __IM uint32_t TS_SEL : 1; /*!< [6..6] When TS_VALID is 1, TS_SEL indicates the timer used for + * the read timestamp. */ + uint32_t : 1; + __IM uint32_t TS_ID : 7; /*!< [14..8] When TS_VALID is 1, TS_ID indicates the ID specified + * by the application through the management tag control information, + * if present. */ + uint32_t : 17; + } TS_FIFO_READ_CTRL_b; + }; + + union + { + __IM uint32_t TS_FIFO_READ_TIMESTAMP; /*!< (@ 0x000005C8) 32-bit Timestamp Value Read from FIFO */ + + struct + { + __IM uint32_t TIMESTAMP : 32; /*!< [31..0] 32-bit timestamp value read from the FIFO */ + } TS_FIFO_READ_TIMESTAMP_b; + }; + __IM uint32_t RESERVED20[13]; + + union + { + __IOM uint32_t INT_CONFIG; /*!< (@ 0x00000600) Interrupt Enable Configuration Register */ + + struct + { + __IOM uint32_t IRQ_EN : 1; /*!< [0..0] Interrupt Global Enable */ + __IOM uint32_t MDIO1 : 1; /*!< [1..1] Enable Interrupt on Transaction Complete from MDIO Controller */ + uint32_t : 1; + __IOM uint32_t LK_NEW_SRC : 1; /*!< [3..3] Enable Interrupt for New Source Address */ + __IOM uint32_t IRQ_TEST : 1; /*!< [4..4] When set, an interrupt is triggered immediately. Can + * be used to cause a software controlled interrupt for testing + * purposes. */ + __IOM uint32_t DLR_INT : 1; /*!< [5..5] Enable Interrupt for DLR */ + __IOM uint32_t PRP_INT : 1; /*!< [6..6] Enable Interrupt for PRP */ + __IOM uint32_t HUB_INT : 1; /*!< [7..7] Enable Interrupt for HUB */ + __IOM uint32_t IRQ_LINK : 3; /*!< [10..8] Per Line Port Phy Link Change Interrupt Enable */ + uint32_t : 5; + __IOM uint32_t IRQ_MAC_EEE : 3; /*!< [18..16] Per Line Port MAC interrupt */ + uint32_t : 8; + __IOM uint32_t EFP_INT : 1; /*!< [27..27] Enable Interrupt for Extended Frame Parser */ + __IOM uint32_t SRCFLT_WD_INT : 1; /*!< [28..28] MAC Address Source Filtering Watchdog */ + __IOM uint32_t TSM_INT : 1; /*!< [29..29] Enable Interrupt for TSM (Timer, Timestamping) */ + __IOM uint32_t TDMA_INT : 1; /*!< [30..30] Enable Interrupt for TDMA scheduler */ + __IOM uint32_t PATTERN_INT : 1; /*!< [31..31] Enable Interrupt for RX Pattern Matcher */ + } INT_CONFIG_b; + }; + + union + { + __IOM uint32_t INT_STAT_ACK; /*!< (@ 0x00000604) Interrupt Status/ACK Register */ + + struct + { + __IM uint32_t IRQ_PEND : 1; /*!< [0..0] Interrupt Pending Status */ + __IOM uint32_t MDIO1 : 1; /*!< [1..1] Latched Interrupt Status for MDIO1 */ + uint32_t : 1; + __IOM uint32_t LK_NEW_SRC : 1; /*!< [3..3] Latched Interrupt Status for LK_NEW_SRC */ + __IM uint32_t IRQ_TEST : 1; /*!< [4..4] Interrupt Status for IRQ_TEST */ + __IM uint32_t DLR_INT : 1; /*!< [5..5] Interrupt Pending Status from DLR Module */ + __IM uint32_t PRP_INT : 1; /*!< [6..6] Interrupt Pending Status from PRP Module */ + __IM uint32_t HUB_INT : 1; /*!< [7..7] Interrupt Pending Status from Hub Module */ + __IOM uint32_t IRQ_LINK : 3; /*!< [10..8] Interrupt Pending per Line Port Phy Link Change Interrupt */ + uint32_t : 5; + __IOM uint32_t IRQ_MAC_EEE : 3; /*!< [18..16] Interrupt Pending Status per Line Port MAC Interrupt */ + uint32_t : 8; + __IOM uint32_t EFP_INT : 1; /*!< [27..27] Interrupt from Extended Frame Parser */ + __IOM uint32_t SRCFLT_WD_INT : 1; /*!< [28..28] Interrupt Pending Status for MAC Source Filtering Watchdog */ + __IM uint32_t TSM_INT : 1; /*!< [29..29] Interrupt Pending Interrupt Indication from TSM (Timestamping) + * module */ + __IM uint32_t TDMA_INT : 1; /*!< [30..30] Interrupt Pending Status from TDMA Scheduler */ + __IM uint32_t PATTERN_INT : 1; /*!< [31..31] Interrupt Pending Status from RX Pattern Matcher Module */ + } INT_STAT_ACK_b; + }; + __IM uint32_t RESERVED21[30]; + + union + { + __IOM uint32_t ATIME_CTRL0; /*!< (@ 0x00000680) Timer 0 Control Register (n = 0, 1) */ + + struct + { + __IOM uint32_t ENABLE : 1; /*!< [0..0] ENABLE */ + __IOM uint32_t ONE_SHOT : 1; /*!< [1..1] Avoid timer wrap around. If set, the timer stops at maximum. + * An overflow interrupt (TSM_CONFIG.IRQ_ATIME_OVER) occurs + * (if enabled) when the maximum is reached. */ + __IOM uint32_t EVT_OFFSET_ENA : 1; /*!< [2..2] Enable Offset Event */ + uint32_t : 1; + __IOM uint32_t EVT_PERIOD_ENA : 1; /*!< [4..4] Enable Periodical Event */ + __IOM uint32_t EVT_PERIOD_RST : 1; /*!< [5..5] Reset Timer on Periodical Event */ + uint32_t : 3; + __IOM uint32_t RESTART : 1; /*!< [9..9] Resets the Timer to Zero (Command Bit) */ + uint32_t : 1; + __IOM uint32_t CAPTURE : 1; /*!< [11..11] Capture Time Value (Command Bit) */ + __IOM uint32_t CAPTURE_ALL : 1; /*!< [12..12] Capture All Timers Value (Command Bit) */ + uint32_t : 19; + } ATIME_CTRL0_b; + }; + + union + { + __IOM uint32_t ATIME0; /*!< (@ 0x00000684) Timer 0 Count Register (n = 0, 1) */ + + struct + { + __IOM uint32_t TIMER_VAL : 32; /*!< [31..0] Timer Value */ + } ATIME0_b; + }; + + union + { + __IOM uint32_t ATIME_OFFSET0; /*!< (@ 0x00000688) Timer 0 Offset Register (n = 0, 1) */ + + struct + { + __IOM uint32_t OFFSET : 32; /*!< [31..0] Value used for performing offset corrections without + * changing the drift correction */ + } ATIME_OFFSET0_b; + }; + + union + { + __IOM uint32_t ATIME_EVT_PERIOD0; /*!< (@ 0x0000068C) Timer 0 Periodic Event Register (n = 0, 1) */ + + struct + { + __IOM uint32_t PERIOD : 32; /*!< [31..0] Value for generating periodic events */ + } ATIME_EVT_PERIOD0_b; + }; + + union + { + __IOM uint32_t ATIME_CORR0; /*!< (@ 0x00000690) Timer 0 Correction Period Register (n = 0, 1) */ + + struct + { + __IOM uint32_t CORR_PERIOD : 31; /*!< [30..0] Correction Period */ + uint32_t : 1; + } ATIME_CORR0_b; + }; + + union + { + __IOM uint32_t ATIME_INC0; /*!< (@ 0x00000694) Timer 0 Increment Register (n = 0, 1) */ + + struct + { + __IOM uint32_t CLK_PERIOD : 7; /*!< [6..0] Clock Period of the Timestamping Clock (125 MHz) in nanoseconds */ + uint32_t : 1; + __IOM uint32_t CORR_INC : 7; /*!< [14..8] Correction Increment Value */ + uint32_t : 1; + __IOM uint32_t OFFS_CORR_INC : 7; /*!< [22..16] Offset Correction Increment Value */ + uint32_t : 9; + } ATIME_INC0_b; + }; + + union + { + __IOM uint32_t ATIME_SEC0; /*!< (@ 0x00000698) Timer 0 Seconds Time Register (n = 0, 1) */ + + struct + { + __IOM uint32_t SEC_TIME : 32; /*!< [31..0] Seconds Time Value */ + } ATIME_SEC0_b; + }; + + union + { + __IOM uint32_t ATIME_OFFS_CORR0; /*!< (@ 0x0000069C) Timer 0 Offset Correction Counter Register (n + * = 0, 1) */ + + struct + { + __IOM uint32_t OFFS_CORR_CNT : 32; /*!< [31..0] Offset Correction Counter */ + } ATIME_OFFS_CORR0_b; + }; + + union + { + __IOM uint32_t ATIME_CTRL1; /*!< (@ 0x000006A0) Timer 1 Control Register (n = 0, 1) */ + + struct + { + __IOM uint32_t ENABLE : 1; /*!< [0..0] ENABLE */ + __IOM uint32_t ONE_SHOT : 1; /*!< [1..1] Avoid timer wrap around. If set, the timer stops at maximum. + * An overflow interrupt (TSM_CONFIG.IRQ_ATIME_OVER) occurs + * (if enabled) when the maximum is reached. */ + __IOM uint32_t EVT_OFFSET_ENA : 1; /*!< [2..2] Enable Offset Event */ + uint32_t : 1; + __IOM uint32_t EVT_PERIOD_ENA : 1; /*!< [4..4] Enable Periodical Event */ + __IOM uint32_t EVT_PERIOD_RST : 1; /*!< [5..5] Reset Timer on Periodical Event */ + uint32_t : 3; + __IOM uint32_t RESTART : 1; /*!< [9..9] Resets the Timer to Zero (Command Bit) */ + uint32_t : 1; + __IOM uint32_t CAPTURE : 1; /*!< [11..11] Capture Time Value (Command Bit) */ + __IOM uint32_t CAPTURE_ALL : 1; /*!< [12..12] Capture All Timers Value (Command Bit) */ + uint32_t : 19; + } ATIME_CTRL1_b; + }; + + union + { + __IOM uint32_t ATIME1; /*!< (@ 0x000006A4) Timer 1 Count Register (n = 0, 1) */ + + struct + { + __IOM uint32_t TIMER_VAL : 32; /*!< [31..0] Timer Value */ + } ATIME1_b; + }; + + union + { + __IOM uint32_t ATIME_OFFSET1; /*!< (@ 0x000006A8) Timer 1 Offset Register (n = 0, 1) */ + + struct + { + __IOM uint32_t OFFSET : 32; /*!< [31..0] Value used for performing offset corrections without + * changing the drift correction */ + } ATIME_OFFSET1_b; + }; + + union + { + __IOM uint32_t ATIME_EVT_PERIOD1; /*!< (@ 0x000006AC) Timer 1 Periodic Event Register (n = 0, 1) */ + + struct + { + __IOM uint32_t PERIOD : 32; /*!< [31..0] Value for generating periodic events */ + } ATIME_EVT_PERIOD1_b; + }; + + union + { + __IOM uint32_t ATIME_CORR1; /*!< (@ 0x000006B0) Timer 1 Correction Period Register (n = 0, 1) */ + + struct + { + __IOM uint32_t CORR_PERIOD : 31; /*!< [30..0] Correction Period */ + uint32_t : 1; + } ATIME_CORR1_b; + }; + + union + { + __IOM uint32_t ATIME_INC1; /*!< (@ 0x000006B4) Timer 1 Increment Register (n = 0, 1) */ + + struct + { + __IOM uint32_t CLK_PERIOD : 7; /*!< [6..0] Clock Period of the Timestamping Clock (125 MHz) in nanoseconds */ + uint32_t : 1; + __IOM uint32_t CORR_INC : 7; /*!< [14..8] Correction Increment Value */ + uint32_t : 1; + __IOM uint32_t OFFS_CORR_INC : 7; /*!< [22..16] Offset Correction Increment Value */ + uint32_t : 9; + } ATIME_INC1_b; + }; + + union + { + __IOM uint32_t ATIME_SEC1; /*!< (@ 0x000006B8) Timer 1 Seconds Time Register (n = 0, 1) */ + + struct + { + __IOM uint32_t SEC_TIME : 32; /*!< [31..0] Seconds Time Value */ + } ATIME_SEC1_b; + }; + + union + { + __IOM uint32_t ATIME_OFFS_CORR1; /*!< (@ 0x000006BC) Timer 1 Offset Correction Counter Register (n + * = 0, 1) */ + + struct + { + __IOM uint32_t OFFS_CORR_CNT : 32; /*!< [31..0] Offset Correction Counter */ + } ATIME_OFFS_CORR1_b; + }; + __IM uint32_t RESERVED22[16]; + + union + { + __IOM uint32_t MDIO_CFG_STATUS; /*!< (@ 0x00000700) MDIO Configuration and Status Register */ + + struct + { + __IM uint32_t BUSY : 1; /*!< [0..0] MDIO Busy */ + __IM uint32_t READERR : 1; /*!< [1..1] MDIO Read Error */ + __IOM uint32_t HOLD : 3; /*!< [4..2] MDIO Hold Time Setting */ + __IOM uint32_t DISPREAM : 1; /*!< [5..5] Disable Preamble */ + uint32_t : 1; + __IOM uint32_t CLKDIV : 9; /*!< [15..7] MDIO Clock Divisor */ + uint32_t : 16; + } MDIO_CFG_STATUS_b; + }; + + union + { + __IOM uint32_t MDIO_COMMAND; /*!< (@ 0x00000704) MDIO PHY Command Register */ + + struct + { + __IOM uint32_t REGADDR : 5; /*!< [4..0] Register Address */ + __IOM uint32_t PHYADDR : 5; /*!< [9..5] PHY Address */ + uint32_t : 5; + __IOM uint32_t TRANINIT : 1; /*!< [15..15] If set to 1, a read transaction is initiated. */ + uint32_t : 16; + } MDIO_COMMAND_b; + }; + + union + { + __IOM uint32_t MDIO_DATA; /*!< (@ 0x00000708) MDIO Data Register */ + + struct + { + __IOM uint32_t MDIO_DATA : 16; /*!< [15..0] MDIO_DATA */ + uint32_t : 16; + } MDIO_DATA_b; + }; + __IM uint32_t RESERVED23[61]; + + union + { + __IM uint32_t REV_P0; /*!< (@ 0x00000800) Port 0 MAC Core Revision (n = 0 to 3) */ + + struct + { + __IM uint32_t REV : 32; /*!< [31..0] MAC Core Revision */ + } REV_P0_b; + }; + __IM uint32_t RESERVED24; + + union + { + __IOM uint32_t COMMAND_CONFIG_P0; /*!< (@ 0x00000808) Port 0 Command Configuration Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t TX_ENA : 1; /*!< [0..0] Enable/Disable MAC Transmit Path */ + __IOM uint32_t RX_ENA : 1; /*!< [1..1] Enable/Disable MAC Receive Path */ + __IOM uint32_t TDMA_PREBUF_DIS : 1; /*!< [2..2] When set to 1, the MAC does not request a new frame from + * the IMC until the current frame is completed. This can + * cause the IPG between frames to be more than the value + * in TX_IPG_LENGTH. */ + __IOM uint32_t ETH_SPEED : 1; /*!< [3..3] Operation Mode Definition */ + __IM uint32_t PROMIS_EN : 1; /*!< [4..4] Enable/Disable MAC Promiscuous Operation */ + __IM uint32_t PAD_EN : 1; /*!< [5..5] Enable/Disable Frame Padding Remove on Receive */ + uint32_t : 1; + __IM uint32_t PAUSE_FWD : 1; /*!< [7..7] Terminate/Forward Pause Frames */ + __IOM uint32_t PAUSE_IGNORE : 1; /*!< [8..8] Ignore Pause Frame Quanta */ + __IM uint32_t TX_ADDR_INS : 1; /*!< [9..9] Non writable bit, fixed to 0 always. */ + __IOM uint32_t HD_ENA : 1; /*!< [10..10] Enable auto full/half-duplex operation (set to 1) or + * full-duplex only (set to 0). */ + __IOM uint32_t TX_CRC_APPEND : 1; /*!< [11..11] Enable CRC Append on Transmit */ + uint32_t : 1; + __IOM uint32_t SW_RESET : 1; /*!< [13..13] Self Clearing Reset Command Bit */ + uint32_t : 9; + __IOM uint32_t CNTL_FRM_ENA : 1; /*!< [23..23] MAC Control Frame Enable */ + __IOM uint32_t NO_LGTH_CHK : 1; /*!< [24..24] Payload Length Check Disable */ + __IOM uint32_t ENA_10 : 1; /*!< [25..25] This bit has no effect except PHYSPEED bit of STATUS_Pn + * register. */ + __IOM uint32_t EFPI_SELECT : 1; /*!< [26..26] EFPI_SELECT */ + __IOM uint32_t TX_TRUNCATE : 1; /*!< [27..27] TX_TRUNCATE */ + uint32_t : 2; + __IOM uint32_t TIMER_SEL : 1; /*!< [30..30] Selects the default timer to use for timestamping operations + * on transmit and on receive. The value is used when not + * overridden by the PTP auto-response function, pattern matchers + * or force forwarding information in a management tag. */ + uint32_t : 1; + } COMMAND_CONFIG_P0_b; + }; + + union + { + __IOM uint32_t MAC_ADDR_0_P0; /*!< (@ 0x0000080C) Port 0 MAC Address Register 0 (n = 0 to 2) */ + + struct + { + __IOM uint32_t MAC_ADDR : 32; /*!< [31..0] The first 4 bytes of the MAC address of the port. First + * byte is bits [7:0]. The MAC address is used on locally + * generated frames such as pause frames, peer-delay response. */ + } MAC_ADDR_0_P0_b; + }; + + union + { + __IOM uint32_t MAC_ADDR_1_P0; /*!< (@ 0x00000810) Port 0 MAC Address Register 1 (n = 0 to 2) */ + + struct + { + __IOM uint32_t MAC_ADDR : 16; /*!< [15..0] The last 2 bytes of the MAC address of the port. Bits + * [7:0] is the 5th byte and bits [15:8] is the 6th byte. */ + uint32_t : 16; + } MAC_ADDR_1_P0_b; + }; + + union + { + __IOM uint32_t FRM_LENGTH_P0; /*!< (@ 0x00000814) Port 0 Maximum Frame Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t FRM_LENGTH : 14; /*!< [13..0] Maximum Frame Length */ + uint32_t : 18; + } FRM_LENGTH_P0_b; + }; + + union + { + __IM uint32_t PAUSE_QUANT_P0; /*!< (@ 0x00000818) Port 0 MAC Pause Quanta (n = 0 to 3) */ + + struct + { + __IM uint32_t PAUSE_QUANT : 16; /*!< [15..0] Pause Quanta */ + uint32_t : 16; + } PAUSE_QUANT_P0_b; + }; + + union + { + __IOM uint32_t MAC_LINK_QTRIG_P0; /*!< (@ 0x0000081C) Port 0 Trigger Event Configuration Register (n + * = 0 to 2) */ + + struct + { + __IOM uint32_t PORT_MASK : 4; /*!< [3..0] Per-port Bit Mask */ + uint32_t : 12; + __IOM uint32_t QUEUE_MASK : 8; /*!< [23..16] 1-bit per queue indicating from which queues a frame + * is transmitted from the ports indicated by PORT_MASK. A + * single frame is transmitted per indicated port in PORT_MASK + * among the queues indicated by QUEUE_MASK. */ + uint32_t : 4; + __IOM uint32_t TRIGGERED : 1; /*!< [28..28] When MODE is set to 1, TRIGGERED indicates whether + * a frame was transmitted. When MODE is set to 0, TRIGGERED + * is always 0. This flag clears when the register is written. */ + __IOM uint32_t DLR_MODE : 1; /*!< [29..29] When set to 0, the DLR state machine is ignored. When + * set to 1, the Link Queue Trigger occurs only if the DLR + * state machine is in the NORMAL or FAULT state. */ + __IOM uint32_t MODE : 1; /*!< [30..30] When set to 0, only a single Link_Status frame is generated. + * This is to prevent sending multiple frames due to link + * flapping. */ + __IOM uint32_t ENABLE : 1; /*!< [31..31] Write to 1 to enable the Link Queue Trigger feature. + * When the link status (phy_link) transitions from 1 -> + * 0, a trigger event is generated to the memory controller + * for the ports and queues indicated in PORT_MASK and QUEUE_MASK. */ + } MAC_LINK_QTRIG_P0_b; + }; + __IM uint32_t RESERVED25[4]; + + union + { + __IOM uint32_t PTPCLOCKIDENTITY1_P0; /*!< (@ 0x00000830) Port 0 PTP Clock Identity 1 Register (n = 0 to + * 2) */ + + struct + { + __IOM uint32_t CLK_IDENTITY0 : 8; /*!< [7..0] 20, portIdentity.ClockIdentity[0] */ + __IOM uint32_t CLK_IDENTITY1 : 8; /*!< [15..8] 21, portIdentity.ClockIdentity[1] */ + __IOM uint32_t CLK_IDENTITY2 : 8; /*!< [23..16] 22, portIdentity.ClockIdentity[2] */ + __IOM uint32_t CLK_IDENTITY3 : 8; /*!< [31..24] 23, portIdentity.ClockIdentity[3] */ + } PTPCLOCKIDENTITY1_P0_b; + }; + + union + { + __IOM uint32_t PTPCLOCKIDENTITY2_P0; /*!< (@ 0x00000834) Port 0 PTP Clock Identity 2 Register (n = 0 to + * 2) */ + + struct + { + __IOM uint32_t CLK_IDENTITY4 : 8; /*!< [7..0] 24, portIdentity.ClockIdentity[4] */ + __IOM uint32_t CLK_IDENTITY5 : 8; /*!< [15..8] 25, portIdentity.ClockIdentity[5] */ + __IOM uint32_t CLK_IDENTITY6 : 8; /*!< [23..16] 26, portIdentity.ClockIdentity[6] */ + __IOM uint32_t CLK_IDENTITY7 : 8; /*!< [31..24] 27, portIdentity.ClockIdentity[7] */ + } PTPCLOCKIDENTITY2_P0_b; + }; + + union + { + __IOM uint32_t PTPAUTORESPONSE_P0; /*!< (@ 0x00000838) Port 0 PTP Auto Response Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t ARSP_EN : 1; /*!< [0..0] Auto Response Enable */ + __IOM uint32_t D_TIMER : 1; /*!< [1..1] Default timer to use for auto-response generation */ + uint32_t : 14; + __IOM uint32_t PORTNUM1 : 8; /*!< [23..16] 29, portIdentity.PortNumber[1] (lsb) */ + __IOM uint32_t PORTNUM0 : 8; /*!< [31..24] 28, portIdentity.PortNumber[0] (msb) */ + } PTPAUTORESPONSE_P0_b; + }; + __IM uint32_t RESERVED26; + + union + { + __IOM uint32_t STATUS_P0; /*!< (@ 0x00000840) Port 0 Status Register */ + + struct + { + __IM uint32_t PHYSPEED : 2; /*!< [1..0] Currently Active PHY Interface Speed */ + __IM uint32_t PHYLINK : 1; /*!< [2..2] Link status from PHY interface */ + __IM uint32_t PHYDUPLEX : 1; /*!< [3..3] Duplex status from PHY interface */ + __IOM uint32_t TX_UNDFLW : 1; /*!< [4..4] Indicates that the transmit MAC underflow. This shall + * never occur during normal operation. */ + __IOM uint32_t LK_DST_ERR : 1; /*!< [5..5] Indicates that the L2 destination lookup process failed + * to complete in time before the next frame was received + * at the port. This should never occur under normal operation. + * The cause could be from IPG violations in the received + * frames. */ + __IM uint32_t BR_VERIF_ST : 3; /*!< [8..6] Indicates the current status of the verification according + * to clause 30.14.1.2 of the 802.3br specification */ + uint32_t : 23; + } STATUS_P0_b; + }; + + union + { + __IOM uint32_t TX_IPG_LENGTH_P0; /*!< (@ 0x00000844) Port 0 Transmit IPG Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t TX_IPG_LENGTH : 5; /*!< [4..0] Define transmit interpacket gap in octets. Allowed values + * are in the range of 8 to 31. */ + uint32_t : 11; + __IOM uint32_t MINRTC3GAP : 5; /*!< [20..16] MINRTC3GAP */ + uint32_t : 11; + } TX_IPG_LENGTH_P0_b; + }; + + union + { + __IOM uint32_t EEE_CTL_STAT_P0; /*!< (@ 0x00000848) Port 0 MAC EEE Functions Control and Status (n + * = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_AUTO : 1; /*!< [0..0] EEE Automatic Mode of Operation */ + __IOM uint32_t LPI_REQ : 1; /*!< [1..1] Request LPI Transmission when MAC Becomes Idle */ + __IOM uint32_t LPI_TXHOLD : 1; /*!< [2..2] MAC Transmission Hold */ + uint32_t : 5; + __IM uint32_t ST_LPI_REQ : 1; /*!< [8..8] Status (real time) of Internal LPI_REQ to the MAC */ + __IM uint32_t ST_LPI_TXHOLD : 1; /*!< [9..9] Status (real time) of Internal LPI_TXHOLD to the MAC */ + __IM uint32_t ST_TXBUSY : 1; /*!< [10..10] Status (real time) if the MAC is currently transmitting. */ + __IM uint32_t ST_TXAVAIL : 1; /*!< [11..11] Status (real time) if the MAC transmit FIFO has data + * available for transmission. */ + __IM uint32_t ST_LPI_IND : 1; /*!< [12..12] Status (real time) of Received LPI */ + uint32_t : 3; + __IM uint32_t STLH_LPI_REQ : 1; /*!< [16..16] Status (latched high) of Internal LPI_REQ to the MAC */ + __IM uint32_t STLH_LPI_TXHOLD : 1; /*!< [17..17] Status (latched high) of Internal LPI_TXHOLD to the + * MAC */ + __IM uint32_t STLH_TXBUSY : 1; /*!< [18..18] Status (latched high) if the MAC is/was Transmitting */ + uint32_t : 1; + __IM uint32_t STLH_LPI_IND : 1; /*!< [20..20] Status (latched high) of Received LPI (ST_LPI_IND) */ + uint32_t : 11; + } EEE_CTL_STAT_P0_b; + }; + + union + { + __IOM uint32_t EEE_IDLE_TIME_P0; /*!< (@ 0x0000084C) Port 0 EEE Idle Time Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_IDLE_TIME : 32; /*!< [31..0] Time (-1) the transmitter must be idle before transmission + * of LPI begins. A 32-bit value in steps of 32 switch operating + * clock cycles. A value of 0 disables the timer. The value + * must be set to 1 less count. */ + } EEE_IDLE_TIME_P0_b; + }; + + union + { + __IOM uint32_t EEE_TWSYS_TIME_P0; /*!< (@ 0x00000850) Port 0 EEE Wake Up Time Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_WKUP_TIME : 32; /*!< [31..0] Time (-1) after PHY wakeup until the MAC is allowed + * to begin transmitting the first frame again. A 32-bit value + * in steps of switch operating clock cycles. A value of 0 + * disables the timer. The value must be set to 1 less count. */ + } EEE_TWSYS_TIME_P0_b; + }; + + union + { + __IOM uint32_t IDLE_SLOPE_P0; /*!< (@ 0x00000854) Port 0 MAC Traffic Shaper Bandwidth Control */ + + struct + { + __IOM uint32_t IDLE_SLOPE : 11; /*!< [10..0] Traffic Shaper Bandwidth Control */ + uint32_t : 21; + } IDLE_SLOPE_P0_b; + }; + + union + { + __IOM uint32_t CT_DELAY_P0; /*!< (@ 0x00000858) Port 0 Cut-Through Delay Indication Register */ + + struct + { + __IOM uint32_t CT_DELAY : 9; /*!< [8..0] Delay Value in 400 ns / 40 ns / 8 ns increments (frequency + * of the MII PHY interface) */ + uint32_t : 23; + } CT_DELAY_P0_b; + }; + + union + { + __IOM uint32_t BR_CONTROL_P0; /*!< (@ 0x0000085C) Port 0 802.3br Frame Configuration Register */ + + struct + { + __IOM uint32_t PREEMPT_ENA : 1; /*!< [0..0] When set to 1, enables 802.3br Frame Preemption. */ + __IOM uint32_t VERIFY_DIS : 1; /*!< [1..1] When set to 1, disables the verify process required for + * preemption operation. */ + __IOM uint32_t RESPONSE_DIS : 1; /*!< [2..2] When set to 1 prevents the MAC from responding to "verify" + * frames. */ + uint32_t : 1; + __IOM uint32_t ADDFRAGSIZE : 2; /*!< [5..4] Minimum fragment size in increments of 64 bytes. */ + uint32_t : 2; + __IOM uint32_t TX_VERIFY_TIME : 7; /*!< [14..8] Preemption verification timeout in milliseconds. */ + uint32_t : 1; + __IOM uint32_t RX_STRICT_PRE : 1; /*!< [16..16] When set to 1, the preamble is checked so all bytes + * except the SFD are 0x55. When set to 0, only the last 2 + * bytes of the preamble are checked (SFD/SMD and FRAG_COUNT). + * It is recommended to set this bit to 1 to comply with the + * 802.3br specification. This bit must be set to 0 if only + * non-802.3br traffic is expected (for example, normal Ethernet + * traffic) and if custom preamble is used. */ + __IOM uint32_t RX_BR_SMD_DIS : 1; /*!< [17..17] When set to 1, the receiver does not decode the 802.3br + * SMDs and assumes all frames are express frames. This bit + * must be set to 0 for correct operation with 802.3br, and + * can be set to 1 when 802.3br is not enabled to avoid false + * detection of SMDs. */ + __IOM uint32_t RX_STRICT_BR_CTL : 1; /*!< [18..18] When set to 1, strict checking of VERIFY and RESPONSE + * frames is enabled. When set to 1, the frame contents and + * frame length checks are also performed on these frames. + * The mCRC is always checked regardless of the value of this + * register. This bit must be set to 0 to be compliant with + * the functionality described in IEEE 802.3br. */ + __IOM uint32_t TX_MCRC_INV : 1; /*!< [19..19] When set to 1, the 32-bit XOR mask used to calculate + * the mCRC for transmitted frames is inverted. This bit must + * always be written to 0 and only used for debugging. */ + __IOM uint32_t RX_MCRC_INV : 1; /*!< [20..20] When set to 1, the 32-bit XOR mask used to calculate + * the mCRC for received frames is inverted. This bit must + * always be written to 0 and only used for debugging. */ + uint32_t : 11; + } BR_CONTROL_P0_b; + }; + __IM uint32_t RESERVED27[2]; + + union + { + __IM uint32_t AFRAMESTRANSMITTEDOK_P0; /*!< (@ 0x00000868) Port 0 MAC Transmitted Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Transmitted, including pause. */ + } AFRAMESTRANSMITTEDOK_P0_b; + }; + + union + { + __IM uint32_t AFRAMESRECEIVEDOK_P0; /*!< (@ 0x0000086C) Port 0 MAC Received Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Received, including pause. */ + } AFRAMESRECEIVEDOK_P0_b; + }; + + union + { + __IM uint32_t AFRAMECHECKSEQUENCEERRORS_P0; /*!< (@ 0x00000870) Port 0 MAC FCS Error Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t FCSERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Length but CRC error. */ + } AFRAMECHECKSEQUENCEERRORS_P0_b; + }; + + union + { + __IM uint32_t AALIGNMENTERRORS_P0; /*!< (@ 0x00000874) Port 0 MAC Alignment Error Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t ALGNERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Odd Number + * of Nibbles (MII) Received. */ + } AALIGNMENTERRORS_P0_b; + }; + + union + { + __IM uint32_t AOCTETSTRANSMITTEDOK_P0; /*!< (@ 0x00000878) Port 0 MAC Transmitted Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Transmitted. */ + } AOCTETSTRANSMITTEDOK_P0_b; + }; + + union + { + __IM uint32_t AOCTETSRECEIVEDOK_P0; /*!< (@ 0x0000087C) Port 0 MAC Received Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Received. */ + } AOCTETSRECEIVEDOK_P0_b; + }; + + union + { + __IM uint32_t ATXPAUSEMACCTRLFRAMES_P0; /*!< (@ 0x00000880) Port 0 MAC Transmitted Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Transmitted. */ + } ATXPAUSEMACCTRLFRAMES_P0_b; + }; + + union + { + __IM uint32_t ARXPAUSEMACCTRLFRAMES_P0; /*!< (@ 0x00000884) Port 0 MAC Received Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Received. */ + } ARXPAUSEMACCTRLFRAMES_P0_b; + }; + + union + { + __IM uint32_t IFINERRORS_P0; /*!< (@ 0x00000888) Port 0 MAC Input Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t INERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Any Error + * During Reception such as CRC, Length, PHY Error, RX FIFO + * Overflow. */ + } IFINERRORS_P0_b; + }; + + union + { + __IM uint32_t IFOUTERRORS_P0; /*!< (@ 0x0000088C) Port 0 MAC Output Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t OUTERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Frame + * Transmitted with PHY error. */ + } IFOUTERRORS_P0_b; + }; + + union + { + __IM uint32_t IFINUCASTPKTS_P0; /*!< (@ 0x00000890) Port 0 MAC Received Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Received. */ + } IFINUCASTPKTS_P0_b; + }; + + union + { + __IM uint32_t IFINMULTICASTPKTS_P0; /*!< (@ 0x00000894) Port 0 MAC Received Multicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Received. */ + } IFINMULTICASTPKTS_P0_b; + }; + + union + { + __IM uint32_t IFINBROADCASTPKTS_P0; /*!< (@ 0x00000898) Port 0 MAC Received Broadcast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Received. */ + } IFINBROADCASTPKTS_P0_b; + }; + + union + { + __IM uint32_t IFOUTDISCARDS_P0; /*!< (@ 0x0000089C) Port 0 MAC Discarded Outbound Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t DISCOBCOUNT : 32; /*!< [31..0] Not Applicable */ + } IFOUTDISCARDS_P0_b; + }; + + union + { + __IM uint32_t IFOUTUCASTPKTS_P0; /*!< (@ 0x000008A0) Port 0 MAC Transmitted Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Transmitted. */ + } IFOUTUCASTPKTS_P0_b; + }; + + union + { + __IM uint32_t IFOUTMULTICASTPKTS_P0; /*!< (@ 0x000008A4) Port 0 MAC Transmitted Multicast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Transmitted. */ + } IFOUTMULTICASTPKTS_P0_b; + }; + + union + { + __IM uint32_t IFOUTBROADCASTPKTS_P0; /*!< (@ 0x000008A8) Port 0 MAC Transmitted Broadcast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Transmitted. */ + } IFOUTBROADCASTPKTS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSDROPEVENTS_P0; /*!< (@ 0x000008AC) Port 0 MAC Dropped Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t DROPCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC RX FIFO + * Full at frame start. */ + } ETHERSTATSDROPEVENTS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSOCTETS_P0; /*!< (@ 0x000008B0) Port 0 MAC All Frame Octets Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLOCTETS : 32; /*!< [31..0] ALLOCTETS */ + } ETHERSTATSOCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS_P0; /*!< (@ 0x000008B4) Port 0 MAC All Frame Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLCOUNT : 32; /*!< [31..0] ALLCOUNT */ + } ETHERSTATSPKTS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSUNDERSIZEPKTS_P0; /*!< (@ 0x000008B8) Port 0 MAC Too Short Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t TOOSHRTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Good CRC. */ + } ETHERSTATSUNDERSIZEPKTS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSOVERSIZEPKTS_P0; /*!< (@ 0x000008BC) Port 0 MAC Too Long Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t TOOLONGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Good CRC. */ + } ETHERSTATSOVERSIZEPKTS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS64OCTETS_P0; /*!< (@ 0x000008C0) Port 0 MAC 64 Octets Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT64 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 64 bytes). */ + } ETHERSTATSPKTS64OCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS65TO127OCTETS_P0; /*!< (@ 0x000008C4) Port 0 MAC 65 to 127 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT65T127 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 65 to 127 bytes). */ + } ETHERSTATSPKTS65TO127OCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS128TO255OCTETS_P0; /*!< (@ 0x000008C8) Port 0 MAC 128 to 255 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT128T255 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 128 to 255 bytes). */ + } ETHERSTATSPKTS128TO255OCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS256TO511OCTETS_P0; /*!< (@ 0x000008CC) Port 0 MAC 256 to 511 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT256T511 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 256 to 511 bytes). */ + } ETHERSTATSPKTS256TO511OCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS512TO1023OCTETS_P0; /*!< (@ 0x000008D0) Port 0 MAC 512 to 1023 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT512T1023 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 512 to 1023 bytes). */ + } ETHERSTATSPKTS512TO1023OCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1024TO1518OCTETS_P0; /*!< (@ 0x000008D4) Port 0 MAC 1024 to 1518 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1024T1518 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 1024 to 1518 bytes). */ + } ETHERSTATSPKTS1024TO1518OCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1519TOXOCTETS_P0; /*!< (@ 0x000008D8) Port 0 MAC Over 1519 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1519TX : 32; /*!< [31..0] PORT n, this field indicates the number of MAC all Frames, + * Good and Bad (Packet Size: over 1519 bytes). */ + } ETHERSTATSPKTS1519TOXOCTETS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSJABBERS_P0; /*!< (@ 0x000008DC) Port 0 MAC Jabbers Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t JABBERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Bad CRC. */ + } ETHERSTATSJABBERS_P0_b; + }; + + union + { + __IM uint32_t ETHERSTATSFRAGMENTS_P0; /*!< (@ 0x000008E0) Port 0 MAC Fragment Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t FRAGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Bad CRC. */ + } ETHERSTATSFRAGMENTS_P0_b; + }; + __IM uint32_t RESERVED28; + + union + { + __IM uint32_t VLANRECEIVEDOK_P0; /*!< (@ 0x000008E8) Port 0 MAC Received VLAN Tagged Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Received. */ + } VLANRECEIVEDOK_P0_b; + }; + __IM uint32_t RESERVED29[2]; + + union + { + __IM uint32_t VLANTRANSMITTEDOK_P0; /*!< (@ 0x000008F4) Port 0 MAC Transmitted VLAN Tagged Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Transmitted. */ + } VLANTRANSMITTEDOK_P0_b; + }; + + union + { + __IM uint32_t FRAMESRETRANSMITTED_P0; /*!< (@ 0x000008F8) Port 0 MAC Retransmitted Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RETXCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Transmitted + * Frames that experienced a collision and were retransmitted. */ + } FRAMESRETRANSMITTED_P0_b; + }; + __IM uint32_t RESERVED30; + + union + { + __IM uint32_t STATS_HIWORD_P0; /*!< (@ 0x00000900) Port 0 MAC Statistics Counter High Word Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t STATS_HIWORD : 32; /*!< [31..0] The latched upper 32-bit of the 64 bits MAC Statistics + * Counter Last Read */ + } STATS_HIWORD_P0_b; + }; + + union + { + __IOM uint32_t STATS_CTRL_P0; /*!< (@ 0x00000904) Port 0 MAC Statistics Control Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t CLRALL : 1; /*!< [0..0] Self Clearing Counter Initialize Command */ + __IM uint32_t CLRBUSY : 1; /*!< [1..1] Clear in Progress Indication */ + uint32_t : 30; + } STATS_CTRL_P0_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUELO_P0; /*!< (@ 0x00000908) Port 0 MAC Statistics Clear Value Lower Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUELO : 32; /*!< [31..0] PORT n, lower 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUELO_P0_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUEHI_P0; /*!< (@ 0x0000090C) Port 0 MAC Statistics Clear Value Higher Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUEHI : 32; /*!< [31..0] PORT n, upper 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUEHI_P0_b; + }; + + union + { + __IM uint32_t ADEFERRED_P0; /*!< (@ 0x00000910) Port 0 MAC Deferred Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t DEFERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frame Transmitted + * without collision but was deferred at begin. */ + } ADEFERRED_P0_b; + }; + + union + { + __IM uint32_t AMULTIPLECOLLISIONS_P0; /*!< (@ 0x00000914) Port 0 MAC Multiple Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTMLTCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after multiple collisions. */ + } AMULTIPLECOLLISIONS_P0_b; + }; + + union + { + __IM uint32_t ASINGLECOLLISIONS_P0; /*!< (@ 0x00000918) Port 0 MAC Single Collision Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTSNGLCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after single collision. */ + } ASINGLECOLLISIONS_P0_b; + }; + + union + { + __IM uint32_t ALATECOLLISIONS_P0; /*!< (@ 0x0000091C) Port 0 MAC Late Collision Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t LATECOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of too Late + * Collision. Frame was aborted and not retransmitted. */ + } ALATECOLLISIONS_P0_b; + }; + + union + { + __IM uint32_t AEXCESSIVECOLLISIONS_P0; /*!< (@ 0x00000920) Port 0 MAC Excessive Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t EXCCOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frames Discarded + * due to 16 consecutive collisions. */ + } AEXCESSIVECOLLISIONS_P0_b; + }; + + union + { + __IM uint32_t ACARRIERSENSEERRORS_P0; /*!< (@ 0x00000924) Port 0 MAC Carrier Sense Error Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t CSERRCOUNT : 32; /*!< [31..0] PORT n, increments during Transmission without Collisions + * the PHY Carrier Sense Signal (RX_CRS) dropped or never + * asserted. */ + } ACARRIERSENSEERRORS_P0_b; + }; + __IM uint32_t RESERVED31[182]; + + union + { + __IM uint32_t REV_P1; /*!< (@ 0x00000C00) Port 1 MAC Core Revision (n = 0 to 3) */ + + struct + { + __IM uint32_t REV : 32; /*!< [31..0] MAC Core Revision */ + } REV_P1_b; + }; + __IM uint32_t RESERVED32; + + union + { + __IOM uint32_t COMMAND_CONFIG_P1; /*!< (@ 0x00000C08) Port 1 Command Configuration Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t TX_ENA : 1; /*!< [0..0] Enable/Disable MAC Transmit Path */ + __IOM uint32_t RX_ENA : 1; /*!< [1..1] Enable/Disable MAC Receive Path */ + __IOM uint32_t TDMA_PREBUF_DIS : 1; /*!< [2..2] When set to 1, the MAC does not request a new frame from + * the IMC until the current frame is completed. This can + * cause the IPG between frames to be more than the value + * in TX_IPG_LENGTH. */ + __IOM uint32_t ETH_SPEED : 1; /*!< [3..3] Operation Mode Definition */ + __IM uint32_t PROMIS_EN : 1; /*!< [4..4] Enable/Disable MAC Promiscuous Operation */ + __IM uint32_t PAD_EN : 1; /*!< [5..5] Enable/Disable Frame Padding Remove on Receive */ + uint32_t : 1; + __IM uint32_t PAUSE_FWD : 1; /*!< [7..7] Terminate/Forward Pause Frames */ + __IOM uint32_t PAUSE_IGNORE : 1; /*!< [8..8] Ignore Pause Frame Quanta */ + __IM uint32_t TX_ADDR_INS : 1; /*!< [9..9] Non writable bit, fixed to 0 always. */ + __IOM uint32_t HD_ENA : 1; /*!< [10..10] Enable auto full/half-duplex operation (set to 1) or + * full-duplex only (set to 0). */ + __IOM uint32_t TX_CRC_APPEND : 1; /*!< [11..11] Enable CRC Append on Transmit */ + uint32_t : 1; + __IOM uint32_t SW_RESET : 1; /*!< [13..13] Self Clearing Reset Command Bit */ + uint32_t : 9; + __IOM uint32_t CNTL_FRM_ENA : 1; /*!< [23..23] MAC Control Frame Enable */ + __IOM uint32_t NO_LGTH_CHK : 1; /*!< [24..24] Payload Length Check Disable */ + __IOM uint32_t ENA_10 : 1; /*!< [25..25] This bit has no effect except PHYSPEED bit of STATUS_Pn + * register. */ + __IOM uint32_t EFPI_SELECT : 1; /*!< [26..26] EFPI_SELECT */ + __IOM uint32_t TX_TRUNCATE : 1; /*!< [27..27] TX_TRUNCATE */ + uint32_t : 2; + __IOM uint32_t TIMER_SEL : 1; /*!< [30..30] Selects the default timer to use for timestamping operations + * on transmit and on receive. The value is used when not + * overridden by the PTP auto-response function, pattern matchers + * or force forwarding information in a management tag. */ + uint32_t : 1; + } COMMAND_CONFIG_P1_b; + }; + + union + { + __IOM uint32_t MAC_ADDR_0_P1; /*!< (@ 0x00000C0C) Port 1 MAC Address Register 0 (n = 0 to 2) */ + + struct + { + __IOM uint32_t MAC_ADDR : 32; /*!< [31..0] The first 4 bytes of the MAC address of the port. First + * byte is bits [7:0]. The MAC address is used on locally + * generated frames such as pause frames, peer-delay response. */ + } MAC_ADDR_0_P1_b; + }; + + union + { + __IOM uint32_t MAC_ADDR_1_P1; /*!< (@ 0x00000C10) Port 1 MAC Address Register 1 (n = 0 to 2) */ + + struct + { + __IOM uint32_t MAC_ADDR : 16; /*!< [15..0] The last 2 bytes of the MAC address of the port. Bits + * [7:0] is the 5th byte and bits [15:8] is the 6th byte. */ + uint32_t : 16; + } MAC_ADDR_1_P1_b; + }; + + union + { + __IOM uint32_t FRM_LENGTH_P1; /*!< (@ 0x00000C14) Port 1 Maximum Frame Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t FRM_LENGTH : 14; /*!< [13..0] Maximum Frame Length */ + uint32_t : 18; + } FRM_LENGTH_P1_b; + }; + + union + { + __IM uint32_t PAUSE_QUANT_P1; /*!< (@ 0x00000C18) Port 1 MAC Pause Quanta (n = 0 to 3) */ + + struct + { + __IM uint32_t PAUSE_QUANT : 16; /*!< [15..0] Pause Quanta */ + uint32_t : 16; + } PAUSE_QUANT_P1_b; + }; + + union + { + __IOM uint32_t MAC_LINK_QTRIG_P1; /*!< (@ 0x00000C1C) Port 1 Trigger Event Configuration Register (n + * = 0 to 2) */ + + struct + { + __IOM uint32_t PORT_MASK : 4; /*!< [3..0] Per-port Bit Mask */ + uint32_t : 12; + __IOM uint32_t QUEUE_MASK : 8; /*!< [23..16] 1-bit per queue indicating from which queues a frame + * is transmitted from the ports indicated by PORT_MASK. A + * single frame is transmitted per indicated port in PORT_MASK + * among the queues indicated by QUEUE_MASK. */ + uint32_t : 4; + __IOM uint32_t TRIGGERED : 1; /*!< [28..28] When MODE is set to 1, TRIGGERED indicates whether + * a frame was transmitted. When MODE is set to 0, TRIGGERED + * is always 0. This flag clears when the register is written. */ + __IOM uint32_t DLR_MODE : 1; /*!< [29..29] When set to 0, the DLR state machine is ignored. When + * set to 1, the Link Queue Trigger occurs only if the DLR + * state machine is in the NORMAL or FAULT state. */ + __IOM uint32_t MODE : 1; /*!< [30..30] When set to 0, only a single Link_Status frame is generated. + * This is to prevent sending multiple frames due to link + * flapping. */ + __IOM uint32_t ENABLE : 1; /*!< [31..31] Write to 1 to enable the Link Queue Trigger feature. + * When the link status (phy_link) transitions from 1 -> + * 0, a trigger event is generated to the memory controller + * for the ports and queues indicated in PORT_MASK and QUEUE_MASK. */ + } MAC_LINK_QTRIG_P1_b; + }; + __IM uint32_t RESERVED33[4]; + + union + { + __IOM uint32_t PTPCLOCKIDENTITY1_P1; /*!< (@ 0x00000C30) Port 1 PTP Clock Identity 1 Register (n = 0 to + * 2) */ + + struct + { + __IOM uint32_t CLK_IDENTITY0 : 8; /*!< [7..0] 20, portIdentity.ClockIdentity[0] */ + __IOM uint32_t CLK_IDENTITY1 : 8; /*!< [15..8] 21, portIdentity.ClockIdentity[1] */ + __IOM uint32_t CLK_IDENTITY2 : 8; /*!< [23..16] 22, portIdentity.ClockIdentity[2] */ + __IOM uint32_t CLK_IDENTITY3 : 8; /*!< [31..24] 23, portIdentity.ClockIdentity[3] */ + } PTPCLOCKIDENTITY1_P1_b; + }; + + union + { + __IOM uint32_t PTPCLOCKIDENTITY2_P1; /*!< (@ 0x00000C34) Port 1 PTP Clock Identity 2 Register (n = 0 to + * 2) */ + + struct + { + __IOM uint32_t CLK_IDENTITY4 : 8; /*!< [7..0] 24, portIdentity.ClockIdentity[4] */ + __IOM uint32_t CLK_IDENTITY5 : 8; /*!< [15..8] 25, portIdentity.ClockIdentity[5] */ + __IOM uint32_t CLK_IDENTITY6 : 8; /*!< [23..16] 26, portIdentity.ClockIdentity[6] */ + __IOM uint32_t CLK_IDENTITY7 : 8; /*!< [31..24] 27, portIdentity.ClockIdentity[7] */ + } PTPCLOCKIDENTITY2_P1_b; + }; + + union + { + __IOM uint32_t PTPAUTORESPONSE_P1; /*!< (@ 0x00000C38) Port 1 PTP Auto Response Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t ARSP_EN : 1; /*!< [0..0] Auto Response Enable */ + __IOM uint32_t D_TIMER : 1; /*!< [1..1] Default timer to use for auto-response generation */ + uint32_t : 14; + __IOM uint32_t PORTNUM1 : 8; /*!< [23..16] 29, portIdentity.PortNumber[1] (lsb) */ + __IOM uint32_t PORTNUM0 : 8; /*!< [31..24] 28, portIdentity.PortNumber[0] (msb) */ + } PTPAUTORESPONSE_P1_b; + }; + __IM uint32_t RESERVED34; + + union + { + __IOM uint32_t STATUS_P1; /*!< (@ 0x00000C40) Port 1 Status Register */ + + struct + { + __IM uint32_t PHYSPEED : 2; /*!< [1..0] Currently Active PHY Interface Speed */ + __IM uint32_t PHYLINK : 1; /*!< [2..2] Link status from PHY interface */ + __IM uint32_t PHYDUPLEX : 1; /*!< [3..3] Duplex status from PHY interface */ + __IOM uint32_t TX_UNDFLW : 1; /*!< [4..4] Indicates that the transmit MAC underflow. This shall + * never occur during normal operation. */ + __IOM uint32_t LK_DST_ERR : 1; /*!< [5..5] Indicates that the L2 destination lookup process failed + * to complete in time before the next frame was received + * at the port. This should never occur under normal operation. + * The cause could be from IPG violations in the received + * frames. */ + __IM uint32_t BR_VERIF_ST : 3; /*!< [8..6] Indicates the current status of the verification according + * to clause 30.14.1.2 of the 802.3br specification */ + uint32_t : 23; + } STATUS_P1_b; + }; + + union + { + __IOM uint32_t TX_IPG_LENGTH_P1; /*!< (@ 0x00000C44) Port 1 Transmit IPG Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t TX_IPG_LENGTH : 5; /*!< [4..0] Define transmit interpacket gap in octets. Allowed values + * are in the range of 8 to 31. */ + uint32_t : 11; + __IOM uint32_t MINRTC3GAP : 5; /*!< [20..16] MINRTC3GAP */ + uint32_t : 11; + } TX_IPG_LENGTH_P1_b; + }; + + union + { + __IOM uint32_t EEE_CTL_STAT_P1; /*!< (@ 0x00000C48) Port 1 MAC EEE Functions Control and Status (n + * = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_AUTO : 1; /*!< [0..0] EEE Automatic Mode of Operation */ + __IOM uint32_t LPI_REQ : 1; /*!< [1..1] Request LPI Transmission when MAC Becomes Idle */ + __IOM uint32_t LPI_TXHOLD : 1; /*!< [2..2] MAC Transmission Hold */ + uint32_t : 5; + __IM uint32_t ST_LPI_REQ : 1; /*!< [8..8] Status (real time) of Internal LPI_REQ to the MAC */ + __IM uint32_t ST_LPI_TXHOLD : 1; /*!< [9..9] Status (real time) of Internal LPI_TXHOLD to the MAC */ + __IM uint32_t ST_TXBUSY : 1; /*!< [10..10] Status (real time) if the MAC is currently transmitting. */ + __IM uint32_t ST_TXAVAIL : 1; /*!< [11..11] Status (real time) if the MAC transmit FIFO has data + * available for transmission. */ + __IM uint32_t ST_LPI_IND : 1; /*!< [12..12] Status (real time) of Received LPI */ + uint32_t : 3; + __IM uint32_t STLH_LPI_REQ : 1; /*!< [16..16] Status (latched high) of Internal LPI_REQ to the MAC */ + __IM uint32_t STLH_LPI_TXHOLD : 1; /*!< [17..17] Status (latched high) of Internal LPI_TXHOLD to the + * MAC */ + __IM uint32_t STLH_TXBUSY : 1; /*!< [18..18] Status (latched high) if the MAC is/was Transmitting */ + uint32_t : 1; + __IM uint32_t STLH_LPI_IND : 1; /*!< [20..20] Status (latched high) of Received LPI (ST_LPI_IND) */ + uint32_t : 11; + } EEE_CTL_STAT_P1_b; + }; + + union + { + __IOM uint32_t EEE_IDLE_TIME_P1; /*!< (@ 0x00000C4C) Port 1 EEE Idle Time Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_IDLE_TIME : 32; /*!< [31..0] Time (-1) the transmitter must be idle before transmission + * of LPI begins. A 32-bit value in steps of 32 switch operating + * clock cycles. A value of 0 disables the timer. The value + * must be set to 1 less count. */ + } EEE_IDLE_TIME_P1_b; + }; + + union + { + __IOM uint32_t EEE_TWSYS_TIME_P1; /*!< (@ 0x00000C50) Port 1 EEE Wake Up Time Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_WKUP_TIME : 32; /*!< [31..0] Time (-1) after PHY wakeup until the MAC is allowed + * to begin transmitting the first frame again. A 32-bit value + * in steps of switch operating clock cycles. A value of 0 + * disables the timer. The value must be set to 1 less count. */ + } EEE_TWSYS_TIME_P1_b; + }; + + union + { + __IOM uint32_t IDLE_SLOPE_P1; /*!< (@ 0x00000C54) Port 1 MAC Traffic Shaper Bandwidth Control */ + + struct + { + __IOM uint32_t IDLE_SLOPE : 11; /*!< [10..0] Traffic Shaper Bandwidth Control */ + uint32_t : 21; + } IDLE_SLOPE_P1_b; + }; + + union + { + __IOM uint32_t CT_DELAY_P1; /*!< (@ 0x00000C58) Port 1 Cut-Through Delay Indication Register */ + + struct + { + __IOM uint32_t CT_DELAY : 9; /*!< [8..0] Delay Value in 400 ns / 40 ns / 8 ns increments (frequency + * of the MII PHY interface) */ + uint32_t : 23; + } CT_DELAY_P1_b; + }; + + union + { + __IOM uint32_t BR_CONTROL_P1; /*!< (@ 0x00000C5C) Port 1 802.3br Frame Configuration Register */ + + struct + { + __IOM uint32_t PREEMPT_ENA : 1; /*!< [0..0] When set to 1, enables 802.3br Frame Preemption. */ + __IOM uint32_t VERIFY_DIS : 1; /*!< [1..1] When set to 1, disables the verify process required for + * preemption operation. */ + __IOM uint32_t RESPONSE_DIS : 1; /*!< [2..2] When set to 1 prevents the MAC from responding to "verify" + * frames. */ + uint32_t : 1; + __IOM uint32_t ADDFRAGSIZE : 2; /*!< [5..4] Minimum fragment size in increments of 64 bytes. */ + uint32_t : 2; + __IOM uint32_t TX_VERIFY_TIME : 7; /*!< [14..8] Preemption verification timeout in milliseconds. */ + uint32_t : 1; + __IOM uint32_t RX_STRICT_PRE : 1; /*!< [16..16] When set to 1, the preamble is checked so all bytes + * except the SFD are 0x55. When set to 0, only the last 2 + * bytes of the preamble are checked (SFD/SMD and FRAG_COUNT). + * It is recommended to set this bit to 1 to comply with the + * 802.3br specification. This bit must be set to 0 if only + * non-802.3br traffic is expected (for example, normal Ethernet + * traffic) and if custom preamble is used. */ + __IOM uint32_t RX_BR_SMD_DIS : 1; /*!< [17..17] When set to 1, the receiver does not decode the 802.3br + * SMDs and assumes all frames are express frames. This bit + * must be set to 0 for correct operation with 802.3br, and + * can be set to 1 when 802.3br is not enabled to avoid false + * detection of SMDs. */ + __IOM uint32_t RX_STRICT_BR_CTL : 1; /*!< [18..18] When set to 1, strict checking of VERIFY and RESPONSE + * frames is enabled. When set to 1, the frame contents and + * frame length checks are also performed on these frames. + * The mCRC is always checked regardless of the value of this + * register. This bit must be set to 0 to be compliant with + * the functionality described in IEEE 802.3br. */ + __IOM uint32_t TX_MCRC_INV : 1; /*!< [19..19] When set to 1, the 32-bit XOR mask used to calculate + * the mCRC for transmitted frames is inverted. This bit must + * always be written to 0 and only used for debugging. */ + __IOM uint32_t RX_MCRC_INV : 1; /*!< [20..20] When set to 1, the 32-bit XOR mask used to calculate + * the mCRC for received frames is inverted. This bit must + * always be written to 0 and only used for debugging. */ + uint32_t : 11; + } BR_CONTROL_P1_b; + }; + __IM uint32_t RESERVED35[2]; + + union + { + __IM uint32_t AFRAMESTRANSMITTEDOK_P1; /*!< (@ 0x00000C68) Port 1 MAC Transmitted Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Transmitted, including pause. */ + } AFRAMESTRANSMITTEDOK_P1_b; + }; + + union + { + __IM uint32_t AFRAMESRECEIVEDOK_P1; /*!< (@ 0x00000C6C) Port 1 MAC Received Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Received, including pause. */ + } AFRAMESRECEIVEDOK_P1_b; + }; + + union + { + __IM uint32_t AFRAMECHECKSEQUENCEERRORS_P1; /*!< (@ 0x00000C70) Port 1 MAC FCS Error Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t FCSERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Length but CRC error. */ + } AFRAMECHECKSEQUENCEERRORS_P1_b; + }; + + union + { + __IM uint32_t AALIGNMENTERRORS_P1; /*!< (@ 0x00000C74) Port 1 MAC Alignment Error Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t ALGNERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Odd Number + * of Nibbles (MII) Received. */ + } AALIGNMENTERRORS_P1_b; + }; + + union + { + __IM uint32_t AOCTETSTRANSMITTEDOK_P1; /*!< (@ 0x00000C78) Port 1 MAC Transmitted Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Transmitted. */ + } AOCTETSTRANSMITTEDOK_P1_b; + }; + + union + { + __IM uint32_t AOCTETSRECEIVEDOK_P1; /*!< (@ 0x00000C7C) Port 1 MAC Received Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Received. */ + } AOCTETSRECEIVEDOK_P1_b; + }; + + union + { + __IM uint32_t ATXPAUSEMACCTRLFRAMES_P1; /*!< (@ 0x00000C80) Port 1 MAC Transmitted Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Transmitted. */ + } ATXPAUSEMACCTRLFRAMES_P1_b; + }; + + union + { + __IM uint32_t ARXPAUSEMACCTRLFRAMES_P1; /*!< (@ 0x00000C84) Port 1 MAC Received Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Received. */ + } ARXPAUSEMACCTRLFRAMES_P1_b; + }; + + union + { + __IM uint32_t IFINERRORS_P1; /*!< (@ 0x00000C88) Port 1 MAC Input Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t INERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Any Error + * During Reception such as CRC, Length, PHY Error, RX FIFO + * Overflow. */ + } IFINERRORS_P1_b; + }; + + union + { + __IM uint32_t IFOUTERRORS_P1; /*!< (@ 0x00000C8C) Port 1 MAC Output Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t OUTERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Frame + * Transmitted with PHY error. */ + } IFOUTERRORS_P1_b; + }; + + union + { + __IM uint32_t IFINUCASTPKTS_P1; /*!< (@ 0x00000C90) Port 1 MAC Received Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Received. */ + } IFINUCASTPKTS_P1_b; + }; + + union + { + __IM uint32_t IFINMULTICASTPKTS_P1; /*!< (@ 0x00000C94) Port 1 MAC Received Multicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Received. */ + } IFINMULTICASTPKTS_P1_b; + }; + + union + { + __IM uint32_t IFINBROADCASTPKTS_P1; /*!< (@ 0x00000C98) Port 1 MAC Received Broadcast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Received. */ + } IFINBROADCASTPKTS_P1_b; + }; + + union + { + __IM uint32_t IFOUTDISCARDS_P1; /*!< (@ 0x00000C9C) Port 1 MAC Discarded Outbound Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t DISCOBCOUNT : 32; /*!< [31..0] Not Applicable */ + } IFOUTDISCARDS_P1_b; + }; + + union + { + __IM uint32_t IFOUTUCASTPKTS_P1; /*!< (@ 0x00000CA0) Port 1 MAC Transmitted Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Transmitted. */ + } IFOUTUCASTPKTS_P1_b; + }; + + union + { + __IM uint32_t IFOUTMULTICASTPKTS_P1; /*!< (@ 0x00000CA4) Port 1 MAC Transmitted Multicast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Transmitted. */ + } IFOUTMULTICASTPKTS_P1_b; + }; + + union + { + __IM uint32_t IFOUTBROADCASTPKTS_P1; /*!< (@ 0x00000CA8) Port 1 MAC Transmitted Broadcast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Transmitted. */ + } IFOUTBROADCASTPKTS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSDROPEVENTS_P1; /*!< (@ 0x00000CAC) Port 1 MAC Dropped Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t DROPCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC RX FIFO + * Full at frame start. */ + } ETHERSTATSDROPEVENTS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSOCTETS_P1; /*!< (@ 0x00000CB0) Port 1 MAC All Frame Octets Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLOCTETS : 32; /*!< [31..0] ALLOCTETS */ + } ETHERSTATSOCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS_P1; /*!< (@ 0x00000CB4) Port 1 MAC All Frame Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLCOUNT : 32; /*!< [31..0] ALLCOUNT */ + } ETHERSTATSPKTS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSUNDERSIZEPKTS_P1; /*!< (@ 0x00000CB8) Port 1 MAC Too Short Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t TOOSHRTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Good CRC. */ + } ETHERSTATSUNDERSIZEPKTS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSOVERSIZEPKTS_P1; /*!< (@ 0x00000CBC) Port 1 MAC Too Long Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t TOOLONGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Good CRC. */ + } ETHERSTATSOVERSIZEPKTS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS64OCTETS_P1; /*!< (@ 0x00000CC0) Port 1 MAC 64 Octets Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT64 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 64 bytes). */ + } ETHERSTATSPKTS64OCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS65TO127OCTETS_P1; /*!< (@ 0x00000CC4) Port 1 MAC 65 to 127 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT65T127 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 65 to 127 bytes). */ + } ETHERSTATSPKTS65TO127OCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS128TO255OCTETS_P1; /*!< (@ 0x00000CC8) Port 1 MAC 128 to 255 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT128T255 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 128 to 255 bytes). */ + } ETHERSTATSPKTS128TO255OCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS256TO511OCTETS_P1; /*!< (@ 0x00000CCC) Port 1 MAC 256 to 511 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT256T511 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 256 to 511 bytes). */ + } ETHERSTATSPKTS256TO511OCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS512TO1023OCTETS_P1; /*!< (@ 0x00000CD0) Port 1 MAC 512 to 1023 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT512T1023 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 512 to 1023 bytes). */ + } ETHERSTATSPKTS512TO1023OCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1024TO1518OCTETS_P1; /*!< (@ 0x00000CD4) Port 1 MAC 1024 to 1518 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1024T1518 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 1024 to 1518 bytes). */ + } ETHERSTATSPKTS1024TO1518OCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1519TOXOCTETS_P1; /*!< (@ 0x00000CD8) Port 1 MAC Over 1519 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1519TX : 32; /*!< [31..0] PORT n, this field indicates the number of MAC all Frames, + * Good and Bad (Packet Size: over 1519 bytes). */ + } ETHERSTATSPKTS1519TOXOCTETS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSJABBERS_P1; /*!< (@ 0x00000CDC) Port 1 MAC Jabbers Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t JABBERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Bad CRC. */ + } ETHERSTATSJABBERS_P1_b; + }; + + union + { + __IM uint32_t ETHERSTATSFRAGMENTS_P1; /*!< (@ 0x00000CE0) Port 1 MAC Fragment Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t FRAGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Bad CRC. */ + } ETHERSTATSFRAGMENTS_P1_b; + }; + __IM uint32_t RESERVED36; + + union + { + __IM uint32_t VLANRECEIVEDOK_P1; /*!< (@ 0x00000CE8) Port 1 MAC Received VLAN Tagged Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Received. */ + } VLANRECEIVEDOK_P1_b; + }; + __IM uint32_t RESERVED37[2]; + + union + { + __IM uint32_t VLANTRANSMITTEDOK_P1; /*!< (@ 0x00000CF4) Port 1 MAC Transmitted VLAN Tagged Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Transmitted. */ + } VLANTRANSMITTEDOK_P1_b; + }; + + union + { + __IM uint32_t FRAMESRETRANSMITTED_P1; /*!< (@ 0x00000CF8) Port 1 MAC Retransmitted Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RETXCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Transmitted + * Frames that experienced a collision and were retransmitted. */ + } FRAMESRETRANSMITTED_P1_b; + }; + __IM uint32_t RESERVED38; + + union + { + __IM uint32_t STATS_HIWORD_P1; /*!< (@ 0x00000D00) Port 1 MAC Statistics Counter High Word Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t STATS_HIWORD : 32; /*!< [31..0] The latched upper 32-bit of the 64 bits MAC Statistics + * Counter Last Read */ + } STATS_HIWORD_P1_b; + }; + + union + { + __IOM uint32_t STATS_CTRL_P1; /*!< (@ 0x00000D04) Port 1 MAC Statistics Control Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t CLRALL : 1; /*!< [0..0] Self Clearing Counter Initialize Command */ + __IM uint32_t CLRBUSY : 1; /*!< [1..1] Clear in Progress Indication */ + uint32_t : 30; + } STATS_CTRL_P1_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUELO_P1; /*!< (@ 0x00000D08) Port 1 MAC Statistics Clear Value Lower Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUELO : 32; /*!< [31..0] PORT n, lower 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUELO_P1_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUEHI_P1; /*!< (@ 0x00000D0C) Port 1 MAC Statistics Clear Value Higher Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUEHI : 32; /*!< [31..0] PORT n, upper 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUEHI_P1_b; + }; + + union + { + __IM uint32_t ADEFERRED_P1; /*!< (@ 0x00000D10) Port 1 MAC Deferred Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t DEFERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frame Transmitted + * without collision but was deferred at begin. */ + } ADEFERRED_P1_b; + }; + + union + { + __IM uint32_t AMULTIPLECOLLISIONS_P1; /*!< (@ 0x00000D14) Port 1 MAC Multiple Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTMLTCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after multiple collisions. */ + } AMULTIPLECOLLISIONS_P1_b; + }; + + union + { + __IM uint32_t ASINGLECOLLISIONS_P1; /*!< (@ 0x00000D18) Port 1 MAC Single Collision Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTSNGLCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after single collision. */ + } ASINGLECOLLISIONS_P1_b; + }; + + union + { + __IM uint32_t ALATECOLLISIONS_P1; /*!< (@ 0x00000D1C) Port 1 MAC Late Collision Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t LATECOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of too Late + * Collision. Frame was aborted and not retransmitted. */ + } ALATECOLLISIONS_P1_b; + }; + + union + { + __IM uint32_t AEXCESSIVECOLLISIONS_P1; /*!< (@ 0x00000D20) Port 1 MAC Excessive Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t EXCCOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frames Discarded + * due to 16 consecutive collisions. */ + } AEXCESSIVECOLLISIONS_P1_b; + }; + + union + { + __IM uint32_t ACARRIERSENSEERRORS_P1; /*!< (@ 0x00000D24) Port 1 MAC Carrier Sense Error Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t CSERRCOUNT : 32; /*!< [31..0] PORT n, increments during Transmission without Collisions + * the PHY Carrier Sense Signal (RX_CRS) dropped or never + * asserted. */ + } ACARRIERSENSEERRORS_P1_b; + }; + __IM uint32_t RESERVED39[182]; + + union + { + __IM uint32_t REV_P2; /*!< (@ 0x00001000) Port 2 MAC Core Revision (n = 0 to 3) */ + + struct + { + __IM uint32_t REV : 32; /*!< [31..0] MAC Core Revision */ + } REV_P2_b; + }; + __IM uint32_t RESERVED40; + + union + { + __IOM uint32_t COMMAND_CONFIG_P2; /*!< (@ 0x00001008) Port 2 Command Configuration Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t TX_ENA : 1; /*!< [0..0] Enable/Disable MAC Transmit Path */ + __IOM uint32_t RX_ENA : 1; /*!< [1..1] Enable/Disable MAC Receive Path */ + __IOM uint32_t TDMA_PREBUF_DIS : 1; /*!< [2..2] When set to 1, the MAC does not request a new frame from + * the IMC until the current frame is completed. This can + * cause the IPG between frames to be more than the value + * in TX_IPG_LENGTH. */ + __IOM uint32_t ETH_SPEED : 1; /*!< [3..3] Operation Mode Definition */ + __IM uint32_t PROMIS_EN : 1; /*!< [4..4] Enable/Disable MAC Promiscuous Operation */ + __IM uint32_t PAD_EN : 1; /*!< [5..5] Enable/Disable Frame Padding Remove on Receive */ + uint32_t : 1; + __IM uint32_t PAUSE_FWD : 1; /*!< [7..7] Terminate/Forward Pause Frames */ + __IOM uint32_t PAUSE_IGNORE : 1; /*!< [8..8] Ignore Pause Frame Quanta */ + __IM uint32_t TX_ADDR_INS : 1; /*!< [9..9] Non writable bit, fixed to 0 always. */ + __IOM uint32_t HD_ENA : 1; /*!< [10..10] Enable auto full/half-duplex operation (set to 1) or + * full-duplex only (set to 0). */ + __IOM uint32_t TX_CRC_APPEND : 1; /*!< [11..11] Enable CRC Append on Transmit */ + uint32_t : 1; + __IOM uint32_t SW_RESET : 1; /*!< [13..13] Self Clearing Reset Command Bit */ + uint32_t : 9; + __IOM uint32_t CNTL_FRM_ENA : 1; /*!< [23..23] MAC Control Frame Enable */ + __IOM uint32_t NO_LGTH_CHK : 1; /*!< [24..24] Payload Length Check Disable */ + __IOM uint32_t ENA_10 : 1; /*!< [25..25] This bit has no effect except PHYSPEED bit of STATUS_Pn + * register. */ + __IOM uint32_t EFPI_SELECT : 1; /*!< [26..26] EFPI_SELECT */ + __IOM uint32_t TX_TRUNCATE : 1; /*!< [27..27] TX_TRUNCATE */ + uint32_t : 2; + __IOM uint32_t TIMER_SEL : 1; /*!< [30..30] Selects the default timer to use for timestamping operations + * on transmit and on receive. The value is used when not + * overridden by the PTP auto-response function, pattern matchers + * or force forwarding information in a management tag. */ + uint32_t : 1; + } COMMAND_CONFIG_P2_b; + }; + + union + { + __IOM uint32_t MAC_ADDR_0_P2; /*!< (@ 0x0000100C) Port 2 MAC Address Register 0 (n = 0 to 2) */ + + struct + { + __IOM uint32_t MAC_ADDR : 32; /*!< [31..0] The first 4 bytes of the MAC address of the port. First + * byte is bits [7:0]. The MAC address is used on locally + * generated frames such as pause frames, peer-delay response. */ + } MAC_ADDR_0_P2_b; + }; + + union + { + __IOM uint32_t MAC_ADDR_1_P2; /*!< (@ 0x00001010) Port 2 MAC Address Register 1 (n = 0 to 2) */ + + struct + { + __IOM uint32_t MAC_ADDR : 16; /*!< [15..0] The last 2 bytes of the MAC address of the port. Bits + * [7:0] is the 5th byte and bits [15:8] is the 6th byte. */ + uint32_t : 16; + } MAC_ADDR_1_P2_b; + }; + + union + { + __IOM uint32_t FRM_LENGTH_P2; /*!< (@ 0x00001014) Port 2 Maximum Frame Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t FRM_LENGTH : 14; /*!< [13..0] Maximum Frame Length */ + uint32_t : 18; + } FRM_LENGTH_P2_b; + }; + + union + { + __IM uint32_t PAUSE_QUANT_P2; /*!< (@ 0x00001018) Port 2 MAC Pause Quanta (n = 0 to 3) */ + + struct + { + __IM uint32_t PAUSE_QUANT : 16; /*!< [15..0] Pause Quanta */ + uint32_t : 16; + } PAUSE_QUANT_P2_b; + }; + + union + { + __IOM uint32_t MAC_LINK_QTRIG_P2; /*!< (@ 0x0000101C) Port 2 Trigger Event Configuration Register (n + * = 0 to 2) */ + + struct + { + __IOM uint32_t PORT_MASK : 4; /*!< [3..0] Per-port Bit Mask */ + uint32_t : 12; + __IOM uint32_t QUEUE_MASK : 8; /*!< [23..16] 1-bit per queue indicating from which queues a frame + * is transmitted from the ports indicated by PORT_MASK. A + * single frame is transmitted per indicated port in PORT_MASK + * among the queues indicated by QUEUE_MASK. */ + uint32_t : 4; + __IOM uint32_t TRIGGERED : 1; /*!< [28..28] When MODE is set to 1, TRIGGERED indicates whether + * a frame was transmitted. When MODE is set to 0, TRIGGERED + * is always 0. This flag clears when the register is written. */ + __IOM uint32_t DLR_MODE : 1; /*!< [29..29] When set to 0, the DLR state machine is ignored. When + * set to 1, the Link Queue Trigger occurs only if the DLR + * state machine is in the NORMAL or FAULT state. */ + __IOM uint32_t MODE : 1; /*!< [30..30] When set to 0, only a single Link_Status frame is generated. + * This is to prevent sending multiple frames due to link + * flapping. */ + __IOM uint32_t ENABLE : 1; /*!< [31..31] Write to 1 to enable the Link Queue Trigger feature. + * When the link status (phy_link) transitions from 1 -> + * 0, a trigger event is generated to the memory controller + * for the ports and queues indicated in PORT_MASK and QUEUE_MASK. */ + } MAC_LINK_QTRIG_P2_b; + }; + __IM uint32_t RESERVED41[4]; + + union + { + __IOM uint32_t PTPCLOCKIDENTITY1_P2; /*!< (@ 0x00001030) Port 2 PTP Clock Identity 1 Register (n = 0 to + * 2) */ + + struct + { + __IOM uint32_t CLK_IDENTITY0 : 8; /*!< [7..0] 20, portIdentity.ClockIdentity[0] */ + __IOM uint32_t CLK_IDENTITY1 : 8; /*!< [15..8] 21, portIdentity.ClockIdentity[1] */ + __IOM uint32_t CLK_IDENTITY2 : 8; /*!< [23..16] 22, portIdentity.ClockIdentity[2] */ + __IOM uint32_t CLK_IDENTITY3 : 8; /*!< [31..24] 23, portIdentity.ClockIdentity[3] */ + } PTPCLOCKIDENTITY1_P2_b; + }; + + union + { + __IOM uint32_t PTPCLOCKIDENTITY2_P2; /*!< (@ 0x00001034) Port 2 PTP Clock Identity 2 Register (n = 0 to + * 2) */ + + struct + { + __IOM uint32_t CLK_IDENTITY4 : 8; /*!< [7..0] 24, portIdentity.ClockIdentity[4] */ + __IOM uint32_t CLK_IDENTITY5 : 8; /*!< [15..8] 25, portIdentity.ClockIdentity[5] */ + __IOM uint32_t CLK_IDENTITY6 : 8; /*!< [23..16] 26, portIdentity.ClockIdentity[6] */ + __IOM uint32_t CLK_IDENTITY7 : 8; /*!< [31..24] 27, portIdentity.ClockIdentity[7] */ + } PTPCLOCKIDENTITY2_P2_b; + }; + + union + { + __IOM uint32_t PTPAUTORESPONSE_P2; /*!< (@ 0x00001038) Port 2 PTP Auto Response Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t ARSP_EN : 1; /*!< [0..0] Auto Response Enable */ + __IOM uint32_t D_TIMER : 1; /*!< [1..1] Default timer to use for auto-response generation */ + uint32_t : 14; + __IOM uint32_t PORTNUM1 : 8; /*!< [23..16] 29, portIdentity.PortNumber[1] (lsb) */ + __IOM uint32_t PORTNUM0 : 8; /*!< [31..24] 28, portIdentity.PortNumber[0] (msb) */ + } PTPAUTORESPONSE_P2_b; + }; + __IM uint32_t RESERVED42; + + union + { + __IOM uint32_t STATUS_P2; /*!< (@ 0x00001040) Port 2 Status Register */ + + struct + { + __IM uint32_t PHYSPEED : 2; /*!< [1..0] Currently Active PHY Interface Speed */ + __IM uint32_t PHYLINK : 1; /*!< [2..2] Link status from PHY interface */ + __IM uint32_t PHYDUPLEX : 1; /*!< [3..3] Duplex status from PHY interface */ + __IOM uint32_t TX_UNDFLW : 1; /*!< [4..4] Indicates that the transmit MAC underflow. This shall + * never occur during normal operation. */ + __IOM uint32_t LK_DST_ERR : 1; /*!< [5..5] Indicates that the L2 destination lookup process failed + * to complete in time before the next frame was received + * at the port. This should never occur under normal operation. + * The cause could be from IPG violations in the received + * frames. */ + __IM uint32_t BR_VERIF_ST : 3; /*!< [8..6] Indicates the current status of the verification according + * to clause 30.14.1.2 of the 802.3br specification */ + uint32_t : 23; + } STATUS_P2_b; + }; + + union + { + __IOM uint32_t TX_IPG_LENGTH_P2; /*!< (@ 0x00001044) Port 2 Transmit IPG Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t TX_IPG_LENGTH : 5; /*!< [4..0] Define transmit interpacket gap in octets. Allowed values + * are in the range of 8 to 31. */ + uint32_t : 11; + __IOM uint32_t MINRTC3GAP : 5; /*!< [20..16] MINRTC3GAP */ + uint32_t : 11; + } TX_IPG_LENGTH_P2_b; + }; + + union + { + __IOM uint32_t EEE_CTL_STAT_P2; /*!< (@ 0x00001048) Port 2 MAC EEE Functions Control and Status (n + * = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_AUTO : 1; /*!< [0..0] EEE Automatic Mode of Operation */ + __IOM uint32_t LPI_REQ : 1; /*!< [1..1] Request LPI Transmission when MAC Becomes Idle */ + __IOM uint32_t LPI_TXHOLD : 1; /*!< [2..2] MAC Transmission Hold */ + uint32_t : 5; + __IM uint32_t ST_LPI_REQ : 1; /*!< [8..8] Status (real time) of Internal LPI_REQ to the MAC */ + __IM uint32_t ST_LPI_TXHOLD : 1; /*!< [9..9] Status (real time) of Internal LPI_TXHOLD to the MAC */ + __IM uint32_t ST_TXBUSY : 1; /*!< [10..10] Status (real time) if the MAC is currently transmitting. */ + __IM uint32_t ST_TXAVAIL : 1; /*!< [11..11] Status (real time) if the MAC transmit FIFO has data + * available for transmission. */ + __IM uint32_t ST_LPI_IND : 1; /*!< [12..12] Status (real time) of Received LPI */ + uint32_t : 3; + __IM uint32_t STLH_LPI_REQ : 1; /*!< [16..16] Status (latched high) of Internal LPI_REQ to the MAC */ + __IM uint32_t STLH_LPI_TXHOLD : 1; /*!< [17..17] Status (latched high) of Internal LPI_TXHOLD to the + * MAC */ + __IM uint32_t STLH_TXBUSY : 1; /*!< [18..18] Status (latched high) if the MAC is/was Transmitting */ + uint32_t : 1; + __IM uint32_t STLH_LPI_IND : 1; /*!< [20..20] Status (latched high) of Received LPI (ST_LPI_IND) */ + uint32_t : 11; + } EEE_CTL_STAT_P2_b; + }; + + union + { + __IOM uint32_t EEE_IDLE_TIME_P2; /*!< (@ 0x0000104C) Port 2 EEE Idle Time Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_IDLE_TIME : 32; /*!< [31..0] Time (-1) the transmitter must be idle before transmission + * of LPI begins. A 32-bit value in steps of 32 switch operating + * clock cycles. A value of 0 disables the timer. The value + * must be set to 1 less count. */ + } EEE_IDLE_TIME_P2_b; + }; + + union + { + __IOM uint32_t EEE_TWSYS_TIME_P2; /*!< (@ 0x00001050) Port 2 EEE Wake Up Time Register (n = 0 to 2) */ + + struct + { + __IOM uint32_t EEE_WKUP_TIME : 32; /*!< [31..0] Time (-1) after PHY wakeup until the MAC is allowed + * to begin transmitting the first frame again. A 32-bit value + * in steps of switch operating clock cycles. A value of 0 + * disables the timer. The value must be set to 1 less count. */ + } EEE_TWSYS_TIME_P2_b; + }; + + union + { + __IOM uint32_t IDLE_SLOPE_P2; /*!< (@ 0x00001054) Port 2 MAC Traffic Shaper Bandwidth Control */ + + struct + { + __IOM uint32_t IDLE_SLOPE : 11; /*!< [10..0] Traffic Shaper Bandwidth Control */ + uint32_t : 21; + } IDLE_SLOPE_P2_b; + }; + + union + { + __IOM uint32_t CT_DELAY_P2; /*!< (@ 0x00001058) Port 2 Cut-Through Delay Indication Register */ + + struct + { + __IOM uint32_t CT_DELAY : 9; /*!< [8..0] Delay Value in 400 ns / 40 ns / 8 ns increments (frequency + * of the MII PHY interface) */ + uint32_t : 23; + } CT_DELAY_P2_b; + }; + + union + { + __IOM uint32_t BR_CONTROL_P2; /*!< (@ 0x0000105C) Port 2 802.3br Frame Configuration Register */ + + struct + { + __IOM uint32_t PREEMPT_ENA : 1; /*!< [0..0] When set to 1, enables 802.3br Frame Preemption. */ + __IOM uint32_t VERIFY_DIS : 1; /*!< [1..1] When set to 1, disables the verify process required for + * preemption operation. */ + __IOM uint32_t RESPONSE_DIS : 1; /*!< [2..2] When set to 1 prevents the MAC from responding to "verify" + * frames. */ + uint32_t : 1; + __IOM uint32_t ADDFRAGSIZE : 2; /*!< [5..4] Minimum fragment size in increments of 64 bytes. */ + uint32_t : 2; + __IOM uint32_t TX_VERIFY_TIME : 7; /*!< [14..8] Preemption verification timeout in milliseconds. */ + uint32_t : 1; + __IOM uint32_t RX_STRICT_PRE : 1; /*!< [16..16] When set to 1, the preamble is checked so all bytes + * except the SFD are 0x55. When set to 0, only the last 2 + * bytes of the preamble are checked (SFD/SMD and FRAG_COUNT). + * It is recommended to set this bit to 1 to comply with the + * 802.3br specification. This bit must be set to 0 if only + * non-802.3br traffic is expected (for example, normal Ethernet + * traffic) and if custom preamble is used. */ + __IOM uint32_t RX_BR_SMD_DIS : 1; /*!< [17..17] When set to 1, the receiver does not decode the 802.3br + * SMDs and assumes all frames are express frames. This bit + * must be set to 0 for correct operation with 802.3br, and + * can be set to 1 when 802.3br is not enabled to avoid false + * detection of SMDs. */ + __IOM uint32_t RX_STRICT_BR_CTL : 1; /*!< [18..18] When set to 1, strict checking of VERIFY and RESPONSE + * frames is enabled. When set to 1, the frame contents and + * frame length checks are also performed on these frames. + * The mCRC is always checked regardless of the value of this + * register. This bit must be set to 0 to be compliant with + * the functionality described in IEEE 802.3br. */ + __IOM uint32_t TX_MCRC_INV : 1; /*!< [19..19] When set to 1, the 32-bit XOR mask used to calculate + * the mCRC for transmitted frames is inverted. This bit must + * always be written to 0 and only used for debugging. */ + __IOM uint32_t RX_MCRC_INV : 1; /*!< [20..20] When set to 1, the 32-bit XOR mask used to calculate + * the mCRC for received frames is inverted. This bit must + * always be written to 0 and only used for debugging. */ + uint32_t : 11; + } BR_CONTROL_P2_b; + }; + __IM uint32_t RESERVED43[2]; + + union + { + __IM uint32_t AFRAMESTRANSMITTEDOK_P2; /*!< (@ 0x00001068) Port 2 MAC Transmitted Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Transmitted, including pause. */ + } AFRAMESTRANSMITTEDOK_P2_b; + }; + + union + { + __IM uint32_t AFRAMESRECEIVEDOK_P2; /*!< (@ 0x0000106C) Port 2 MAC Received Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Received, including pause. */ + } AFRAMESRECEIVEDOK_P2_b; + }; + + union + { + __IM uint32_t AFRAMECHECKSEQUENCEERRORS_P2; /*!< (@ 0x00001070) Port 2 MAC FCS Error Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t FCSERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Length but CRC error. */ + } AFRAMECHECKSEQUENCEERRORS_P2_b; + }; + + union + { + __IM uint32_t AALIGNMENTERRORS_P2; /*!< (@ 0x00001074) Port 2 MAC Alignment Error Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t ALGNERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Odd Number + * of Nibbles (MII) Received. */ + } AALIGNMENTERRORS_P2_b; + }; + + union + { + __IM uint32_t AOCTETSTRANSMITTEDOK_P2; /*!< (@ 0x00001078) Port 2 MAC Transmitted Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Transmitted. */ + } AOCTETSTRANSMITTEDOK_P2_b; + }; + + union + { + __IM uint32_t AOCTETSRECEIVEDOK_P2; /*!< (@ 0x0000107C) Port 2 MAC Received Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Received. */ + } AOCTETSRECEIVEDOK_P2_b; + }; + + union + { + __IM uint32_t ATXPAUSEMACCTRLFRAMES_P2; /*!< (@ 0x00001080) Port 2 MAC Transmitted Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Transmitted. */ + } ATXPAUSEMACCTRLFRAMES_P2_b; + }; + + union + { + __IM uint32_t ARXPAUSEMACCTRLFRAMES_P2; /*!< (@ 0x00001084) Port 2 MAC Received Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Received. */ + } ARXPAUSEMACCTRLFRAMES_P2_b; + }; + + union + { + __IM uint32_t IFINERRORS_P2; /*!< (@ 0x00001088) Port 2 MAC Input Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t INERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Any Error + * During Reception such as CRC, Length, PHY Error, RX FIFO + * Overflow. */ + } IFINERRORS_P2_b; + }; + + union + { + __IM uint32_t IFOUTERRORS_P2; /*!< (@ 0x0000108C) Port 2 MAC Output Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t OUTERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Frame + * Transmitted with PHY error. */ + } IFOUTERRORS_P2_b; + }; + + union + { + __IM uint32_t IFINUCASTPKTS_P2; /*!< (@ 0x00001090) Port 2 MAC Received Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Received. */ + } IFINUCASTPKTS_P2_b; + }; + + union + { + __IM uint32_t IFINMULTICASTPKTS_P2; /*!< (@ 0x00001094) Port 2 MAC Received Multicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Received. */ + } IFINMULTICASTPKTS_P2_b; + }; + + union + { + __IM uint32_t IFINBROADCASTPKTS_P2; /*!< (@ 0x00001098) Port 2 MAC Received Broadcast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Received. */ + } IFINBROADCASTPKTS_P2_b; + }; + + union + { + __IM uint32_t IFOUTDISCARDS_P2; /*!< (@ 0x0000109C) Port 2 MAC Discarded Outbound Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t DISCOBCOUNT : 32; /*!< [31..0] Not Applicable */ + } IFOUTDISCARDS_P2_b; + }; + + union + { + __IM uint32_t IFOUTUCASTPKTS_P2; /*!< (@ 0x000010A0) Port 2 MAC Transmitted Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Transmitted. */ + } IFOUTUCASTPKTS_P2_b; + }; + + union + { + __IM uint32_t IFOUTMULTICASTPKTS_P2; /*!< (@ 0x000010A4) Port 2 MAC Transmitted Multicast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Transmitted. */ + } IFOUTMULTICASTPKTS_P2_b; + }; + + union + { + __IM uint32_t IFOUTBROADCASTPKTS_P2; /*!< (@ 0x000010A8) Port 2 MAC Transmitted Broadcast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Transmitted. */ + } IFOUTBROADCASTPKTS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSDROPEVENTS_P2; /*!< (@ 0x000010AC) Port 2 MAC Dropped Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t DROPCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC RX FIFO + * Full at frame start. */ + } ETHERSTATSDROPEVENTS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSOCTETS_P2; /*!< (@ 0x000010B0) Port 2 MAC All Frame Octets Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLOCTETS : 32; /*!< [31..0] ALLOCTETS */ + } ETHERSTATSOCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS_P2; /*!< (@ 0x000010B4) Port 2 MAC All Frame Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLCOUNT : 32; /*!< [31..0] ALLCOUNT */ + } ETHERSTATSPKTS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSUNDERSIZEPKTS_P2; /*!< (@ 0x000010B8) Port 2 MAC Too Short Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t TOOSHRTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Good CRC. */ + } ETHERSTATSUNDERSIZEPKTS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSOVERSIZEPKTS_P2; /*!< (@ 0x000010BC) Port 2 MAC Too Long Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t TOOLONGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Good CRC. */ + } ETHERSTATSOVERSIZEPKTS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS64OCTETS_P2; /*!< (@ 0x000010C0) Port 2 MAC 64 Octets Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT64 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 64 bytes). */ + } ETHERSTATSPKTS64OCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS65TO127OCTETS_P2; /*!< (@ 0x000010C4) Port 2 MAC 65 to 127 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT65T127 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 65 to 127 bytes). */ + } ETHERSTATSPKTS65TO127OCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS128TO255OCTETS_P2; /*!< (@ 0x000010C8) Port 2 MAC 128 to 255 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT128T255 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 128 to 255 bytes). */ + } ETHERSTATSPKTS128TO255OCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS256TO511OCTETS_P2; /*!< (@ 0x000010CC) Port 2 MAC 256 to 511 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT256T511 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 256 to 511 bytes). */ + } ETHERSTATSPKTS256TO511OCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS512TO1023OCTETS_P2; /*!< (@ 0x000010D0) Port 2 MAC 512 to 1023 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT512T1023 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 512 to 1023 bytes). */ + } ETHERSTATSPKTS512TO1023OCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1024TO1518OCTETS_P2; /*!< (@ 0x000010D4) Port 2 MAC 1024 to 1518 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1024T1518 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 1024 to 1518 bytes). */ + } ETHERSTATSPKTS1024TO1518OCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1519TOXOCTETS_P2; /*!< (@ 0x000010D8) Port 2 MAC Over 1519 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1519TX : 32; /*!< [31..0] PORT n, this field indicates the number of MAC all Frames, + * Good and Bad (Packet Size: over 1519 bytes). */ + } ETHERSTATSPKTS1519TOXOCTETS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSJABBERS_P2; /*!< (@ 0x000010DC) Port 2 MAC Jabbers Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t JABBERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Bad CRC. */ + } ETHERSTATSJABBERS_P2_b; + }; + + union + { + __IM uint32_t ETHERSTATSFRAGMENTS_P2; /*!< (@ 0x000010E0) Port 2 MAC Fragment Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t FRAGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Bad CRC. */ + } ETHERSTATSFRAGMENTS_P2_b; + }; + __IM uint32_t RESERVED44; + + union + { + __IM uint32_t VLANRECEIVEDOK_P2; /*!< (@ 0x000010E8) Port 2 MAC Received VLAN Tagged Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Received. */ + } VLANRECEIVEDOK_P2_b; + }; + __IM uint32_t RESERVED45[2]; + + union + { + __IM uint32_t VLANTRANSMITTEDOK_P2; /*!< (@ 0x000010F4) Port 2 MAC Transmitted VLAN Tagged Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Transmitted. */ + } VLANTRANSMITTEDOK_P2_b; + }; + + union + { + __IM uint32_t FRAMESRETRANSMITTED_P2; /*!< (@ 0x000010F8) Port 2 MAC Retransmitted Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RETXCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Transmitted + * Frames that experienced a collision and were retransmitted. */ + } FRAMESRETRANSMITTED_P2_b; + }; + __IM uint32_t RESERVED46; + + union + { + __IM uint32_t STATS_HIWORD_P2; /*!< (@ 0x00001100) Port 2 MAC Statistics Counter High Word Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t STATS_HIWORD : 32; /*!< [31..0] The latched upper 32-bit of the 64 bits MAC Statistics + * Counter Last Read */ + } STATS_HIWORD_P2_b; + }; + + union + { + __IOM uint32_t STATS_CTRL_P2; /*!< (@ 0x00001104) Port 2 MAC Statistics Control Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t CLRALL : 1; /*!< [0..0] Self Clearing Counter Initialize Command */ + __IM uint32_t CLRBUSY : 1; /*!< [1..1] Clear in Progress Indication */ + uint32_t : 30; + } STATS_CTRL_P2_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUELO_P2; /*!< (@ 0x00001108) Port 2 MAC Statistics Clear Value Lower Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUELO : 32; /*!< [31..0] PORT n, lower 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUELO_P2_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUEHI_P2; /*!< (@ 0x0000110C) Port 2 MAC Statistics Clear Value Higher Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUEHI : 32; /*!< [31..0] PORT n, upper 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUEHI_P2_b; + }; + + union + { + __IM uint32_t ADEFERRED_P2; /*!< (@ 0x00001110) Port 2 MAC Deferred Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t DEFERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frame Transmitted + * without collision but was deferred at begin. */ + } ADEFERRED_P2_b; + }; + + union + { + __IM uint32_t AMULTIPLECOLLISIONS_P2; /*!< (@ 0x00001114) Port 2 MAC Multiple Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTMLTCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after multiple collisions. */ + } AMULTIPLECOLLISIONS_P2_b; + }; + + union + { + __IM uint32_t ASINGLECOLLISIONS_P2; /*!< (@ 0x00001118) Port 2 MAC Single Collision Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTSNGLCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after single collision. */ + } ASINGLECOLLISIONS_P2_b; + }; + + union + { + __IM uint32_t ALATECOLLISIONS_P2; /*!< (@ 0x0000111C) Port 2 MAC Late Collision Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t LATECOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of too Late + * Collision. Frame was aborted and not retransmitted. */ + } ALATECOLLISIONS_P2_b; + }; + + union + { + __IM uint32_t AEXCESSIVECOLLISIONS_P2; /*!< (@ 0x00001120) Port 2 MAC Excessive Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t EXCCOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frames Discarded + * due to 16 consecutive collisions. */ + } AEXCESSIVECOLLISIONS_P2_b; + }; + + union + { + __IM uint32_t ACARRIERSENSEERRORS_P2; /*!< (@ 0x00001124) Port 2 MAC Carrier Sense Error Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t CSERRCOUNT : 32; /*!< [31..0] PORT n, increments during Transmission without Collisions + * the PHY Carrier Sense Signal (RX_CRS) dropped or never + * asserted. */ + } ACARRIERSENSEERRORS_P2_b; + }; + __IM uint32_t RESERVED47[182]; + + union + { + __IM uint32_t REV_P3; /*!< (@ 0x00001400) Port 3 MAC Core Revision (n = 0 to 3) */ + + struct + { + __IM uint32_t REV : 32; /*!< [31..0] MAC Core Revision */ + } REV_P3_b; + }; + __IM uint32_t RESERVED48; + + union + { + __IOM uint32_t COMMAND_CONFIG_P3; /*!< (@ 0x00001408) Port 3 Command Configuration Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t TX_ENA : 1; /*!< [0..0] Enable/Disable MAC Transmit Path */ + __IOM uint32_t RX_ENA : 1; /*!< [1..1] Enable/Disable MAC Receive Path */ + __IOM uint32_t TDMA_PREBUF_DIS : 1; /*!< [2..2] When set to 1, the MAC does not request a new frame from + * the IMC until the current frame is completed. This can + * cause the IPG between frames to be more than the value + * in TX_IPG_LENGTH. */ + __IOM uint32_t ETH_SPEED : 1; /*!< [3..3] Operation Mode Definition */ + __IM uint32_t PROMIS_EN : 1; /*!< [4..4] Enable/Disable MAC Promiscuous Operation */ + __IM uint32_t PAD_EN : 1; /*!< [5..5] Enable/Disable Frame Padding Remove on Receive */ + uint32_t : 1; + __IM uint32_t PAUSE_FWD : 1; /*!< [7..7] Terminate/Forward Pause Frames */ + __IOM uint32_t PAUSE_IGNORE : 1; /*!< [8..8] Ignore Pause Frame Quanta */ + __IM uint32_t TX_ADDR_INS : 1; /*!< [9..9] Non writable bit, fixed to 0 always. */ + __IOM uint32_t HD_ENA : 1; /*!< [10..10] Enable auto full/half-duplex operation (set to 1) or + * full-duplex only (set to 0). */ + __IOM uint32_t TX_CRC_APPEND : 1; /*!< [11..11] Enable CRC Append on Transmit */ + uint32_t : 1; + __IOM uint32_t SW_RESET : 1; /*!< [13..13] Self Clearing Reset Command Bit */ + uint32_t : 9; + __IOM uint32_t CNTL_FRM_ENA : 1; /*!< [23..23] MAC Control Frame Enable */ + __IOM uint32_t NO_LGTH_CHK : 1; /*!< [24..24] Payload Length Check Disable */ + __IOM uint32_t ENA_10 : 1; /*!< [25..25] This bit has no effect except PHYSPEED bit of STATUS_Pn + * register. */ + __IOM uint32_t EFPI_SELECT : 1; /*!< [26..26] EFPI_SELECT */ + __IOM uint32_t TX_TRUNCATE : 1; /*!< [27..27] TX_TRUNCATE */ + uint32_t : 2; + __IOM uint32_t TIMER_SEL : 1; /*!< [30..30] Selects the default timer to use for timestamping operations + * on transmit and on receive. The value is used when not + * overridden by the PTP auto-response function, pattern matchers + * or force forwarding information in a management tag. */ + uint32_t : 1; + } COMMAND_CONFIG_P3_b; + }; + __IM uint32_t RESERVED49[2]; + + union + { + __IOM uint32_t FRM_LENGTH_P3; /*!< (@ 0x00001414) Port 3 Maximum Frame Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t FRM_LENGTH : 14; /*!< [13..0] Maximum Frame Length */ + uint32_t : 18; + } FRM_LENGTH_P3_b; + }; + + union + { + __IM uint32_t PAUSE_QUANT_P3; /*!< (@ 0x00001418) Port 3 MAC Pause Quanta (n = 0 to 3) */ + + struct + { + __IM uint32_t PAUSE_QUANT : 16; /*!< [15..0] Pause Quanta */ + uint32_t : 16; + } PAUSE_QUANT_P3_b; + }; + __IM uint32_t RESERVED50[9]; + + union + { + __IOM uint32_t STATUS_P3; /*!< (@ 0x00001440) Port 3 Status Register */ + + struct + { + __IM uint32_t PHYSPEED : 2; /*!< [1..0] Currently Active PHY Interface Speed */ + __IM uint32_t PHYLINK : 1; /*!< [2..2] Link status from PHY interface */ + __IM uint32_t PHYDUPLEX : 1; /*!< [3..3] Duplex status from PHY interface */ + __IOM uint32_t TX_UNDFLW : 1; /*!< [4..4] Indicates that the transmit MAC underflow. This shall + * never occur during normal operation. */ + __IOM uint32_t LK_DST_ERR : 1; /*!< [5..5] Indicates that the L2 destination lookup process failed + * to complete in time before the next frame was received + * at the port. This should never occur under normal operation. + * The cause could be from IPG violations in the received + * frames. */ + __IM uint32_t BR_VERIF_ST : 3; /*!< [8..6] Indicates the current status of the verification according + * to clause 30.14.1.2 of the 802.3br specification */ + uint32_t : 23; + } STATUS_P3_b; + }; + + union + { + __IOM uint32_t TX_IPG_LENGTH_P3; /*!< (@ 0x00001444) Port 3 Transmit IPG Length Register (n = 0 to + * 3) */ + + struct + { + __IOM uint32_t TX_IPG_LENGTH : 5; /*!< [4..0] Define transmit interpacket gap in octets. Allowed values + * are in the range of 8 to 31. */ + uint32_t : 11; + __IOM uint32_t MINRTC3GAP : 5; /*!< [20..16] MINRTC3GAP */ + uint32_t : 11; + } TX_IPG_LENGTH_P3_b; + }; + __IM uint32_t RESERVED51[3]; + + union + { + __IOM uint32_t IDLE_SLOPE_P3; /*!< (@ 0x00001454) Port 3 MAC Traffic Shaper Bandwidth Control */ + + struct + { + __IOM uint32_t IDLE_SLOPE : 11; /*!< [10..0] Traffic Shaper Bandwidth Control */ + uint32_t : 21; + } IDLE_SLOPE_P3_b; + }; + __IM uint32_t RESERVED52[4]; + + union + { + __IM uint32_t AFRAMESTRANSMITTEDOK_P3; /*!< (@ 0x00001468) Port 3 MAC Transmitted Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Transmitted, including pause. */ + } AFRAMESTRANSMITTEDOK_P3_b; + }; + + union + { + __IM uint32_t AFRAMESRECEIVEDOK_P3; /*!< (@ 0x0000146C) Port 3 MAC Received Valid Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Received, including pause. */ + } AFRAMESRECEIVEDOK_P3_b; + }; + + union + { + __IM uint32_t AFRAMECHECKSEQUENCEERRORS_P3; /*!< (@ 0x00001470) Port 3 MAC FCS Error Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t FCSERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Length but CRC error. */ + } AFRAMECHECKSEQUENCEERRORS_P3_b; + }; + + union + { + __IM uint32_t AALIGNMENTERRORS_P3; /*!< (@ 0x00001474) Port 3 MAC Alignment Error Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t ALGNERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Odd Number + * of Nibbles (MII) Received. */ + } AALIGNMENTERRORS_P3_b; + }; + + union + { + __IM uint32_t AOCTETSTRANSMITTEDOK_P3; /*!< (@ 0x00001478) Port 3 MAC Transmitted Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Transmitted. */ + } AOCTETSTRANSMITTEDOK_P3_b; + }; + + union + { + __IM uint32_t AOCTETSRECEIVEDOK_P3; /*!< (@ 0x0000147C) Port 3 MAC Received Valid Frame Octets Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVALIDOCTETS : 32; /*!< [31..0] PORT n, this field indicates the octets (the payload + * only) of MAC Valid Received. */ + } AOCTETSRECEIVEDOK_P3_b; + }; + + union + { + __IM uint32_t ATXPAUSEMACCTRLFRAMES_P3; /*!< (@ 0x00001480) Port 3 MAC Transmitted Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Transmitted. */ + } ATXPAUSEMACCTRLFRAMES_P3_b; + }; + + union + { + __IM uint32_t ARXPAUSEMACCTRLFRAMES_P3; /*!< (@ 0x00001484) Port 3 MAC Received Pause Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXPAUSECOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Valid + * Pause Received. */ + } ARXPAUSEMACCTRLFRAMES_P3_b; + }; + + union + { + __IM uint32_t IFINERRORS_P3; /*!< (@ 0x00001488) Port 3 MAC Input Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t INERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Any Error + * During Reception such as CRC, Length, PHY Error, RX FIFO + * Overflow. */ + } IFINERRORS_P3_b; + }; + + union + { + __IM uint32_t IFOUTERRORS_P3; /*!< (@ 0x0000148C) Port 3 MAC Output Error Count Register (n = 0 + * to 3) */ + + struct + { + __IM uint32_t OUTERRCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Frame + * Transmitted with PHY error. */ + } IFOUTERRORS_P3_b; + }; + + union + { + __IM uint32_t IFINUCASTPKTS_P3; /*!< (@ 0x00001490) Port 3 MAC Received Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Received. */ + } IFINUCASTPKTS_P3_b; + }; + + union + { + __IM uint32_t IFINMULTICASTPKTS_P3; /*!< (@ 0x00001494) Port 3 MAC Received Multicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Received. */ + } IFINMULTICASTPKTS_P3_b; + }; + + union + { + __IM uint32_t IFINBROADCASTPKTS_P3; /*!< (@ 0x00001498) Port 3 MAC Received Broadcast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Received. */ + } IFINBROADCASTPKTS_P3_b; + }; + + union + { + __IM uint32_t IFOUTDISCARDS_P3; /*!< (@ 0x0000149C) Port 3 MAC Discarded Outbound Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t DISCOBCOUNT : 32; /*!< [31..0] Not Applicable */ + } IFOUTDISCARDS_P3_b; + }; + + union + { + __IM uint32_t IFOUTUCASTPKTS_P3; /*!< (@ 0x000014A0) Port 3 MAC Transmitted Unicast Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t TXUCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Unicast + * Frame Valid Transmitted. */ + } IFOUTUCASTPKTS_P3_b; + }; + + union + { + __IM uint32_t IFOUTMULTICASTPKTS_P3; /*!< (@ 0x000014A4) Port 3 MAC Transmitted Multicast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXMCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Multicast + * Frame Valid Transmitted. */ + } IFOUTMULTICASTPKTS_P3_b; + }; + + union + { + __IM uint32_t IFOUTBROADCASTPKTS_P3; /*!< (@ 0x000014A8) Port 3 MAC Transmitted Broadcast Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXBCASTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC Broadcast + * Frame Valid Transmitted. */ + } IFOUTBROADCASTPKTS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSDROPEVENTS_P3; /*!< (@ 0x000014AC) Port 3 MAC Dropped Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t DROPCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC RX FIFO + * Full at frame start. */ + } ETHERSTATSDROPEVENTS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSOCTETS_P3; /*!< (@ 0x000014B0) Port 3 MAC All Frame Octets Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLOCTETS : 32; /*!< [31..0] ALLOCTETS */ + } ETHERSTATSOCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS_P3; /*!< (@ 0x000014B4) Port 3 MAC All Frame Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t ALLCOUNT : 32; /*!< [31..0] ALLCOUNT */ + } ETHERSTATSPKTS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSUNDERSIZEPKTS_P3; /*!< (@ 0x000014B8) Port 3 MAC Too Short Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t TOOSHRTCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Good CRC. */ + } ETHERSTATSUNDERSIZEPKTS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSOVERSIZEPKTS_P3; /*!< (@ 0x000014BC) Port 3 MAC Too Long Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t TOOLONGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Good CRC. */ + } ETHERSTATSOVERSIZEPKTS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS64OCTETS_P3; /*!< (@ 0x000014C0) Port 3 MAC 64 Octets Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT64 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 64 bytes). */ + } ETHERSTATSPKTS64OCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS65TO127OCTETS_P3; /*!< (@ 0x000014C4) Port 3 MAC 65 to 127 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT65T127 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 65 to 127 bytes). */ + } ETHERSTATSPKTS65TO127OCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS128TO255OCTETS_P3; /*!< (@ 0x000014C8) Port 3 MAC 128 to 255 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT128T255 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 128 to 255 bytes). */ + } ETHERSTATSPKTS128TO255OCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS256TO511OCTETS_P3; /*!< (@ 0x000014CC) Port 3 MAC 256 to 511 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT256T511 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 256 to 511 bytes). */ + } ETHERSTATSPKTS256TO511OCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS512TO1023OCTETS_P3; /*!< (@ 0x000014D0) Port 3 MAC 512 to 1023 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT512T1023 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 512 to 1023 bytes). */ + } ETHERSTATSPKTS512TO1023OCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1024TO1518OCTETS_P3; /*!< (@ 0x000014D4) Port 3 MAC 1024 to 1518 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1024T1518 : 32; /*!< [31..0] PORT n, this field indicates the number of MAC All Frames, + * Good and Bad (Packet Size: 1024 to 1518 bytes). */ + } ETHERSTATSPKTS1024TO1518OCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSPKTS1519TOXOCTETS_P3; /*!< (@ 0x000014D8) Port 3 MAC Over 1519 Octets Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t OCTCNT1519TX : 32; /*!< [31..0] PORT n, this field indicates the number of MAC all Frames, + * Good and Bad (Packet Size: over 1519 bytes). */ + } ETHERSTATSPKTS1519TOXOCTETS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSJABBERS_P3; /*!< (@ 0x000014DC) Port 3 MAC Jabbers Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t JABBERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Long, + * Bad CRC. */ + } ETHERSTATSJABBERS_P3_b; + }; + + union + { + __IM uint32_t ETHERSTATSFRAGMENTS_P3; /*!< (@ 0x000014E0) Port 3 MAC Fragment Frame Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t FRAGCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of MAC too Short, + * Bad CRC. */ + } ETHERSTATSFRAGMENTS_P3_b; + }; + __IM uint32_t RESERVED53; + + union + { + __IM uint32_t VLANRECEIVEDOK_P3; /*!< (@ 0x000014E8) Port 3 MAC Received VLAN Tagged Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Received. */ + } VLANRECEIVEDOK_P3_b; + }; + __IM uint32_t RESERVED54[2]; + + union + { + __IM uint32_t VLANTRANSMITTEDOK_P3; /*!< (@ 0x000014F4) Port 3 MAC Transmitted VLAN Tagged Frame Count + * Register (n = 0 to 3) */ + + struct + { + __IM uint32_t TXVLANTAGCNT : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frames + * with VLAN Tag Transmitted. */ + } VLANTRANSMITTEDOK_P3_b; + }; + + union + { + __IM uint32_t FRAMESRETRANSMITTED_P3; /*!< (@ 0x000014F8) Port 3 MAC Retransmitted Frame Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t RETXCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Transmitted + * Frames that experienced a collision and were retransmitted. */ + } FRAMESRETRANSMITTED_P3_b; + }; + __IM uint32_t RESERVED55; + + union + { + __IM uint32_t STATS_HIWORD_P3; /*!< (@ 0x00001500) Port 3 MAC Statistics Counter High Word Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t STATS_HIWORD : 32; /*!< [31..0] The latched upper 32-bit of the 64 bits MAC Statistics + * Counter Last Read */ + } STATS_HIWORD_P3_b; + }; + + union + { + __IOM uint32_t STATS_CTRL_P3; /*!< (@ 0x00001504) Port 3 MAC Statistics Control Register (n = 0 + * to 3) */ + + struct + { + __IOM uint32_t CLRALL : 1; /*!< [0..0] Self Clearing Counter Initialize Command */ + __IM uint32_t CLRBUSY : 1; /*!< [1..1] Clear in Progress Indication */ + uint32_t : 30; + } STATS_CTRL_P3_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUELO_P3; /*!< (@ 0x00001508) Port 3 MAC Statistics Clear Value Lower Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUELO : 32; /*!< [31..0] PORT n, lower 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUELO_P3_b; + }; + + union + { + __IOM uint32_t STATS_CLEAR_VALUEHI_P3; /*!< (@ 0x0000150C) Port 3 MAC Statistics Clear Value Higher Register + * (n = 0 to 3) */ + + struct + { + __IOM uint32_t STATS_CLEAR_VALUEHI : 32; /*!< [31..0] PORT n, upper 32-bit of 64 bits value loaded into all + * counters when clearing all counters with STATS_CTRL_Pn.CLRALL + * command for test purposes. These bits should be set to + * 0 normally. */ + } STATS_CLEAR_VALUEHI_P3_b; + }; + + union + { + __IM uint32_t ADEFERRED_P3; /*!< (@ 0x00001510) Port 3 MAC Deferred Count Register (n = 0 to + * 3) */ + + struct + { + __IM uint32_t DEFERCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frame Transmitted + * without collision but was deferred at begin. */ + } ADEFERRED_P3_b; + }; + + union + { + __IM uint32_t AMULTIPLECOLLISIONS_P3; /*!< (@ 0x00001514) Port 3 MAC Multiple Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTMLTCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after multiple collisions. */ + } AMULTIPLECOLLISIONS_P3_b; + }; + + union + { + __IM uint32_t ASINGLECOLLISIONS_P3; /*!< (@ 0x00001518) Port 3 MAC Single Collision Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t COUNTAFTSNGLCOLL : 32; /*!< [31..0] PORT n, this field indicates the number of Good Frame + * Transmit after single collision. */ + } ASINGLECOLLISIONS_P3_b; + }; + + union + { + __IM uint32_t ALATECOLLISIONS_P3; /*!< (@ 0x0000151C) Port 3 MAC Late Collision Count Register (n = + * 0 to 3) */ + + struct + { + __IM uint32_t LATECOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of too Late + * Collision. Frame was aborted and not retransmitted. */ + } ALATECOLLISIONS_P3_b; + }; + + union + { + __IM uint32_t AEXCESSIVECOLLISIONS_P3; /*!< (@ 0x00001520) Port 3 MAC Excessive Collision Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t EXCCOLLCOUNT : 32; /*!< [31..0] PORT n, this field indicates the number of Frames Discarded + * due to 16 consecutive collisions. */ + } AEXCESSIVECOLLISIONS_P3_b; + }; + + union + { + __IM uint32_t ACARRIERSENSEERRORS_P3; /*!< (@ 0x00001524) Port 3 MAC Carrier Sense Error Count Register + * (n = 0 to 3) */ + + struct + { + __IM uint32_t CSERRCOUNT : 32; /*!< [31..0] PORT n, increments during Transmission without Collisions + * the PHY Carrier Sense Signal (RX_CRS) dropped or never + * asserted. */ + } ACARRIERSENSEERRORS_P3_b; + }; + __IM uint32_t RESERVED56[694]; + + union + { + __IOM uint32_t P0_QSTMACU0; /*!< (@ 0x00002000) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU0_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD0; /*!< (@ 0x00002004) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD0_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU0; /*!< (@ 0x00002008) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU0_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD0; /*!< (@ 0x0000200C) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD0_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL0; /*!< (@ 0x00002010) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL0_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM0; /*!< (@ 0x00002014) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM0_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL0; /*!< (@ 0x00002018) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL0_b; + }; + + union + { + __IM uint32_t P0_QSMFC0; /*!< (@ 0x0000201C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC0_b; + }; + + union + { + __IM uint32_t P0_QMSPPC0; /*!< (@ 0x00002020) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC0_b; + }; + + union + { + __IM uint32_t P0_QMSRPC0; /*!< (@ 0x00002024) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC0_b; + }; + + union + { + __IOM uint32_t P0_QSTMACU1; /*!< (@ 0x00002028) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU1_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD1; /*!< (@ 0x0000202C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD1_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU1; /*!< (@ 0x00002030) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU1_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD1; /*!< (@ 0x00002034) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD1_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL1; /*!< (@ 0x00002038) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL1_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM1; /*!< (@ 0x0000203C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM1_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL1; /*!< (@ 0x00002040) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL1_b; + }; + + union + { + __IM uint32_t P0_QSMFC1; /*!< (@ 0x00002044) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC1_b; + }; + + union + { + __IM uint32_t P0_QMSPPC1; /*!< (@ 0x00002048) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC1_b; + }; + + union + { + __IM uint32_t P0_QMSRPC1; /*!< (@ 0x0000204C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC1_b; + }; + + union + { + __IOM uint32_t P0_QSTMACU2; /*!< (@ 0x00002050) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU2_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD2; /*!< (@ 0x00002054) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD2_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU2; /*!< (@ 0x00002058) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU2_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD2; /*!< (@ 0x0000205C) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD2_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL2; /*!< (@ 0x00002060) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL2_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM2; /*!< (@ 0x00002064) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM2_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL2; /*!< (@ 0x00002068) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL2_b; + }; + + union + { + __IM uint32_t P0_QSMFC2; /*!< (@ 0x0000206C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC2_b; + }; + + union + { + __IM uint32_t P0_QMSPPC2; /*!< (@ 0x00002070) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC2_b; + }; + + union + { + __IM uint32_t P0_QMSRPC2; /*!< (@ 0x00002074) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC2_b; + }; + + union + { + __IOM uint32_t P0_QSTMACU3; /*!< (@ 0x00002078) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU3_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD3; /*!< (@ 0x0000207C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD3_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU3; /*!< (@ 0x00002080) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU3_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD3; /*!< (@ 0x00002084) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD3_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL3; /*!< (@ 0x00002088) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL3_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM3; /*!< (@ 0x0000208C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM3_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL3; /*!< (@ 0x00002090) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL3_b; + }; + + union + { + __IM uint32_t P0_QSMFC3; /*!< (@ 0x00002094) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC3_b; + }; + + union + { + __IM uint32_t P0_QMSPPC3; /*!< (@ 0x00002098) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC3_b; + }; + + union + { + __IM uint32_t P0_QMSRPC3; /*!< (@ 0x0000209C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC3_b; + }; + + union + { + __IOM uint32_t P0_QSTMACU4; /*!< (@ 0x000020A0) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU4_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD4; /*!< (@ 0x000020A4) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD4_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU4; /*!< (@ 0x000020A8) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU4_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD4; /*!< (@ 0x000020AC) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD4_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL4; /*!< (@ 0x000020B0) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL4_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM4; /*!< (@ 0x000020B4) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM4_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL4; /*!< (@ 0x000020B8) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL4_b; + }; + + union + { + __IM uint32_t P0_QSMFC4; /*!< (@ 0x000020BC) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC4_b; + }; + + union + { + __IM uint32_t P0_QMSPPC4; /*!< (@ 0x000020C0) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC4_b; + }; + + union + { + __IM uint32_t P0_QMSRPC4; /*!< (@ 0x000020C4) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC4_b; + }; + + union + { + __IOM uint32_t P0_QSTMACU5; /*!< (@ 0x000020C8) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU5_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD5; /*!< (@ 0x000020CC) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD5_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU5; /*!< (@ 0x000020D0) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU5_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD5; /*!< (@ 0x000020D4) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD5_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL5; /*!< (@ 0x000020D8) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL5_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM5; /*!< (@ 0x000020DC) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM5_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL5; /*!< (@ 0x000020E0) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL5_b; + }; + + union + { + __IM uint32_t P0_QSMFC5; /*!< (@ 0x000020E4) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC5_b; + }; + + union + { + __IM uint32_t P0_QMSPPC5; /*!< (@ 0x000020E8) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC5_b; + }; + + union + { + __IM uint32_t P0_QMSRPC5; /*!< (@ 0x000020EC) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC5_b; + }; + + union + { + __IOM uint32_t P0_QSTMACU6; /*!< (@ 0x000020F0) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU6_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD6; /*!< (@ 0x000020F4) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD6_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU6; /*!< (@ 0x000020F8) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU6_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD6; /*!< (@ 0x000020FC) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD6_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL6; /*!< (@ 0x00002100) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL6_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM6; /*!< (@ 0x00002104) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM6_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL6; /*!< (@ 0x00002108) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL6_b; + }; + + union + { + __IM uint32_t P0_QSMFC6; /*!< (@ 0x0000210C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC6_b; + }; + + union + { + __IM uint32_t P0_QMSPPC6; /*!< (@ 0x00002110) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC6_b; + }; + + union + { + __IM uint32_t P0_QMSRPC6; /*!< (@ 0x00002114) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC6_b; + }; + + union + { + __IOM uint32_t P0_QSTMACU7; /*!< (@ 0x00002118) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P0_QSTMACU7_b; + }; + + union + { + __IOM uint32_t P0_QSTMACD7; /*!< (@ 0x0000211C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P0_QSTMACD7_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMU7; /*!< (@ 0x00002120) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P0_QSTMAMU7_b; + }; + + union + { + __IOM uint32_t P0_QSTMAMD7; /*!< (@ 0x00002124) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P0_QSTMAMD7_b; + }; + + union + { + __IOM uint32_t P0_QSFTVL7; /*!< (@ 0x00002128) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P0_QSFTVL7_b; + }; + + union + { + __IOM uint32_t P0_QSFTVLM7; /*!< (@ 0x0000212C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P0_QSFTVLM7_b; + }; + + union + { + __IOM uint32_t P0_QSFTBL7; /*!< (@ 0x00002130) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P0_QSFTBL7_b; + }; + + union + { + __IM uint32_t P0_QSMFC7; /*!< (@ 0x00002134) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P0_QSMFC7_b; + }; + + union + { + __IM uint32_t P0_QMSPPC7; /*!< (@ 0x00002138) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P0_QMSPPC7_b; + }; + + union + { + __IM uint32_t P0_QMSRPC7; /*!< (@ 0x0000213C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P0_QMSRPC7_b; + }; + __IM uint32_t RESERVED57[42]; + + union + { + __IOM uint32_t P0_QSEIS; /*!< (@ 0x000021E8) Qci Stream Filter Error Interrupt Status (SDU + * Oversize) */ + + struct + { + __IOM uint32_t QSMOIS : 8; /*!< [7..0] MSDU oversize frames Interrupt status[s] */ + uint32_t : 24; + } P0_QSEIS_b; + }; + + union + { + __IOM uint32_t P0_QSEIE; /*!< (@ 0x000021EC) Qci Stream Filter Error Interrupt Enable */ + + struct + { + __IOM uint32_t QSMOIE : 8; /*!< [7..0] MSDU oversize frames Interrupt Enable[s] */ + uint32_t : 24; + } P0_QSEIE_b; + }; + + union + { + __OM uint32_t P0_QSEID; /*!< (@ 0x000021F0) Qci Stream Filter Error Interrupt Disable */ + + struct + { + __OM uint32_t QSMOID : 8; /*!< [7..0] MSDU oversize frames Interrupt Disable[s] */ + uint32_t : 24; + } P0_QSEID_b; + }; + __IM uint32_t RESERVED58[3]; + + union + { + __IOM uint32_t P0_QGMOD; /*!< (@ 0x00002200) Qci Gate Mode Register */ + + struct + { + __IOM uint32_t QGMOD : 8; /*!< [7..0] Flow gate mode[g] */ + uint32_t : 24; + } P0_QGMOD_b; + }; + + union + { + __IM uint32_t P0_QGPPC; /*!< (@ 0x00002204) Qci Gate (All) Passed Packet Count Port 0 */ + + struct + { + __IM uint32_t QGPPC : 16; /*!< [15..0] Qci gate passed packet count */ + uint32_t : 16; + } P0_QGPPC_b; + }; + + union + { + __IM uint32_t P0_QGDPC0; /*!< (@ 0x00002208) Qci Gate 0 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC0_b; + }; + __IM uint32_t RESERVED59; + + union + { + __IM uint32_t P0_QGDPC1; /*!< (@ 0x00002210) Qci Gate 1 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC1_b; + }; + __IM uint32_t RESERVED60; + + union + { + __IM uint32_t P0_QGDPC2; /*!< (@ 0x00002218) Qci Gate 2 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC2_b; + }; + __IM uint32_t RESERVED61; + + union + { + __IM uint32_t P0_QGDPC3; /*!< (@ 0x00002220) Qci Gate 3 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC3_b; + }; + __IM uint32_t RESERVED62; + + union + { + __IM uint32_t P0_QGDPC4; /*!< (@ 0x00002228) Qci Gate 4 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC4_b; + }; + __IM uint32_t RESERVED63; + + union + { + __IM uint32_t P0_QGDPC5; /*!< (@ 0x00002230) Qci Gate 5 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC5_b; + }; + __IM uint32_t RESERVED64; + + union + { + __IM uint32_t P0_QGDPC6; /*!< (@ 0x00002238) Qci Gate 6 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC6_b; + }; + __IM uint32_t RESERVED65; + + union + { + __IM uint32_t P0_QGDPC7; /*!< (@ 0x00002240) Qci Gate 7 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P0_QGDPC7_b; + }; + + union + { + __IOM uint32_t P0_QGEIS; /*!< (@ 0x00002244) Qci Gate Error Interrupt Status */ + + struct + { + __IOM uint32_t QGMOIS : 8; /*!< [7..0] Gating error Interrupt status[g] */ + uint32_t : 24; + } P0_QGEIS_b; + }; + + union + { + __IOM uint32_t P0_QGEIE; /*!< (@ 0x00002248) Qci Gate Error Interrupt Enable */ + + struct + { + __IOM uint32_t QGMOIE : 8; /*!< [7..0] Gating error Interrupt Enable[g] */ + uint32_t : 24; + } P0_QGEIE_b; + }; + + union + { + __OM uint32_t P0_QGEID; /*!< (@ 0x0000224C) Qci Gate Error Interrupt Disable */ + + struct + { + __OM uint32_t QGMOID : 8; /*!< [7..0] Gating error Interrupt Disable[g] */ + uint32_t : 24; + } P0_QGEID_b; + }; + + union + { + __IOM uint32_t P0_QMDESC0; /*!< (@ 0x00002250) Qci Port n Flow Meter 0 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC0_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC0; /*!< (@ 0x00002254) Qci Meter CBS Configuration Port n, Meter 0 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC0_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC0; /*!< (@ 0x00002258) Qci Meter CIR Configuration n 0 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC0_b; + }; + + union + { + __IM uint32_t P0_QMGPC0; /*!< (@ 0x0000225C) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC0_b; + }; + + union + { + __IM uint32_t P0_QMRPC0; /*!< (@ 0x00002260) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC0_b; + }; + + union + { + __IOM uint32_t P0_QMDESC1; /*!< (@ 0x00002264) Qci Port n Flow Meter 1 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC1_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC1; /*!< (@ 0x00002268) Qci Meter CBS Configuration Port n, Meter 1 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC1_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC1; /*!< (@ 0x0000226C) Qci Meter CIR Configuration n 1 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC1_b; + }; + + union + { + __IM uint32_t P0_QMGPC1; /*!< (@ 0x00002270) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC1_b; + }; + + union + { + __IM uint32_t P0_QMRPC1; /*!< (@ 0x00002274) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC1_b; + }; + + union + { + __IOM uint32_t P0_QMDESC2; /*!< (@ 0x00002278) Qci Port n Flow Meter 2 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC2_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC2; /*!< (@ 0x0000227C) Qci Meter CBS Configuration Port n, Meter 2 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC2_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC2; /*!< (@ 0x00002280) Qci Meter CIR Configuration n 2 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC2_b; + }; + + union + { + __IM uint32_t P0_QMGPC2; /*!< (@ 0x00002284) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC2_b; + }; + + union + { + __IM uint32_t P0_QMRPC2; /*!< (@ 0x00002288) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC2_b; + }; + + union + { + __IOM uint32_t P0_QMDESC3; /*!< (@ 0x0000228C) Qci Port n Flow Meter 3 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC3_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC3; /*!< (@ 0x00002290) Qci Meter CBS Configuration Port n, Meter 3 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC3_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC3; /*!< (@ 0x00002294) Qci Meter CIR Configuration n 3 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC3_b; + }; + + union + { + __IM uint32_t P0_QMGPC3; /*!< (@ 0x00002298) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC3_b; + }; + + union + { + __IM uint32_t P0_QMRPC3; /*!< (@ 0x0000229C) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC3_b; + }; + + union + { + __IOM uint32_t P0_QMDESC4; /*!< (@ 0x000022A0) Qci Port n Flow Meter 4 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC4_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC4; /*!< (@ 0x000022A4) Qci Meter CBS Configuration Port n, Meter 4 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC4_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC4; /*!< (@ 0x000022A8) Qci Meter CIR Configuration n 4 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC4_b; + }; + + union + { + __IM uint32_t P0_QMGPC4; /*!< (@ 0x000022AC) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC4_b; + }; + + union + { + __IM uint32_t P0_QMRPC4; /*!< (@ 0x000022B0) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC4_b; + }; + + union + { + __IOM uint32_t P0_QMDESC5; /*!< (@ 0x000022B4) Qci Port n Flow Meter 5 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC5_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC5; /*!< (@ 0x000022B8) Qci Meter CBS Configuration Port n, Meter 5 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC5_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC5; /*!< (@ 0x000022BC) Qci Meter CIR Configuration n 5 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC5_b; + }; + + union + { + __IM uint32_t P0_QMGPC5; /*!< (@ 0x000022C0) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC5_b; + }; + + union + { + __IM uint32_t P0_QMRPC5; /*!< (@ 0x000022C4) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC5_b; + }; + + union + { + __IOM uint32_t P0_QMDESC6; /*!< (@ 0x000022C8) Qci Port n Flow Meter 6 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC6_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC6; /*!< (@ 0x000022CC) Qci Meter CBS Configuration Port n, Meter 6 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC6_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC6; /*!< (@ 0x000022D0) Qci Meter CIR Configuration n 6 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC6_b; + }; + + union + { + __IM uint32_t P0_QMGPC6; /*!< (@ 0x000022D4) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC6_b; + }; + + union + { + __IM uint32_t P0_QMRPC6; /*!< (@ 0x000022D8) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC6_b; + }; + + union + { + __IOM uint32_t P0_QMDESC7; /*!< (@ 0x000022DC) Qci Port n Flow Meter 7 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P0_QMDESC7_b; + }; + + union + { + __IOM uint32_t P0_QMCBSC7; /*!< (@ 0x000022E0) Qci Meter CBS Configuration Port n, Meter 7 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P0_QMCBSC7_b; + }; + + union + { + __IOM uint32_t P0_QMCIRC7; /*!< (@ 0x000022E4) Qci Meter CIR Configuration n 7 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P0_QMCIRC7_b; + }; + + union + { + __IM uint32_t P0_QMGPC7; /*!< (@ 0x000022E8) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P0_QMGPC7_b; + }; + + union + { + __IM uint32_t P0_QMRPC7; /*!< (@ 0x000022EC) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P0_QMRPC7_b; + }; + + union + { + __IOM uint32_t P0_QMEC; /*!< (@ 0x000022F0) Qci Meter Enable Configuration */ + + struct + { + __IOM uint32_t ME : 8; /*!< [7..0] Enable meter[m] */ + uint32_t : 24; + } P0_QMEC_b; + }; + + union + { + __IOM uint32_t P0_QMEIS; /*!< (@ 0x000022F4) Qci Meter Error Interrupt Status */ + + struct + { + __IOM uint32_t QRFIS : 8; /*!< [7..0] Red frames Interrupt status[m] */ + uint32_t : 24; + } P0_QMEIS_b; + }; + + union + { + __IOM uint32_t P0_QMEIE; /*!< (@ 0x000022F8) Qci Meter Error Interrupt Enable */ + + struct + { + __IOM uint32_t QRFIE : 8; /*!< [7..0] Red frames Interrupt Enable[m] */ + uint32_t : 24; + } P0_QMEIE_b; + }; + + union + { + __OM uint32_t P0_QMEID; /*!< (@ 0x000022FC) Qci Meter Error Interrupt Disable */ + + struct + { + __OM uint32_t QRFID : 8; /*!< [7..0] Red frames Interrupt Disable[m] */ + uint32_t : 24; + } P0_QMEID_b; + }; + + union + { + __IOM uint32_t P0_PCP_REMAP; /*!< (@ 0x00002300) Port 0 VLAN Priority Code Point (PCP) Remap */ + + struct + { + __IOM uint32_t PCP_REMAP0 : 3; /*!< [2..0] PCP_REMAP0 */ + __IOM uint32_t PCP_REMAP1 : 3; /*!< [5..3] PCP_REMAP1 */ + __IOM uint32_t PCP_REMAP2 : 3; /*!< [8..6] PCP_REMAP2 */ + __IOM uint32_t PCP_REMAP3 : 3; /*!< [11..9] PCP_REMAP3 */ + __IOM uint32_t PCP_REMAP4 : 3; /*!< [14..12] PCP_REMAP4 */ + __IOM uint32_t PCP_REMAP5 : 3; /*!< [17..15] PCP_REMAP5 */ + __IOM uint32_t PCP_REMAP6 : 3; /*!< [20..18] PCP_REMAP6 */ + __IOM uint32_t PCP_REMAP7 : 3; /*!< [23..21] PCP_REMAP7 */ + uint32_t : 8; + } P0_PCP_REMAP_b; + }; + + union + { + __IOM uint32_t P0_VLAN_TAG; /*!< (@ 0x00002304) Port 0 VLAN TAG Information for Priority Regeneration */ + + struct + { + __IOM uint32_t VID : 12; /*!< [11..0] VID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TPID : 16; /*!< [31..16] TPID */ + } P0_VLAN_TAG_b; + }; + + union + { + __IOM uint32_t P0_VLAN_MODE; /*!< (@ 0x00002308) Port 0 VLAN Mode */ + + struct + { + __IOM uint32_t VITM : 2; /*!< [1..0] VLAN input tagging mode */ + __IOM uint32_t VICM : 2; /*!< [3..2] VLAN input verification mode */ + uint32_t : 28; + } P0_VLAN_MODE_b; + }; + + union + { + __IM uint32_t P0_VIC_DROP_CNT; /*!< (@ 0x0000230C) Port 0 VLAN Ingress Check Drop Frame Counter */ + + struct + { + __IM uint32_t VIC_DROP_CNT : 16; /*!< [15..0] Port n VLAN ingress check drop frame count */ + uint32_t : 16; + } P0_VIC_DROP_CNT_b; + }; + __IM uint32_t RESERVED66[6]; + + union + { + __IM uint32_t P0_LOOKUP_HIT_CNT; /*!< (@ 0x00002328) Port 0 DST Address Lookup Hit Counter */ + + struct + { + __IM uint32_t LOOKUP_HIT_CNT : 24; /*!< [23..0] Port n Lookup hit count */ + uint32_t : 8; + } P0_LOOKUP_HIT_CNT_b; + }; + + union + { + __IOM uint32_t P0_ERROR_STATUS; /*!< (@ 0x0000232C) Port 0 Frame Parser Runtime Error Status */ + + struct + { + __IOM uint32_t SOPERR : 1; /*!< [0..0] SOP error detected in frame parser */ + __IOM uint32_t PUNDSZ : 1; /*!< [1..1] Preemptable frame under size error detected in frame + * parser */ + __IOM uint32_t POVRSZ : 1; /*!< [2..2] Preemptable frame over size error detected in frame parser */ + __IOM uint32_t EUNDSZ : 1; /*!< [3..3] Express frame under size error detected in frame parser */ + __IOM uint32_t EOVRSZ : 1; /*!< [4..4] Express frame over size error detected in frame parser */ + uint32_t : 27; + } P0_ERROR_STATUS_b; + }; + + union + { + __IOM uint32_t P0_ERROR_MASK; /*!< (@ 0x00002330) Port 0 Frame Parser Runtime Error Mask */ + + struct + { + __IOM uint32_t MSOPERR : 1; /*!< [0..0] Error mask of SOPERR (SOP error) */ + __IOM uint32_t MPUNDSZ : 1; /*!< [1..1] Error mask of PUNDSZ (Preemptable frame under size error) */ + __IOM uint32_t MPOVRSZ : 1; /*!< [2..2] Error mask of POVRSZ (Preemptable frame over size error) */ + __IOM uint32_t MEUNDSZ : 1; /*!< [3..3] Error mask of EUNDSZ (Express frame under size error) */ + __IOM uint32_t MEOVRSZ : 1; /*!< [4..4] Error mask of EOVRSZ (Express frame over size error) */ + uint32_t : 27; + } P0_ERROR_MASK_b; + }; + __IM uint32_t RESERVED67[35]; + + union + { + __IM uint32_t CHANNEL_STATE; /*!< (@ 0x000023C0) Enable/Disable State of Ingress Channels */ + + struct + { + __IM uint32_t CH0ACT : 1; /*!< [0..0] CH0ACT */ + __IM uint32_t CH1ACT : 1; /*!< [1..1] CH1ACT */ + __IM uint32_t CH2ACT : 1; /*!< [2..2] CH2ACT */ + uint32_t : 29; + } CHANNEL_STATE_b; + }; + + union + { + __OM uint32_t CHANNEL_ENABLE; /*!< (@ 0x000023C4) Enable Operation of Channel */ + + struct + { + __OM uint32_t CH0ENA : 1; /*!< [0..0] CH0ENA */ + __OM uint32_t CH1ENA : 1; /*!< [1..1] CH1ENA */ + __OM uint32_t CH2ENA : 1; /*!< [2..2] CH2ENA */ + uint32_t : 29; + } CHANNEL_ENABLE_b; + }; + + union + { + __OM uint32_t CHANNEL_DISABLE; /*!< (@ 0x000023C8) Disable and Reset Operation of Channel */ + + struct + { + __OM uint32_t CH0DIS : 1; /*!< [0..0] CH0DIS */ + __OM uint32_t CH1DIS : 1; /*!< [1..1] CH1DIS */ + __OM uint32_t CH2DIS : 1; /*!< [2..2] CH2DIS */ + uint32_t : 29; + } CHANNEL_DISABLE_b; + }; + + union + { + __IOM uint32_t ASI_MEM_WDATA[4]; /*!< (@ 0x000023CC) Memory Write Data Word [0..3] */ + + struct + { + __IOM uint32_t WDATA : 32; /*!< [31..0] Destination MAC address regeneration write data */ + } ASI_MEM_WDATA_b[4]; + }; + + union + { + __IOM uint32_t ASI_MEM_ADDR; /*!< (@ 0x000023DC) Memory Address and R/W Control */ + + struct + { + __IOM uint32_t ADDR : 7; /*!< [6..0] Memory access address */ + __IOM uint32_t MEM_WEN : 1; /*!< [7..7] MEM_WEN */ + __IOM uint32_t MEM_REQ : 3; /*!< [10..8] Memory access request */ + uint32_t : 21; + } ASI_MEM_ADDR_b; + }; + + union + { + __IM uint32_t ASI_MEM_RDATA[4]; /*!< (@ 0x000023E0) Memory Read Data Word [0..3] */ + + struct + { + __IM uint32_t RDATA : 32; /*!< [31..0] Destination MAC address regeneration read data */ + } ASI_MEM_RDATA_b[4]; + }; + __IM uint32_t RESERVED68[4]; + + union + { + __IOM uint32_t P1_QSTMACU0; /*!< (@ 0x00002400) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU0_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD0; /*!< (@ 0x00002404) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD0_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU0; /*!< (@ 0x00002408) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU0_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD0; /*!< (@ 0x0000240C) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD0_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL0; /*!< (@ 0x00002410) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL0_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM0; /*!< (@ 0x00002414) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM0_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL0; /*!< (@ 0x00002418) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL0_b; + }; + + union + { + __IM uint32_t P1_QSMFC0; /*!< (@ 0x0000241C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC0_b; + }; + + union + { + __IM uint32_t P1_QMSPPC0; /*!< (@ 0x00002420) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC0_b; + }; + + union + { + __IM uint32_t P1_QMSRPC0; /*!< (@ 0x00002424) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC0_b; + }; + + union + { + __IOM uint32_t P1_QSTMACU1; /*!< (@ 0x00002428) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU1_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD1; /*!< (@ 0x0000242C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD1_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU1; /*!< (@ 0x00002430) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU1_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD1; /*!< (@ 0x00002434) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD1_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL1; /*!< (@ 0x00002438) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL1_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM1; /*!< (@ 0x0000243C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM1_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL1; /*!< (@ 0x00002440) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL1_b; + }; + + union + { + __IM uint32_t P1_QSMFC1; /*!< (@ 0x00002444) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC1_b; + }; + + union + { + __IM uint32_t P1_QMSPPC1; /*!< (@ 0x00002448) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC1_b; + }; + + union + { + __IM uint32_t P1_QMSRPC1; /*!< (@ 0x0000244C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC1_b; + }; + + union + { + __IOM uint32_t P1_QSTMACU2; /*!< (@ 0x00002450) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU2_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD2; /*!< (@ 0x00002454) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD2_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU2; /*!< (@ 0x00002458) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU2_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD2; /*!< (@ 0x0000245C) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD2_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL2; /*!< (@ 0x00002460) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL2_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM2; /*!< (@ 0x00002464) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM2_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL2; /*!< (@ 0x00002468) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL2_b; + }; + + union + { + __IM uint32_t P1_QSMFC2; /*!< (@ 0x0000246C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC2_b; + }; + + union + { + __IM uint32_t P1_QMSPPC2; /*!< (@ 0x00002470) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC2_b; + }; + + union + { + __IM uint32_t P1_QMSRPC2; /*!< (@ 0x00002474) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC2_b; + }; + + union + { + __IOM uint32_t P1_QSTMACU3; /*!< (@ 0x00002478) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU3_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD3; /*!< (@ 0x0000247C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD3_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU3; /*!< (@ 0x00002480) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU3_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD3; /*!< (@ 0x00002484) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD3_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL3; /*!< (@ 0x00002488) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL3_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM3; /*!< (@ 0x0000248C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM3_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL3; /*!< (@ 0x00002490) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL3_b; + }; + + union + { + __IM uint32_t P1_QSMFC3; /*!< (@ 0x00002494) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC3_b; + }; + + union + { + __IM uint32_t P1_QMSPPC3; /*!< (@ 0x00002498) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC3_b; + }; + + union + { + __IM uint32_t P1_QMSRPC3; /*!< (@ 0x0000249C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC3_b; + }; + + union + { + __IOM uint32_t P1_QSTMACU4; /*!< (@ 0x000024A0) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU4_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD4; /*!< (@ 0x000024A4) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD4_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU4; /*!< (@ 0x000024A8) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU4_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD4; /*!< (@ 0x000024AC) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD4_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL4; /*!< (@ 0x000024B0) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL4_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM4; /*!< (@ 0x000024B4) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM4_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL4; /*!< (@ 0x000024B8) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL4_b; + }; + + union + { + __IM uint32_t P1_QSMFC4; /*!< (@ 0x000024BC) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC4_b; + }; + + union + { + __IM uint32_t P1_QMSPPC4; /*!< (@ 0x000024C0) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC4_b; + }; + + union + { + __IM uint32_t P1_QMSRPC4; /*!< (@ 0x000024C4) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC4_b; + }; + + union + { + __IOM uint32_t P1_QSTMACU5; /*!< (@ 0x000024C8) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU5_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD5; /*!< (@ 0x000024CC) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD5_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU5; /*!< (@ 0x000024D0) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU5_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD5; /*!< (@ 0x000024D4) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD5_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL5; /*!< (@ 0x000024D8) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL5_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM5; /*!< (@ 0x000024DC) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM5_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL5; /*!< (@ 0x000024E0) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL5_b; + }; + + union + { + __IM uint32_t P1_QSMFC5; /*!< (@ 0x000024E4) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC5_b; + }; + + union + { + __IM uint32_t P1_QMSPPC5; /*!< (@ 0x000024E8) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC5_b; + }; + + union + { + __IM uint32_t P1_QMSRPC5; /*!< (@ 0x000024EC) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC5_b; + }; + + union + { + __IOM uint32_t P1_QSTMACU6; /*!< (@ 0x000024F0) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU6_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD6; /*!< (@ 0x000024F4) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD6_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU6; /*!< (@ 0x000024F8) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU6_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD6; /*!< (@ 0x000024FC) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD6_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL6; /*!< (@ 0x00002500) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL6_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM6; /*!< (@ 0x00002504) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM6_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL6; /*!< (@ 0x00002508) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL6_b; + }; + + union + { + __IM uint32_t P1_QSMFC6; /*!< (@ 0x0000250C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC6_b; + }; + + union + { + __IM uint32_t P1_QMSPPC6; /*!< (@ 0x00002510) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC6_b; + }; + + union + { + __IM uint32_t P1_QMSRPC6; /*!< (@ 0x00002514) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC6_b; + }; + + union + { + __IOM uint32_t P1_QSTMACU7; /*!< (@ 0x00002518) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P1_QSTMACU7_b; + }; + + union + { + __IOM uint32_t P1_QSTMACD7; /*!< (@ 0x0000251C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P1_QSTMACD7_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMU7; /*!< (@ 0x00002520) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P1_QSTMAMU7_b; + }; + + union + { + __IOM uint32_t P1_QSTMAMD7; /*!< (@ 0x00002524) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P1_QSTMAMD7_b; + }; + + union + { + __IOM uint32_t P1_QSFTVL7; /*!< (@ 0x00002528) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P1_QSFTVL7_b; + }; + + union + { + __IOM uint32_t P1_QSFTVLM7; /*!< (@ 0x0000252C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P1_QSFTVLM7_b; + }; + + union + { + __IOM uint32_t P1_QSFTBL7; /*!< (@ 0x00002530) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P1_QSFTBL7_b; + }; + + union + { + __IM uint32_t P1_QSMFC7; /*!< (@ 0x00002534) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P1_QSMFC7_b; + }; + + union + { + __IM uint32_t P1_QMSPPC7; /*!< (@ 0x00002538) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P1_QMSPPC7_b; + }; + + union + { + __IM uint32_t P1_QMSRPC7; /*!< (@ 0x0000253C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P1_QMSRPC7_b; + }; + __IM uint32_t RESERVED69[42]; + + union + { + __IOM uint32_t P1_QSEIS; /*!< (@ 0x000025E8) Qci Stream Filter Error Interrupt Status (SDU + * Oversize) */ + + struct + { + __IOM uint32_t QSMOIS : 8; /*!< [7..0] MSDU oversize frames Interrupt status[s] */ + uint32_t : 24; + } P1_QSEIS_b; + }; + + union + { + __IOM uint32_t P1_QSEIE; /*!< (@ 0x000025EC) Qci Stream Filter Error Interrupt Enable */ + + struct + { + __IOM uint32_t QSMOIE : 8; /*!< [7..0] MSDU oversize frames Interrupt Enable[s] */ + uint32_t : 24; + } P1_QSEIE_b; + }; + + union + { + __OM uint32_t P1_QSEID; /*!< (@ 0x000025F0) Qci Stream Filter Error Interrupt Disable */ + + struct + { + __OM uint32_t QSMOID : 8; /*!< [7..0] MSDU oversize frames Interrupt Disable[s] */ + uint32_t : 24; + } P1_QSEID_b; + }; + __IM uint32_t RESERVED70[3]; + + union + { + __IOM uint32_t P1_QGMOD; /*!< (@ 0x00002600) Qci Gate Mode Register */ + + struct + { + __IOM uint32_t QGMOD : 8; /*!< [7..0] Flow gate mode[g] */ + uint32_t : 24; + } P1_QGMOD_b; + }; + + union + { + __IM uint32_t P1_QGPPC; /*!< (@ 0x00002604) Qci Gate (All) Passed Packet Count Port 1 */ + + struct + { + __IM uint32_t QGPPC : 16; /*!< [15..0] Qci gate passed packet count */ + uint32_t : 16; + } P1_QGPPC_b; + }; + + union + { + __IM uint32_t P1_QGDPC0; /*!< (@ 0x00002608) Qci Gate 0 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC0_b; + }; + __IM uint32_t RESERVED71; + + union + { + __IM uint32_t P1_QGDPC1; /*!< (@ 0x00002610) Qci Gate 1 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC1_b; + }; + __IM uint32_t RESERVED72; + + union + { + __IM uint32_t P1_QGDPC2; /*!< (@ 0x00002618) Qci Gate 2 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC2_b; + }; + __IM uint32_t RESERVED73; + + union + { + __IM uint32_t P1_QGDPC3; /*!< (@ 0x00002620) Qci Gate 3 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC3_b; + }; + __IM uint32_t RESERVED74; + + union + { + __IM uint32_t P1_QGDPC4; /*!< (@ 0x00002628) Qci Gate 4 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC4_b; + }; + __IM uint32_t RESERVED75; + + union + { + __IM uint32_t P1_QGDPC5; /*!< (@ 0x00002630) Qci Gate 5 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC5_b; + }; + __IM uint32_t RESERVED76; + + union + { + __IM uint32_t P1_QGDPC6; /*!< (@ 0x00002638) Qci Gate 6 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC6_b; + }; + __IM uint32_t RESERVED77; + + union + { + __IM uint32_t P1_QGDPC7; /*!< (@ 0x00002640) Qci Gate 7 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P1_QGDPC7_b; + }; + + union + { + __IOM uint32_t P1_QGEIS; /*!< (@ 0x00002644) Qci Gate Error Interrupt Status */ + + struct + { + __IOM uint32_t QGMOIS : 8; /*!< [7..0] Gating error Interrupt status[g] */ + uint32_t : 24; + } P1_QGEIS_b; + }; + + union + { + __IOM uint32_t P1_QGEIE; /*!< (@ 0x00002648) Qci Gate Error Interrupt Enable */ + + struct + { + __IOM uint32_t QGMOIE : 8; /*!< [7..0] Gating error Interrupt Enable[g] */ + uint32_t : 24; + } P1_QGEIE_b; + }; + + union + { + __OM uint32_t P1_QGEID; /*!< (@ 0x0000264C) Qci Gate Error Interrupt Disable */ + + struct + { + __OM uint32_t QGMOID : 8; /*!< [7..0] Gating error Interrupt Disable[g] */ + uint32_t : 24; + } P1_QGEID_b; + }; + + union + { + __IOM uint32_t P1_QMDESC0; /*!< (@ 0x00002650) Qci Port n Flow Meter 0 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC0_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC0; /*!< (@ 0x00002654) Qci Meter CBS Configuration Port n, Meter 0 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC0_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC0; /*!< (@ 0x00002658) Qci Meter CIR Configuration n 0 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC0_b; + }; + + union + { + __IM uint32_t P1_QMGPC0; /*!< (@ 0x0000265C) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC0_b; + }; + + union + { + __IM uint32_t P1_QMRPC0; /*!< (@ 0x00002660) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC0_b; + }; + + union + { + __IOM uint32_t P1_QMDESC1; /*!< (@ 0x00002664) Qci Port n Flow Meter 1 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC1_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC1; /*!< (@ 0x00002668) Qci Meter CBS Configuration Port n, Meter 1 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC1_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC1; /*!< (@ 0x0000266C) Qci Meter CIR Configuration n 1 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC1_b; + }; + + union + { + __IM uint32_t P1_QMGPC1; /*!< (@ 0x00002670) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC1_b; + }; + + union + { + __IM uint32_t P1_QMRPC1; /*!< (@ 0x00002674) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC1_b; + }; + + union + { + __IOM uint32_t P1_QMDESC2; /*!< (@ 0x00002678) Qci Port n Flow Meter 2 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC2_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC2; /*!< (@ 0x0000267C) Qci Meter CBS Configuration Port n, Meter 2 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC2_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC2; /*!< (@ 0x00002680) Qci Meter CIR Configuration n 2 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC2_b; + }; + + union + { + __IM uint32_t P1_QMGPC2; /*!< (@ 0x00002684) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC2_b; + }; + + union + { + __IM uint32_t P1_QMRPC2; /*!< (@ 0x00002688) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC2_b; + }; + + union + { + __IOM uint32_t P1_QMDESC3; /*!< (@ 0x0000268C) Qci Port n Flow Meter 3 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC3_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC3; /*!< (@ 0x00002690) Qci Meter CBS Configuration Port n, Meter 3 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC3_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC3; /*!< (@ 0x00002694) Qci Meter CIR Configuration n 3 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC3_b; + }; + + union + { + __IM uint32_t P1_QMGPC3; /*!< (@ 0x00002698) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC3_b; + }; + + union + { + __IM uint32_t P1_QMRPC3; /*!< (@ 0x0000269C) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC3_b; + }; + + union + { + __IOM uint32_t P1_QMDESC4; /*!< (@ 0x000026A0) Qci Port n Flow Meter 4 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC4_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC4; /*!< (@ 0x000026A4) Qci Meter CBS Configuration Port n, Meter 4 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC4_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC4; /*!< (@ 0x000026A8) Qci Meter CIR Configuration n 4 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC4_b; + }; + + union + { + __IM uint32_t P1_QMGPC4; /*!< (@ 0x000026AC) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC4_b; + }; + + union + { + __IM uint32_t P1_QMRPC4; /*!< (@ 0x000026B0) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC4_b; + }; + + union + { + __IOM uint32_t P1_QMDESC5; /*!< (@ 0x000026B4) Qci Port n Flow Meter 5 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC5_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC5; /*!< (@ 0x000026B8) Qci Meter CBS Configuration Port n, Meter 5 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC5_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC5; /*!< (@ 0x000026BC) Qci Meter CIR Configuration n 5 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC5_b; + }; + + union + { + __IM uint32_t P1_QMGPC5; /*!< (@ 0x000026C0) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC5_b; + }; + + union + { + __IM uint32_t P1_QMRPC5; /*!< (@ 0x000026C4) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC5_b; + }; + + union + { + __IOM uint32_t P1_QMDESC6; /*!< (@ 0x000026C8) Qci Port n Flow Meter 6 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC6_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC6; /*!< (@ 0x000026CC) Qci Meter CBS Configuration Port n, Meter 6 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC6_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC6; /*!< (@ 0x000026D0) Qci Meter CIR Configuration n 6 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC6_b; + }; + + union + { + __IM uint32_t P1_QMGPC6; /*!< (@ 0x000026D4) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC6_b; + }; + + union + { + __IM uint32_t P1_QMRPC6; /*!< (@ 0x000026D8) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC6_b; + }; + + union + { + __IOM uint32_t P1_QMDESC7; /*!< (@ 0x000026DC) Qci Port n Flow Meter 7 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P1_QMDESC7_b; + }; + + union + { + __IOM uint32_t P1_QMCBSC7; /*!< (@ 0x000026E0) Qci Meter CBS Configuration Port n, Meter 7 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P1_QMCBSC7_b; + }; + + union + { + __IOM uint32_t P1_QMCIRC7; /*!< (@ 0x000026E4) Qci Meter CIR Configuration n 7 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P1_QMCIRC7_b; + }; + + union + { + __IM uint32_t P1_QMGPC7; /*!< (@ 0x000026E8) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P1_QMGPC7_b; + }; + + union + { + __IM uint32_t P1_QMRPC7; /*!< (@ 0x000026EC) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P1_QMRPC7_b; + }; + + union + { + __IOM uint32_t P1_QMEC; /*!< (@ 0x000026F0) Qci Meter Enable Configuration */ + + struct + { + __IOM uint32_t ME : 8; /*!< [7..0] Enable meter[m] */ + uint32_t : 24; + } P1_QMEC_b; + }; + + union + { + __IOM uint32_t P1_QMEIS; /*!< (@ 0x000026F4) Qci Meter Error Interrupt Status */ + + struct + { + __IOM uint32_t QRFIS : 8; /*!< [7..0] Red frames Interrupt status[m] */ + uint32_t : 24; + } P1_QMEIS_b; + }; + + union + { + __IOM uint32_t P1_QMEIE; /*!< (@ 0x000026F8) Qci Meter Error Interrupt Enable */ + + struct + { + __IOM uint32_t QRFIE : 8; /*!< [7..0] Red frames Interrupt Enable[m] */ + uint32_t : 24; + } P1_QMEIE_b; + }; + + union + { + __OM uint32_t P1_QMEID; /*!< (@ 0x000026FC) Qci Meter Error Interrupt Disable */ + + struct + { + __OM uint32_t QRFID : 8; /*!< [7..0] Red frames Interrupt Disable[m] */ + uint32_t : 24; + } P1_QMEID_b; + }; + + union + { + __IOM uint32_t P1_PCP_REMAP; /*!< (@ 0x00002700) Port 1 VLAN Priority Code Point (PCP) Remap */ + + struct + { + __IOM uint32_t PCP_REMAP0 : 3; /*!< [2..0] PCP_REMAP0 */ + __IOM uint32_t PCP_REMAP1 : 3; /*!< [5..3] PCP_REMAP1 */ + __IOM uint32_t PCP_REMAP2 : 3; /*!< [8..6] PCP_REMAP2 */ + __IOM uint32_t PCP_REMAP3 : 3; /*!< [11..9] PCP_REMAP3 */ + __IOM uint32_t PCP_REMAP4 : 3; /*!< [14..12] PCP_REMAP4 */ + __IOM uint32_t PCP_REMAP5 : 3; /*!< [17..15] PCP_REMAP5 */ + __IOM uint32_t PCP_REMAP6 : 3; /*!< [20..18] PCP_REMAP6 */ + __IOM uint32_t PCP_REMAP7 : 3; /*!< [23..21] PCP_REMAP7 */ + uint32_t : 8; + } P1_PCP_REMAP_b; + }; + + union + { + __IOM uint32_t P1_VLAN_TAG; /*!< (@ 0x00002704) Port 1 VLAN TAG Information for Priority Regeneration */ + + struct + { + __IOM uint32_t VID : 12; /*!< [11..0] VID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TPID : 16; /*!< [31..16] TPID */ + } P1_VLAN_TAG_b; + }; + + union + { + __IOM uint32_t P1_VLAN_MODE; /*!< (@ 0x00002708) Port 1 VLAN Mode */ + + struct + { + __IOM uint32_t VITM : 2; /*!< [1..0] VLAN input tagging mode */ + __IOM uint32_t VICM : 2; /*!< [3..2] VLAN input verification mode */ + uint32_t : 28; + } P1_VLAN_MODE_b; + }; + + union + { + __IM uint32_t P1_VIC_DROP_CNT; /*!< (@ 0x0000270C) Port 1 VLAN Ingress Check Drop Frame Counter */ + + struct + { + __IM uint32_t VIC_DROP_CNT : 16; /*!< [15..0] Port n VLAN ingress check drop frame count */ + uint32_t : 16; + } P1_VIC_DROP_CNT_b; + }; + __IM uint32_t RESERVED78[6]; + + union + { + __IM uint32_t P1_LOOKUP_HIT_CNT; /*!< (@ 0x00002728) Port 1 DST Address Lookup Hit Counter */ + + struct + { + __IM uint32_t LOOKUP_HIT_CNT : 24; /*!< [23..0] Port n Lookup hit count */ + uint32_t : 8; + } P1_LOOKUP_HIT_CNT_b; + }; + + union + { + __IOM uint32_t P1_ERROR_STATUS; /*!< (@ 0x0000272C) Port 1 Frame Parser Runtime Error Status */ + + struct + { + __IOM uint32_t SOPERR : 1; /*!< [0..0] SOP error detected in frame parser */ + __IOM uint32_t PUNDSZ : 1; /*!< [1..1] Preemptable frame under size error detected in frame + * parser */ + __IOM uint32_t POVRSZ : 1; /*!< [2..2] Preemptable frame over size error detected in frame parser */ + __IOM uint32_t EUNDSZ : 1; /*!< [3..3] Express frame under size error detected in frame parser */ + __IOM uint32_t EOVRSZ : 1; /*!< [4..4] Express frame over size error detected in frame parser */ + uint32_t : 27; + } P1_ERROR_STATUS_b; + }; + + union + { + __IOM uint32_t P1_ERROR_MASK; /*!< (@ 0x00002730) Port 1 Frame Parser Runtime Error Mask */ + + struct + { + __IOM uint32_t MSOPERR : 1; /*!< [0..0] Error mask of SOPERR (SOP error) */ + __IOM uint32_t MPUNDSZ : 1; /*!< [1..1] Error mask of PUNDSZ (Preemptable frame under size error) */ + __IOM uint32_t MPOVRSZ : 1; /*!< [2..2] Error mask of POVRSZ (Preemptable frame over size error) */ + __IOM uint32_t MEUNDSZ : 1; /*!< [3..3] Error mask of EUNDSZ (Express frame under size error) */ + __IOM uint32_t MEOVRSZ : 1; /*!< [4..4] Error mask of EOVRSZ (Express frame over size error) */ + uint32_t : 27; + } P1_ERROR_MASK_b; + }; + __IM uint32_t RESERVED79[51]; + + union + { + __IOM uint32_t P2_QSTMACU0; /*!< (@ 0x00002800) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU0_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD0; /*!< (@ 0x00002804) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD0_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU0; /*!< (@ 0x00002808) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU0_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD0; /*!< (@ 0x0000280C) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD0_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL0; /*!< (@ 0x00002810) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL0_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM0; /*!< (@ 0x00002814) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM0_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL0; /*!< (@ 0x00002818) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL0_b; + }; + + union + { + __IM uint32_t P2_QSMFC0; /*!< (@ 0x0000281C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC0_b; + }; + + union + { + __IM uint32_t P2_QMSPPC0; /*!< (@ 0x00002820) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC0_b; + }; + + union + { + __IM uint32_t P2_QMSRPC0; /*!< (@ 0x00002824) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC0_b; + }; + + union + { + __IOM uint32_t P2_QSTMACU1; /*!< (@ 0x00002828) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU1_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD1; /*!< (@ 0x0000282C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD1_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU1; /*!< (@ 0x00002830) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU1_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD1; /*!< (@ 0x00002834) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD1_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL1; /*!< (@ 0x00002838) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL1_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM1; /*!< (@ 0x0000283C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM1_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL1; /*!< (@ 0x00002840) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL1_b; + }; + + union + { + __IM uint32_t P2_QSMFC1; /*!< (@ 0x00002844) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC1_b; + }; + + union + { + __IM uint32_t P2_QMSPPC1; /*!< (@ 0x00002848) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC1_b; + }; + + union + { + __IM uint32_t P2_QMSRPC1; /*!< (@ 0x0000284C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC1_b; + }; + + union + { + __IOM uint32_t P2_QSTMACU2; /*!< (@ 0x00002850) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU2_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD2; /*!< (@ 0x00002854) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD2_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU2; /*!< (@ 0x00002858) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU2_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD2; /*!< (@ 0x0000285C) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD2_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL2; /*!< (@ 0x00002860) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL2_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM2; /*!< (@ 0x00002864) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM2_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL2; /*!< (@ 0x00002868) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL2_b; + }; + + union + { + __IM uint32_t P2_QSMFC2; /*!< (@ 0x0000286C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC2_b; + }; + + union + { + __IM uint32_t P2_QMSPPC2; /*!< (@ 0x00002870) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC2_b; + }; + + union + { + __IM uint32_t P2_QMSRPC2; /*!< (@ 0x00002874) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC2_b; + }; + + union + { + __IOM uint32_t P2_QSTMACU3; /*!< (@ 0x00002878) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU3_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD3; /*!< (@ 0x0000287C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD3_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU3; /*!< (@ 0x00002880) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU3_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD3; /*!< (@ 0x00002884) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD3_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL3; /*!< (@ 0x00002888) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL3_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM3; /*!< (@ 0x0000288C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM3_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL3; /*!< (@ 0x00002890) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL3_b; + }; + + union + { + __IM uint32_t P2_QSMFC3; /*!< (@ 0x00002894) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC3_b; + }; + + union + { + __IM uint32_t P2_QMSPPC3; /*!< (@ 0x00002898) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC3_b; + }; + + union + { + __IM uint32_t P2_QMSRPC3; /*!< (@ 0x0000289C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC3_b; + }; + + union + { + __IOM uint32_t P2_QSTMACU4; /*!< (@ 0x000028A0) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU4_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD4; /*!< (@ 0x000028A4) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD4_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU4; /*!< (@ 0x000028A8) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU4_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD4; /*!< (@ 0x000028AC) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD4_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL4; /*!< (@ 0x000028B0) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL4_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM4; /*!< (@ 0x000028B4) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM4_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL4; /*!< (@ 0x000028B8) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL4_b; + }; + + union + { + __IM uint32_t P2_QSMFC4; /*!< (@ 0x000028BC) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC4_b; + }; + + union + { + __IM uint32_t P2_QMSPPC4; /*!< (@ 0x000028C0) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC4_b; + }; + + union + { + __IM uint32_t P2_QMSRPC4; /*!< (@ 0x000028C4) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC4_b; + }; + + union + { + __IOM uint32_t P2_QSTMACU5; /*!< (@ 0x000028C8) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU5_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD5; /*!< (@ 0x000028CC) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD5_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU5; /*!< (@ 0x000028D0) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU5_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD5; /*!< (@ 0x000028D4) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD5_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL5; /*!< (@ 0x000028D8) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL5_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM5; /*!< (@ 0x000028DC) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM5_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL5; /*!< (@ 0x000028E0) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL5_b; + }; + + union + { + __IM uint32_t P2_QSMFC5; /*!< (@ 0x000028E4) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC5_b; + }; + + union + { + __IM uint32_t P2_QMSPPC5; /*!< (@ 0x000028E8) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC5_b; + }; + + union + { + __IM uint32_t P2_QMSRPC5; /*!< (@ 0x000028EC) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC5_b; + }; + + union + { + __IOM uint32_t P2_QSTMACU6; /*!< (@ 0x000028F0) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU6_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD6; /*!< (@ 0x000028F4) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD6_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU6; /*!< (@ 0x000028F8) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU6_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD6; /*!< (@ 0x000028FC) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD6_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL6; /*!< (@ 0x00002900) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL6_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM6; /*!< (@ 0x00002904) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM6_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL6; /*!< (@ 0x00002908) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL6_b; + }; + + union + { + __IM uint32_t P2_QSMFC6; /*!< (@ 0x0000290C) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC6_b; + }; + + union + { + __IM uint32_t P2_QMSPPC6; /*!< (@ 0x00002910) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC6_b; + }; + + union + { + __IM uint32_t P2_QMSRPC6; /*!< (@ 0x00002914) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC6_b; + }; + + union + { + __IOM uint32_t P2_QSTMACU7; /*!< (@ 0x00002918) Qci Stream Filter Table MAC Address Upper Part */ + + struct + { + __IOM uint32_t MACA : 16; /*!< [15..0] Qci stream filter table MAC address[47:32] */ + __IOM uint32_t DASA : 1; /*!< [16..16] MAC address (MACA) select */ + uint32_t : 15; + } P2_QSTMACU7_b; + }; + + union + { + __IOM uint32_t P2_QSTMACD7; /*!< (@ 0x0000291C) Qci Stream Filter Table MAC Address Downer Part */ + + struct + { + __IOM uint32_t MACA : 32; /*!< [31..0] Qci stream filter table MAC address[31:0] */ + } P2_QSTMACD7_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMU7; /*!< (@ 0x00002920) Qci Stream Filter Table MAC Address Mask Upper + * Part */ + + struct + { + __IOM uint32_t MACAM : 16; /*!< [15..0] Qci stream filter table MAC address bit mask[47:32] */ + uint32_t : 16; + } P2_QSTMAMU7_b; + }; + + union + { + __IOM uint32_t P2_QSTMAMD7; /*!< (@ 0x00002924) Qci Stream Filter Table MAC Address Mask Downer + * Part */ + + struct + { + __IOM uint32_t MACAM : 32; /*!< [31..0] Qci stream filter table MAC address bit mask[31:0] */ + } P2_QSTMAMD7_b; + }; + + union + { + __IOM uint32_t P2_QSFTVL7; /*!< (@ 0x00002928) Qci Stream Filter Table VLAN */ + + struct + { + __IOM uint32_t VLANID : 12; /*!< [11..0] VLANID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TAGMD : 2; /*!< [17..16] TAGMD */ + uint32_t : 14; + } P2_QSFTVL7_b; + }; + + union + { + __IOM uint32_t P2_QSFTVLM7; /*!< (@ 0x0000292C) Qci Stream Filter Table VLAN Mask */ + + struct + { + __IOM uint32_t VLANIDM : 12; /*!< [11..0] Qci stream filter table VLAN ID[11:0] bit mask */ + __IOM uint32_t DEIM : 1; /*!< [12..12] DEIM */ + __IOM uint32_t PCPM : 3; /*!< [15..13] Qci stream filter table VLAN PCP[2:0] bit mask */ + uint32_t : 16; + } P2_QSFTVLM7_b; + }; + + union + { + __IOM uint32_t P2_QSFTBL7; /*!< (@ 0x00002930) Qci Stream Filter Table SDU/Gate/Meter ID */ + + struct + { + __IOM uint32_t QSTE : 1; /*!< [0..0] QSTE */ + uint32_t : 3; + __IOM uint32_t GAID : 3; /*!< [6..4] GAID */ + __IOM uint32_t GAIDV : 1; /*!< [7..7] GAIDV */ + __IOM uint32_t MEID : 3; /*!< [10..8] MEID */ + uint32_t : 1; + __IOM uint32_t MEIDV : 1; /*!< [12..12] MEIDV */ + uint32_t : 3; + __IOM uint32_t MSDU : 11; /*!< [26..16] Qci stream filter table max SDU size */ + __IOM uint32_t MSDUE : 1; /*!< [27..27] MSDUE */ + __IOM uint32_t QSMSM : 1; /*!< [28..28] Qci stream MSDU mode */ + uint32_t : 3; + } P2_QSFTBL7_b; + }; + + union + { + __IM uint32_t P2_QSMFC7; /*!< (@ 0x00002934) Qci Stream Match Packet Count */ + + struct + { + __IM uint32_t QSMFC : 16; /*!< [15..0] Qci stream match packet count */ + uint32_t : 16; + } P2_QSMFC7_b; + }; + + union + { + __IM uint32_t P2_QMSPPC7; /*!< (@ 0x00002938) Qci MSDU Passed Packet Count */ + + struct + { + __IM uint32_t QMSPPC : 16; /*!< [15..0] Qci msdu passed packet count */ + uint32_t : 16; + } P2_QMSPPC7_b; + }; + + union + { + __IM uint32_t P2_QMSRPC7; /*!< (@ 0x0000293C) Qci MSDU Reject Packet Count */ + + struct + { + __IM uint32_t QMSRPC : 16; /*!< [15..0] Qci MSDU rejected packet count */ + uint32_t : 16; + } P2_QMSRPC7_b; + }; + __IM uint32_t RESERVED80[42]; + + union + { + __IOM uint32_t P2_QSEIS; /*!< (@ 0x000029E8) Qci Stream Filter Error Interrupt Status (SDU + * Oversize) */ + + struct + { + __IOM uint32_t QSMOIS : 8; /*!< [7..0] MSDU oversize frames Interrupt status[s] */ + uint32_t : 24; + } P2_QSEIS_b; + }; + + union + { + __IOM uint32_t P2_QSEIE; /*!< (@ 0x000029EC) Qci Stream Filter Error Interrupt Enable */ + + struct + { + __IOM uint32_t QSMOIE : 8; /*!< [7..0] MSDU oversize frames Interrupt Enable[s] */ + uint32_t : 24; + } P2_QSEIE_b; + }; + + union + { + __OM uint32_t P2_QSEID; /*!< (@ 0x000029F0) Qci Stream Filter Error Interrupt Disable */ + + struct + { + __OM uint32_t QSMOID : 8; /*!< [7..0] MSDU oversize frames Interrupt Disable[s] */ + uint32_t : 24; + } P2_QSEID_b; + }; + __IM uint32_t RESERVED81[3]; + + union + { + __IOM uint32_t P2_QGMOD; /*!< (@ 0x00002A00) Qci Gate Mode Register */ + + struct + { + __IOM uint32_t QGMOD : 8; /*!< [7..0] Flow gate mode[g] */ + uint32_t : 24; + } P2_QGMOD_b; + }; + + union + { + __IM uint32_t P2_QGPPC; /*!< (@ 0x00002A04) Qci Gate (All) Passed Packet Count Port 2 */ + + struct + { + __IM uint32_t QGPPC : 16; /*!< [15..0] Qci gate passed packet count */ + uint32_t : 16; + } P2_QGPPC_b; + }; + + union + { + __IM uint32_t P2_QGDPC0; /*!< (@ 0x00002A08) Qci Gate 0 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC0_b; + }; + __IM uint32_t RESERVED82; + + union + { + __IM uint32_t P2_QGDPC1; /*!< (@ 0x00002A10) Qci Gate 1 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC1_b; + }; + __IM uint32_t RESERVED83; + + union + { + __IM uint32_t P2_QGDPC2; /*!< (@ 0x00002A18) Qci Gate 2 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC2_b; + }; + __IM uint32_t RESERVED84; + + union + { + __IM uint32_t P2_QGDPC3; /*!< (@ 0x00002A20) Qci Gate 3 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC3_b; + }; + __IM uint32_t RESERVED85; + + union + { + __IM uint32_t P2_QGDPC4; /*!< (@ 0x00002A28) Qci Gate 4 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC4_b; + }; + __IM uint32_t RESERVED86; + + union + { + __IM uint32_t P2_QGDPC5; /*!< (@ 0x00002A30) Qci Gate 5 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC5_b; + }; + __IM uint32_t RESERVED87; + + union + { + __IM uint32_t P2_QGDPC6; /*!< (@ 0x00002A38) Qci Gate 6 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC6_b; + }; + __IM uint32_t RESERVED88; + + union + { + __IM uint32_t P2_QGDPC7; /*!< (@ 0x00002A40) Qci Gate 7 Dropped Packet Count Port n */ + + struct + { + __IM uint32_t QGDPC : 16; /*!< [15..0] Qci gate dropped packet count */ + uint32_t : 16; + } P2_QGDPC7_b; + }; + + union + { + __IOM uint32_t P2_QGEIS; /*!< (@ 0x00002A44) Qci Gate Error Interrupt Status */ + + struct + { + __IOM uint32_t QGMOIS : 8; /*!< [7..0] Gating error Interrupt status[g] */ + uint32_t : 24; + } P2_QGEIS_b; + }; + + union + { + __IOM uint32_t P2_QGEIE; /*!< (@ 0x00002A48) Qci Gate Error Interrupt Enable */ + + struct + { + __IOM uint32_t QGMOIE : 8; /*!< [7..0] Gating error Interrupt Enable[g] */ + uint32_t : 24; + } P2_QGEIE_b; + }; + + union + { + __OM uint32_t P2_QGEID; /*!< (@ 0x00002A4C) Qci Gate Error Interrupt Disable */ + + struct + { + __OM uint32_t QGMOID : 8; /*!< [7..0] Gating error Interrupt Disable[g] */ + uint32_t : 24; + } P2_QGEID_b; + }; + + union + { + __IOM uint32_t P2_QMDESC0; /*!< (@ 0x00002A50) Qci Port n Flow Meter 0 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC0_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC0; /*!< (@ 0x00002A54) Qci Meter CBS Configuration Port n, Meter 0 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC0_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC0; /*!< (@ 0x00002A58) Qci Meter CIR Configuration n 0 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC0_b; + }; + + union + { + __IM uint32_t P2_QMGPC0; /*!< (@ 0x00002A5C) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC0_b; + }; + + union + { + __IM uint32_t P2_QMRPC0; /*!< (@ 0x00002A60) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC0_b; + }; + + union + { + __IOM uint32_t P2_QMDESC1; /*!< (@ 0x00002A64) Qci Port n Flow Meter 1 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC1_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC1; /*!< (@ 0x00002A68) Qci Meter CBS Configuration Port n, Meter 1 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC1_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC1; /*!< (@ 0x00002A6C) Qci Meter CIR Configuration n 1 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC1_b; + }; + + union + { + __IM uint32_t P2_QMGPC1; /*!< (@ 0x00002A70) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC1_b; + }; + + union + { + __IM uint32_t P2_QMRPC1; /*!< (@ 0x00002A74) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC1_b; + }; + + union + { + __IOM uint32_t P2_QMDESC2; /*!< (@ 0x00002A78) Qci Port n Flow Meter 2 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC2_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC2; /*!< (@ 0x00002A7C) Qci Meter CBS Configuration Port n, Meter 2 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC2_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC2; /*!< (@ 0x00002A80) Qci Meter CIR Configuration n 2 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC2_b; + }; + + union + { + __IM uint32_t P2_QMGPC2; /*!< (@ 0x00002A84) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC2_b; + }; + + union + { + __IM uint32_t P2_QMRPC2; /*!< (@ 0x00002A88) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC2_b; + }; + + union + { + __IOM uint32_t P2_QMDESC3; /*!< (@ 0x00002A8C) Qci Port n Flow Meter 3 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC3_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC3; /*!< (@ 0x00002A90) Qci Meter CBS Configuration Port n, Meter 3 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC3_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC3; /*!< (@ 0x00002A94) Qci Meter CIR Configuration n 3 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC3_b; + }; + + union + { + __IM uint32_t P2_QMGPC3; /*!< (@ 0x00002A98) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC3_b; + }; + + union + { + __IM uint32_t P2_QMRPC3; /*!< (@ 0x00002A9C) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC3_b; + }; + + union + { + __IOM uint32_t P2_QMDESC4; /*!< (@ 0x00002AA0) Qci Port n Flow Meter 4 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC4_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC4; /*!< (@ 0x00002AA4) Qci Meter CBS Configuration Port n, Meter 4 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC4_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC4; /*!< (@ 0x00002AA8) Qci Meter CIR Configuration n 4 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC4_b; + }; + + union + { + __IM uint32_t P2_QMGPC4; /*!< (@ 0x00002AAC) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC4_b; + }; + + union + { + __IM uint32_t P2_QMRPC4; /*!< (@ 0x00002AB0) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC4_b; + }; + + union + { + __IOM uint32_t P2_QMDESC5; /*!< (@ 0x00002AB4) Qci Port n Flow Meter 5 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC5_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC5; /*!< (@ 0x00002AB8) Qci Meter CBS Configuration Port n, Meter 5 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC5_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC5; /*!< (@ 0x00002ABC) Qci Meter CIR Configuration n 5 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC5_b; + }; + + union + { + __IM uint32_t P2_QMGPC5; /*!< (@ 0x00002AC0) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC5_b; + }; + + union + { + __IM uint32_t P2_QMRPC5; /*!< (@ 0x00002AC4) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC5_b; + }; + + union + { + __IOM uint32_t P2_QMDESC6; /*!< (@ 0x00002AC8) Qci Port n Flow Meter 6 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC6_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC6; /*!< (@ 0x00002ACC) Qci Meter CBS Configuration Port n, Meter 6 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC6_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC6; /*!< (@ 0x00002AD0) Qci Meter CIR Configuration n 6 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC6_b; + }; + + union + { + __IM uint32_t P2_QMGPC6; /*!< (@ 0x00002AD4) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC6_b; + }; + + union + { + __IM uint32_t P2_QMRPC6; /*!< (@ 0x00002AD8) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC6_b; + }; + + union + { + __IOM uint32_t P2_QMDESC7; /*!< (@ 0x00002ADC) Qci Port n Flow Meter 7 Descriptor Register */ + + struct + { + __IOM uint32_t RFD : 1; /*!< [0..0] Red frame drop */ + __IOM uint32_t MM : 1; /*!< [1..1] Flow meter mode */ + __IOM uint32_t CF : 1; /*!< [2..2] Coupling flag */ + uint32_t : 29; + } P2_QMDESC7_b; + }; + + union + { + __IOM uint32_t P2_QMCBSC7; /*!< (@ 0x00002AE0) Qci Meter CBS Configuration Port n, Meter 7 */ + + struct + { + __IOM uint32_t CBS : 18; /*!< [17..0] CBS (Committed Burst Size) */ + uint32_t : 14; + } P2_QMCBSC7_b; + }; + + union + { + __IOM uint32_t P2_QMCIRC7; /*!< (@ 0x00002AE4) Qci Meter CIR Configuration n 7 */ + + struct + { + __IOM uint32_t CIR : 17; /*!< [16..0] CIR (Committed Information Rate) */ + uint32_t : 15; + } P2_QMCIRC7_b; + }; + + union + { + __IM uint32_t P2_QMGPC7; /*!< (@ 0x00002AE8) Qci Meter Green Packet Count */ + + struct + { + __IM uint32_t QMGPC : 16; /*!< [15..0] Qci meter green packet count */ + uint32_t : 16; + } P2_QMGPC7_b; + }; + + union + { + __IM uint32_t P2_QMRPC7; /*!< (@ 0x00002AEC) Qci Meter Red Packet Count */ + + struct + { + __IM uint32_t QMRPC : 16; /*!< [15..0] Qci meter red packet count */ + uint32_t : 16; + } P2_QMRPC7_b; + }; + + union + { + __IOM uint32_t P2_QMEC; /*!< (@ 0x00002AF0) Qci Meter Enable Configuration */ + + struct + { + __IOM uint32_t ME : 8; /*!< [7..0] Enable meter[m] */ + uint32_t : 24; + } P2_QMEC_b; + }; + + union + { + __IOM uint32_t P2_QMEIS; /*!< (@ 0x00002AF4) Qci Meter Error Interrupt Status */ + + struct + { + __IOM uint32_t QRFIS : 8; /*!< [7..0] Red frames Interrupt status[m] */ + uint32_t : 24; + } P2_QMEIS_b; + }; + + union + { + __IOM uint32_t P2_QMEIE; /*!< (@ 0x00002AF8) Qci Meter Error Interrupt Enable */ + + struct + { + __IOM uint32_t QRFIE : 8; /*!< [7..0] Red frames Interrupt Enable[m] */ + uint32_t : 24; + } P2_QMEIE_b; + }; + + union + { + __OM uint32_t P2_QMEID; /*!< (@ 0x00002AFC) Qci Meter Error Interrupt Disable */ + + struct + { + __OM uint32_t QRFID : 8; /*!< [7..0] Red frames Interrupt Disable[m] */ + uint32_t : 24; + } P2_QMEID_b; + }; + + union + { + __IOM uint32_t P2_PCP_REMAP; /*!< (@ 0x00002B00) Port 2 VLAN Priority Code Point (PCP) Remap */ + + struct + { + __IOM uint32_t PCP_REMAP0 : 3; /*!< [2..0] PCP_REMAP0 */ + __IOM uint32_t PCP_REMAP1 : 3; /*!< [5..3] PCP_REMAP1 */ + __IOM uint32_t PCP_REMAP2 : 3; /*!< [8..6] PCP_REMAP2 */ + __IOM uint32_t PCP_REMAP3 : 3; /*!< [11..9] PCP_REMAP3 */ + __IOM uint32_t PCP_REMAP4 : 3; /*!< [14..12] PCP_REMAP4 */ + __IOM uint32_t PCP_REMAP5 : 3; /*!< [17..15] PCP_REMAP5 */ + __IOM uint32_t PCP_REMAP6 : 3; /*!< [20..18] PCP_REMAP6 */ + __IOM uint32_t PCP_REMAP7 : 3; /*!< [23..21] PCP_REMAP7 */ + uint32_t : 8; + } P2_PCP_REMAP_b; + }; + + union + { + __IOM uint32_t P2_VLAN_TAG; /*!< (@ 0x00002B04) Port 2 VLAN TAG Information for Priority Regeneration */ + + struct + { + __IOM uint32_t VID : 12; /*!< [11..0] VID */ + __IOM uint32_t DEI : 1; /*!< [12..12] DEI */ + __IOM uint32_t PCP : 3; /*!< [15..13] PCP */ + __IOM uint32_t TPID : 16; /*!< [31..16] TPID */ + } P2_VLAN_TAG_b; + }; + + union + { + __IOM uint32_t P2_VLAN_MODE; /*!< (@ 0x00002B08) Port 2 VLAN Mode */ + + struct + { + __IOM uint32_t VITM : 2; /*!< [1..0] VLAN input tagging mode */ + __IOM uint32_t VICM : 2; /*!< [3..2] VLAN input verification mode */ + uint32_t : 28; + } P2_VLAN_MODE_b; + }; + + union + { + __IM uint32_t P2_VIC_DROP_CNT; /*!< (@ 0x00002B0C) Port 2 VLAN Ingress Check Drop Frame Counter */ + + struct + { + __IM uint32_t VIC_DROP_CNT : 16; /*!< [15..0] Port n VLAN ingress check drop frame count */ + uint32_t : 16; + } P2_VIC_DROP_CNT_b; + }; + __IM uint32_t RESERVED89[6]; + + union + { + __IM uint32_t P2_LOOKUP_HIT_CNT; /*!< (@ 0x00002B28) Port 2 DST Address Lookup Hit Counter */ + + struct + { + __IM uint32_t LOOKUP_HIT_CNT : 24; /*!< [23..0] Port n Lookup hit count */ + uint32_t : 8; + } P2_LOOKUP_HIT_CNT_b; + }; + + union + { + __IOM uint32_t P2_ERROR_STATUS; /*!< (@ 0x00002B2C) Port 2 Frame Parser Runtime Error Status */ + + struct + { + __IOM uint32_t SOPERR : 1; /*!< [0..0] SOP error detected in frame parser */ + __IOM uint32_t PUNDSZ : 1; /*!< [1..1] Preemptable frame under size error detected in frame + * parser */ + __IOM uint32_t POVRSZ : 1; /*!< [2..2] Preemptable frame over size error detected in frame parser */ + __IOM uint32_t EUNDSZ : 1; /*!< [3..3] Express frame under size error detected in frame parser */ + __IOM uint32_t EOVRSZ : 1; /*!< [4..4] Express frame over size error detected in frame parser */ + uint32_t : 27; + } P2_ERROR_STATUS_b; + }; + + union + { + __IOM uint32_t P2_ERROR_MASK; /*!< (@ 0x00002B30) Port 2 Frame Parser Runtime Error Mask */ + + struct + { + __IOM uint32_t MSOPERR : 1; /*!< [0..0] Error mask of SOPERR (SOP error) */ + __IOM uint32_t MPUNDSZ : 1; /*!< [1..1] Error mask of PUNDSZ (Preemptable frame under size error) */ + __IOM uint32_t MPOVRSZ : 1; /*!< [2..2] Error mask of POVRSZ (Preemptable frame over size error) */ + __IOM uint32_t MEUNDSZ : 1; /*!< [3..3] Error mask of EUNDSZ (Express frame under size error) */ + __IOM uint32_t MEOVRSZ : 1; /*!< [4..4] Error mask of EOVRSZ (Express frame over size error) */ + uint32_t : 27; + } P2_ERROR_MASK_b; + }; + __IM uint32_t RESERVED90[564]; + + union + { + __IM uint32_t STATN_STATUS; /*!< (@ 0x00003404) Statistics Status Register */ + + struct + { + __IM uint32_t BUSY : 1; /*!< [0..0] Statistics module is busy */ + uint32_t : 31; + } STATN_STATUS_b; + }; + + union + { + __IOM uint32_t STATN_CONFIG; /*!< (@ 0x00003408) Statistics Configure Register */ + + struct + { + uint32_t : 1; + __IOM uint32_t CLEAR_ON_READ : 1; /*!< [1..1] When set to 1, a read to a counter resets it to 0. When + * set to 0 (default), counters are not affected by read. */ + uint32_t : 29; + __IOM uint32_t RESET : 1; /*!< [31..31] When set to 1, all internal functions are aborted and + * return to a stable state (flushes prescalers). It also + * triggers a clear of all counter memory (all ports are cleared) + * by setting STATN_CONTROL.CMD_CLEAR with all mask bits. + * Capture memory is not reset. */ + } STATN_CONFIG_b; + }; + + union + { + __IOM uint32_t STATN_CONTROL; /*!< (@ 0x0000340C) Statistics Control Register */ + + struct + { + __IOM uint32_t CHANMASK : 4; /*!< [3..0] One bit per port. Bit 0 = port 0, bit 1 = port 1, and + * so on. */ + uint32_t : 25; + __IOM uint32_t CLEAR_PRE : 1; /*!< [29..29] Clear the internal pre-scaler counters of ports when + * a clear occurs. This bit can be used together with the + * CMD_CLEAR command to clear the internal pre-scaler counters + * of the ports. */ + uint32_t : 1; + __IOM uint32_t CMD_CLEAR : 1; /*!< [31..31] Clear Channel Counters Command */ + } STATN_CONTROL_b; + }; + + union + { + __IOM uint32_t STATN_CLEARVALUE_LO; /*!< (@ 0x00003410) Statistics Clear Value Lower Register */ + + struct + { + __IOM uint32_t STATN_CLEARVALUE_LO : 32; /*!< [31..0] 32-bit value written into statistics memory when a clear + * command (STATN_CONTROL.CMD_CLEAR) is triggered (see ), + * or when a clear-after-read is used. */ + } STATN_CLEARVALUE_LO_b; + }; + __IM uint32_t RESERVED91[21]; + + union + { + __IM uint32_t ODISC0; /*!< (@ 0x00003468) Port 0 Discarded Outgoing Frame Count Register */ + + struct + { + __IM uint32_t ODISC : 32; /*!< [31..0] Port n outgoing frames discarded due to output queue + * congestion. */ + } ODISC0_b; + }; + + union + { + __IM uint32_t IDISC_VLAN0; /*!< (@ 0x0000346C) Port 0 Discarded Incoming VLAN Tagged Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_VLAN : 32; /*!< [31..0] Port n incoming frames discarded due to mismatching + * or missing VLAN ID while VLAN verification was enabled. */ + } IDISC_VLAN0_b; + }; + + union + { + __IM uint32_t IDISC_UNTAGGED0; /*!< (@ 0x00003470) Port 0 Discarded Incoming VLAN Untagged Frame + * Count Register */ + + struct + { + __IM uint32_t IDISC_UNTAGGED : 32; /*!< [31..0] Port n incoming frames discarded due to missing VLAN + * tag. */ + } IDISC_UNTAGGED0_b; + }; + + union + { + __IM uint32_t IDISC_BLOCKED0; /*!< (@ 0x00003474) Port 0 Discarded Incoming Blocked Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_BLOCKED : 32; /*!< [31..0] Port n incoming frames discarded (after learning) as + * the port is configured in blocking mode. */ + } IDISC_BLOCKED0_b; + }; + + union + { + __IM uint32_t IDISC_ANY0; /*!< (@ 0x00003478) Port 0 Discarded Any Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t IDISC_ANY : 32; /*!< [31..0] Port n total incoming frames discarded. This includes + * IDISC_VLAN, IDSIC_UNTAGGED, IDISC_SRCFLT, and IDISC_BLOCKED. */ + } IDISC_ANY0_b; + }; + + union + { + __IM uint32_t IDISC_SRCFLT0; /*!< (@ 0x0000347C) Port 0 Discarded Address Source Count Register */ + + struct + { + __IM uint32_t IDISC_SRCFLT : 32; /*!< [31..0] Port n counts the number of incoming frames discarded + * due to the MAC address source filter. */ + } IDISC_SRCFLT0_b; + }; + + union + { + __IM uint32_t TX_HOLD_REQ_CNT0; /*!< (@ 0x00003480) Port 0 TX Hold Request Count Register */ + + struct + { + __IM uint32_t TX_HOLD_REQ_CNT : 32; /*!< [31..0] TX_HOLD_REQ_CNT */ + } TX_HOLD_REQ_CNT0_b; + }; + + union + { + __IM uint32_t TX_FRAG_CNT0; /*!< (@ 0x00003484) Port 0 TX for Preemption Count Register */ + + struct + { + __IM uint32_t TX_FRAG_CNT : 32; /*!< [31..0] Port n increments when an additional mPacket is transmitted + * due to preemption. */ + } TX_FRAG_CNT0_b; + }; + + union + { + __IM uint32_t RX_FRAG_CNT0; /*!< (@ 0x00003488) Port 0 RX Continuation Count Register */ + + struct + { + __IM uint32_t RX_FRAG_CNT : 32; /*!< [31..0] Port n increments for every continuation mPacket received. */ + } RX_FRAG_CNT0_b; + }; + + union + { + __IM uint32_t RX_ASSY_OK_CNT0; /*!< (@ 0x0000348C) Port 0 RX Preempted Frame Success Count Register */ + + struct + { + __IM uint32_t RX_ASSY_OK_CNT : 32; /*!< [31..0] Port n increments when a preempted frame is successfully + * assembled. */ + } RX_ASSY_OK_CNT0_b; + }; + + union + { + __IM uint32_t RX_ASSY_ERR_CNT0; /*!< (@ 0x00003490) Port 0 RX Preempted Frame Incorrect Count Register */ + + struct + { + __IM uint32_t RX_ASSY_ERR_CNT : 16; /*!< [15..0] Port n increments when a preempted frame is incorrectly + * assembled. */ + uint32_t : 16; + } RX_ASSY_ERR_CNT0_b; + }; + + union + { + __IM uint32_t RX_SMD_ERR_CNT0; /*!< (@ 0x00003494) Port 0 RX SMD Frame Count Register */ + + struct + { + __IM uint32_t RX_SMD_ERR_CNT : 16; /*!< [15..0] Port n increments when a frame with an SMD-Cx is received + * and no assembly is in progress. */ + uint32_t : 16; + } RX_SMD_ERR_CNT0_b; + }; + + union + { + __IM uint32_t TX_VERIFY_OK_CNT0; /*!< (@ 0x00003498) Port 0 TX VERIFY Frame Count Register */ + + struct + { + __IM uint32_t TX_VERIFY_OK_CNT : 8; /*!< [7..0] Port n increments for every VERIFY frame transmitted. */ + uint32_t : 24; + } TX_VERIFY_OK_CNT0_b; + }; + + union + { + __IM uint32_t TX_RESPONSE_OK_CNT0; /*!< (@ 0x0000349C) Port 0 TX RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t TX_RESPONSE_OK_CNT : 8; /*!< [7..0] Port n increments for every RESPONSE frame transmitted. */ + uint32_t : 24; + } TX_RESPONSE_OK_CNT0_b; + }; + + union + { + __IM uint32_t RX_VERIFY_OK_CNT0; /*!< (@ 0x000034A0) Port 0 RX VERIFY Frame Count Register */ + + struct + { + __IM uint32_t RX_VERIFY_OK_CNT : 8; /*!< [7..0] Port n increments for every valid VERIFY frame received. */ + uint32_t : 24; + } RX_VERIFY_OK_CNT0_b; + }; + + union + { + __IM uint32_t RX_RESPONSE_OK_CNT0; /*!< (@ 0x000034A4) Port 0 RX RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t RX_RESPONSE_OK_CNT : 8; /*!< [7..0] Port n increments for every valid RESPONSE frame received. */ + uint32_t : 24; + } RX_RESPONSE_OK_CNT0_b; + }; + + union + { + __IM uint32_t RX_VERIFY_BAD_CNT0; /*!< (@ 0x000034A8) Port 0 RX Error VERIFY Frame Count Register */ + + struct + { + __IM uint32_t RX_VERIFY_BAD_CNT : 8; /*!< [7..0] Port n increments for every errored VERIFY frame received. */ + uint32_t : 24; + } RX_VERIFY_BAD_CNT0_b; + }; + + union + { + __IM uint32_t RX_RESPONSE_BAD_CNT0; /*!< (@ 0x000034AC) Port 0 RX Error RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t RX_RESPONSE_BAD_CNT : 8; /*!< [7..0] Port n increments for every errored RESPONSE frame received. */ + uint32_t : 24; + } RX_RESPONSE_BAD_CNT0_b; + }; + + union + { + __IM uint32_t ODISC1; /*!< (@ 0x000034B0) Port 1 Discarded Outgoing Frame Count Register */ + + struct + { + __IM uint32_t ODISC : 32; /*!< [31..0] Port n outgoing frames discarded due to output queue + * congestion. */ + } ODISC1_b; + }; + + union + { + __IM uint32_t IDISC_VLAN1; /*!< (@ 0x000034B4) Port 1 Discarded Incoming VLAN Tagged Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_VLAN : 32; /*!< [31..0] Port n incoming frames discarded due to mismatching + * or missing VLAN ID while VLAN verification was enabled. */ + } IDISC_VLAN1_b; + }; + + union + { + __IM uint32_t IDISC_UNTAGGED1; /*!< (@ 0x000034B8) Port 1 Discarded Incoming VLAN Untagged Frame + * Count Register */ + + struct + { + __IM uint32_t IDISC_UNTAGGED : 32; /*!< [31..0] Port n incoming frames discarded due to missing VLAN + * tag. */ + } IDISC_UNTAGGED1_b; + }; + + union + { + __IM uint32_t IDISC_BLOCKED1; /*!< (@ 0x000034BC) Port 1 Discarded Incoming Blocked Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_BLOCKED : 32; /*!< [31..0] Port n incoming frames discarded (after learning) as + * the port is configured in blocking mode. */ + } IDISC_BLOCKED1_b; + }; + + union + { + __IM uint32_t IDISC_ANY1; /*!< (@ 0x000034C0) Port 1 Discarded Any Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t IDISC_ANY : 32; /*!< [31..0] Port n total incoming frames discarded. This includes + * IDISC_VLAN, IDSIC_UNTAGGED, IDISC_SRCFLT, and IDISC_BLOCKED. */ + } IDISC_ANY1_b; + }; + + union + { + __IM uint32_t IDISC_SRCFLT1; /*!< (@ 0x000034C4) Port 1 Discarded Address Source Count Register */ + + struct + { + __IM uint32_t IDISC_SRCFLT : 32; /*!< [31..0] Port n counts the number of incoming frames discarded + * due to the MAC address source filter. */ + } IDISC_SRCFLT1_b; + }; + + union + { + __IM uint32_t TX_HOLD_REQ_CNT1; /*!< (@ 0x000034C8) Port 1 TX Hold Request Count Register */ + + struct + { + __IM uint32_t TX_HOLD_REQ_CNT : 32; /*!< [31..0] TX_HOLD_REQ_CNT */ + } TX_HOLD_REQ_CNT1_b; + }; + + union + { + __IM uint32_t TX_FRAG_CNT1; /*!< (@ 0x000034CC) Port 1 TX for Preemption Count Register */ + + struct + { + __IM uint32_t TX_FRAG_CNT : 32; /*!< [31..0] Port n increments when an additional mPacket is transmitted + * due to preemption. */ + } TX_FRAG_CNT1_b; + }; + + union + { + __IM uint32_t RX_FRAG_CNT1; /*!< (@ 0x000034D0) Port 1 RX Continuation Count Register */ + + struct + { + __IM uint32_t RX_FRAG_CNT : 32; /*!< [31..0] Port n increments for every continuation mPacket received. */ + } RX_FRAG_CNT1_b; + }; + + union + { + __IM uint32_t RX_ASSY_OK_CNT1; /*!< (@ 0x000034D4) Port 1 RX Preempted Frame Success Count Register */ + + struct + { + __IM uint32_t RX_ASSY_OK_CNT : 32; /*!< [31..0] Port n increments when a preempted frame is successfully + * assembled. */ + } RX_ASSY_OK_CNT1_b; + }; + + union + { + __IM uint32_t RX_ASSY_ERR_CNT1; /*!< (@ 0x000034D8) Port 1 RX Preempted Frame Incorrect Count Register */ + + struct + { + __IM uint32_t RX_ASSY_ERR_CNT : 16; /*!< [15..0] Port n increments when a preempted frame is incorrectly + * assembled. */ + uint32_t : 16; + } RX_ASSY_ERR_CNT1_b; + }; + + union + { + __IM uint32_t RX_SMD_ERR_CNT1; /*!< (@ 0x000034DC) Port 1 RX SMD Frame Count Register */ + + struct + { + __IM uint32_t RX_SMD_ERR_CNT : 16; /*!< [15..0] Port n increments when a frame with an SMD-Cx is received + * and no assembly is in progress. */ + uint32_t : 16; + } RX_SMD_ERR_CNT1_b; + }; + + union + { + __IM uint32_t TX_VERIFY_OK_CNT1; /*!< (@ 0x000034E0) Port 1 TX VERIFY Frame Count Register */ + + struct + { + __IM uint32_t TX_VERIFY_OK_CNT : 8; /*!< [7..0] Port n increments for every VERIFY frame transmitted. */ + uint32_t : 24; + } TX_VERIFY_OK_CNT1_b; + }; + + union + { + __IM uint32_t TX_RESPONSE_OK_CNT1; /*!< (@ 0x000034E4) Port 1 TX RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t TX_RESPONSE_OK_CNT : 8; /*!< [7..0] Port n increments for every RESPONSE frame transmitted. */ + uint32_t : 24; + } TX_RESPONSE_OK_CNT1_b; + }; + + union + { + __IM uint32_t RX_VERIFY_OK_CNT1; /*!< (@ 0x000034E8) Port 1 RX VERIFY Frame Count Register */ + + struct + { + __IM uint32_t RX_VERIFY_OK_CNT : 8; /*!< [7..0] Port n increments for every valid VERIFY frame received. */ + uint32_t : 24; + } RX_VERIFY_OK_CNT1_b; + }; + + union + { + __IM uint32_t RX_RESPONSE_OK_CNT1; /*!< (@ 0x000034EC) Port 1 RX RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t RX_RESPONSE_OK_CNT : 8; /*!< [7..0] Port n increments for every valid RESPONSE frame received. */ + uint32_t : 24; + } RX_RESPONSE_OK_CNT1_b; + }; + + union + { + __IM uint32_t RX_VERIFY_BAD_CNT1; /*!< (@ 0x000034F0) Port 1 RX Error VERIFY Frame Count Register */ + + struct + { + __IM uint32_t RX_VERIFY_BAD_CNT : 8; /*!< [7..0] Port n increments for every errored VERIFY frame received. */ + uint32_t : 24; + } RX_VERIFY_BAD_CNT1_b; + }; + + union + { + __IM uint32_t RX_RESPONSE_BAD_CNT1; /*!< (@ 0x000034F4) Port 1 RX Error RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t RX_RESPONSE_BAD_CNT : 8; /*!< [7..0] Port n increments for every errored RESPONSE frame received. */ + uint32_t : 24; + } RX_RESPONSE_BAD_CNT1_b; + }; + + union + { + __IM uint32_t ODISC2; /*!< (@ 0x000034F8) Port 2 Discarded Outgoing Frame Count Register */ + + struct + { + __IM uint32_t ODISC : 32; /*!< [31..0] Port n outgoing frames discarded due to output queue + * congestion. */ + } ODISC2_b; + }; + + union + { + __IM uint32_t IDISC_VLAN2; /*!< (@ 0x000034FC) Port 2 Discarded Incoming VLAN Tagged Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_VLAN : 32; /*!< [31..0] Port n incoming frames discarded due to mismatching + * or missing VLAN ID while VLAN verification was enabled. */ + } IDISC_VLAN2_b; + }; + + union + { + __IM uint32_t IDISC_UNTAGGED2; /*!< (@ 0x00003500) Port 2 Discarded Incoming VLAN Untagged Frame + * Count Register */ + + struct + { + __IM uint32_t IDISC_UNTAGGED : 32; /*!< [31..0] Port n incoming frames discarded due to missing VLAN + * tag. */ + } IDISC_UNTAGGED2_b; + }; + + union + { + __IM uint32_t IDISC_BLOCKED2; /*!< (@ 0x00003504) Port 2 Discarded Incoming Blocked Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_BLOCKED : 32; /*!< [31..0] Port n incoming frames discarded (after learning) as + * the port is configured in blocking mode. */ + } IDISC_BLOCKED2_b; + }; + + union + { + __IM uint32_t IDISC_ANY2; /*!< (@ 0x00003508) Port 2 Discarded Any Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t IDISC_ANY : 32; /*!< [31..0] Port n total incoming frames discarded. This includes + * IDISC_VLAN, IDSIC_UNTAGGED, IDISC_SRCFLT, and IDISC_BLOCKED. */ + } IDISC_ANY2_b; + }; + + union + { + __IM uint32_t IDISC_SRCFLT2; /*!< (@ 0x0000350C) Port 2 Discarded Address Source Count Register */ + + struct + { + __IM uint32_t IDISC_SRCFLT : 32; /*!< [31..0] Port n counts the number of incoming frames discarded + * due to the MAC address source filter. */ + } IDISC_SRCFLT2_b; + }; + + union + { + __IM uint32_t TX_HOLD_REQ_CNT2; /*!< (@ 0x00003510) Port 2 TX Hold Request Count Register */ + + struct + { + __IM uint32_t TX_HOLD_REQ_CNT : 32; /*!< [31..0] TX_HOLD_REQ_CNT */ + } TX_HOLD_REQ_CNT2_b; + }; + + union + { + __IM uint32_t TX_FRAG_CNT2; /*!< (@ 0x00003514) Port 2 TX for Preemption Count Register */ + + struct + { + __IM uint32_t TX_FRAG_CNT : 32; /*!< [31..0] Port n increments when an additional mPacket is transmitted + * due to preemption. */ + } TX_FRAG_CNT2_b; + }; + + union + { + __IM uint32_t RX_FRAG_CNT2; /*!< (@ 0x00003518) Port 2 RX Continuation Count Register */ + + struct + { + __IM uint32_t RX_FRAG_CNT : 32; /*!< [31..0] Port n increments for every continuation mPacket received. */ + } RX_FRAG_CNT2_b; + }; + + union + { + __IM uint32_t RX_ASSY_OK_CNT2; /*!< (@ 0x0000351C) Port 2 RX Preempted Frame Success Count Register */ + + struct + { + __IM uint32_t RX_ASSY_OK_CNT : 32; /*!< [31..0] Port n increments when a preempted frame is successfully + * assembled. */ + } RX_ASSY_OK_CNT2_b; + }; + + union + { + __IM uint32_t RX_ASSY_ERR_CNT2; /*!< (@ 0x00003520) Port 2 RX Preempted Frame Incorrect Count Register */ + + struct + { + __IM uint32_t RX_ASSY_ERR_CNT : 16; /*!< [15..0] Port n increments when a preempted frame is incorrectly + * assembled. */ + uint32_t : 16; + } RX_ASSY_ERR_CNT2_b; + }; + + union + { + __IM uint32_t RX_SMD_ERR_CNT2; /*!< (@ 0x00003524) Port 2 RX SMD Frame Count Register */ + + struct + { + __IM uint32_t RX_SMD_ERR_CNT : 16; /*!< [15..0] Port n increments when a frame with an SMD-Cx is received + * and no assembly is in progress. */ + uint32_t : 16; + } RX_SMD_ERR_CNT2_b; + }; + + union + { + __IM uint32_t TX_VERIFY_OK_CNT2; /*!< (@ 0x00003528) Port 2 TX VERIFY Frame Count Register */ + + struct + { + __IM uint32_t TX_VERIFY_OK_CNT : 8; /*!< [7..0] Port n increments for every VERIFY frame transmitted. */ + uint32_t : 24; + } TX_VERIFY_OK_CNT2_b; + }; + + union + { + __IM uint32_t TX_RESPONSE_OK_CNT2; /*!< (@ 0x0000352C) Port 2 TX RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t TX_RESPONSE_OK_CNT : 8; /*!< [7..0] Port n increments for every RESPONSE frame transmitted. */ + uint32_t : 24; + } TX_RESPONSE_OK_CNT2_b; + }; + + union + { + __IM uint32_t RX_VERIFY_OK_CNT2; /*!< (@ 0x00003530) Port 2 RX VERIFY Frame Count Register */ + + struct + { + __IM uint32_t RX_VERIFY_OK_CNT : 8; /*!< [7..0] Port n increments for every valid VERIFY frame received. */ + uint32_t : 24; + } RX_VERIFY_OK_CNT2_b; + }; + + union + { + __IM uint32_t RX_RESPONSE_OK_CNT2; /*!< (@ 0x00003534) Port 2 RX RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t RX_RESPONSE_OK_CNT : 8; /*!< [7..0] Port n increments for every valid RESPONSE frame received. */ + uint32_t : 24; + } RX_RESPONSE_OK_CNT2_b; + }; + + union + { + __IM uint32_t RX_VERIFY_BAD_CNT2; /*!< (@ 0x00003538) Port 2 RX Error VERIFY Frame Count Register */ + + struct + { + __IM uint32_t RX_VERIFY_BAD_CNT : 8; /*!< [7..0] Port n increments for every errored VERIFY frame received. */ + uint32_t : 24; + } RX_VERIFY_BAD_CNT2_b; + }; + + union + { + __IM uint32_t RX_RESPONSE_BAD_CNT2; /*!< (@ 0x0000353C) Port 2 RX Error RESPONSE Frame Count Register */ + + struct + { + __IM uint32_t RX_RESPONSE_BAD_CNT : 8; /*!< [7..0] Port n increments for every errored RESPONSE frame received. */ + uint32_t : 24; + } RX_RESPONSE_BAD_CNT2_b; + }; + + union + { + __IM uint32_t ODISC3; /*!< (@ 0x00003540) Port 3 Discarded Outgoing Frame Count Register */ + + struct + { + __IM uint32_t ODISC : 32; /*!< [31..0] Port n outgoing frames discarded due to output queue + * congestion. */ + } ODISC3_b; + }; + + union + { + __IM uint32_t IDISC_VLAN3; /*!< (@ 0x00003544) Port 3 Discarded Incoming VLAN Tagged Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_VLAN : 32; /*!< [31..0] Port n incoming frames discarded due to mismatching + * or missing VLAN ID while VLAN verification was enabled. */ + } IDISC_VLAN3_b; + }; + + union + { + __IM uint32_t IDISC_UNTAGGED3; /*!< (@ 0x00003548) Port 3 Discarded Incoming VLAN Untagged Frame + * Count Register */ + + struct + { + __IM uint32_t IDISC_UNTAGGED : 32; /*!< [31..0] Port n incoming frames discarded due to missing VLAN + * tag. */ + } IDISC_UNTAGGED3_b; + }; + + union + { + __IM uint32_t IDISC_BLOCKED3; /*!< (@ 0x0000354C) Port 3 Discarded Incoming Blocked Frame Count + * Register */ + + struct + { + __IM uint32_t IDISC_BLOCKED : 32; /*!< [31..0] Port n incoming frames discarded (after learning) as + * the port is configured in blocking mode. */ + } IDISC_BLOCKED3_b; + }; + + union + { + __IM uint32_t IDISC_ANY3; /*!< (@ 0x00003550) Port 3 Discarded Any Frame Count Register (n + * = 0 to 3) */ + + struct + { + __IM uint32_t IDISC_ANY : 32; /*!< [31..0] Port n total incoming frames discarded. This includes + * IDISC_VLAN, IDSIC_UNTAGGED, IDISC_SRCFLT, and IDISC_BLOCKED. */ + } IDISC_ANY3_b; + }; + __IM uint32_t RESERVED92[363]; + + union + { + __IOM uint32_t MMCTL_OUT_CT; /*!< (@ 0x00003B00) Cut-Through Register */ + + struct + { + __IOM uint32_t CT_OVR_ENA : 3; /*!< [2..0] Per-port bit mask to enable overriding the Cut-Through + * (CT) behavior of the output ports with CT_OVR. When set + * to 0, the frames are transmitted CT if the CT flag of the + * frame context is set. */ + uint32_t : 13; + __IOM uint32_t CT_OVR : 3; /*!< [18..16] 1 bit per-port value to set the Cut Through behavior + * of the output ports. When set to 0, all frames are sent + * as Store & Forward (SF) frames. When set to 1, frames with + * the CT flag set in the frame context are started as soon + * as the frame context information is available. */ + uint32_t : 13; + } MMCTL_OUT_CT_b; + }; + + union + { + __IOM uint32_t MMCTL_CTFL_P0_3_ENA; /*!< (@ 0x00003B04) Cut-Through Frame Length Enable Register */ + + struct + { + __IOM uint32_t CTFL_P0_ENA : 8; /*!< [7..0] Port 0 bit mask of n bits, where n is the number of queues + * per port indicating whether the CTFL is used for Cut-Through + * (CT) frames. When set to 1, a CT frame requires a CTFL + * entry to be written as a CT frame in the output memory. */ + __IOM uint32_t CTFL_P1_ENA : 8; /*!< [15..8] Port 1 bit mask of n bits, where n is the number of + * queues per port indicating whether the CTFL is used for + * Cut-Through (CT) frames. When set to 1, a CT frame requires + * a CTFL entry to be written as a CT frame in the output + * memory. */ + __IOM uint32_t CTFL_P2_ENA : 8; /*!< [23..16] Port 2 bit mask of n bits, where n is the number of + * queues per port indicating whether the CTFL is used for + * Cut-Through (CT) frames. When set to 1, a CT frame requires + * a CTFL entry to be written as a CT frame in the output + * memory. */ + uint32_t : 8; + } MMCTL_CTFL_P0_3_ENA_b; + }; + __IM uint32_t RESERVED93[6]; + + union + { + __IOM uint32_t MMCTL_YELLOW_BYTE_LENGTH_P[3]; /*!< (@ 0x00003B20) Port [0..2] Yellow Period Byte Length Register */ + + struct + { + uint32_t : 2; + __IOM uint32_t YELLOW_LEN : 14; /*!< [15..2] Length in bytes of the YELLOW period for port n. Determines + * whether a frame can be transmitted before the YELLOW period + * expires. The value is programmed in increments of 4 bytes + * excluding the MAC overhead (IPG, Preamble and FCS if appended) + * of the frame. */ + __IOM uint32_t YLEN_EN : 1; /*!< [16..16] When set to 1, enables transmission when OUT_CT_ENA + * is low only if the frame length is less than YELLOW_LEN. + * If cleared, YELLOW_LEN is ignored and frames are always + * transmitted in SF mode when OUT_CT_ENA is 0. */ + uint32_t : 15; + } MMCTL_YELLOW_BYTE_LENGTH_P_b[3]; + }; + __IM uint32_t RESERVED94[5]; + + union + { + __IOM uint32_t MMCTL_POOL0_CTR; /*!< (@ 0x00003B40) Memory Pool Counter (n = 0 to 1) */ + + struct + { + __IOM uint32_t CELLS : 10; /*!< [9..0] Memory pool configuration for pool n. Configures, in + * cells, the size of each memory pool. */ + uint32_t : 6; + __IM uint32_t USED : 10; /*!< [25..16] Reports the current available number of used cells + * for this memory pool. The used number of free cells can + * be calculated as CELLS - USED. */ + uint32_t : 6; + } MMCTL_POOL0_CTR_b; + }; + + union + { + __IOM uint32_t MMCTL_POOL1_CTR; /*!< (@ 0x00003B44) Memory Pool Counter (n = 0 to 1) */ + + struct + { + __IOM uint32_t CELLS : 10; /*!< [9..0] Memory pool configuration for pool n. Configures, in + * cells, the size of each memory pool. */ + uint32_t : 6; + __IM uint32_t USED : 10; /*!< [25..16] Reports the current available number of used cells + * for this memory pool. The used number of free cells can + * be calculated as CELLS - USED. */ + uint32_t : 6; + } MMCTL_POOL1_CTR_b; + }; + __IM uint32_t RESERVED95[6]; + + union + { + __IOM uint32_t MMCTL_POOL_GLOBAL; /*!< (@ 0x00003B60) Memory Pool Configuration Register */ + + struct + { + __IOM uint32_t CELLS : 10; /*!< [9..0] Memory pool configuration for the global pool. Configures, + * in cells, the size of the global shared pool. */ + uint32_t : 6; + __IM uint32_t USED : 10; /*!< [25..16] Reports the current number of used cells for the global + * shared pool. The used number of free cells can be calculated + * as CELLS - USED. */ + uint32_t : 6; + } MMCTL_POOL_GLOBAL_b; + }; + + union + { + __IM uint32_t MMCTL_POOL_STATUS; /*!< (@ 0x00003B64) Memory Pool Status Register */ + + struct + { + __IM uint32_t QUEUE_FULL : 8; /*!< [7..0] Per-queue pool full indication. Indicates for each queue + * whether all the blocks in the corresponding pool and global + * pool are allocated. */ + uint32_t : 24; + } MMCTL_POOL_STATUS_b; + }; + + union + { + __IOM uint32_t MMCTL_POOL_QMAP; /*!< (@ 0x00003B68) Queue MAP Register */ + + struct + { + __IOM uint32_t Q0_MAP : 1; /*!< [0..0] Queue 0 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q0_ENA : 1; /*!< [3..3] Queue 0 Memory Pool Enabled */ + __IOM uint32_t Q1_MAP : 1; /*!< [4..4] Queue 1 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q1_ENA : 1; /*!< [7..7] Queue 1 Memory Pool Enabled */ + __IOM uint32_t Q2_MAP : 1; /*!< [8..8] Queue 2 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q2_ENA : 1; /*!< [11..11] Queue 2 Memory Pool Enabled */ + __IOM uint32_t Q3_MAP : 1; /*!< [12..12] Queue 3 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q3_ENA : 1; /*!< [15..15] Queue 3 Memory Pool Enabled */ + __IOM uint32_t Q4_MAP : 1; /*!< [16..16] Queue 4 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q4_ENA : 1; /*!< [19..19] Queue 4 Memory Pool Enabled */ + __IOM uint32_t Q5_MAP : 1; /*!< [20..20] Queue 5 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q5_ENA : 1; /*!< [23..23] Queue 5 Memory Pool Enabled */ + __IOM uint32_t Q6_MAP : 1; /*!< [24..24] Queue 6 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q6_ENA : 1; /*!< [27..27] Queue 6 Memory Pool Enabled */ + __IOM uint32_t Q7_MAP : 1; /*!< [28..28] Queue 7 Memory Pool */ + uint32_t : 2; + __IOM uint32_t Q7_ENA : 1; /*!< [31..31] Queue 7 Memory Pool Enabled */ + } MMCTL_POOL_QMAP_b; + }; + + union + { + __OM uint32_t MMCTL_QGATE; /*!< (@ 0x00003B6C) Queue Gate State Register */ + + struct + { + __OM uint32_t PORT_MASK : 4; /*!< [3..0] Per-port bit mask. When set to 1 for a port, the queue + * gate state is changed for that port as indicated by QUEUE_GATE. */ + uint32_t : 12; + __OM uint32_t QUEUE_GATE : 16; /*!< [31..16] 2-bit per queue indicating the action to be performed + * on each queue of the ports indicated by PORT_MASK. */ + } MMCTL_QGATE_b; + }; + + union + { + __OM uint32_t MMCTL_QTRIG; /*!< (@ 0x00003B70) Queue Trigger Register */ + + struct + { + __OM uint32_t PORT_MASK : 4; /*!< [3..0] Per-port bit mask. When set to 1 for a port, a frame + * is triggered from the closed queues indicated by QUEUE_TRIG. */ + uint32_t : 12; + __OM uint32_t QUEUE_TRIG : 8; /*!< [23..16] 1-bit per queue indicating from which queues a frame + * is to be transmitted from the ports indicated by PORT_MASK. + * When set to 1, a single frame is transmitted per indicated + * port in PORT_MASK among the queues indicated by QUEUE_TRIG. */ + uint32_t : 8; + } MMCTL_QTRIG_b; + }; + + union + { + __OM uint32_t MMCTL_QFLUSH; /*!< (@ 0x00003B74) Flush Event Select Register */ + + struct + { + __OM uint32_t PORT_MASK : 4; /*!< [3..0] Per-port bit mask. When set to 1 for a port, the queue + * flush status is changed for that port for the queues indicated + * in QUEUE_MASK. */ + uint32_t : 12; + __OM uint32_t QUEUE_MASK : 8; /*!< [23..16] 1 bit per queue indicating for which queues of the + * ports indicated by PORT_MASK the flush state is changed + * as indicated in ACTION. */ + __OM uint32_t ACTION : 2; /*!< [25..24] Selects the flush state for the queues indicated by + * QUEUE_MASK in the ports indicated by PORT_MASK. Possible + * actions are: */ + uint32_t : 6; + } MMCTL_QFLUSH_b; + }; + + union + { + __IM uint32_t MMCTL_QCLOSED_STATUS_P0_3; /*!< (@ 0x00003B78) Queue Closed Status Register */ + + struct + { + __IM uint32_t P0_STATUS : 8; /*!< [7..0] Per-queue closed status of Port 0 (1-bit per queue). + * A 0 indicates that the queue is open (enabled), and a 1 + * indicates that the queue is closed (disabled). */ + __IM uint32_t P1_STATUS : 8; /*!< [15..8] Per-queue closed status of Port 1 (1-bit per queue). + * A 0 indicates that the queue is open (enabled), and a 1 + * indicates that the queue is closed (disabled). */ + __IM uint32_t P2_STATUS : 8; /*!< [23..16] Per-queue closed status of Port 2 (1-bit per queue). + * A 0 indicates that the queue is open (enabled), and a 1 + * indicates that the queue is closed (disabled). */ + uint32_t : 8; + } MMCTL_QCLOSED_STATUS_P0_3_b; + }; + __IM uint32_t RESERVED96; + + union + { + __IOM uint32_t MMCTL_1FRAME_MODE_P[3]; /*!< (@ 0x00003B80) Port [0..2] 1-Frame Mode Configuration Register */ + + struct + { + __IOM uint32_t Q_1FRAME_ENA : 8; /*!< [7..0] 1 bit per queue. Setting a bit to 1 enables the 1-frame + * mode for that queue for port n. In this mode, only one + * frame is allowed in the queue. If a new frame is received, + * the old frame is discarded. */ + uint32_t : 8; + __IOM uint32_t Q_BUF_ENA : 8; /*!< [23..16] 1 bit per queue. Setting a bit to 1 enables the buffer + * mode behavior for that queue for port n. This mode requires + * also that Q_1FRAME_ENA is set to 1. */ + uint32_t : 8; + } MMCTL_1FRAME_MODE_P_b[3]; + }; + __IM uint32_t RESERVED97[5]; + + union + { + __IM uint32_t MMCTL_P0_3_QUEUE_STATUS; /*!< (@ 0x00003BA0) Queue Status Indicator */ + + struct + { + __IM uint32_t P0_Q_STATUS : 8; /*!< [7..0] Port 0 Per-Queue Bit Indication */ + __IM uint32_t P1_Q_STATUS : 8; /*!< [15..8] Port 1 Per-Queue Bit Indication */ + __IM uint32_t P2_Q_STATUS : 8; /*!< [23..16] Port 2 Per-Queue Bit Indication */ + uint32_t : 8; + } MMCTL_P0_3_QUEUE_STATUS_b; + }; + __IM uint32_t RESERVED98; + + union + { + __IM uint32_t MMCTL_P0_3_FLUSH_STATUS; /*!< (@ 0x00003BA8) Queue Flush Status Indicator */ + + struct + { + __IM uint32_t P0_F_STATUS : 8; /*!< [7..0] Port 0 per-Queue Bit Indication on whether the queue + * is flushing frames (read 1) or not (read 0). */ + __IM uint32_t P1_F_STATUS : 8; /*!< [15..8] Port 1 per-Queue Bit Indication on whether the queue + * is flushing frames (read 1) or not (read 0). */ + __IM uint32_t P2_F_STATUS : 8; /*!< [23..16] Port 2 per-Queue Bit Indication on whether the queue + * is flushing frames (read 1) or not (read 0). */ + uint32_t : 8; + } MMCTL_P0_3_FLUSH_STATUS_b; + }; + __IM uint32_t RESERVED99; + + union + { + __IOM uint32_t MMCTL_DLY_QTRIGGER_CTRL; /*!< (@ 0x00003BB0) Delayed Queue Trigger Control Register */ + + struct + { + __IOM uint32_t DELAY_TIME : 30; /*!< [29..0] 30-bit time in nanoseconds indicates the time after + * the trigger request from the pattern matchers to generate + * the event. */ + __IOM uint32_t TIMER_SEL : 1; /*!< [30..30] Select the source timer to use for calculating the + * time. */ + uint32_t : 1; + } MMCTL_DLY_QTRIGGER_CTRL_b; + }; + + union + { + __IOM uint32_t MMCTL_PREEMPT_QUEUES; /*!< (@ 0x00003BB4) Preemptable Queues Configures Register */ + + struct + { + __IOM uint32_t PREEMPT_ENA : 8; /*!< [7..0] Per-queue enable bit to configure which queues are used + * for preemptable traffic. Set to 1 the corresponding bit + * to configure a queue to be preemptable. */ + __IOM uint32_t PREEMPT_ON_QCLOSE : 8; /*!< [15..8] Per-queue configuration bit to enable preempting a frame + * when the queue goes from OPEN to CLOSED. When the corresponding + * bit is set to 1 and the queue is configured as preemptable + * in PREEMPT_ENA, a queue close event causes the current + * frame to be preempted, if preemption is operational. */ + uint32_t : 16; + } MMCTL_PREEMPT_QUEUES_b; + }; + + union + { + __IOM uint32_t MMCTL_HOLD_CONTROL; /*!< (@ 0x00003BB8) Request Preemption Register */ + + struct + { + __IOM uint32_t Q_HOLD_REQ_FORCE : 3; /*!< [2..0] A per-port bit that forces a preempt request using MM_CTL.request + * (hold_req). When this bit is set to 1, it overrides other + * sources of hold request, including the TDMA controller. */ + uint32_t : 13; + __IOM uint32_t Q_HOLD_REQ_RELEASE : 3; /*!< [18..16] A per-port bit that forces a release of preemption + * request using MM_CTL.request (hold_req). When this bit + * is set to 1, it overrides other sources of hold request, + * including the TDMA controller and Q_HOLD_REQ_FORCE[2:0]. */ + uint32_t : 13; + } MMCTL_HOLD_CONTROL_b; + }; + + union + { + __IM uint32_t MMCTL_PREEMPT_STATUS; /*!< (@ 0x00003BBC) Preemption State Register */ + + struct + { + __IM uint32_t PREEMPT_STATE : 3; /*!< [2..0] A per-port bit that indicates if a port is in a preempted + * state. This is a real-time indication meant for debugging. */ + uint32_t : 13; + __IM uint32_t HOLD_REQ_STATE : 3; /*!< [18..16] A per-port bit that indicates if a port is preempted + * using MM_CTL.request (hold_req). This is a real-time indication + * meant for debugging. */ + uint32_t : 13; + } MMCTL_PREEMPT_STATUS_b; + }; + + union + { + __IOM uint32_t MMCTL_CQF_CTRL_P[4]; /*!< (@ 0x00003BC0) Port [0..3] Cyclic Queuing and Forwarding Control + * Register */ + + struct + { + __IOM uint32_t PRIO_ENABLE0 : 8; /*!< [7..0] A per-queue enable to select which ingress priorities + * are queued in the two CQF queues. */ + __IOM uint32_t QUEUE_SEL0 : 3; /*!< [10..8] Select which two physical queues are used for CQF. The + * queues used are QUEUE_SEL0 and QUEUE_SEL0 + 1. Frames are + * written into QUEUE_SEL0 when the gate control selected + * with GATE_SEL0 is 0, and into QUEUE_SEL0 + 1 when the gate + * control is 1. */ + __IOM uint32_t GATE_SEL0 : 3; /*!< [13..11] Select which gate control signal is used for selecting + * the output queue (these signals are the same as the ETHSW_TDMAOUT + * pins). */ + __IOM uint32_t USE_SOP0 : 1; /*!< [14..14] When set to 1, the CFQ queue is determined when the + * SOP is received at the frame writer in the memory controller. + * When set to 0, the queue is determined when the EOP is + * received at the frame writer. */ + __IOM uint32_t REF_SEL0 : 1; /*!< [15..15] Select whether the gate control signal used for the + * CQF group is based on the egress port when set to 0, or + * the ingress port when set to 1. */ + uint32_t : 16; + } MMCTL_CQF_CTRL_P_b[4]; + }; + __IM uint32_t RESERVED100[4]; + + union + { + __IM uint32_t MMCTL_P0_3_QCLOSED_NONEMPTY; /*!< (@ 0x00003BE0) Port Queue Status Register */ + + struct + { + __IM uint32_t P0_Q_STATUS : 8; /*!< [7..0] Port 0 per-queue bit indication on whether the queue + * transitioned from open to closed state while frames were + * still queued. */ + __IM uint32_t P1_Q_STATUS : 8; /*!< [15..8] Port 1 per-queue bit indication on whether the queue + * transitioned from open to closed state while frames were + * still queued. */ + __IM uint32_t P2_Q_STATUS : 8; /*!< [23..16] Port 2 per-queue bit indication on whether the queue + * transitioned from open to closed state while frames were + * still queued. */ + __IM uint32_t P3_Q_STATUS : 8; /*!< [31..24] Port 3 per-queue bit indication on whether the queue + * transitioned from open to closed state while frames were + * still queued. */ + } MMCTL_P0_3_QCLOSED_NONEMPTY_b; + }; + __IM uint32_t RESERVED101; + + union + { + __IOM uint32_t MMCTL_PREEMPT_EXTRA; /*!< (@ 0x00003BE8) Frame Preemption Extra Configuration Register */ + + struct + { + __IOM uint32_t MIN_PFRM_ADJ : 4; /*!< [3..0] Adjust the minimum mPacket length, in increments of 4 + * bytes. */ + __IOM uint32_t LAST_PFRM_ADJ : 4; /*!< [7..4] Adjust the preemptable threshold when reaching the end + * of the frame, in increments of 4 bytes. Incrementing this + * value increments the length of the last mPacket. */ + uint32_t : 24; + } MMCTL_PREEMPT_EXTRA_b; + }; + __IM uint32_t RESERVED102[5]; + + union + { + __IOM uint32_t DLR_CONTROL; /*!< (@ 0x00003C00) DLR Control Register */ + + struct + { + __IOM uint32_t ENABLE : 1; /*!< [0..0] Enable DLR extension module. When set, the DLR module + * becomes active. When DLR is enabled, the LOOP_FILTER_ENA + * must also be enabled for proper DLR operation. */ + __IOM uint32_t AUTOFLUSH : 1; /*!< [1..1] Enable automatic flushing of unicast entries in address + * table if ring reconfiguration occurs (see also DLR interrupt + * IRQ_flush_macaddr_ena in DLR_IRQ_CONTROL). */ + __IOM uint32_t LOOP_FILTER_ENA : 1; /*!< [2..2] Enable the loop filter function. When set to 1, the ingress + * loop filter is enabled. This can be enabled regardless + * of the DLR ENABLE state, allowing the loop filter function + * to operate when DLR is not used. */ + uint32_t : 1; + __IOM uint32_t IGNORE_INVTM : 1; /*!< [4..4] Enable ignore beacon frames with invalid timeout timer. + * When enabled (set to 1) frames with timeout timer value + * not within a range of 200 microseconds to 500 milliseconds + * are ignored and parameters are not locally stored or considered + * for state transitions. The invalid timeout timer value + * is always stored within the DLR_INV_TMOUT register irrespective + * of the value of this bit. Ignored frames are forwarded + * normally. */ + uint32_t : 3; + __IOM uint32_t US_TIME : 12; /*!< [19..8] Number of clock cycles required for 1 microsecond for + * the switch operating clock. This LSI operates at 200 MHz, + * therefore this register must be set to 0xC8. The value + * after reset must be changed. */ + uint32_t : 12; + } DLR_CONTROL_b; + }; + + union + { + __IM uint32_t DLR_STATUS; /*!< (@ 0x00003C04) DLR Status Register */ + + struct + { + __IM uint32_t LastBcnRcvPort : 2; /*!< [1..0] Last Beacon Receive Port */ + uint32_t : 6; + __IM uint32_t NODE_STATE : 8; /*!< [15..8] Local Node Current State */ + __IM uint32_t LINK_STATUS : 2; /*!< [17..16] Link Status */ + uint32_t : 6; + __IM uint32_t TOPOLOGY : 8; /*!< [31..24] Current Network Topology */ + } DLR_STATUS_b; + }; + + union + { + __IOM uint32_t DLR_ETH_TYP; /*!< (@ 0x00003C08) DLR Ethernet Type Register */ + + struct + { + __IOM uint32_t DLR_ETH_TYP : 16; /*!< [15..0] Ethernet type to compare for DLR frame detection (initial + * value is 0x80E1) */ + uint32_t : 16; + } DLR_ETH_TYP_b; + }; + + union + { + __IOM uint32_t DLR_IRQ_CONTROL; /*!< (@ 0x00003C0C) DLR Interrupt Control Register */ + + struct + { + __IOM uint32_t IRQ_state_chng_ena : 1; /*!< [0..0] Enable Interrupt for State Change */ + __IOM uint32_t IRQ_flush_macaddr_ena : 1; /*!< [1..1] Enable Flush Local MAC Address Table Interrupt. */ + __IOM uint32_t IRQ_stop_nbchk0_ena : 1; /*!< [2..2] Enable Stop Request Neighbor Check Timeout Timer Interrupt + * for Port 0. */ + __IOM uint32_t IRQ_stop_nbchk1_ena : 1; /*!< [3..3] Enable Stop Request Neighbor Check Timeout Timer Interrupt + * for Port 1. */ + __IOM uint32_t IRQ_bec_tmr0_exp_ena : 1; /*!< [4..4] IRQ_bec_tmr0_exp_ena */ + __IOM uint32_t IRQ_bec_tmr1_exp_ena : 1; /*!< [5..5] Enable Interrupt on Beacon Timeout Timer Expire for Port + * 1. */ + __IOM uint32_t IRQ_supr_chng_ena : 1; /*!< [6..6] Enable Interrupt on Ring Supervisor Change. */ + __IOM uint32_t IRQ_link_chng0_ena : 1; /*!< [7..7] Enable Link Status Change Interrupt Event for Port 0. */ + __IOM uint32_t IRQ_link_chng1_ena : 1; /*!< [8..8] Enable Link Status Change Interrupt Event for Port 1. */ + __IOM uint32_t IRQ_sup_ignord_ena : 1; /*!< [9..9] Enable interrupt on beacon frame detection from a supervisor + * with lower precedence than the current ring supervisor + * or lower numeric value for MAC address when precedence + * is same. */ + __IOM uint32_t IRQ_ip_addr_chng_ena : 1; /*!< [10..10] Enable interrupt on IP address change detection within + * beacon frame from ring supervisor. */ + __IOM uint32_t IRQ_invalid_tmr_ena : 1; /*!< [11..11] Enable interrupt on invalid range for beacon timeout + * timer value detection. */ + __IOM uint32_t IRQ_bec_rcv0_ena : 1; /*!< [12..12] Enable interrupt on beacon frame detection on port + * 0. */ + __IOM uint32_t IRQ_bec_rcv1_ena : 1; /*!< [13..13] Enable interrupt on beacon frame detection on port + * 1. */ + __IOM uint32_t IRQ_frm_dscrd0 : 1; /*!< [14..14] Enable interrupt on frame discard due to source address + * match with the local address on port 0. */ + __IOM uint32_t IRQ_frm_dscrd1 : 1; /*!< [15..15] Enable Interrupt on Frame discard due to source address + * match with the local address on port 1. */ + uint32_t : 13; + __IOM uint32_t low_int_en : 1; /*!< [29..29] Enable active-low interrupt. Asserted to use active-low + * interrupt signal instead of active-high interrupt signal. */ + __OM uint32_t atomic_OR : 1; /*!< [30..30] When set during a register-write, the enable bits are + * ORed into the current setting of the register. By writing + * this bit at the same time, only the target bit can be set + * to 1. */ + __OM uint32_t atomic_AND : 1; /*!< [31..31] When set during a register-write, the enable bits are + * ANDed with the current setting of the register. By writing + * this bit at the same time, only the target bit can be set + * to 0. */ + } DLR_IRQ_CONTROL_b; + }; + + union + { + __IOM uint32_t DLR_IRQ_STAT_ACK; /*!< (@ 0x00003C10) DLR Interrupt Status/ACK Register */ + + struct + { + __IOM uint32_t state_chng_IRQ_pending : 1; /*!< [0..0] Latched State Change Event */ + __IOM uint32_t flush_IRQ_pending : 1; /*!< [1..1] Latched Flush Event for MAC Address Learning Table */ + __IOM uint32_t nbchk0_IRQ_pending : 1; /*!< [2..2] Stop Request Event for Neighbor Check Timeout Timer for + * Port 0 */ + __IOM uint32_t nbchk1_IRQ_pending : 1; /*!< [3..3] Stop Request Event for Neighbor Check Timeout Timer for + * Port 1 */ + __IOM uint32_t bec_tmr0_IRQ_pending : 1; /*!< [4..4] Beacon Timeout Timer Expire Event for Port 0 */ + __IOM uint32_t bec_tmr1_IRQ_pending : 1; /*!< [5..5] Beacon Timeout Timer Expire Event for Port 1 */ + __IOM uint32_t supr_chng_IRQ_pending : 1; /*!< [6..6] Latched Supervisor Change Event */ + __IOM uint32_t Link0_IRQ_pending : 1; /*!< [7..7] Latched Link Status Change Event for Port 0 */ + __IOM uint32_t Link1_IRQ_pending : 1; /*!< [8..8] Latched Link Status Change Event for Port 1 */ + __IOM uint32_t sup_ignord_IRQ_pending : 1; /*!< [9..9] Latched Event for Beacon Frame Detection from Ignored + * Supervisor */ + __IOM uint32_t ip_chng_IRQ_pending : 1; /*!< [10..10] Latched IP Address Change Event */ + __IOM uint32_t invalid_tmr_IRQ_pending : 1; /*!< [11..11] Latched Event on Invalid Beacon Timeout Timer Value + * Detection Within Beacon Frame on Port 0 or Port 1 */ + __IOM uint32_t bec_rcv0_IRQ_pending : 1; /*!< [12..12] Latched Event on Beacon Frame Detection on Port 0 */ + __IOM uint32_t bec_rcv1_IRQ_pending : 1; /*!< [13..13] Latched Event on Beacon Frame Detection on Port 1 */ + __IOM uint32_t frm_dscrd0_IRQ_pending : 1; /*!< [14..14] Latched Event on Frame Discard Due to Source Address + * Match with the Local Address on Port 0 (Loop Filter) */ + __IOM uint32_t frm_dscrd1_IRQ_pending : 1; /*!< [15..15] Latched Event on Frame Discard Due to Source Address + * Match with the Local Address on Port 1 (Loop Filter) */ + uint32_t : 16; + } DLR_IRQ_STAT_ACK_b; + }; + + union + { + __IOM uint32_t DLR_LOC_MAClo; /*!< (@ 0x00003C14) DLR Local MAC Address Low Register */ + + struct + { + __IOM uint32_t LOC_MAC : 32; /*!< [31..0] First 4 octets of the Local MAC address for loop filter */ + } DLR_LOC_MAClo_b; + }; + + union + { + __IOM uint32_t DLR_LOC_MAChi; /*!< (@ 0x00003C18) DLR Local MAC Address High Register */ + + struct + { + __IOM uint32_t LOC_MAC : 16; /*!< [15..0] Last 2 octets of local MAC address for loop filter */ + uint32_t : 16; + } DLR_LOC_MAChi_b; + }; + __IM uint32_t RESERVED103; + + union + { + __IM uint32_t DLR_SUPR_MAClo; /*!< (@ 0x00003C20) DLR Supervisor MAC Address Low Register */ + + struct + { + __IM uint32_t SUPR_MAC : 32; /*!< [31..0] First 4 octets of the active ring supervisor of the + * MAC address extracted from the Source Address field of + * the beacon frame. */ + } DLR_SUPR_MAClo_b; + }; + + union + { + __IM uint32_t DLR_SUPR_MAChi; /*!< (@ 0x00003C24) DLR Supervisor MAC Address High Register */ + + struct + { + __IM uint32_t SUPR_MAC : 16; /*!< [15..0] Last 2 octets of the active ring supervisor of the MAC + * address extracted from the Source Address field of the + * beacon frame. */ + __IM uint32_t PRECE : 8; /*!< [23..16] Precedence value of the ring supervisor extracted from + * the Supervisor precedence field of the beacon frame. */ + uint32_t : 8; + } DLR_SUPR_MAChi_b; + }; + + union + { + __IM uint32_t DLR_STATE_VLAN; /*!< (@ 0x00003C28) DLR Ring Status/VLAN Register */ + + struct + { + __IM uint32_t RINGSTAT : 8; /*!< [7..0] DLR ring state extracted from the Ring State field of + * the beacon frame. */ + __IM uint32_t VLANVALID : 1; /*!< [8..8] VLAN Valid */ + uint32_t : 7; + __IM uint32_t VLANINFO : 16; /*!< [31..16] IEEE 802.1Q VLAN Tag control field extracted from the + * VLAN info field of the beacon frame. */ + } DLR_STATE_VLAN_b; + }; + + union + { + __IM uint32_t DLR_BEC_TMOUT; /*!< (@ 0x00003C2C) DLR Beacon Timeout Register */ + + struct + { + __IM uint32_t BEC_TMOUT : 32; /*!< [31..0] Beacon timeout timer value extracted from the Beacon + * Timeout in microseconds field of the beacon frame. */ + } DLR_BEC_TMOUT_b; + }; + + union + { + __IM uint32_t DLR_BEC_INTRVL; /*!< (@ 0x00003C30) DLR Beacon Interval Register */ + + struct + { + __IM uint32_t BEC_INTRVL : 32; /*!< [31..0] Beacon interval extracted from the Beacon Interval field + * of the beacon frame */ + } DLR_BEC_INTRVL_b; + }; + + union + { + __IM uint32_t DLR_SUPR_IPADR; /*!< (@ 0x00003C34) DLR Supervisor IP Address Register */ + + struct + { + __IM uint32_t SUPR_IPADR : 32; /*!< [31..0] IP address of the ring supervisor extracted from the + * Source IP address field of the beacon frame. A value of + * 0x0 can be received when supervisor has no IP address. */ + } DLR_SUPR_IPADR_b; + }; + + union + { + __IM uint32_t DLR_ETH_STYP_VER; /*!< (@ 0x00003C38) DLR Sub Type/Protocol Version Register */ + + struct + { + __IM uint32_t SUBTYPE : 8; /*!< [7..0] DLR Ring Ether Sub Type extracted from the Ring Sub Type + * field of the beacon frame. */ + __IM uint32_t PROTVER : 8; /*!< [15..8] DLR Ring Protocol Version extracted from the Ring Protocol + * Version field of the beacon frame. */ + __IM uint32_t SPORT : 8; /*!< [23..16] Source port extracted from the Source Port field of + * the beacon frame. */ + uint32_t : 8; + } DLR_ETH_STYP_VER_b; + }; + + union + { + __IM uint32_t DLR_INV_TMOUT; /*!< (@ 0x00003C3C) DLR Beacon Timeout Timer Register */ + + struct + { + __IM uint32_t INV_TMOUT : 32; /*!< [31..0] Last out of range Beacon timeout timer value extracted + * from beacon frame on any of the port. */ + } DLR_INV_TMOUT_b; + }; + + union + { + __IM uint32_t DLR_SEQ_ID; /*!< (@ 0x00003C40) DLR Sequence ID Register */ + + struct + { + __IM uint32_t SEQ_ID : 32; /*!< [31..0] Sequence ID of the last beacon frame extracted from + * the Sequence ID field of the beacon frame on port 0 or + * port 1. Sequence ID of the ignored frames is not stored. */ + } DLR_SEQ_ID_b; + }; + __IM uint32_t RESERVED104[5]; + + union + { + __IOM uint32_t DLR_DSTlo; /*!< (@ 0x00003C58) DLR Beacon Destination Address Low Register */ + + struct + { + __IOM uint32_t DLR_DST : 32; /*!< [31..0] First 4 octets of the beacon frame destination multicast + * address (01-21-6C-00-00-01). */ + } DLR_DSTlo_b; + }; + + union + { + __IOM uint32_t DLR_DSThi; /*!< (@ 0x00003C5C) DLR Beacon Destination Address High Register */ + + struct + { + __IOM uint32_t DLR_DST : 16; /*!< [15..0] Last 2 octets of the beacon frame destination multicast + * address (01-21-6C-00-00-01). */ + uint32_t : 16; + } DLR_DSThi_b; + }; + + union + { + __IM uint32_t DLR_RX_STAT0; /*!< (@ 0x00003C60) DLR Received Frame Statistic Register 0 */ + + struct + { + __IM uint32_t RX_STAT0 : 32; /*!< [31..0] Number of Beacon Frames Received on Port 0 */ + } DLR_RX_STAT0_b; + }; + + union + { + __IM uint32_t DLR_RX_ERR_STAT0; /*!< (@ 0x00003C64) DLR Received Frame Error Statistic Register 0 */ + + struct + { + __IM uint32_t RX_ERR_STAT0 : 32; /*!< [31..0] Number of Beacon Frames Received with CRC Error on Port + * 0 */ + } DLR_RX_ERR_STAT0_b; + }; + __IM uint32_t RESERVED105; + + union + { + __IOM uint32_t DLR_RX_LF_STAT0; /*!< (@ 0x00003C6C) DLR Received Frame Loop Filter Statistic Register + * 0 */ + + struct + { + __IOM uint32_t RX_LF_STAT0 : 8; /*!< [7..0] Number of discarded frames in port 0 due to loop filtering + * when LOOP_FILTER_ENA is set to 1. Saturates at 255. */ + uint32_t : 24; + } DLR_RX_LF_STAT0_b; + }; + + union + { + __IM uint32_t DLR_RX_STAT1; /*!< (@ 0x00003C70) DLR Received Frame Statistic Register 1 */ + + struct + { + __IM uint32_t RX_STAT1 : 32; /*!< [31..0] Number of Beacon Frames Received on Port 1 */ + } DLR_RX_STAT1_b; + }; + + union + { + __IM uint32_t DLR_RX_ERR_STAT1; /*!< (@ 0x00003C74) DLR Received Frame Error Statistic Register 1 */ + + struct + { + __IM uint32_t RX_ERR_STAT1 : 32; /*!< [31..0] Number of Beacon Frames Received with CRC Error on Port + * 1 */ + } DLR_RX_ERR_STAT1_b; + }; + __IM uint32_t RESERVED106; + + union + { + __IOM uint32_t DLR_RX_LF_STAT1; /*!< (@ 0x00003C7C) DLR Received Frame Loop Filter Statistic Register + * 1 */ + + struct + { + __IOM uint32_t RX_LF_STAT1 : 8; /*!< [7..0] Number of discarded frames in port 1 due to loop filtering + * when LOOP_FILTER_ENA is set to 1. Saturates at 255. */ + uint32_t : 24; + } DLR_RX_LF_STAT1_b; + }; + __IM uint32_t RESERVED107[32]; + + union + { + __IOM uint32_t PRP_CONFIG; /*!< (@ 0x00003D00) PRP Configuration Register */ + + struct + { + __IOM uint32_t PRP_ENA : 1; /*!< [0..0] Enable PRP Operation */ + __IOM uint32_t RX_DUP_ACCEPT : 1; /*!< [1..1] Enable Duplicate Accept Mode of Operation at Receive */ + __IOM uint32_t RX_REMOVE_RCT : 1; /*!< [2..2] Allow PRP Port RX to Remove the RCT */ + __IOM uint32_t TX_RCT_MODE : 2; /*!< [4..3] Control Appending the RCT to Transmitted Frames on the + * Redundant Ports */ + __IOM uint32_t TX_RCT_BROADCAST : 1; /*!< [5..5] Should be 1 normally. */ + __IOM uint32_t TX_RCT_MULTICAST : 1; /*!< [6..6] Should be 1 normally. */ + __IOM uint32_t TX_RCT_UNKNOWN : 1; /*!< [7..7] Should be 1 normally. */ + __IOM uint32_t TX_RCT_1588 : 1; /*!< [8..8] Setting this bit affects IEEE 1588 frames that are forwarded + * through the switch (for example, when used as RedBox) to + * both PRP_GROUP ports. Locally generated IEEE 1588 frames + * (peer-delay request/response) are not affected by this + * setting. */ + __IOM uint32_t RCT_LEN_CHK_DIS : 1; /*!< [9..9] When set to 1, disables the RCT length field checking + * against the actual frame length. */ + uint32_t : 6; + __IOM uint32_t PRP_AGE_ENA : 1; /*!< [16..16] Enable History Memory Aging Timer */ + uint32_t : 15; + } PRP_CONFIG_b; + }; + + union + { + __IOM uint32_t PRP_GROUP; /*!< (@ 0x00003D04) PRP Port Group Register */ + + struct + { + __IOM uint32_t PRP_GROUP : 3; /*!< [2..0] Defines which two ports should be treated as redundant + * ports for PRP. */ + uint32_t : 13; + __IOM uint32_t LANB_MASK : 3; /*!< [18..16] Defines which of the ports is considered the LAN B + * port. */ + uint32_t : 13; + } PRP_GROUP_b; + }; + + union + { + __IOM uint32_t PRP_SUFFIX; /*!< (@ 0x00003D08) PRP RCT Suffix */ + + struct + { + __IOM uint32_t PRP_SUFFIX : 16; /*!< [15..0] The Redundancy Control Trailer (RCT) suffix (initial + * value is 0x88FB) */ + uint32_t : 16; + } PRP_SUFFIX_b; + }; + + union + { + __IOM uint32_t PRP_LANID; /*!< (@ 0x00003D0C) PRP LAN Identifier */ + + struct + { + __IOM uint32_t LANAID : 4; /*!< [3..0] LAN A Identifier */ + __IOM uint32_t LANBID : 4; /*!< [7..4] LAN B Identifier */ + uint32_t : 24; + } PRP_LANID_b; + }; + + union + { + __IOM uint32_t DUP_W; /*!< (@ 0x00003D10) PRP Max Duplicate Detection Window Size */ + + struct + { + __IOM uint32_t DUP_W : 8; /*!< [7..0] Maximum Duplicate Detect Window Size */ + uint32_t : 24; + } DUP_W_b; + }; + + union + { + __IOM uint32_t PRP_AGETIME; /*!< (@ 0x00003D14) PRP Aging Time Define Register */ + + struct + { + __IOM uint32_t PRP_AGETIME : 24; /*!< [23..0] Timeout in steps of 32 switch operating clock cycles + * to control aging of duplicate history data. */ + uint32_t : 8; + } PRP_AGETIME_b; + }; + + union + { + __IOM uint32_t PRP_IRQ_CONTROL; /*!< (@ 0x00003D18) PRP Interrupt Control Register */ + + struct + { + __IOM uint32_t MEMTOOLATE : 1; /*!< [0..0] Enable Interrupt for Memory Error Indications. */ + __IOM uint32_t WRONGLAN : 1; /*!< [1..1] Enable interrupt for frames received at a redundant port + * with an invalid LAN identifier in its redundancy trailer. */ + __IOM uint32_t OUTOFSEQ : 1; /*!< [2..2] Enable interrupt for frames received and accepted but + * have an unexpected sequence number. */ + __IOM uint32_t SEQMISSING : 1; /*!< [3..3] Enable interrupt for frames received and accepted that + * caused the history to skip a sequence number that was never + * received (for example, a missing sequence number is being + * ignored and is now treated as a candidate for dropping). */ + uint32_t : 28; + } PRP_IRQ_CONTROL_b; + }; + + union + { + __IOM uint32_t PRP_IRQ_STAT_ACK; /*!< (@ 0x00003D1C) PRP Interrupt Status/ACK Register */ + + struct + { + __IOM uint32_t MEMTOOLATE : 1; /*!< [0..0] Interrupt Pending Indication */ + __IOM uint32_t WRONGLAN : 1; /*!< [1..1] This bit functions the same as MEMTOOLATE bit. */ + __IOM uint32_t OUTOFSEQ : 1; /*!< [2..2] This bit functions the same as MEMTOOLATE bit. */ + __IOM uint32_t SEQMISSING : 1; /*!< [3..3] This bit functions the same as MEMTOOLATE bit. */ + uint32_t : 28; + } PRP_IRQ_STAT_ACK_b; + }; + + union + { + __IOM uint32_t RM_ADDR_CTRL; /*!< (@ 0x00003D20) PRP History Memory Transactions Control Register */ + + struct + { + __IOM uint32_t address : 12; /*!< [11..0] Memory Address for Read and Write Transactions */ + uint32_t : 10; + __IOM uint32_t CLEAR_DYNAMIC : 1; /*!< [22..22] When set to 1, scan the complete table for valid dynamic + * history entries and deletes them (writes entry with all + * 0s). */ + __IOM uint32_t CLEAR_MEMORY : 1; /*!< [23..23] When set to 1, write all memory locations with 0. */ + uint32_t : 1; + __IOM uint32_t WRITE : 1; /*!< [25..25] When set to 1, perform a Single Write Transaction. */ + __IOM uint32_t READ : 1; /*!< [26..26] When set to 1, perform Single Read Transaction. */ + uint32_t : 2; + __IOM uint32_t CLEAR : 1; /*!< [29..29] When set to 1, write all 0s to the entry selected by + * the given address. */ + uint32_t : 1; + __IM uint32_t BUSY : 1; /*!< [31..31] Transaction Busy Indication */ + } RM_ADDR_CTRL_b; + }; + + union + { + __IOM uint32_t RM_DATA; /*!< (@ 0x00003D24) PRP Memory Data Register */ + + struct + { + __IOM uint32_t RM_DATA : 32; /*!< [31..0] Memory data register for read/write transactions controlled + * by RM_ADDR_CTRL. */ + } RM_DATA_b; + }; + + union + { + __IOM uint32_t RM_DATA_HI; /*!< (@ 0x00003D28) PRP Memory Data Higher Register */ + + struct + { + __IOM uint32_t RM_DATA_HI : 32; /*!< [31..0] A Second Data Register */ + } RM_DATA_HI_b; + }; + + union + { + __IM uint32_t RM_STATUS; /*!< (@ 0x00003D2C) PRP Memory Controller Status Indication */ + + struct + { + __IM uint32_t ageaddress : 12; /*!< [11..0] Address of an entry which the aging process inspects + * when the aging timer expires next time. */ + uint32_t : 20; + } RM_STATUS_b; + }; + + union + { + __IOM uint32_t TxSeqTooLate; /*!< (@ 0x00003D30) PRP Frame Transmission Retrieval of Failed Sequence */ + + struct + { + __IOM uint32_t TxSeqTooLate : 4; /*!< [3..0] Retrieval of a Sequence Number Failed */ + uint32_t : 28; + } TxSeqTooLate_b; + }; + + union + { + __IM uint32_t CntErrWrongLanA; /*!< (@ 0x00003D34) PRP Wrong ID LAN-A Count Register */ + + struct + { + __IM uint32_t CntErrWrongLanA : 32; /*!< [31..0] Valid frames received on LAN A which have an RCT (valid + * length + suffix) but LAN ID is not matching LAN A. */ + } CntErrWrongLanA_b; + }; + + union + { + __IM uint32_t CntErrWrongLanB; /*!< (@ 0x00003D38) PRP Wrong ID LAN-B Count Register */ + + struct + { + __IM uint32_t CntErrWrongLanB : 32; /*!< [31..0] Valid frames received on LAN B which have an RCT (valid + * length + suffix) but LAN ID is not matching LAN B. */ + } CntErrWrongLanB_b; + }; + + union + { + __IM uint32_t CntDupLanA; /*!< (@ 0x00003D3C) PRP Duplicate LAN-A Count Register */ + + struct + { + __IM uint32_t CntDupLanA : 32; /*!< [31..0] Valid frames received on LAN A that were dropped by + * duplicate detection. */ + } CntDupLanA_b; + }; + + union + { + __IM uint32_t CntDupLanB; /*!< (@ 0x00003D40) PRP Duplicate LAN-B Count Register */ + + struct + { + __IM uint32_t CntDupLanB : 32; /*!< [31..0] Valid frames received on LAN B that were dropped by + * duplicate detection. */ + } CntDupLanB_b; + }; + + union + { + __IM uint32_t CntOutOfSeqLowA; /*!< (@ 0x00003D44) PRP Sequence Error Low LAN-A Count Register */ + + struct + { + __IM uint32_t CntOutOfSeqLowA : 32; /*!< [31..0] Valid and accepted frames received on LAN A with a sequence + * number less than last window (DUP_W). */ + } CntOutOfSeqLowA_b; + }; + + union + { + __IM uint32_t CntOutOfSeqLowB; /*!< (@ 0x00003D48) PRP Sequence Error Low LAN-B Count Register */ + + struct + { + __IM uint32_t CntOutOfSeqLowB : 32; /*!< [31..0] Valid and accepted frames received on LAN B with a sequence + * number less than last window (DUP_W). */ + } CntOutOfSeqLowB_b; + }; + + union + { + __IM uint32_t CntOutOfSeqA; /*!< (@ 0x00003D4C) PRP Sequence Error LAN-A Count Register */ + + struct + { + __IM uint32_t CntOutOfSeqA : 32; /*!< [31..0] Valid and accepted frames received on LAN A with an + * unexpected sequence number. */ + } CntOutOfSeqA_b; + }; + + union + { + __IM uint32_t CntOutOfSeqB; /*!< (@ 0x00003D50) PRP Sequence Error LAN-B Count Register */ + + struct + { + __IM uint32_t CntOutOfSeqB : 32; /*!< [31..0] Valid and accepted frames received on LAN B with an + * unexpected sequence number. */ + } CntOutOfSeqB_b; + }; + + union + { + __IM uint32_t CntAcceptA; /*!< (@ 0x00003D54) PRP Valid Frame LAN-A Count Register */ + + struct + { + __IM uint32_t CntAcceptA : 32; /*!< [31..0] Valid frames received on LAN A which had a valid sequence + * number in the expected range. */ + } CntAcceptA_b; + }; + + union + { + __IM uint32_t CntAcceptB; /*!< (@ 0x00003D58) PRP Valid Frame LAN-B Count Register */ + + struct + { + __IM uint32_t CntAcceptB : 32; /*!< [31..0] Valid frames received on LAN B which had a valid sequence + * number in the expected range. */ + } CntAcceptB_b; + }; + + union + { + __IM uint32_t CntMissing; /*!< (@ 0x00003D5C) PRP Drop History Adjustment Count */ + + struct + { + __IM uint32_t CntMissing : 32; /*!< [31..0] Indicates adjustment of the drop history as a frame + * was received with a sequence number of expected + history + + 1. This occurs if the same frame was dropped in both + + LAN segments (one sequence number is missing) and the history + + is now extended beyond that sequence number (causing it + + to be treated as drop allowed). */ + } CntMissing_b; + }; + __IM uint32_t RESERVED108[40]; + + union + { + __IOM uint32_t HUB_CONFIG; /*!< (@ 0x00003E00) HUB Configuration Register */ + + struct + { + __IOM uint32_t HUB_ENA : 1; /*!< [0..0] Enable Integrated HUB Operation */ + __IOM uint32_t RETRANSMIT_ENA : 1; /*!< [1..1] Enable Hub Retransmit Capability */ + __IOM uint32_t TRIGGER_MODE : 1; /*!< [2..2] Enable Single Frame Trigger Mode */ + __IOM uint32_t HUB_ISOLATE : 1; /*!< [3..3] Isolate all hub ports from the other ports of the switch + * and allow communication with management port only. It is + * then up to the application of the management port to implement + * some bridging functionality to other ports as required. */ + __IOM uint32_t TIMER_SEL : 1; /*!< [4..4] Select the timer to use for timed triggers */ + uint32_t : 1; + __IOM uint32_t IPG_WAIT : 3; /*!< [8..6] IPG_WAIT */ + __IOM uint32_t CRS_GEN : 1; /*!< [9..9] CRS_GEN */ + __IOM uint32_t PRMB_GEN_DIS : 1; /*!< [10..10] PRMB_GEN_DIS */ + __IOM uint32_t JAM_WAIT_IDLE : 1; /*!< [11..11] JAM_WAIT_IDLE */ + uint32_t : 20; + } HUB_CONFIG_b; + }; + + union + { + __IOM uint32_t HUB_GROUP; /*!< (@ 0x00003E04) HUB Port Group Register */ + + struct + { + __IOM uint32_t HUB_GROUP : 3; /*!< [2..0] Define all ports that should be combined to a Hub Group. */ + uint32_t : 29; + } HUB_GROUP_b; + }; + + union + { + __IOM uint32_t HUB_DEFPORT; /*!< (@ 0x00003E08) HUB Default Port Selection Register */ + + struct + { + __IOM uint32_t HUB_DEFPORT : 3; /*!< [2..0] The default port within the Hub Group where all traffic + * from a port outside the group is forwarded to port (bit + * 0 = port 0, bit 1 = port 1, and bit 2 = port 2). If a frame + * should be forwarded to any of the hub ports, the frame + * is sent to this port only. The copy function of the hub + * copies it to all PHY interfaces of the group eventually. */ + uint32_t : 29; + } HUB_DEFPORT_b; + }; + + union + { + __IOM uint32_t HUB_TRIGGER_IMMEDIATE; /*!< (@ 0x00003E0C) HUB Transmission Trigger Immediate Register */ + + struct + { + __IOM uint32_t HUB_TRIGGER_IMMEDIATE : 3; /*!< [2..0] Trigger immediate transmission of a single frame from + * given port within the hub group (bit 0 = port 0, bit 1 + * = port 1, and bit 2 = port 2). */ + uint32_t : 29; + } HUB_TRIGGER_IMMEDIATE_b; + }; + + union + { + __IOM uint32_t HUB_TRIGGER_AT; /*!< (@ 0x00003E10) HUB Transmission Trigger At Register */ + + struct + { + __IOM uint32_t HUB_TRIGGER_AT : 3; /*!< [2..0] Trigger Transmission of a Single Frame at a Specific + * Time (bit 0 = port 0, bit 1 = port 1, and bit 2 = port + * 2). */ + uint32_t : 29; + } HUB_TRIGGER_AT_b; + }; + + union + { + __IOM uint32_t HUB_TTIME; /*!< (@ 0x00003E14) HUB Transmission Time Define Register */ + + struct + { + __IOM uint32_t HUB_TTIME : 32; /*!< [31..0] Define the Time Value when a Trigger Should Occur */ + } HUB_TTIME_b; + }; + + union + { + __IOM uint32_t HUB_IRQ_CONTROL; /*!< (@ 0x00003E18) HUB Interrupt Control Register */ + + struct + { + __IOM uint32_t RX_TRIGGER : 3; /*!< [2..0] Enable Interrupt on Receive Pattern Match Trigger Function */ + __IOM uint32_t CHANGE_DET : 1; /*!< [3..3] Enable interrupt for hub TX state machine port state + * change request detection */ + __IOM uint32_t TRIGGER_IMMEDIATE : 1; /*!< [4..4] Enable interrupt when hub transmit started after writing + * the HUB_TRIGGER_IMMEDIATE register */ + __IOM uint32_t TRIGGER_TIMER : 1; /*!< [5..5] Enable interrupt when hub transmit started after writing + * the HUB_TRIGGER_TIME register and the timeout value is + * reached (register HUB_TTIME). */ + uint32_t : 26; + } HUB_IRQ_CONTROL_b; + }; + + union + { + __IOM uint32_t HUB_IRQ_STAT_ACK; /*!< (@ 0x00003E1C) HUB Interrupt Status/ACK Register */ + + struct + { + __IOM uint32_t RX_TRIGGER : 3; /*!< [2..0] Interrupt Pending Indication */ + __IOM uint32_t CHANGE_DET : 1; /*!< [3..3] This bit functions the same as RX_TRIGGER bit. */ + __IOM uint32_t TRIGGER_IMMEDIATE : 1; /*!< [4..4] This bit functions the same as RX_TRIGGER bit. */ + __IOM uint32_t TRIGGER_TIMER : 1; /*!< [5..5] This bit functions the same as RX_TRIGGER bit. */ + uint32_t : 26; + } HUB_IRQ_STAT_ACK_b; + }; + + union + { + __IM uint32_t HUB_STATUS; /*!< (@ 0x00003E20) HUB Status Register */ + + struct + { + __IM uint32_t PORTS_ACTIVE : 3; /*!< [2..0] When this bit is 1, it shows the currently active ports + * of the Hub group which are allowed for transmit. */ + uint32_t : 6; + __IM uint32_t TX_ACTIVE : 1; /*!< [9..9] When this bit is 1, the hub global transmit state machine + * has successfully entered Hub mode and is now controlling + * the hub group. */ + __IM uint32_t TX_BUSY : 1; /*!< [10..10] When this bit is 1, the local device currently transmits + * data to all ports within the hub group. */ + __IM uint32_t Speed_OK : 1; /*!< [11..11] When this bit is 1, it indicates that the port speed + * of all group ports match. */ + __IM uint32_t TX_Change_Pending : 1; /*!< [12..12] Indicate a pending change request in the hub transmitter + * that is unsolved and cause the hub to stop operation (no + * longer performing any transmissions). */ + uint32_t : 19; + } HUB_STATUS_b; + }; + + union + { + __IM uint32_t HUB_OPORT_STATUS; /*!< (@ 0x00003E24) HUB Output Port Status Register */ + + struct + { + __IM uint32_t HUB_OPORT_STATUS : 3; /*!< [2..0] Per Output Port Data Available Status */ + uint32_t : 29; + } HUB_OPORT_STATUS_b; + }; + __IM uint32_t RESERVED109[22]; + + union + { + __IOM uint32_t TDMA_CONFIG; /*!< (@ 0x00003E80) TDMA Configuration Register */ + + struct + { + __IOM uint32_t TDMA_ENA : 1; /*!< [0..0] Enable TDMA Scheduler */ + __IM uint32_t WAIT_START : 1; /*!< [1..1] Status bit which is set as long as the scheduler is enabled + * but has not yet reached the time given in register TDMA_START. */ + __IOM uint32_t TIMER_SEL : 1; /*!< [2..2] Select which timer to use as the time source for the + * scheduler */ + uint32_t : 1; + __IM uint32_t RED_PERIOD : 1; /*!< [4..4] Read only bit indicating the current period for Profinet */ + __IOM uint32_t RED_OVRD_ENA : 1; /*!< [5..5] Enables overriding the RED period status, regardless + * of the indication by the TCV. */ + __IOM uint32_t RED_OVRD : 1; /*!< [6..6] Override Value for the RED Period */ + __OM uint32_t IN_CT_WREN : 1; /*!< [7..7] IN_CT_WREN */ + __OM uint32_t OUT_CT_WREN : 1; /*!< [8..8] Enable writing the OUT_CT_ENA control to the egress ports. */ + __OM uint32_t HOLD_REQ_CLR : 1; /*!< [9..9] Writing 1 to this register clears the state of TDMA hold + * request. */ + uint32_t : 2; + __IM uint32_t TIMER_SEL_ACTIVE : 1; /*!< [12..12] Return the current timer being used for the TDMA Scheduler */ + uint32_t : 3; + __IOM uint32_t IN_CT_ENA : 4; /*!< [19..16] On read, return the current status of the ingress Cut-Through + * enable indicated by the TDMA scheduler. On write, override + * the ingress Cut-Through enable if IN_CT_WREN is also 1. */ + uint32_t : 4; + __IOM uint32_t OUT_CT_ENA : 4; /*!< [27..24] On read, return the current status of the egress Cut-Through + * enable indicated by the TDMA scheduler. On write, override + * the egress Cut-Through enable if OUT_CT_WREN is also 1. */ + uint32_t : 4; + } TDMA_CONFIG_b; + }; + + union + { + __IOM uint32_t TDMA_ENA_CTRL; /*!< (@ 0x00003E84) TDMA Scheduling Enable Control Register */ + + struct + { + __IOM uint32_t PORT_ENA : 4; /*!< [3..0] Set to 1 to indicate that a port is operating in TDMA + * mode. When set to 1 for a port, the port does not prefetch + * another frame until the current frame in progress is done + * and if TDMA_PREBUF_DIS in COMMAND_CONFIG is set to 1. This + * helps adding precision to the queue gating operations indicated + * by the TDMA at the expense of loss of line rate. */ + uint32_t : 12; + __IOM uint32_t QGATE_DIS : 8; /*!< [23..16] One bit per output queue. When a bit is set to 1, the + * TDMA scheduler gating commands do not affect the queue + * even if the queue mask in the TCV control data is set to + * 1. */ + __IOM uint32_t QTRIG_DIS : 8; /*!< [31..24] One bit per output queue. When a bit is set to 1, the + * TDMA scheduler triggering commands do not affect the queue + * even if the queue mask in the TCV control data is set to + * 1. */ + } TDMA_ENA_CTRL_b; + }; + + union + { + __IOM uint32_t TDMA_START; /*!< (@ 0x00003E88) TDMA Start Time Set Register */ + + struct + { + __IOM uint32_t TDMA_START : 32; /*!< [31..0] Set the start time for the very first cycle after system + * initialization has completed. The value is compared with + * the system time (selected in TDMA_CONFIG.TIMER_SEL) and + * when it is reached (crossed), the scheduler begins with + * its first cycle. The 2nd cycle is then at TDMA_START + + * TDMA_CYCLE. */ + } TDMA_START_b; + }; + + union + { + __IOM uint32_t TDMA_MODULO; /*!< (@ 0x00003E8C) TDMA System Timer Modulo */ + + struct + { + __IOM uint32_t TDMA_MODULO : 32; /*!< [31..0] The System Timer Modulo */ + } TDMA_MODULO_b; + }; + + union + { + __IOM uint32_t TDMA_CYCLE; /*!< (@ 0x00003E90) TDMA Periodic Cycle Set Register */ + + struct + { + __IOM uint32_t TDMA_CYCLE : 32; /*!< [31..0] The periodic cycle time for the scheduler given in system + * timer time. */ + } TDMA_CYCLE_b; + }; + + union + { + __IOM uint32_t TCV_SEQ_ADDR; /*!< (@ 0x00003E94) TCV Sequence Address Register */ + + struct + { + __IOM uint32_t TCV_S_ADDR : 12; /*!< [11..0] Address to write to or read from in the TCV sequence + * table. */ + uint32_t : 19; + __IOM uint32_t ADDR_AINC : 1; /*!< [31..31] When set to 1, read and write operations performed + * using TCV_SEQ_CTRL causes the address in TCV_S_ADDR to + * auto-increment after the operation. */ + } TCV_SEQ_ADDR_b; + }; + + union + { + __IOM uint32_t TCV_SEQ_CTRL; /*!< (@ 0x00003E98) TCV Sequence Table Control Register */ + + struct + { + __IOM uint32_t START : 1; /*!< [0..0] Indicate this TCV must be executed after the next cycle + * start */ + __IOM uint32_t INT : 1; /*!< [1..1] Indicates this TCV generates an interrupt to the CPU + * when activated */ + __IOM uint32_t TCV_D_IDX : 9; /*!< [10..2] Index to the TCV Data Entry */ + uint32_t : 11; + __IOM uint32_t GPIO : 8; /*!< [29..22] Generic bits that control the output pins ETHSW_TDMAOUTn + * (n = 0 to 7) */ + uint32_t : 1; + __IOM uint32_t READ_MODE : 1; /*!< [31..31] When set to 1, a read operation is performed instead + * of writing to the TCV sequence table. The read data (START, + * INT, TCV_D_IDX[8:0], and GPIO) can be obtained by reading + * this register afterwards. On read, this field always returns + * 0. */ + } TCV_SEQ_CTRL_b; + }; + + union + { + __IOM uint32_t TCV_SEQ_LAST; /*!< (@ 0x00003E9C) TCV Sequence Last Entry */ + + struct + { + __IOM uint32_t LAST : 12; /*!< [11..0] Defines the last entry to read from the TCV sequence + * table when the TDMA scheduler is operating. */ + uint32_t : 4; + __IM uint32_t ACTIVE : 12; /*!< [27..16] Return the active TCV sequence entry. */ + uint32_t : 4; + } TCV_SEQ_LAST_b; + }; + + union + { + __IOM uint32_t TCV_D_ADDR; /*!< (@ 0x00003EA0) TCV Data Address Register */ + + struct + { + __IOM uint32_t ADDR : 9; /*!< [8..0] Address to read from/write to in the TCV data table */ + uint32_t : 22; + __IOM uint32_t AINC_WR_ENA : 1; /*!< [31..31] Auto-Increment Enable */ + } TCV_D_ADDR_b; + }; + + union + { + __IOM uint32_t TCV_D_OFFSET; /*!< (@ 0x00003EA4) TCV Data Offset Register */ + + struct + { + __IOM uint32_t TCV_D_OFFSET : 32; /*!< [31..0] 32-bit time offset for the TCV data entry indicated + * by TCV_D_ADDR. When accessing the table, TCV_D_OFFSET must + * be read or written before TCV_D_CTRL. */ + } TCV_D_OFFSET_b; + }; + + union + { + __IOM uint32_t TCV_D_CTRL; /*!< (@ 0x00003EA8) TCV Data Control Register */ + + struct + { + __IOM uint32_t INC_CTR0 : 1; /*!< [0..0] Increment Control for Counter 0 */ + __IOM uint32_t INC_CTR1 : 1; /*!< [1..1] Increment Control for Counter 1 */ + __IOM uint32_t RED_PERIOD : 1; /*!< [2..2] Period Color Control (for Profinet IRT) */ + __IOM uint32_t OUT_CT_ENA : 1; /*!< [3..3] Output Cut-Through Enable */ + __IOM uint32_t IN_CT_ENA : 1; /*!< [4..4] Input Cut-Through Enable */ + __IOM uint32_t TRIGGER_MODE : 1; /*!< [5..5] Trigger mode enable when set to 1. GATE_MODE must be + * 0, otherwise, GATE_MODE has precedence. */ + __IOM uint32_t GATE_MODE : 1; /*!< [6..6] Gate mode enable when set to 1. */ + __IOM uint32_t HOLD_REQ : 1; /*!< [7..7] Preemption hold request. Generates a hold request to + * ports enabled in PMASK. */ + __IOM uint32_t QGATE : 8; /*!< [15..8] Bits mask, one per output queue */ + __IOM uint32_t PMASK : 4; /*!< [19..16] Bits mask, one per output port */ + uint32_t : 12; + } TCV_D_CTRL_b; + }; + + union + { + __IOM uint32_t TDMA_CTR0; /*!< (@ 0x00003EAC) TDMA Counter 0 */ + + struct + { + __IOM uint32_t TDMA_CTR0 : 32; /*!< [31..0] 32-bit counter that is incremented when the TCV field + * INC_CTR0 is set to 1. */ + } TDMA_CTR0_b; + }; + + union + { + __IOM uint32_t TDMA_CTR1; /*!< (@ 0x00003EB0) TDMA Counter 1 */ + + struct + { + __IOM uint32_t VALUE : 8; /*!< [7..0] Current Counter Value */ + __OM uint32_t WRITE_ENA : 1; /*!< [8..8] Write Enable for VALUE */ + uint32_t : 7; + __IOM uint32_t MAX : 8; /*!< [23..16] Counter Maximum Value */ + __IOM uint32_t INT_VALUE : 8; /*!< [31..24] Interrupt Value */ + } TDMA_CTR1_b; + }; + + union + { + __IOM uint32_t TDMA_TCV_START; /*!< (@ 0x00003EB4) TDMA TCV Sequence Entry Start */ + + struct + { + __IOM uint32_t TDMA_TCV_START : 12; /*!< [11..0] Define the TCV_SEQ entry to start from. */ + uint32_t : 20; + } TDMA_TCV_START_b; + }; + + union + { + __IM uint32_t TIME_LOAD_NEXT; /*!< (@ 0x00003EB8) TDMA Calculated Next Loading Time */ + + struct + { + __IM uint32_t TIME_LOAD_NEXT : 32; /*!< [31..0] Status giving the calculated time the scheduler loads + * into its internal compare register after the current running + * slot end is reached (not the end of the current slot). */ + } TIME_LOAD_NEXT_b; + }; + + union + { + __IOM uint32_t TDMA_IRQ_CONTROL; /*!< (@ 0x00003EBC) TDMA IRQ Control Register */ + + struct + { + __IOM uint32_t TCV_INT_EN : 1; /*!< [0..0] Enable Interrupts Generated by the TCV */ + uint32_t : 12; + __IOM uint32_t CTR1_INT_EN : 1; /*!< [13..13] Enable Interrupts Generated from Counter 1 */ + uint32_t : 18; + } TDMA_IRQ_CONTROL_b; + }; + + union + { + __IOM uint32_t TDMA_IRQ_STAT_ACK; /*!< (@ 0x00003EC0) TDMA IRQ Status/ACK Register */ + + struct + { + __IOM uint32_t TCV_ACK : 1; /*!< [0..0] TCV Execution Event */ + uint32_t : 12; + __IOM uint32_t CTR1_ACK : 1; /*!< [13..13] Counter 1 Event */ + uint32_t : 18; + } TDMA_IRQ_STAT_ACK_b; + }; + + union + { + __IOM uint32_t TDMA_GPIO; /*!< (@ 0x00003EC4) TDMA GPIO Register */ + + struct + { + __IM uint32_t GPIO_STATUS : 8; /*!< [7..0] Status of the GPIO Output Pins */ + uint32_t : 8; + __IOM uint32_t GPIO_MODE : 16; /*!< [31..16] 2 bits per GPIO pin to configure its operating mode */ + } TDMA_GPIO_b; + }; + __IM uint32_t RESERVED110[14]; + + union + { + __IOM uint32_t RXMATCH_CONFIG[4]; /*!< (@ 0x00003F00) RX Pattern Matcher Configuration for Port [0..3] */ + + struct + { + __IOM uint32_t PATTERN_EN : 12; /*!< [11..0] Enable Patterns on the Port (RX) */ + uint32_t : 20; + } RXMATCH_CONFIG_b[4]; + }; + __IM uint32_t RESERVED111[12]; + + union + { + __IOM uint32_t PATTERN_CTRL[12]; /*!< (@ 0x00003F40) RX Pattern Matcher Function Control for Pattern + * [0..11] */ + + struct + { + __IOM uint32_t MATCH_NOT : 1; /*!< [0..0] When set, a match is reported and the functions of this + * control are executed if the pattern does not match. */ + __IOM uint32_t MGMTFWD : 1; /*!< [1..1] When set, the frame is forwarded to the management port + * only (suppressing destination address lookup). */ + __IOM uint32_t DISCARD : 1; /*!< [2..2] When set, the frame is discarded. */ + __IOM uint32_t SET_PRIO : 1; /*!< [3..3] Set frame priority, overriding normal classification. */ + __IOM uint32_t MODE : 2; /*!< [5..4] Selects the operating mode */ + __IOM uint32_t TIMER_SEL_OVR : 1; /*!< [6..6] Overrides the default timer to use by timestamp operations + * when set to 1, using instead the value in TIMER_SEL. */ + __IOM uint32_t FORCE_FORWARD : 1; /*!< [7..7] When set, the frame is forwarded to the ports indicated + * in PORTMASK, ignoring the result from L2 lookups. */ + __IOM uint32_t HUBTRIGGER : 1; /*!< [8..8] When set, the port defined in the PORTMASK setting is + * allowed for transmitting one frame. */ + __IOM uint32_t MATCH_RED : 1; /*!< [9..9] Enable the pattern matcher only when the TDMA indicates + * that this is the RED period. */ + __IOM uint32_t MATCH_NOT_RED : 1; /*!< [10..10] Enable the pattern matcher only when the TDMA indicates + * that this is not the RED period. */ + __IOM uint32_t VLAN_SKIP : 1; /*!< [11..11] When set to 1, for operating modes 1, 2, and 3. The + * first Length/Type after the MAC source address is compared + * against 0x8100. If it matches, a VLAN tag is assumed and + * 4 bytes are skipped. */ + __IOM uint32_t PRIORITY : 3; /*!< [14..12] Priority of the frame used when SET_PRIO is set. The + * priority is used to forward the frame into the corresponding + * output queue of a port. */ + __IOM uint32_t LEARNING_DIS : 1; /*!< [15..15] When set to 1, the hardware learning function is not + * executed. */ + __IOM uint32_t PORTMASK : 4; /*!< [19..16] A port mask used depending on the control bits (for + * example, HUBTRIGGER). */ + uint32_t : 2; + __IOM uint32_t IMC_TRIGGER : 1; /*!< [22..22] When set, the ports defined in the PORTMASK setting + * are allowed for transmitting one frame from the queues + * indicated by QUEUESEL. The trigger request is sent to the + * integrated memory controller. */ + __IOM uint32_t IMC_TRIGGER_DLY : 1; /*!< [23..23] When set, the ports defined in the PORTMASK setting + * are allowed for transmitting one frame from the queues + * indicated by QUEUESEL. The trigger request is sent to the + * integrated memory controller and the event is delayed by + * the value programmed in MMCTL_DLY_QTRIGGER_CTRL. */ + __IOM uint32_t SWAP_BYTES : 1; /*!< [24..24] Applicable only for operating modes 1, 2, and 3. When + * set to 1, the byte order is swapped from the order received + * by the frame. When set to 0, the first byte received by + * the frame is set into position 0 for comparison. When set + * to 1, the first byte received is set into position 3 (for + * mode 1) or position 2 (for mode 2 and 3) for comparison. */ + __IOM uint32_t MATCH_LT : 1; /*!< [25..25] For operating modes 1, 2, and 3. When set to 1, the + * Length/Type field in the frame after the MAC source address + * is compared against the value in length_type in the compare + * register. If VLAN_SKIP is set and the frame has a VLAN + * tag with Length/Type of 0x8100 then the comparison is performed + * in the Length/Type following the VLAN tag. */ + __IOM uint32_t TIMER_SEL : 1; /*!< [26..26] Override value to use when TIMER_SEL_OVR is set to + * 1 for selecting the timer for this frame. */ + uint32_t : 1; + __IOM uint32_t QUEUESEL : 4; /*!< [31..28] A queue selector for the HUBTRIGGER function. Selects + * the queue to trigger a frame, or sets from 0x8 to 0xF to + * select one among all queues. */ + } PATTERN_CTRL_b[12]; + }; + __IM uint32_t RESERVED112[4]; + + union + { + __IOM uint32_t PATTERN_IRQ_CONTROL; /*!< (@ 0x00003F80) RX Pattern Matcher Interrupt Control Register */ + + struct + { + __IOM uint32_t MATCHINT : 12; /*!< [11..0] Enable Interrupt on Receive Pattern Match */ + uint32_t : 4; + __IOM uint32_t ERROR_INT : 4; /*!< [19..16] Enable Interrupt on Internal Pattern Matcher Error */ + uint32_t : 12; + } PATTERN_IRQ_CONTROL_b; + }; + + union + { + __IOM uint32_t PATTERN_IRQ_STAT_ACK; /*!< (@ 0x00003F84) RX Pattern Matcher Interrupt Status/ACK Register */ + + struct + { + __IOM uint32_t MATCHINT : 12; /*!< [11..0] Interrupt pending indication for the corresponding pattern + * match events (see ). */ + uint32_t : 4; + __IOM uint32_t ERROR_INT : 4; /*!< [19..16] Interrupt pending indication for a pattern matcher + * error, per port. */ + uint32_t : 12; + } PATTERN_IRQ_STAT_ACK_b; + }; + + union + { + __IOM uint32_t PTRN_VLANID; /*!< (@ 0x00003F88) Custom VLAN ID Register */ + + struct + { + __IOM uint32_t PTRN_VLANID : 16; /*!< [15..0] Custom VLAN ID to use. The default VLAN ID 0x8100 is + * always considered by the hardware. This value can be changed + * to detect other VLANs like 0x8808. */ + uint32_t : 16; + } PTRN_VLANID_b; + }; + + union + { + __IOM uint32_t PATTERN_SEL; /*!< (@ 0x00003F8C) RX Pattern Number Selection Register */ + + struct + { + __IOM uint32_t PATTERN_SEL : 4; /*!< [3..0] Define the pattern number which is selected for read/write + * through the PTRN_CMP_* and PTRN_MSK_* registers. */ + uint32_t : 28; + } PATTERN_SEL_b; + }; + __IM uint32_t RESERVED113[12]; + + union + { + __IOM uint32_t PTRN_CMP_30; /*!< (@ 0x00003FC0) Pattern Compare Value Bytes 3 .. 0 */ + + struct + { + __IOM uint32_t PTRN_CMP_30 : 32; /*!< [31..0] Pattern Compare Value Bytes 3 .. 0 */ + } PTRN_CMP_30_b; + }; + + union + { + __IOM uint32_t PTRN_CMP_74; /*!< (@ 0x00003FC4) Pattern Compare Value Bytes 7 .. 4 */ + + struct + { + __IOM uint32_t PTRN_CMP_74 : 32; /*!< [31..0] Pattern Compare Value Bytes 7 .. 4 */ + } PTRN_CMP_74_b; + }; + + union + { + __IOM uint32_t PTRN_CMP_118; /*!< (@ 0x00003FC8) Pattern Compare Value Bytes 11 .. 8 */ + + struct + { + __IOM uint32_t PTRN_CMP_118 : 32; /*!< [31..0] Pattern Compare Value Bytes 11 .. 8 */ + } PTRN_CMP_118_b; + }; + __IM uint32_t RESERVED114; + + union + { + __IOM uint32_t PTRN_MSK_30; /*!< (@ 0x00003FD0) Pattern Mask for Bytes 3 .. 0 */ + + struct + { + __IOM uint32_t PTRN_MSK_30 : 32; /*!< [31..0] PTRN_MSK_30 */ + } PTRN_MSK_30_b; + }; + + union + { + __IOM uint32_t PTRN_MSK_74; /*!< (@ 0x00003FD4) Pattern Mask for Bytes 7 .. 4 */ + + struct + { + __IOM uint32_t PTRN_MSK_74 : 32; /*!< [31..0] PTRN_MSK_74 */ + } PTRN_MSK_74_b; + }; + + union + { + __IOM uint32_t PTRN_MSK_118; /*!< (@ 0x00003FD8) Pattern Mask for Bytes 11 .. 8 */ + + struct + { + __IOM uint32_t PTRN_MSK_118 : 32; /*!< [31..0] PTRN_MSK_118 */ + } PTRN_MSK_118_b; + }; +} R_ETHSW_Type; /*!< Size = 16348 (0x3fdc) */ + +/* =========================================================================================================================== */ +/* ================ R_ESC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief EtherCAT Slave Controller (R_ESC) + */ + +typedef struct /*!< (@ 0x80130000) R_ESC Structure */ +{ + union + { + __IM uint8_t TYPE; /*!< (@ 0x00000000) Type Register */ + + struct + { + __IM uint8_t TYPE : 8; /*!< [7..0] Type of the EtherCAT slave controller */ + } TYPE_b; + }; + + union + { + __IM uint8_t REVISION; /*!< (@ 0x00000001) Revision Register */ + + struct + { + __IM uint8_t REV : 8; /*!< [7..0] Revision of the EtherCAT slave controller */ + } REVISION_b; + }; + + union + { + __IM uint8_t BUILD; /*!< (@ 0x00000002) Build Register */ + + struct + { + __IM uint8_t BUILD : 8; /*!< [7..0] Build number of the EtherCAT slave controller */ + } BUILD_b; + }; + __IM uint8_t RESERVED; + + union + { + __IM uint8_t FMMU_NUM; /*!< (@ 0x00000004) FMMU Supported Register */ + + struct + { + __IM uint8_t NUMFMMU : 8; /*!< [7..0] Number of FMMU channels supported in the EtherCAT slave + * controller */ + } FMMU_NUM_b; + }; + + union + { + __IM uint8_t SYNC_MANAGER; /*!< (@ 0x00000005) SyncManager Supported Register */ + + struct + { + __IM uint8_t NUMSYNC : 8; /*!< [7..0] Number of SyncManager channels supported in the EtherCAT + * slave controller */ + } SYNC_MANAGER_b; + }; + + union + { + __IM uint8_t RAM_SIZE; /*!< (@ 0x00000006) RAM Size Register */ + + struct + { + __IM uint8_t RAMSIZE : 8; /*!< [7..0] Process data RAM size supported in the EtherCAT slave + * controller (unit: KB) */ + } RAM_SIZE_b; + }; + + union + { + __IM uint8_t PORT_DESC; /*!< (@ 0x00000007) Port Descriptor Register */ + + struct + { + __IM uint8_t P0 : 2; /*!< [1..0] Port 0 configuration */ + __IM uint8_t P1 : 2; /*!< [3..2] Port 1 configuration */ + __IM uint8_t P2 : 2; /*!< [5..4] Port 2 configuration */ + __IM uint8_t P3 : 2; /*!< [7..6] Port 3 configuration */ + } PORT_DESC_b; + }; + + union + { + __IM uint16_t FEATURE; /*!< (@ 0x00000008) ESC Features Supported Register */ + + struct + { + __IM uint16_t FMMU : 1; /*!< [0..0] FMMU Operation */ + uint16_t : 1; + __IM uint16_t DC : 1; /*!< [2..2] Distributed Clock */ + __IM uint16_t DCWID : 1; /*!< [3..3] Distributed Clock Width */ + uint16_t : 2; + __IM uint16_t LINKDECMII : 1; /*!< [6..6] Enhanced Link Detection in MII */ + __IM uint16_t FCS : 1; /*!< [7..7] Separate handling of FCS errors */ + __IM uint16_t DCSYNC : 1; /*!< [8..8] Enhanced DC SYNC activation */ + __IM uint16_t LRW : 1; /*!< [9..9] EtherCAT LRW command support */ + __IM uint16_t RWSUPP : 1; /*!< [10..10] EtherCAT read/write command support (BRW, APRW, FPRW) */ + __IM uint16_t FSCONFIG : 1; /*!< [11..11] Fixed FMMU/SyncManager configuration */ + uint16_t : 4; + } FEATURE_b; + }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2; + + union + { + __IM uint16_t STATION_ADR; /*!< (@ 0x00000010) Configured Station Address Register */ + + struct + { + __IM uint16_t NODADDR : 16; /*!< [15..0] Node Addressing Address Indication */ + } STATION_ADR_b; + }; + + union + { + __IOM uint16_t STATION_ALIAS; /*!< (@ 0x00000012) Configured Station Alias Register */ + + struct + { + __IOM uint16_t NODALIADDR : 16; /*!< [15..0] Alias Address Indication */ + } STATION_ALIAS_b; + }; + __IM uint32_t RESERVED3[3]; + + union + { + __IM uint8_t WR_REG_ENABLE; /*!< (@ 0x00000020) Write Register Enable Register */ + + struct + { + __IM uint8_t ENABLE : 1; /*!< [0..0] Register Write Protection Unlock */ + uint8_t : 7; + } WR_REG_ENABLE_b; + }; + + union + { + __IM uint8_t WR_REG_PROTECT; /*!< (@ 0x00000021) Write Register Protection Register */ + + struct + { + __IM uint8_t PROTECT : 1; /*!< [0..0] Register Write Protection Specification */ + uint8_t : 7; + } WR_REG_PROTECT_b; + }; + __IM uint16_t RESERVED4; + __IM uint32_t RESERVED5[3]; + + union + { + __IM uint8_t ESC_WR_ENABLE; /*!< (@ 0x00000030) ESC Write Enable Register */ + + struct + { + __IM uint8_t ENABLE : 1; /*!< [0..0] Register/Memory Write Protection Unlock */ + uint8_t : 7; + } ESC_WR_ENABLE_b; + }; + + union + { + __IM uint8_t ESC_WR_PROTECT; /*!< (@ 0x00000031) ESC Write Protection Register */ + + struct + { + __IM uint8_t PROTECT : 1; /*!< [0..0] Register/Memory Write Protection Specification */ + uint8_t : 7; + } ESC_WR_PROTECT_b; + }; + __IM uint16_t RESERVED6; + __IM uint32_t RESERVED7[3]; + + union + { + union + { + __IM uint8_t ESC_RESET_ECAT_R; /*!< (@ 0x00000040) ESC Reset ECAT Register for read */ + + struct + { + __IM uint8_t RESET_ECAT : 2; /*!< [1..0] Reset Progress Status */ + uint8_t : 6; + } ESC_RESET_ECAT_R_b; + }; + + union + { + __IM uint8_t ESC_RESET_ECAT_W; /*!< (@ 0x00000040) ESC Reset ECAT Register for write */ + + struct + { + __IM uint8_t RESET_ECAT : 8; /*!< [7..0] Software Reset Setting */ + } ESC_RESET_ECAT_W_b; + }; + }; + + union + { + union + { + __IOM uint8_t ESC_RESET_PDI_R; /*!< (@ 0x00000041) ESC Reset PDI Register for read */ + + struct + { + __IOM uint8_t RESET_PDI : 2; /*!< [1..0] Reset Progress Status */ + uint8_t : 6; + } ESC_RESET_PDI_R_b; + }; + + union + { + __IOM uint8_t ESC_RESET_PDI_W; /*!< (@ 0x00000041) ESC Reset PDI Register for write */ + + struct + { + __IOM uint8_t RESET_PDI : 8; /*!< [7..0] Software Reset Setting */ + } ESC_RESET_PDI_W_b; + }; + }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9[47]; + + union + { + __IM uint32_t ESC_DL_CONTROL; /*!< (@ 0x00000100) ESC DL Control Register */ + + struct + { + __IM uint32_t FWDRULE : 1; /*!< [0..0] Forwarding Rule */ + __IM uint32_t TEMPUSE : 1; /*!< [1..1] Temporary Use of Bits 15 to 8 Settings */ + uint32_t : 6; + __IM uint32_t LP0 : 2; /*!< [9..8] Loop Port 0 Configuration */ + __IM uint32_t LP1 : 2; /*!< [11..10] Loop Port 1 Configuration */ + __IM uint32_t LP2 : 2; /*!< [13..12] Loop Port 2 Configuration */ + __IM uint32_t LP3 : 2; /*!< [15..14] Loop Port 3 Configuration */ + __IM uint32_t RXFIFO : 3; /*!< [18..16] RX FIFO Size */ + uint32_t : 5; + __IM uint32_t STAALIAS : 1; /*!< [24..24] Station Alias Status */ + uint32_t : 7; + } ESC_DL_CONTROL_b; + }; + __IM uint32_t RESERVED10; + + union + { + __IM uint16_t PHYSICAL_RW_OFFSET; /*!< (@ 0x00000108) Physical Read/Write Offset Register */ + + struct + { + __IM uint16_t RWOFFSET : 16; /*!< [15..0] Offset between Read and Write Addresses */ + } PHYSICAL_RW_OFFSET_b; + }; + __IM uint16_t RESERVED11; + __IM uint32_t RESERVED12; + + union + { + __IM uint16_t ESC_DL_STATUS; /*!< (@ 0x00000110) ESC DL Status Register */ + + struct + { + __IM uint16_t PDIOPE : 1; /*!< [0..0] PDI/EEPROM Load State Indication */ + __IM uint16_t PDIWDST : 1; /*!< [1..1] PDI Watchdog Timer Status */ + __IM uint16_t ENHLINKD : 1; /*!< [2..2] Enhanced Link Detection Indication */ + uint16_t : 1; + __IM uint16_t PHYP0 : 1; /*!< [4..4] Port 0 Link State Indication */ + __IM uint16_t PHYP1 : 1; /*!< [5..5] Port 1 Link State Indication */ + __IM uint16_t PHYP2 : 1; /*!< [6..6] Port 2 Link State Indication */ + __IM uint16_t PHYP3 : 1; /*!< [7..7] Port 3 Link State Indication */ + __IM uint16_t LP0 : 1; /*!< [8..8] Loop Port 0 State Indication */ + __IM uint16_t COMP0 : 1; /*!< [9..9] Port 0 Communication State Indication */ + __IM uint16_t LP1 : 1; /*!< [10..10] Loop Port 1 State Indication */ + __IM uint16_t COMP1 : 1; /*!< [11..11] Port 1 Communication State Indication */ + __IM uint16_t LP2 : 1; /*!< [12..12] Loop Port 2 State Indication */ + __IM uint16_t COMP2 : 1; /*!< [13..13] Port 2 Communication State Indication */ + __IM uint16_t LP3 : 1; /*!< [14..14] Loop Port 3 State Indication */ + __IM uint16_t COMP3 : 1; /*!< [15..15] Port 3 Communication State Indication */ + } ESC_DL_STATUS_b; + }; + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14[3]; + + union + { + __IM uint16_t AL_CONTROL; /*!< (@ 0x00000120) AL Control Register */ + + struct + { + __IM uint16_t INISTATE : 4; /*!< [3..0] Change the state transition of the device state machine. */ + __IM uint16_t ERRINDACK : 1; /*!< [4..4] Error Indication Acknowledge (Response) */ + __IM uint16_t DEVICEID : 1; /*!< [5..5] Device ID Request */ + uint16_t : 10; + } AL_CONTROL_b; + }; + __IM uint16_t RESERVED15; + __IM uint32_t RESERVED16[3]; + + union + { + __IOM uint16_t AL_STATUS; /*!< (@ 0x00000130) AL Status Register */ + + struct + { + __IOM uint16_t ACTSTATE : 4; /*!< [3..0] State Machine State Indication */ + __IOM uint16_t ERR : 1; /*!< [4..4] Error State Indication */ + __IOM uint16_t DEVICEID : 1; /*!< [5..5] Device ID Load State Indication */ + uint16_t : 10; + } AL_STATUS_b; + }; + __IM uint16_t RESERVED17; + + union + { + __IOM uint16_t AL_STATUS_CODE; /*!< (@ 0x00000134) AL Status Code Register */ + + struct + { + __IOM uint16_t STATUSCODE : 16; /*!< [15..0] AL status code */ + } AL_STATUS_CODE_b; + }; + __IM uint16_t RESERVED18; + + union + { + __IOM uint8_t RUN_LED_OVERRIDE; /*!< (@ 0x00000138) RUN LED Override Register */ + + struct + { + __IOM uint8_t LEDCODE : 4; /*!< [3..0] LED Code Indication (FSM state: Bits [3:0] of the AL + * Status register, AL_STATUS) */ + __IOM uint8_t OVERRIDEEN : 1; /*!< [4..4] Override Setting */ + uint8_t : 3; + } RUN_LED_OVERRIDE_b; + }; + + union + { + __IOM uint8_t ERR_LED_OVERRIDE; /*!< (@ 0x00000139) ERR LED Override Register */ + + struct + { + __IOM uint8_t LEDCODE : 4; /*!< [3..0] LED Code Indication */ + __IOM uint8_t OVERRIDEEN : 1; /*!< [4..4] Override Setting */ + uint8_t : 3; + } ERR_LED_OVERRIDE_b; + }; + __IM uint16_t RESERVED19; + __IM uint32_t RESERVED20; + + union + { + __IM uint8_t PDI_CONTROL; /*!< (@ 0x00000140) PDI Control Register */ + + struct + { + __IM uint8_t PDI : 8; /*!< [7..0] Process Data Interface. In this LSI, the following value + * is indicated. */ + } PDI_CONTROL_b; + }; + + union + { + __IM uint8_t ESC_CONFIG; /*!< (@ 0x00000141) ESC Configuration Register */ + + struct + { + __IM uint8_t DEVEMU : 1; /*!< [0..0] Device emulation (control of AL status) */ + __IM uint8_t ENLALLP : 1; /*!< [1..1] Sets enhanced link detection for all ports */ + __IM uint8_t DCSYNC : 1; /*!< [2..2] Sets the SYNC output unit for distributed clocks (fixed + * to 1 in this LSI) */ + __IM uint8_t DCLATCH : 1; /*!< [3..3] Sets the latch input unit for distributed clocks */ + __IM uint8_t ENLP0 : 1; /*!< [4..4] Port 0 Enhanced Link Detection Setting */ + __IM uint8_t ENLP1 : 1; /*!< [5..5] Port 1 Enhanced Link Detection Setting */ + __IM uint8_t ENLP2 : 1; /*!< [6..6] Port 2 Enhanced Link Detection Setting */ + __IM uint8_t ENLP3 : 1; /*!< [7..7] Port 3 Enhanced Link Detection Setting */ + } ESC_CONFIG_b; + }; + __IM uint16_t RESERVED21; + __IM uint32_t RESERVED22[3]; + + union + { + __IM uint8_t PDI_CONFIG; /*!< (@ 0x00000150) PDI Configuration Register */ + + struct + { + __IM uint8_t ONCHIPBUSCLK : 5; /*!< [4..0] On-Chip Bus Clock Indication */ + __IM uint8_t ONCHIPBUS : 3; /*!< [7..5] On-Chip Bus Type Indication */ + } PDI_CONFIG_b; + }; + + union + { + __IM uint8_t SYNC_LATCH_CONFIG; /*!< (@ 0x00000151) SYNC/LATCH PDI Configuration Register */ + + struct + { + __IM uint8_t SYNC0OUT : 2; /*!< [1..0] SYNC0 Output Driver and Polarity Indication */ + __IM uint8_t SYNCLAT0 : 1; /*!< [2..2] SYNC0/LATCH0 Indication */ + __IM uint8_t SYNC0MAP : 1; /*!< [3..3] SYNC0 State Mapping Indication */ + __IM uint8_t SYNC1OUT : 2; /*!< [5..4] SYNC1 Output Driver and Polarity Indication */ + __IM uint8_t SYNCLAT1 : 1; /*!< [6..6] SYNC1/LATCH1 Indication */ + __IM uint8_t SYNC1MAP : 1; /*!< [7..7] SYNC1 State Mapping Indication */ + } SYNC_LATCH_CONFIG_b; + }; + + union + { + __IM uint16_t EXT_PDI_CONFIG; /*!< (@ 0x00000152) Extended PDI Configuration Register */ + + struct + { + __IM uint16_t DATABUSWID : 2; /*!< [1..0] PDI Data Bus Width Indication */ + uint16_t : 14; + } EXT_PDI_CONFIG_b; + }; + __IM uint32_t RESERVED23[43]; + + union + { + __IM uint16_t ECAT_EVENT_MASK; /*!< (@ 0x00000200) ECAT Event Mask Register */ + + struct + { + __IM uint16_t ECATEVMASK : 16; /*!< [15..0] Event Request Mask Setting */ + } ECAT_EVENT_MASK_b; + }; + __IM uint16_t RESERVED24; + + union + { + __IOM uint32_t AL_EVENT_MASK; /*!< (@ 0x00000204) AL Event Mask Register */ + + struct + { + __IOM uint32_t ALEVMASK : 32; /*!< [31..0] Event Request Mask Setting */ + } AL_EVENT_MASK_b; + }; + __IM uint32_t RESERVED25[2]; + + union + { + __IM uint16_t ECAT_EVENT_REQ; /*!< (@ 0x00000210) ECAT Event Request Register */ + + struct + { + __IM uint16_t DCLATCH : 1; /*!< [0..0] DC Latch Event State Indication */ + uint16_t : 1; + __IM uint16_t DLSTA : 1; /*!< [2..2] DL Status Event State Indication */ + __IM uint16_t ALSTA : 1; /*!< [3..3] AL Status Event State Indication */ + __IM uint16_t SMSTA0 : 1; /*!< [4..4] Mirror value of SyncManager 0 Status Indication */ + __IM uint16_t SMSTA1 : 1; /*!< [5..5] Mirror value of SyncManager 1 Status Indication */ + __IM uint16_t SMSTA2 : 1; /*!< [6..6] Mirror value of SyncManager 2 Status Indication */ + __IM uint16_t SMSTA3 : 1; /*!< [7..7] Mirror value of SyncManager 3 Status Indication */ + __IM uint16_t SMSTA4 : 1; /*!< [8..8] Mirror value of SyncManager 4 Status Indication */ + __IM uint16_t SMSTA5 : 1; /*!< [9..9] Mirror value of SyncManager 5 Status Indication */ + __IM uint16_t SMSTA6 : 1; /*!< [10..10] Mirror value of SyncManager 6 Status Indication */ + __IM uint16_t SMSTA7 : 1; /*!< [11..11] Mirror value of SyncManager 7 Status Indication */ + uint16_t : 4; + } ECAT_EVENT_REQ_b; + }; + __IM uint16_t RESERVED26; + __IM uint32_t RESERVED27[3]; + + union + { + __IM uint32_t AL_EVENT_REQ; /*!< (@ 0x00000220) AL Event Request Register */ + + struct + { + __IM uint32_t ALCTRL : 1; /*!< [0..0] AL Control Event State Indication */ + __IM uint32_t DCLATCH : 1; /*!< [1..1] DC Latch Event State Indication */ + __IM uint32_t DCSYNC0STA : 1; /*!< [2..2] DC SYNC0 State Indication */ + __IM uint32_t DCSYNC1STA : 1; /*!< [3..3] DC SYNC1 State Indication */ + __IM uint32_t SYNCACT : 1; /*!< [4..4] SyncManager Activation Indication */ + uint32_t : 1; + __IM uint32_t WDPD : 1; /*!< [6..6] Watchdog Process Data Indication */ + uint32_t : 1; + __IM uint32_t SMINT0 : 1; /*!< [8..8] SyncManager 0 interrupt (bit 0 or 1 of the SyncManager + * status register (0x0805)) */ + __IM uint32_t SMINT1 : 1; /*!< [9..9] SyncManager 1 interrupt (bit 0 or 1 of the SyncManager + * status register (0x080D)) */ + __IM uint32_t SMINT2 : 1; /*!< [10..10] SyncManager 2 interrupt (bit 0 or 1 of the SyncManager + * status register (0x0815)) */ + __IM uint32_t SMINT3 : 1; /*!< [11..11] SyncManager 3 interrupt (bit 0 or 1 of the SyncManager + * status register (0x081D)) */ + __IM uint32_t SMINT4 : 1; /*!< [12..12] SyncManager 4 interrupt (bit 0 or 1 of the SyncManager + * status register (0x0825)) */ + __IM uint32_t SMINT5 : 1; /*!< [13..13] SyncManager 5 interrupt (bit 0 or 1 of the SyncManager + * status register (0x082D)) */ + __IM uint32_t SMINT6 : 1; /*!< [14..14] SyncManager 6 interrupt (bit 0 or 1 of the SyncManager + * status register (0x0835)) */ + __IM uint32_t SMINT7 : 1; /*!< [15..15] SyncManager 7 interrupt (bit 0 or 1 of the SyncManager + * status register (0x083D)) */ + uint32_t : 16; + } AL_EVENT_REQ_b; + }; + __IM uint32_t RESERVED28[55]; + + union + { + __IM uint16_t RX_ERR_COUNT[3]; /*!< (@ 0x00000300) RX Error Counter [0..2] Register (n = 0 to 2) */ + + struct + { + __IM uint16_t INVFRMCNT : 8; /*!< [7..0] Invalid Frame Counter Value Indication */ + __IM uint16_t RXERRCNT : 8; /*!< [15..8] RX Frame Error Counter Value Indication */ + } RX_ERR_COUNT_b[3]; + }; + __IM uint16_t RESERVED29; + + union + { + __IM uint8_t FWD_RX_ERR_COUNT[3]; /*!< (@ 0x00000308) Forwarded RX Error Counter [0..2] Register (n + * = 0 to 2) */ + + struct + { + __IM uint8_t FWDERRCNT : 8; /*!< [7..0] Forwarded Error Counter Value Indication */ + } FWD_RX_ERR_COUNT_b[3]; + }; + __IM uint8_t RESERVED30; + + union + { + __IM uint8_t ECAT_PROC_ERR_COUNT; /*!< (@ 0x0000030C) ECAT Processing Unit Error Counter Register */ + + struct + { + __IM uint8_t EPUERRCNT : 8; /*!< [7..0] Processing Unit Error Counter Value Indication */ + } ECAT_PROC_ERR_COUNT_b; + }; + + union + { + __IM uint8_t PDI_ERR_COUNT; /*!< (@ 0x0000030D) PDI Error Counter Register */ + + struct + { + __IM uint8_t PDIERRCNT : 8; /*!< [7..0] PDI Error Counter Value Indication */ + } PDI_ERR_COUNT_b; + }; + __IM uint16_t RESERVED31; + + union + { + __IM uint8_t LOST_LINK_COUNT[3]; /*!< (@ 0x00000310) Lost Link Counter [0..2] Register (n = 0 to 2) */ + + struct + { + __IM uint8_t LOSTLINKCNT : 8; /*!< [7..0] Lost Link Counter Value Indication */ + } LOST_LINK_COUNT_b[3]; + }; + __IM uint8_t RESERVED32; + __IM uint32_t RESERVED33[59]; + + union + { + __IM uint16_t WD_DIVIDE; /*!< (@ 0x00000400) Watchdog Divider Register */ + + struct + { + __IM uint16_t WDDIV : 16; /*!< [15..0] Watchdog Clock Frequency Divisor Setting */ + } WD_DIVIDE_b; + }; + __IM uint16_t RESERVED34; + __IM uint32_t RESERVED35[3]; + + union + { + __IM uint16_t WDT_PDI; /*!< (@ 0x00000410) Watchdog Time PDI Register */ + + struct + { + __IM uint16_t WDTIMPDI : 16; /*!< [15..0] Watchdog Overflow Time Setting */ + } WDT_PDI_b; + }; + __IM uint16_t RESERVED36; + __IM uint32_t RESERVED37[3]; + + union + { + __IM uint16_t WDT_DATA; /*!< (@ 0x00000420) Watchdog Time Process Data Register */ + + struct + { + __IM uint16_t WDTIMPD : 16; /*!< [15..0] Watchdog Overflow Time Setting */ + } WDT_DATA_b; + }; + __IM uint16_t RESERVED38; + __IM uint32_t RESERVED39[7]; + + union + { + __IM uint16_t WDS_DATA; /*!< (@ 0x00000440) Watchdog Status Process Data Register */ + + struct + { + __IM uint16_t WDSTAPD : 1; /*!< [0..0] Watchdog State Indication */ + uint16_t : 15; + } WDS_DATA_b; + }; + + union + { + __IM uint8_t WDC_DATA; /*!< (@ 0x00000442) Watchdog Counter Process Data Register */ + + struct + { + __IM uint8_t WDCNTPD : 8; /*!< [7..0] Watchdog Counter Value Indication */ + } WDC_DATA_b; + }; + + union + { + __IM uint8_t WDC_PDI; /*!< (@ 0x00000443) Watchdog Counter PDI Register */ + + struct + { + __IM uint8_t WDCNTPDI : 8; /*!< [7..0] Watchdog Counter Value Indication */ + } WDC_PDI_b; + }; + __IM uint32_t RESERVED40[47]; + + union + { + __IM uint8_t EEP_CONF; /*!< (@ 0x00000500) EEPROM Configuration Register */ + + struct + { + __IM uint8_t CTRLPDI : 1; /*!< [0..0] PDI EEPROM Control */ + __IM uint8_t FORCEECAT : 1; /*!< [1..1] EEPROM Access Right Change */ + uint8_t : 6; + } EEP_CONF_b; + }; + + union + { + __IOM uint8_t EEP_STATE; /*!< (@ 0x00000501) EEPROM PDI Access State Register */ + + struct + { + __IOM uint8_t PDIACCESS : 1; /*!< [0..0] EEPROM Access Right Setting */ + uint8_t : 7; + } EEP_STATE_b; + }; + + union + { + __IOM uint16_t EEP_CONT_STAT; /*!< (@ 0x00000502) EEPROM Control/Status Register */ + + struct + { + __IM uint16_t ECATWREN : 1; /*!< [0..0] ECAT Write Enable */ + uint16_t : 5; + __IM uint16_t READBYTE : 1; /*!< [6..6] EEPROM Read Byte Indication */ + __IM uint16_t PROMSIZE : 1; /*!< [7..7] EEPROM Algorithm Indication */ + __IOM uint16_t COMMAND : 3; /*!< [10..8] Command */ + __IM uint16_t CKSUMERR : 1; /*!< [11..11] Checksum Error Indication */ + __IM uint16_t LOADSTA : 1; /*!< [12..12] EEPROM Loading Status Indication */ + __IM uint16_t ACKCMDERR : 1; /*!< [13..13] Acknowledge/Command Error Indication */ + __IM uint16_t WRENERR : 1; /*!< [14..14] Write Enable Error Indication */ + __IM uint16_t BUSY : 1; /*!< [15..15] EEPROM Interface State Indication */ + } EEP_CONT_STAT_b; + }; + + union + { + __IOM uint32_t EEP_ADR; /*!< (@ 0x00000504) EEPROM Address Register */ + + struct + { + __IOM uint32_t ADDRESS : 32; /*!< [31..0] EEPROM Address Setting */ + } EEP_ADR_b; + }; + + union + { + __IOM uint32_t EEP_DATA; /*!< (@ 0x00000508) EEPROM Data Register */ + + struct + { + __IOM uint32_t LODATA : 16; /*!< [15..0] Data to be written to the EEPROM or data read from the + * EEPROM (lower 2 bytes) */ + __IM uint32_t HIDATA : 16; /*!< [31..16] Data read from the EEPROM (upper 2 bytes) */ + } EEP_DATA_b; + }; + __IM uint32_t RESERVED41; + + union + { + __IOM uint16_t MII_CONT_STAT; /*!< (@ 0x00000510) MII Management Control/Status Register */ + + struct + { + __IM uint16_t WREN : 1; /*!< [0..0] Write Enable */ + __IM uint16_t PDICTRL : 1; /*!< [1..1] PDI Control Indication */ + __IM uint16_t MILINK : 1; /*!< [2..2] MI Link Detection */ + __IM uint16_t PHYOFFSET : 5; /*!< [7..3] PHY Address Offset Indication */ + __IOM uint16_t COMMAND : 2; /*!< [9..8] Command */ + uint16_t : 3; + __IOM uint16_t READERR : 1; /*!< [13..13] Read Error Indication */ + __IM uint16_t CMDERR : 1; /*!< [14..14] Command Error Indication */ + __IM uint16_t BUSY : 1; /*!< [15..15] MII Management State Indication */ + } MII_CONT_STAT_b; + }; + + union + { + __IOM uint8_t PHY_ADR; /*!< (@ 0x00000512) PHY Address Register */ + + struct + { + __IOM uint8_t PHYADDR : 5; /*!< [4..0] PHY Address Setting */ + uint8_t : 3; + } PHY_ADR_b; + }; + + union + { + __IOM uint8_t PHY_REG_ADR; /*!< (@ 0x00000513) PHY Register Address Register */ + + struct + { + __IOM uint8_t PHYREGADDR : 5; /*!< [4..0] Address of PHY register */ + uint8_t : 3; + } PHY_REG_ADR_b; + }; + + union + { + __IOM uint16_t PHY_DATA; /*!< (@ 0x00000514) PHY Data Register */ + + struct + { + __IOM uint16_t PHYREGDATA : 16; /*!< [15..0] PHY Register Data Indication/Setting */ + } PHY_DATA_b; + }; + + union + { + __IM uint8_t MII_ECAT_ACS_STAT; /*!< (@ 0x00000516) MII Management ECAT Access State Register */ + + struct + { + __IM uint8_t ACSMII : 1; /*!< [0..0] MII Management Interface Access Right Setting */ + uint8_t : 7; + } MII_ECAT_ACS_STAT_b; + }; + + union + { + __IOM uint8_t MII_PDI_ACS_STAT; /*!< (@ 0x00000517) MII Management PDI Access State Register */ + + struct + { + __IOM uint8_t ACSMII : 1; /*!< [0..0] Right of access to the MII management interface */ + __IM uint8_t FORPDI : 1; /*!< [1..1] Forced change of access by the PDI (forced change of + * bit 0) */ + uint8_t : 6; + } MII_PDI_ACS_STAT_b; + }; + __IM uint32_t RESERVED42[58]; + __IOM R_ESC_FMMU_Type FMMU[8]; /*!< (@ 0x00000600) FMMU [0..7] Registers (n = 0 to 7) */ + __IM uint32_t RESERVED43[96]; + __IOM R_ESC_SM_Type SM[8]; /*!< (@ 0x00000800) SyncManager [0..7] Registers (n = 0 to 7) */ + __IM uint32_t RESERVED44[48]; + + union + { + __IM uint32_t DC_RCV_TIME_PORT[3]; /*!< (@ 0x00000900) Receive Time Port [0..2] Register */ + + struct + { + __IM uint32_t RCVTIME0 : 32; /*!< [31..0] Receive Time Indication/Latch */ + } DC_RCV_TIME_PORT_b[3]; + }; + __IM uint32_t RESERVED45; + __IM uint32_t DC_SYS_TIME_L; /*!< (@ 0x00000910) System Time Register L */ + __IM uint32_t DC_SYS_TIME_H; /*!< (@ 0x00000914) System Time Register H */ + __IM uint32_t DC_RCV_TIME_UNIT_L; /*!< (@ 0x00000918) Receive Time ECAT Processing Unit Register L */ + __IM uint32_t DC_RCV_TIME_UNIT_H; /*!< (@ 0x0000091C) Receive Time ECAT Processing Unit Register H */ + __IM uint32_t DC_SYS_TIME_OFFSET_L; /*!< (@ 0x00000920) System Time Offset Register L */ + __IM uint32_t DC_SYS_TIME_OFFSET_H; /*!< (@ 0x00000924) System Time Offset Register H */ + + union + { + __IM uint32_t DC_SYS_TIME_DELAY; /*!< (@ 0x00000928) System Time Delay Register */ + + struct + { + __IM uint32_t SYSTIMDLY : 32; /*!< [31..0] Propagation Delay Indication */ + } DC_SYS_TIME_DELAY_b; + }; + + union + { + __IM uint32_t DC_SYS_TIME_DIFF; /*!< (@ 0x0000092C) System Time Difference Register */ + + struct + { + __IM uint32_t DIFF : 31; /*!< [30..0] System Time Mean Difference Indication */ + __IM uint32_t LCP : 1; /*!< [31..31] System Time Greater/Less Indication */ + } DC_SYS_TIME_DIFF_b; + }; + + union + { + __IM uint16_t DC_SPEED_COUNT_START; /*!< (@ 0x00000930) Speed Counter Start Register */ + + struct + { + __IM uint16_t SPDCNTSTRT : 15; /*!< [14..0] Drift Correction Bandwidth Setting */ + uint16_t : 1; + } DC_SPEED_COUNT_START_b; + }; + + union + { + __IM uint16_t DC_SPEED_COUNT_DIFF; /*!< (@ 0x00000932) Speed Counter Difference Register */ + + struct + { + __IM uint16_t SPDCNTDIFF : 16; /*!< [15..0] Clock Period Deviation Indication */ + } DC_SPEED_COUNT_DIFF_b; + }; + + union + { + __IM uint8_t DC_SYS_TIME_DIFF_FIL_DEPTH; /*!< (@ 0x00000934) System Time Difference Filter Depth Register */ + + struct + { + __IM uint8_t SYSTIMDEP : 4; /*!< [3..0] Filter Depth Setting */ + uint8_t : 4; + } DC_SYS_TIME_DIFF_FIL_DEPTH_b; + }; + + union + { + __IM uint8_t DC_SPEED_COUNT_FIL_DEPTH; /*!< (@ 0x00000935) Speed Counter Filter Depth Register */ + + struct + { + __IM uint8_t CLKPERDEP : 4; /*!< [3..0] Filter Depth Setting */ + uint8_t : 4; + } DC_SPEED_COUNT_FIL_DEPTH_b; + }; + __IM uint16_t RESERVED46; + __IM uint32_t RESERVED47[18]; + + union + { + __IM uint8_t DC_CYC_CONT; /*!< (@ 0x00000980) Cyclic Unit Control Register */ + + struct + { + __IM uint8_t SYNCOUT : 1; /*!< [0..0] SYNC Output Unit Control Setting */ + uint8_t : 3; + __IM uint8_t LATCH0 : 1; /*!< [4..4] Latch Input Unit 0 Control Setting */ + __IM uint8_t LATCH1 : 1; /*!< [5..5] Latch Input Unit 1 Control Setting */ + uint8_t : 2; + } DC_CYC_CONT_b; + }; + + union + { + __IOM uint8_t DC_ACT; /*!< (@ 0x00000981) Activation Register */ + + struct + { + __IOM uint8_t SYNCACT : 1; /*!< [0..0] Sync Output Unit Activation */ + __IOM uint8_t SYNC0 : 1; /*!< [1..1] SYNC0 Output Setting */ + __IOM uint8_t SYNC1 : 1; /*!< [2..2] SYNC1 Output Setting */ + __IOM uint8_t AUTOACT : 1; /*!< [3..3] SYNC Output Unit Activation */ + __IOM uint8_t EXTSTARTTIME : 1; /*!< [4..4] Start Time Cyclic Operation Extension */ + __IOM uint8_t STARTTIME : 1; /*!< [5..5] Start Time Plausibility */ + __IOM uint8_t NEARFUTURE : 1; /*!< [6..6] Near Future Range Setting */ + __IOM uint8_t DBGPULSE : 1; /*!< [7..7] Debug Pulse Setting */ + } DC_ACT_b; + }; + + union + { + __IM uint16_t DC_PULSE_LEN; /*!< (@ 0x00000982) SYNC Signal Pulse Length Register */ + + struct + { + __IM uint16_t PULSELEN : 16; /*!< [15..0] SYNC Signal Pulse Length Indication */ + } DC_PULSE_LEN_b; + }; + + union + { + __IM uint8_t DC_ACT_STAT; /*!< (@ 0x00000984) Activation Status Register */ + + struct + { + __IM uint8_t SYNC0ACT : 1; /*!< [0..0] SYNC0 Status Indication */ + __IM uint8_t SYNC1ACT : 1; /*!< [1..1] SYNC1 Status Indication */ + __IM uint8_t STARTTIME : 1; /*!< [2..2] Plausibility Result Indication */ + uint8_t : 5; + } DC_ACT_STAT_b; + }; + __IM uint8_t RESERVED48; + __IM uint16_t RESERVED49; + __IM uint32_t RESERVED50; + __IM uint16_t RESERVED51; + + union + { + __IM uint8_t DC_SYNC0_STAT; /*!< (@ 0x0000098E) SYNC0 Status Register */ + + struct + { + __IM uint8_t SYNC0STA : 1; /*!< [0..0] SYNC0 State Indication */ + uint8_t : 7; + } DC_SYNC0_STAT_b; + }; + + union + { + __IM uint8_t DC_SYNC1_STAT; /*!< (@ 0x0000098F) SYNC1 Status Register */ + + struct + { + __IM uint8_t SYNC1STA : 1; /*!< [0..0] SYNC1 State Indication */ + uint8_t : 7; + } DC_SYNC1_STAT_b; + }; + __IOM uint32_t DC_CYC_START_TIME_L; /*!< (@ 0x00000990) Start Time Cyclic Operation/Next SYNC0 Pulse + * Register L */ + __IOM uint32_t DC_CYC_START_TIME_H; /*!< (@ 0x00000994) Start Time Cyclic Operation/Next SYNC0 Pulse + * Register H */ + __IM uint32_t DC_NEXT_SYNC1_PULSE_L; /*!< (@ 0x00000998) Next SYNC1 Pulse Register L */ + __IM uint32_t DC_NEXT_SYNC1_PULSE_H; /*!< (@ 0x0000099C) Next SYNC1 Pulse Register H */ + + union + { + __IOM uint32_t DC_SYNC0_CYC_TIME; /*!< (@ 0x000009A0) SYNC0 Cycle Time Register */ + + struct + { + __IOM uint32_t SYNC0CYC : 32; /*!< [31..0] Time Between Consecutive SYNC0 Pulses */ + } DC_SYNC0_CYC_TIME_b; + }; + + union + { + __IOM uint32_t DC_SYNC1_CYC_TIME; /*!< (@ 0x000009A4) SYNC1 Cycle Time Register */ + + struct + { + __IOM uint32_t SYNC1CYC : 32; /*!< [31..0] Time between SYNC1 and SYNC0 Pulses */ + } DC_SYNC1_CYC_TIME_b; + }; + + union + { + __IOM uint8_t DC_LATCH0_CONT; /*!< (@ 0x000009A8) Latch 0 Control Register */ + + struct + { + __IOM uint8_t POSEDGE : 1; /*!< [0..0] Latch 0 Positive Edge Function Setting */ + __IOM uint8_t NEGEDGE : 1; /*!< [1..1] Latch 0 Negative Edge Function Setting */ + uint8_t : 6; + } DC_LATCH0_CONT_b; + }; + + union + { + __IOM uint8_t DC_LATCH1_CONT; /*!< (@ 0x000009A9) Latch 1 Control Register */ + + struct + { + __IOM uint8_t POSEDGE : 1; /*!< [0..0] Latch 1 Positive Edge Function Setting */ + __IOM uint8_t NEGEDGE : 1; /*!< [1..1] Latch 1 Negative Edge Function Setting */ + uint8_t : 6; + } DC_LATCH1_CONT_b; + }; + __IM uint16_t RESERVED52[2]; + + union + { + __IM uint8_t DC_LATCH0_STAT; /*!< (@ 0x000009AE) Latch 0 Status Register */ + + struct + { + __IM uint8_t EVENTPOS : 1; /*!< [0..0] Latch 0 Positive Edge Event Indication */ + __IM uint8_t EVENTNEG : 1; /*!< [1..1] Latch 0 Negative Edge Event Indication */ + __IM uint8_t PINSTATE : 1; /*!< [2..2] Latch 0 Input Pin State Indication */ + uint8_t : 5; + } DC_LATCH0_STAT_b; + }; + + union + { + __IM uint8_t DC_LATCH1_STAT; /*!< (@ 0x000009AF) Latch 1 Status Register */ + + struct + { + __IM uint8_t EVENTPOS : 1; /*!< [0..0] Latch 1 Positive Edge Event Indication */ + __IM uint8_t EVENTNEG : 1; /*!< [1..1] Latch 1 Negative Edge Event Indication */ + __IM uint8_t PINSTATE : 1; /*!< [2..2] Latch 1 Input Pin State Indication */ + uint8_t : 5; + } DC_LATCH1_STAT_b; + }; + __IM uint32_t DC_LATCH0_TIME_POS_L; /*!< (@ 0x000009B0) Latch 0 Time Positive Edge Register L */ + __IM uint32_t DC_LATCH0_TIME_POS_H; /*!< (@ 0x000009B4) Latch 0 Time Positive Edge Register H */ + __IM uint32_t DC_LATCH0_TIME_NEG_L; /*!< (@ 0x000009B8) Latch 0 Time Negative Edge Register L */ + __IM uint32_t DC_LATCH0_TIME_NEG_H; /*!< (@ 0x000009BC) Latch 0 Time Negative Edge Register H */ + __IM uint32_t DC_LATCH1_TIME_POS_L; /*!< (@ 0x000009C0) Latch 1 Time Positive Edge Register L */ + __IM uint32_t DC_LATCH1_TIME_POS_H; /*!< (@ 0x000009C4) Latch 1 Time Positive Edge Register H */ + __IM uint32_t DC_LATCH1_TIME_NEG_L; /*!< (@ 0x000009C8) Latch 1 Time Negative Edge Register L */ + __IM uint32_t DC_LATCH1_TIME_NEG_H; /*!< (@ 0x000009CC) Latch 1 Time Negative Edge Register H */ + __IM uint32_t RESERVED53[8]; + + union + { + __IM uint32_t DC_ECAT_CNG_EV_TIME; /*!< (@ 0x000009F0) Buffer Change Event Time Register */ + + struct + { + __IM uint32_t ECATCHANGE : 32; /*!< [31..0] Local Time Indication */ + } DC_ECAT_CNG_EV_TIME_b; + }; + __IM uint32_t RESERVED54; + + union + { + __IM uint32_t DC_PDI_START_EV_TIME; /*!< (@ 0x000009F8) PDI Buffer Start Event Time Register */ + + struct + { + __IM uint32_t PDISTART : 32; /*!< [31..0] Local Time Indication */ + } DC_PDI_START_EV_TIME_b; + }; + + union + { + __IM uint32_t DC_PDI_CNG_EV_TIME; /*!< (@ 0x000009FC) PDI Buffer Change Event Time Register */ + + struct + { + __IM uint32_t PDICHANGE : 32; /*!< [31..0] Local Time Indication */ + } DC_PDI_CNG_EV_TIME_b; + }; + __IM uint32_t RESERVED55[256]; + __IM uint32_t PRODUCT_ID_L; /*!< (@ 0x00000E00) Product ID Register L */ + __IM uint32_t PRODUCT_ID_H; /*!< (@ 0x00000E04) Product ID Register H */ + + union + { + __IM uint32_t VENDOR_ID_L; /*!< (@ 0x00000E08) Vendor ID Register L */ + + struct + { + __IM uint32_t VENDORID : 32; /*!< [31..0] Vendor ID Indication */ + } VENDOR_ID_L_b; + }; +} R_ESC_Type; /*!< Size = 3596 (0xe0c) */ + +/* =========================================================================================================================== */ +/* ================ R_USBHC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief USB 2.0 HS Host Module (R_USBHC) + */ + +typedef struct /*!< (@ 0x80200000) R_USBHC Structure */ +{ + union + { + __IM uint32_t HCREVISION; /*!< (@ 0x00000000) HcRevision Register */ + + struct + { + __IM uint32_t REV : 8; /*!< [7..0] HCI revision */ + uint32_t : 24; + } HCREVISION_b; + }; + + union + { + __IOM uint32_t HCCONTROL; /*!< (@ 0x00000004) HcControl Register */ + + struct + { + __IOM uint32_t CBSR : 2; /*!< [1..0] Control/bulk transfer service ratio (ControlBulkServiceRatio) */ + __IOM uint32_t PLE : 1; /*!< [2..2] Periodic list setting (PeriodicListEnable) */ + __IOM uint32_t IE : 1; /*!< [3..3] Isochronous ED processing setting (IsochronousEnable) */ + __IOM uint32_t CLE : 1; /*!< [4..4] Control list processing setting (ControlListEnable) */ + __IOM uint32_t BLE : 1; /*!< [5..5] Bulk list processing setting (BulkListEnable) */ + __IOM uint32_t HCFS : 2; /*!< [7..6] Host logic operation status (Host Controller FunctionalState) */ + __IOM uint32_t IR : 1; /*!< [8..8] HcInterruptStatus interrupt path setting (InterruptRouting) */ + __IOM uint32_t RWC : 1; /*!< [9..9] Remote Wakeup support setting (RemoteWakeUpConnect) */ + __IOM uint32_t RWE : 1; /*!< [10..10] PME assertion control (RemoteWakeUpEnable) */ + uint32_t : 21; + } HCCONTROL_b; + }; + + union + { + __IOM uint32_t HCCOMMANDSTATUS; /*!< (@ 0x00000008) HcCommandStatus Register */ + + struct + { + __OM uint32_t HCR : 1; /*!< [0..0] Host logic software reset start (HostController Reset) */ + __IOM uint32_t CLF : 1; /*!< [1..1] Control list TD (ControlList Filled) */ + __IOM uint32_t BLF : 1; /*!< [2..2] Bulk list TD (BulkListFilled) */ + __OM uint32_t OCR : 1; /*!< [3..3] Host logic control right change (OwnershipChangeRequest) */ + uint32_t : 12; + __IM uint32_t SOC : 2; /*!< [17..16] Schedule overrun count (Scheduling OverrunCount) */ + uint32_t : 14; + } HCCOMMANDSTATUS_b; + }; + + union + { + __IOM uint32_t HCINTERRUPTSTATUS; /*!< (@ 0x0000000C) HcInterruptStatus Register */ + + struct + { + __IOM uint32_t SO : 1; /*!< [0..0] USB schedule overrun (Scheduling Overrun) */ + __IOM uint32_t WDH : 1; /*!< [1..1] Host logic HccaDoneHead update (Writeback Done Head) */ + __IOM uint32_t SF : 1; /*!< [2..2] HccaFrameNumber update (StartOfFrame) */ + __IOM uint32_t RD : 1; /*!< [3..3] Resume detection (Resume Detected) */ + __IOM uint32_t UE : 1; /*!< [4..4] USB non-related system error detection (Unrecoverable + * Error) */ + __IOM uint32_t FNO : 1; /*!< [5..5] FrameNumber bit MSB change (Frame Number Overflow) */ + __IOM uint32_t RHSC : 1; /*!< [6..6] HcRhStatus/HcRhPortStatus register status (RootHubStatus + * Change) */ + uint32_t : 23; + __IOM uint32_t OC : 1; /*!< [30..30] Host logic control right change (OwnershipChange) */ + uint32_t : 1; + } HCINTERRUPTSTATUS_b; + }; + + union + { + __IOM uint32_t HCINTERRUPTENABLE; /*!< (@ 0x00000010) HcInterruptEnable Register */ + + struct + { + __IOM uint32_t SOE : 1; /*!< [0..0] SO interrupt source enable (Scheduling OverrunEnable) */ + __IOM uint32_t WDHE : 1; /*!< [1..1] WDH interrupt source enable (WritebackDone HeadEnable) */ + __IOM uint32_t SFE : 1; /*!< [2..2] SF interrupt source enable (StartOfFrame) */ + __IOM uint32_t RDE : 1; /*!< [3..3] RD interrupt source enable (Resume DetectedEnable) */ + __IOM uint32_t UEE : 1; /*!< [4..4] UE interrupt source enable (Unrecoverable ErrorEnable) */ + __IOM uint32_t FNOE : 1; /*!< [5..5] FNO interrupt source enable (FrameNumber OverflowEnable) */ + __IOM uint32_t RHSCE : 1; /*!< [6..6] RHSC interrupt source enable (RootHubStatus ChangeEnable) */ + uint32_t : 23; + __IOM uint32_t OCE : 1; /*!< [30..30] OC interrupt source enable (OwnershipChangeEnable) */ + __IOM uint32_t MIE : 1; /*!< [31..31] Interrupt 8 source enable (MasterInterrupt Enable) */ + } HCINTERRUPTENABLE_b; + }; + + union + { + __IOM uint32_t HCINTERRUPTDISABLE; /*!< (@ 0x00000014) HcInterruptDisable Register */ + + struct + { + __IOM uint32_t SOD : 1; /*!< [0..0] SO interrupt source disable (Scheduling Overrun Disable) */ + __IOM uint32_t WDHD : 1; /*!< [1..1] WDH interrupt source disable (Writeback DoneHead Disable) */ + __IOM uint32_t SFD : 1; /*!< [2..2] SF interrupt source disable (StartOfFrame Disable) */ + __IOM uint32_t RDD : 1; /*!< [3..3] RD interrupt source disable (Resume Detected Disable) */ + __IOM uint32_t UED : 1; /*!< [4..4] UE interrupt source disable (Unrecoverable ErrorDisable) */ + __IOM uint32_t FNOD : 1; /*!< [5..5] FNO interrupt source disable (FrameNumberOverflow Disable) */ + __IOM uint32_t RHSCD : 1; /*!< [6..6] RHSC interrupt source disable (RootHub StatusChange Disable) */ + uint32_t : 23; + __IOM uint32_t OCD : 1; /*!< [30..30] OC interrupt source disable (OwnershipChangeDisable) */ + __IOM uint32_t MID : 1; /*!< [31..31] Interrupt 8 source disable (Master Interrupt Disable) */ + } HCINTERRUPTDISABLE_b; + }; + + union + { + __IOM uint32_t HCHCCA; /*!< (@ 0x00000018) HcHCCA Register */ + + struct + { + uint32_t : 8; + __IOM uint32_t RAMBA : 24; /*!< [31..8] RAM base address setting */ + } HCHCCA_b; + }; + + union + { + __IM uint32_t HCPERIODCCURRENTIED; /*!< (@ 0x0000001C) HcPeriodicCurrentED Register */ + + struct + { + uint32_t : 4; + __IM uint32_t PCED : 28; /*!< [31..4] ED physical address (PeriodicCurrentED) */ + } HCPERIODCCURRENTIED_b; + }; + + union + { + __IOM uint32_t HCCONTROLHEADED; /*!< (@ 0x00000020) HcControlHeadED Register */ + + struct + { + uint32_t : 4; + __IOM uint32_t CHED : 28; /*!< [31..4] Start ED physical address (ControlHeadED) */ + } HCCONTROLHEADED_b; + }; + + union + { + __IOM uint32_t HCCONTROLCURRENTED; /*!< (@ 0x00000024) HcControlCurrentED Register */ + + struct + { + uint32_t : 4; + __IOM uint32_t CCED : 28; /*!< [31..4] ED physical address (ControlCurrentED) */ + } HCCONTROLCURRENTED_b; + }; + + union + { + __IOM uint32_t HCBULKHEADED; /*!< (@ 0x00000028) HcBulkHeadED Register */ + + struct + { + uint32_t : 4; + __IOM uint32_t BHED : 28; /*!< [31..4] Start ED physical address (BulkHeadED) */ + } HCBULKHEADED_b; + }; + + union + { + __IOM uint32_t HCBULKCURRENTED; /*!< (@ 0x0000002C) HcBulkCurrentED Register */ + + struct + { + uint32_t : 4; + __IOM uint32_t BCED : 28; /*!< [31..4] ED physical address (BulkCurrentED) */ + } HCBULKCURRENTED_b; + }; + + union + { + __IM uint32_t HCDONEHEAD; /*!< (@ 0x00000030) HcDoneHead Register */ + + struct + { + uint32_t : 4; + __IM uint32_t DH : 28; /*!< [31..4] HcDoneHead physical address (DoneHead) */ + } HCDONEHEAD_b; + }; + + union + { + __IOM uint32_t HCFMINTERVAL; /*!< (@ 0x00000034) HcFmInterval Register */ + + struct + { + __IOM uint32_t FI : 14; /*!< [13..0] Frame interval setting (FrameInterval) */ + uint32_t : 2; + __IOM uint32_t FSMPS : 15; /*!< [30..16] FS transfer packet maximum size setting (FSLagest DataPacket) */ + __IOM uint32_t FIT : 1; /*!< [31..31] Frame synchronization (FrameInterval Toggle) */ + } HCFMINTERVAL_b; + }; + + union + { + __IM uint32_t HCFNREMAINING; /*!< (@ 0x00000038) HcFmRemaining Register */ + + struct + { + __IM uint32_t FR : 14; /*!< [13..0] Down counter frame (FrameRemaining) */ + uint32_t : 17; + __IM uint32_t FRT : 1; /*!< [31..31] Frame synchronization (FrameRemainingToggle) */ + } HCFNREMAINING_b; + }; + + union + { + __IM uint32_t HCFMNUMBER; /*!< (@ 0x0000003C) HcFmNumber Register */ + + struct + { + __IM uint32_t FN : 16; /*!< [15..0] Elapsed frame number (FrameNumber) */ + uint32_t : 16; + } HCFMNUMBER_b; + }; + + union + { + __IOM uint32_t HCPERIODSTART; /*!< (@ 0x00000040) HcPeriodicStart Register */ + + struct + { + __IOM uint32_t PS : 14; /*!< [13..0] Periodic list processing start time (PeriodicStart) */ + uint32_t : 18; + } HCPERIODSTART_b; + }; + + union + { + __IOM uint32_t HCLSTHRESHOLD; /*!< (@ 0x00000044) HcLSThreshold Register */ + + struct + { + __IOM uint32_t LS : 12; /*!< [11..0] Transferrable threshold (LSThreshold) */ + uint32_t : 20; + } HCLSTHRESHOLD_b; + }; + + union + { + __IOM uint32_t HCRHDESCRIPTORA; /*!< (@ 0x00000048) HcRhDescriptorA Register */ + + struct + { + __IM uint32_t NDP : 8; /*!< [7..0] Downstream port number (NumberDownstreamPorts) */ + __IOM uint32_t PSM : 1; /*!< [8..8] Power switch control (PowerSwitchingMode) */ + __IOM uint32_t NPS : 1; /*!< [9..9] Power control (NoPower Switching) */ + __IM uint32_t DT : 1; /*!< [10..10] Device type (DeviceType) */ + __IOM uint32_t OCPM : 1; /*!< [11..11] Overcurrent state reporting (OverCurrentProtection + * Mode) */ + __IOM uint32_t NOCP : 1; /*!< [12..12] Overcurrent function support (NoOver Current Protection) */ + uint32_t : 11; + __IOM uint32_t POTPGT : 8; /*!< [31..24] Wait time (PowerOnToPowerGood Time) */ + } HCRHDESCRIPTORA_b; + }; + + union + { + __IOM uint32_t HCRHDESCRIPTORB; /*!< (@ 0x0000004C) HcRhDescriptorB Register */ + + struct + { + __IOM uint32_t DR : 16; /*!< [15..0] Device Removable */ + __IOM uint32_t PPCM : 16; /*!< [31..16] Port Power Control Mask */ + } HCRHDESCRIPTORB_b; + }; + + union + { + __IOM uint32_t HCRHSTATUS; /*!< (@ 0x00000050) HcRhStatus Register */ + + struct + { + __IOM uint32_t LPS : 1; /*!< [0..0] Local power status (LocalPowerStatus) */ + __IM uint32_t OCI : 1; /*!< [1..1] Overcurrent indicator (OverCurrent Indicator) */ + uint32_t : 13; + __IOM uint32_t DRWE : 1; /*!< [15..15] Device remote start enable (DeviceRemoteWakeupEnable) */ + __IOM uint32_t LPSC : 1; /*!< [16..16] Local power status change (LocalPowerStatusChange) */ + __IOM uint32_t OCIC : 1; /*!< [17..17] OCI bit change report (OverCurrent Indicate Change) */ + uint32_t : 13; + __OM uint32_t CRWE : 1; /*!< [31..31] DRWE bit clear (Clear Remote Wakeup Enable) */ + } HCRHSTATUS_b; + }; + + union + { + __IOM uint32_t HCRHPORTSTATUS1; /*!< (@ 0x00000054) HcRhPortStatus1 Register */ + + struct + { + __IOM uint32_t CCS : 1; /*!< [0..0] Connection status indication (CurrentConnectStatus) */ + __IOM uint32_t PES : 1; /*!< [1..1] Port enable status (PortEnableStatus) */ + __IOM uint32_t PSS : 1; /*!< [2..2] Suspend/Resume status (PortSuspendStatus) */ + __IM uint32_t POCI : 1; /*!< [3..3] Downstream port overcurrent detection (PortOverCurrentIndicator) */ + __IOM uint32_t PRS : 1; /*!< [4..4] Port reset status (PortResetStatus) */ + uint32_t : 3; + __IOM uint32_t PPS : 1; /*!< [8..8] Power status (PortPowerStatus) */ + __IOM uint32_t LSDA : 1; /*!< [9..9] Device speed (LowSpeedDeviceAttached) */ + uint32_t : 6; + __IOM uint32_t CSC : 1; /*!< [16..16] CCS bit status (ConnectStatus Change) */ + __IOM uint32_t PESC : 1; /*!< [17..17] PES bit status (PortEnable StatusChange) */ + __IOM uint32_t PSSC : 1; /*!< [18..18] RESUME sequence complete (PortSuspend StatusChange) */ + __IOM uint32_t OCIC : 1; /*!< [19..19] Overcurrent state detection (OverCurrent IndicateChange) */ + __IOM uint32_t PRSC : 1; /*!< [20..20] Port reset complete (PortReset StatusChange) */ + uint32_t : 11; + } HCRHPORTSTATUS1_b; + }; + __IM uint32_t RESERVED[42]; + + union + { + __IM uint32_t CAPL_VERSION; /*!< (@ 0x00000100) Capability Registers Length and EHCI Version + * Number Register */ + + struct + { + __IM uint32_t CRL : 8; /*!< [7..0] Capability Registers Length */ + uint32_t : 8; + __IM uint32_t HCIVN : 16; /*!< [31..16] EHCI Version Number */ + } CAPL_VERSION_b; + }; + + union + { + __IM uint32_t HCSPARAMS; /*!< (@ 0x00000104) Structural Parameters Register */ + + struct + { + __IM uint32_t N_PORTS : 4; /*!< [3..0] Number of downstream ports (Number of Ports) */ + __IM uint32_t PPC : 1; /*!< [4..4] Port power control (Port Power Control) */ + uint32_t : 2; + __IM uint32_t PTRR : 1; /*!< [7..7] Port routing rules */ + __IM uint32_t N_PCC : 4; /*!< [11..8] Number of ports (Number of Ports per Companion Controller) */ + __IM uint32_t N_CC : 4; /*!< [15..12] Number of OHCI host logic (Number of Companion Controller) */ + __IM uint32_t P_INDICATOR : 1; /*!< [16..16] Port indicator control support */ + uint32_t : 3; + __IM uint32_t DBGPTNUM : 4; /*!< [23..20] Debug port number */ + uint32_t : 8; + } HCSPARAMS_b; + }; + + union + { + __IM uint32_t HCCPARAMS; /*!< (@ 0x00000108) Capability Parameters Register */ + + struct + { + __IM uint32_t AC64 : 1; /*!< [0..0] Memory pointer selection */ + __IM uint32_t PFLF : 1; /*!< [1..1] Programming frame list flag */ + __IM uint32_t ASPC : 1; /*!< [2..2] Asynchronous schedule park support capability */ + uint32_t : 1; + __IM uint32_t IST : 4; /*!< [7..4] Isochronous data structure threshold */ + __IM uint32_t EECP : 8; /*!< [15..8] Offset address (EHCI Extend Capabilities Pointer) */ + __IM uint32_t HP : 1; /*!< [16..16] Hardware prefetch capability */ + __IM uint32_t LPMC : 1; /*!< [17..17] Link power management capability */ + __IM uint32_t PCEC : 1; /*!< [18..18] Per-port change event capability */ + __IM uint32_t PL32 : 1; /*!< [19..19] 32-frame periodic list capability */ + uint32_t : 12; + } HCCPARAMS_b; + }; + __IM uint32_t HCSP_PORTROUTE; /*!< (@ 0x0000010C) Companion Port Route Description Register */ + __IM uint32_t RESERVED1[4]; + + union + { + __IOM uint32_t USBCMD; /*!< (@ 0x00000120) USB Command Register */ + + struct + { + __IOM uint32_t RS : 1; /*!< [0..0] EHCI host logic run/stop (Run/Stop) */ + __IOM uint32_t HCRESET : 1; /*!< [1..1] Host logic initialization (Host Controller Reset) */ + __IOM uint32_t FLS : 2; /*!< [3..2] Frame list size */ + __IOM uint32_t PSE : 1; /*!< [4..4] Periodic schedule enable */ + __IOM uint32_t ASYNSE : 1; /*!< [5..5] Asynchronous schedule enable */ + __IOM uint32_t IAAD : 1; /*!< [6..6] Interrupt on Async Advance Doorbell */ + __IM uint32_t LHCR : 1; /*!< [7..7] Light host controller reset execution status */ + __IOM uint32_t ASPMC : 2; /*!< [9..8] Asynchronous schedule park mode count */ + uint32_t : 1; + __IOM uint32_t ASPME : 1; /*!< [11..11] Asynchronous schedule park mode enable */ + uint32_t : 3; + __IOM uint32_t PPCEE : 1; /*!< [15..15] Per-port change event enable */ + __IOM uint32_t ITC : 8; /*!< [23..16] Host logic interrupt generation maximum rate (Interrupt + * Threshold Control) */ + __IOM uint32_t HIRD : 4; /*!< [27..24] Host-Initiated Resume Duration (Minimum K-state drive + * time) */ + uint32_t : 4; + } USBCMD_b; + }; + + union + { + __IOM uint32_t USBSTS; /*!< (@ 0x00000124) USB Status Register */ + + struct + { + __IOM uint32_t USBINT : 1; /*!< [0..0] USB transfer complete (USB Interrupt) */ + __IOM uint32_t USBERRINT : 1; /*!< [1..1] USB transaction status (USB Error Interrupt) */ + __IOM uint32_t PTCGDET : 1; /*!< [2..2] Port state change detection */ + __IOM uint32_t FLROV : 1; /*!< [3..3] Frame list rollover */ + __IOM uint32_t HSYSE : 1; /*!< [4..4] Host system error */ + __IOM uint32_t IAAIS : 1; /*!< [5..5] Async advance interrupt status */ + uint32_t : 6; + __IM uint32_t EHCSTS : 1; /*!< [12..12] EHCI host logic status (HCHalted) */ + __IM uint32_t RECLAM : 1; /*!< [13..13] Empty asynchronous schedule detection (Reclamation) */ + __IM uint32_t PSCHSTS : 1; /*!< [14..14] Periodic schedule status */ + __IM uint32_t ASS : 1; /*!< [15..15] Asynchronous schedule status */ + __IOM uint32_t PTCGDETC : 16; /*!< [31..16] Port-n Change Detect */ + } USBSTS_b; + }; + + union + { + __IOM uint32_t USBINTR; /*!< (@ 0x00000128) USB Interrupt Enable Register */ + + struct + { + __IOM uint32_t USBIE : 1; /*!< [0..0] USB interrupt enable */ + __IOM uint32_t USBEIE : 1; /*!< [1..1] USB error interrupt enable */ + __IOM uint32_t PTCGIE : 1; /*!< [2..2] Port change interrupt enable */ + __IOM uint32_t FMLSTROE : 1; /*!< [3..3] Frame list rollover enable */ + __IOM uint32_t HSEE : 1; /*!< [4..4] Host system error enable */ + __IOM uint32_t INTAADVE : 1; /*!< [5..5] Interrupt on async advance enable */ + uint32_t : 10; + __IOM uint32_t PCGIE : 16; /*!< [31..16] Port-n Change Interrupt Enable */ + } USBINTR_b; + }; + + union + { + __IOM uint32_t FRINDEX; /*!< (@ 0x0000012C) USB Frame Index Register */ + + struct + { + __IOM uint32_t FRAMEINDEX : 14; /*!< [13..0] Frame index */ + uint32_t : 18; + } FRINDEX_b; + }; + __IM uint32_t CTRLDSSEGMENT; /*!< (@ 0x00000130) Control Data Structure Segment Register */ + + union + { + __IOM uint32_t PERIODICLISTBASE; /*!< (@ 0x00000134) Periodic Frame List Base Address Register */ + + struct + { + uint32_t : 12; + __IOM uint32_t PFLSA : 20; /*!< [31..12] Periodic frame list start address */ + } PERIODICLISTBASE_b; + }; + + union + { + __IOM uint32_t ASYNCLISTADDR; /*!< (@ 0x00000138) Next Asynchronous List Address Register */ + + struct + { + uint32_t : 5; + __IOM uint32_t LPL : 27; /*!< [31..5] Asynchronous Queue Head link pointer address (Link Pointer + * Low) */ + } ASYNCLISTADDR_b; + }; + __IM uint32_t RESERVED2[9]; + + union + { + __IOM uint32_t CONFIGFLAG; /*!< (@ 0x00000160) Configure Flag Register */ + + struct + { + __IOM uint32_t CF : 1; /*!< [0..0] Port routing control circuit configuration flag (Configure + * Flag) */ + uint32_t : 31; + } CONFIGFLAG_b; + }; + + union + { + __IOM uint32_t PORTSC1; /*!< (@ 0x00000164) Port 1 Status and Control Register */ + + struct + { + __IM uint32_t CCSTS : 1; /*!< [0..0] Port connection status */ + __IOM uint32_t CSC : 1; /*!< [1..1] Connect status change */ + __IOM uint32_t PTE : 1; /*!< [2..2] Port enable/disable status */ + __IOM uint32_t PTESC : 1; /*!< [3..3] Port enable/disable status change */ + __IM uint32_t OVCACT : 1; /*!< [4..4] Port overcurrent status */ + __IOM uint32_t OVCC : 1; /*!< [5..5] Over-current Change */ + __IOM uint32_t FRCPTRSM : 1; /*!< [6..6] Force Port Resume (Port resume detection flag) */ + __IOM uint32_t SUSPEND : 1; /*!< [7..7] Port suspend */ + __IOM uint32_t PTRST : 1; /*!< [8..8] Port reset status */ + __IOM uint32_t LPMCTL : 1; /*!< [9..9] LPM control */ + __IM uint32_t LINESTS : 2; /*!< [11..10] D+/D- logic level */ + __IOM uint32_t PP : 1; /*!< [12..12] Port Power Supply Control (Port Power) */ + __IOM uint32_t PTOWNR : 1; /*!< [13..13] Port ownership */ + __IM uint32_t PTINDCTL : 2; /*!< [15..14] As the host logic does not support the port indicator + * control function, these bits are set to 00b. */ + __IOM uint32_t PTTST : 4; /*!< [19..16] Pin test control */ + __IOM uint32_t WKCNNT_E : 1; /*!< [20..20] Device connection detection enable (Wake on Connect + * Enable) */ + __IOM uint32_t WKDSCNNT_E : 1; /*!< [21..21] Device disconnection detection enable (Wake on Disconnect + * Enable) */ + __IOM uint32_t WKOC_E : 1; /*!< [22..22] Overcurrent state detection enable (Wake on Over-current + * Enable) */ + __IOM uint32_t SUSPSTS : 2; /*!< [24..23] Suspend status */ + __IOM uint32_t DVADDR : 7; /*!< [31..25] USB device address */ + } PORTSC1_b; + }; + __IM uint32_t RESERVED3[38]; + + union + { + __IOM uint32_t INTENABLE; /*!< (@ 0x00000200) INT_ENABLE Register */ + + struct + { + __IOM uint32_t AHB_INTEN : 1; /*!< [0..0] AHB_INT bit control */ + __IOM uint32_t USBH_INTAEN : 1; /*!< [1..1] USBH_INTA bit control */ + __IOM uint32_t USBH_INTBEN : 1; /*!< [2..2] USBH_INTB bit control */ + __IOM uint32_t UCOM_INTEN : 1; /*!< [3..3] UCOM_INT bit control */ + __IOM uint32_t WAKEON_INTEN : 1; /*!< [4..4] WAKEON_INT bit control */ + uint32_t : 27; + } INTENABLE_b; + }; + + union + { + __IOM uint32_t INTSTATUS; /*!< (@ 0x00000204) INT_STATUS Register */ + + struct + { + __IOM uint32_t AHB_INT : 1; /*!< [0..0] AHB bus error indication */ + __IM uint32_t USBH_INTA : 1; /*!< [1..1] OHCI interrupt status */ + __IM uint32_t USBH_INTB : 1; /*!< [2..2] USBH_INTB EHCI interrupt status */ + __IM uint32_t UCOM_INT : 1; /*!< [3..3] UCOM register interrupt status */ + __IOM uint32_t WAKEON_INT : 1; /*!< [4..4] WAKEON interrupt status */ + uint32_t : 27; + } INTSTATUS_b; + }; + + union + { + __IOM uint32_t AHBBUSCTR; /*!< (@ 0x00000208) AHB_BUS_CTR Register */ + + struct + { + __IOM uint32_t MAX_BURST_LEN : 2; /*!< [1..0] Maximum burst length */ + uint32_t : 2; + __IOM uint32_t ALIGN_ADDRESS : 2; /*!< [5..4] Address boundary setting */ + uint32_t : 2; + __IOM uint32_t PROT_MODE : 1; /*!< [8..8] This bit selects the MHPROT[3:0] mode when the AHB master + * interface initiates a transfer. */ + uint32_t : 3; + __IOM uint32_t PROT_TYPE : 4; /*!< [15..12] These bits set MHPROT[3:0] when the AHB master interface + * initiates a transfer. */ + uint32_t : 16; + } AHBBUSCTR_b; + }; + + union + { + __IOM uint32_t USBCTR; /*!< (@ 0x0000020C) USBCTR Register */ + + struct + { + __OM uint32_t USBH_RST : 1; /*!< [0..0] Software reset for the core */ + __IOM uint32_t PLL_RST : 1; /*!< [1..1] Reset of USB PHY PLL */ + __IOM uint32_t DIRPD : 1; /*!< [2..2] Direct transition to power-down state */ + uint32_t : 29; + } USBCTR_b; + }; + __IM uint32_t RESERVED4[60]; + + union + { + __IM uint32_t REVID; /*!< (@ 0x00000300) Revision and Core ID Register */ + + struct + { + __IM uint32_t MINV : 8; /*!< [7..0] Minor Version */ + __IM uint32_t MAJV : 8; /*!< [15..8] Major Version */ + uint32_t : 8; + __IM uint32_t COREID : 8; /*!< [31..24] Core ID */ + } REVID_b; + }; + __IM uint32_t RESERVED5[3]; + + union + { + __IOM uint32_t OCSLPTIMSET; /*!< (@ 0x00000310) Overcurrent Detection/Sleep Timer Setting Register */ + + struct + { + __IOM uint32_t TIMER_OC : 20; /*!< [19..0] Overcurrent Timer setting */ + __IOM uint32_t TIMER_SLEEP : 9; /*!< [28..20] Detection/Sleep Timer Setting */ + uint32_t : 3; + } OCSLPTIMSET_b; + }; + __IM uint32_t RESERVED6[315]; + + union + { + __IOM uint32_t COMMCTRL; /*!< (@ 0x00000800) Common Control Register */ + + struct + { + uint32_t : 31; + __IOM uint32_t PERI : 1; /*!< [31..31] USB mode setting */ + } COMMCTRL_b; + }; + + union + { + __IOM uint32_t OBINTSTA; /*!< (@ 0x00000804) OTG-BC Interrupt Status Register */ + + struct + { + __IOM uint32_t IDCHG_STA : 1; /*!< [0..0] USB_OTGID change status */ + __IOM uint32_t OCINT_STA : 1; /*!< [1..1] USB_OVRCUR assertion status */ + __IOM uint32_t VBSTACHG_STA : 1; /*!< [2..2] VBSTA[3:0] change status */ + __IOM uint32_t VBSTAINT_STA : 1; /*!< [3..3] VBUS voltage status interrupt */ + uint32_t : 12; + __IOM uint32_t DMMONCHG_STA : 1; /*!< [16..16] DMMON change status */ + __IOM uint32_t DPMONCHG_STA : 1; /*!< [17..17] DPMON change status */ + uint32_t : 14; + } OBINTSTA_b; + }; + + union + { + __IOM uint32_t OBINTEN; /*!< (@ 0x00000808) OTG-BC Interrupt Enable Register */ + + struct + { + __IOM uint32_t IDCHG_EN : 1; /*!< [0..0] IDCHG_STA Interrupt enable */ + __IOM uint32_t OCINT_EN : 1; /*!< [1..1] OCINT_STA interrupt enable */ + __IOM uint32_t VBSTACHG_EN : 1; /*!< [2..2] VBSTACHG_STA interrupt enable */ + __IOM uint32_t VBSTAINT_EN : 1; /*!< [3..3] VBSTAINT_STA interrupt enable */ + uint32_t : 12; + __IOM uint32_t DMMONCHG_EN : 1; /*!< [16..16] DMMONCHG_STA interrupt enable */ + __IOM uint32_t DPMONCHG_EN : 1; /*!< [17..17] DPMONCHG_STA interrupt enable */ + uint32_t : 14; + } OBINTEN_b; + }; + + union + { + __IOM uint32_t VBCTRL; /*!< (@ 0x0000080C) VBUS Control Register */ + + struct + { + __IOM uint32_t VBOUT : 1; /*!< [0..0] VBUS drive control (USB_VBUSEN pin) */ + __IOM uint32_t VBUSENSEL : 1; /*!< [1..1] USB_VBUSEN pin control */ + uint32_t : 2; + __IOM uint32_t VGPUO : 1; /*!< [4..4] USB_EXICEN pin control */ + uint32_t : 11; + __IOM uint32_t OCCLRIEN : 1; /*!< [16..16] USB_VBUSEN pin control at occurrence of overcurrent */ + __IOM uint32_t OCISEL : 1; /*!< [17..17] Overcurrent detection */ + uint32_t : 2; + __IOM uint32_t VBLVL : 4; /*!< [23..20] VBUS level detection */ + uint32_t : 4; + __IM uint32_t VBSTA : 4; /*!< [31..28] VBUS indication */ + } VBCTRL_b; + }; + + union + { + __IOM uint32_t LINECTRL1; /*!< (@ 0x00000810) Line Control Port 1 Register */ + + struct + { + __IM uint32_t IDMON : 1; /*!< [0..0] Indicates a value of USB_OTGID input pin. */ + uint32_t : 1; + __IM uint32_t DMMON : 1; /*!< [2..2] Indicates a value of USB bus DM. */ + __IM uint32_t DPMON : 1; /*!< [3..3] Indicates a value of USB bus DP. */ + uint32_t : 12; + __IOM uint32_t DM_RPD : 1; /*!< [16..16] Controls USB bus (DM) 15 kOhm pulldown resistor when + * DMPPD_EN = 1. */ + __IOM uint32_t DMRPD_EN : 1; /*!< [17..17] Enables DM_RPD to control USB bus (DM) 15 kOhm pulldown + * resistor. */ + __IOM uint32_t DP_RPD : 1; /*!< [18..18] Controls USB bus (DP) 15 kOhm pulldown resistor when + * DRPPD_EN = 1. */ + __IOM uint32_t DPRPD_EN : 1; /*!< [19..19] Enables DP_RPD to control USB bus (DP) 15 kOhm pulldown + * resistor. */ + uint32_t : 12; + } LINECTRL1_b; + }; +} R_USBHC_Type; /*!< Size = 2068 (0x814) */ + +/* =========================================================================================================================== */ +/* ================ R_USBF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief USB 2.0 Host and Function Module (R_USBF) + */ + +typedef struct /*!< (@ 0x80201000) R_USBF Structure */ +{ + union + { + __IOM uint16_t SYSCFG0; /*!< (@ 0x00000000) System Configuration Control Register 0 */ + + struct + { + __IOM uint16_t USBE : 1; /*!< [0..0] USB Block Operation Enable */ + uint16_t : 3; + __IOM uint16_t DPRPU : 1; /*!< [4..4] D+ Line Resistor Control */ + __IOM uint16_t DRPD : 1; /*!< [5..5] D+/D- Line Resistor Control */ + uint16_t : 1; + __IOM uint16_t HSE : 1; /*!< [7..7] High-Speed Operation Enable */ + __IOM uint16_t CNEN : 1; /*!< [8..8] Single-End Receiver Operation Enable */ + uint16_t : 7; + } SYSCFG0_b; + }; + + union + { + __IOM uint16_t SYSCFG1; /*!< (@ 0x00000002) System Configuration Control Register 1 */ + + struct + { + __IOM uint16_t BWAIT : 6; /*!< [5..0] CPU Bus Access Wait Specification */ + uint16_t : 2; + __IOM uint16_t AWAIT : 6; /*!< [13..8] AHB-DMA Bridge Bus Access Wait Specification */ + uint16_t : 2; + } SYSCFG1_b; + }; + + union + { + __IM uint16_t SYSSTS0; /*!< (@ 0x00000004) System Configuration Status Register */ + + struct + { + __IM uint16_t LNST : 2; /*!< [1..0] USB Data Line Status Monitor */ + uint16_t : 14; + } SYSSTS0_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t DVSTCTR0; /*!< (@ 0x00000008) Device State Control Register 0 */ + + struct + { + __IM uint16_t RHST : 3; /*!< [2..0] Reset Handshake */ + uint16_t : 5; + __IOM uint16_t WKUP : 1; /*!< [8..8] Wakeup Output */ + uint16_t : 7; + } DVSTCTR0_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t TESTMODE; /*!< (@ 0x0000000C) USB Test Mode Register */ + + struct + { + __IOM uint16_t UTST : 4; /*!< [3..0] Test Mode */ + uint16_t : 12; + } TESTMODE_b; + }; + __IM uint16_t RESERVED2; + __IM uint32_t RESERVED3; + + union + { + union + { + __IOM uint32_t CFIFO; /*!< (@ 0x00000014) FIFO Port Register */ + + struct + { + __IOM uint32_t FIFOPORT : 32; /*!< [31..0] FIFO Port */ + } CFIFO_b; + }; + + struct + { + union + { + __IOM uint16_t CFIFOL; /*!< (@ 0x00000014) FIFO Port Register */ + __IOM uint8_t CFIFOLL; /*!< (@ 0x00000014) FIFO Port Register */ + }; + + union + { + union + { + __IOM uint16_t CFIFOH; /*!< (@ 0x00000016) FIFO Port Register */ + + struct + { + __IOM uint16_t FIFOPORT : 16; /*!< [15..0] FIFO Port */ + } CFIFOH_b; + }; + + struct + { + __IM uint8_t RESERVED4; + + union + { + __IOM uint8_t CFIFOHH; /*!< (@ 0x00000017) FIFO Port Register */ + + struct + { + __IOM uint8_t FIFOPORT : 8; /*!< [7..0] FIFO Port */ + } CFIFOHH_b; + }; + }; + }; + }; + }; + + union + { + union + { + __IOM uint32_t D0FIFO; /*!< (@ 0x00000018) FIFO Port Register */ + + struct + { + __IOM uint32_t FIFOPORT : 32; /*!< [31..0] FIFO Port */ + } D0FIFO_b; + }; + + struct + { + union + { + __IOM uint16_t D0FIFOL; /*!< (@ 0x00000018) FIFO Port Register */ + __IOM uint8_t D0FIFOLL; /*!< (@ 0x00000018) FIFO Port Register */ + }; + + union + { + union + { + __IOM uint16_t D0FIFOH; /*!< (@ 0x0000001A) FIFO Port Register */ + + struct + { + __IOM uint16_t FIFOPORT : 16; /*!< [15..0] FIFO Port */ + } D0FIFOH_b; + }; + + struct + { + __IM uint8_t RESERVED5; + + union + { + __IOM uint8_t D0FIFOHH; /*!< (@ 0x0000001B) FIFO Port Register */ + + struct + { + __IOM uint8_t FIFOPORT : 8; /*!< [7..0] FIFO Port */ + } D0FIFOHH_b; + }; + }; + }; + }; + }; + + union + { + union + { + __IOM uint32_t D1FIFO; /*!< (@ 0x0000001C) FIFO Port Register */ + + struct + { + __IOM uint32_t FIFOPORT : 32; /*!< [31..0] FIFO Port */ + } D1FIFO_b; + }; + + struct + { + union + { + __IOM uint16_t D1FIFOL; /*!< (@ 0x0000001C) FIFO Port Register */ + __IOM uint8_t D1FIFOLL; /*!< (@ 0x0000001C) FIFO Port Register */ + }; + + union + { + union + { + __IOM uint16_t D1FIFOH; /*!< (@ 0x0000001E) FIFO Port Register */ + + struct + { + __IOM uint16_t FIFOPORT : 16; /*!< [15..0] FIFO Port */ + } D1FIFOH_b; + }; + + struct + { + __IM uint8_t RESERVED6; + + union + { + __IOM uint8_t D1FIFOHH; /*!< (@ 0x0000001F) FIFO Port Register */ + + struct + { + __IOM uint8_t FIFOPORT : 8; /*!< [7..0] FIFO Port */ + } D1FIFOHH_b; + }; + }; + }; + }; + }; + + union + { + __IOM uint16_t CFIFOSEL; /*!< (@ 0x00000020) CFIFO Port Select Register */ + + struct + { + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 1; + __IOM uint16_t ISEL : 1; /*!< [5..5] FIFO Port Access Direction when DCP is Selected */ + uint16_t : 2; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] CFIFO Port Access Bit Width */ + uint16_t : 2; + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } CFIFOSEL_b; + }; + + union + { + __IOM uint16_t CFIFOCTR; /*!< (@ 0x00000022) FIFO Port Control Register */ + + struct + { + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data Length */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer Clear */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } CFIFOCTR_b; + }; + __IM uint32_t RESERVED7; + + union + { + __IOM uint16_t D0FIFOSEL; /*!< (@ 0x00000028) D0FIFO Port Select Register */ + + struct + { + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode after Specified Pipe + * Data is Read */ + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D0FIFOSEL_b; + }; + + union + { + __IOM uint16_t D0FIFOCTR; /*!< (@ 0x0000002A) FIFO Port Control Register */ + + struct + { + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data Length */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer Clear */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D0FIFOCTR_b; + }; + + union + { + __IOM uint16_t D1FIFOSEL; /*!< (@ 0x0000002C) D1FIFO Port Select Register */ + + struct + { + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode after Specified Pipe + * Data is Read */ + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D1FIFOSEL_b; + }; + + union + { + __IOM uint16_t D1FIFOCTR; /*!< (@ 0x0000002E) FIFO Port Control Register */ + + struct + { + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data Length */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer Clear */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D1FIFOCTR_b; + }; + + union + { + __IOM uint16_t INTENB0; /*!< (@ 0x00000030) Interrupt Enable Register 0 */ + + struct + { + uint16_t : 8; + __IOM uint16_t BRDYE : 1; /*!< [8..8] Buffer Ready Interrupt Enable */ + __IOM uint16_t NRDYE : 1; /*!< [9..9] Buffer Not Ready Response Interrupt Enable */ + __IOM uint16_t BEMPE : 1; /*!< [10..10] Buffer Empty Interrupt Enable */ + __IOM uint16_t CTRE : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Enable */ + __IOM uint16_t DVSE : 1; /*!< [12..12] Device State Transition Interrupt Enable */ + __IOM uint16_t SOFE : 1; /*!< [13..13] Frame Number Update Interrupt Enable */ + __IOM uint16_t RSME : 1; /*!< [14..14] Resume Interrupt Enable */ + __IOM uint16_t VBSE : 1; /*!< [15..15] VBUS Interrupt Enable */ + } INTENB0_b; + }; + + union + { + __IOM uint16_t INTENB1; /*!< (@ 0x00000032) Interrupt Enable Register 1 */ + + struct + { + __IOM uint16_t PDDETINTE : 1; /*!< [0..0] PDDETINT Detection Interrupt Enable */ + uint16_t : 15; + } INTENB1_b; + }; + __IM uint16_t RESERVED8; + + union + { + __IOM uint16_t BRDYENB; /*!< (@ 0x00000036) BRDY Interrupt Enable Register */ + + struct + { + __IOM uint16_t PIPEBRDYE : 10; /*!< [9..0] BRDY Interrupt Enable for Each Pipe */ + uint16_t : 6; + } BRDYENB_b; + }; + + union + { + __IOM uint16_t NRDYENB; /*!< (@ 0x00000038) NRDY Interrupt Enable Register */ + + struct + { + __IOM uint16_t PIPENRDYE : 10; /*!< [9..0] NRDY Interrupt Enable for Each Pipe */ + uint16_t : 6; + } NRDYENB_b; + }; + + union + { + __IOM uint16_t BEMPENB; /*!< (@ 0x0000003A) BEMP Interrupt Enable Register */ + + struct + { + __IOM uint16_t PIPEBEMPE : 10; /*!< [9..0] BEMP Interrupt Enable for Each Pipe */ + uint16_t : 6; + } BEMPENB_b; + }; + + union + { + __IOM uint16_t SOFCFG; /*!< (@ 0x0000003C) SOF Pin Configuration Register */ + + struct + { + uint16_t : 4; + __IM uint16_t EDGESTS : 1; /*!< [4..4] Interrupt Edge Processing Status */ + __IOM uint16_t INTL : 1; /*!< [5..5] Interrupt Output Sense Select */ + __IOM uint16_t BRDYM : 1; /*!< [6..6] PIPEBRDY Interrupt Status Clear Timing */ + uint16_t : 9; + } SOFCFG_b; + }; + __IM uint16_t RESERVED9; + + union + { + __IOM uint16_t INTSTS0; /*!< (@ 0x00000040) Interrupt Status Register 0 */ + + struct + { + __IM uint16_t CTSQ : 3; /*!< [2..0] Control Transfer Stage */ + __IOM uint16_t VALID : 1; /*!< [3..3] USB Request Reception */ + __IM uint16_t DVSQ : 3; /*!< [6..4] Device State */ + __IM uint16_t VBSTS : 1; /*!< [7..7] VBUS Input Status */ + __IM uint16_t BRDY : 1; /*!< [8..8] BRDY Interrupt Status */ + __IM uint16_t NRDY : 1; /*!< [9..9] NRDY Interrupt Status */ + __IM uint16_t BEMP : 1; /*!< [10..10] BEMP Interrupt Status */ + __IOM uint16_t CTRT : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Status */ + __IOM uint16_t DVST : 1; /*!< [12..12] Device State Transition Interrupt Status */ + __IOM uint16_t SOFR : 1; /*!< [13..13] Frame Number Update Interrupt Status */ + __IOM uint16_t RESM : 1; /*!< [14..14] Resume Interrupt Status */ + __IOM uint16_t VBINT : 1; /*!< [15..15] VBUS Change Detect Interrupt Status */ + } INTSTS0_b; + }; + + union + { + __IOM uint16_t INTSTS1; /*!< (@ 0x00000042) Interrupt Status Register 1 */ + + struct + { + __IOM uint16_t PDDETINT : 1; /*!< [0..0] PDDET Detection Interrupt Status */ + uint16_t : 15; + } INTSTS1_b; + }; + __IM uint16_t RESERVED10; + + union + { + __IOM uint16_t BRDYSTS; /*!< (@ 0x00000046) BRDY Interrupt Status Register */ + + struct + { + __IOM uint16_t PIPEBRDY : 10; /*!< [9..0] BRDY Interrupt Status for Each Pipe */ + uint16_t : 6; + } BRDYSTS_b; + }; + + union + { + __IOM uint16_t NRDYSTS; /*!< (@ 0x00000048) NRDY Interrupt Status Register */ + + struct + { + __IOM uint16_t PIPENRDY : 10; /*!< [9..0] NRDY Interrupt Status for Each Pipe */ + uint16_t : 6; + } NRDYSTS_b; + }; + + union + { + __IOM uint16_t BEMPSTS; /*!< (@ 0x0000004A) BEMP Interrupt Status Register */ + + struct + { + __IOM uint16_t PIPEBEMP : 10; /*!< [9..0] BEMP Interrupt Status for Each Pipe */ + uint16_t : 6; + } BEMPSTS_b; + }; + + union + { + __IOM uint16_t FRMNUM; /*!< (@ 0x0000004C) Frame Number Register */ + + struct + { + __IM uint16_t FRNM : 11; /*!< [10..0] Frame Number */ + uint16_t : 3; + __IOM uint16_t CRCE : 1; /*!< [14..14] CRC Error Detection Status */ + __IOM uint16_t OVRN : 1; /*!< [15..15] Overrun/Underrun Detection Status */ + } FRMNUM_b; + }; + + union + { + __IM uint16_t UFRMNUM; /*!< (@ 0x0000004E) Frame Number Register */ + + struct + { + __IM uint16_t UFRNM : 3; /*!< [2..0] Microframe Number */ + uint16_t : 13; + } UFRMNUM_b; + }; + + union + { + __IM uint16_t USBADDR; /*!< (@ 0x00000050) USB Address Register */ + + struct + { + __IM uint16_t USBADDR : 7; /*!< [6..0] USB Address */ + uint16_t : 9; + } USBADDR_b; + }; + __IM uint16_t RESERVED11; + + union + { + __IM uint16_t USBREQ; /*!< (@ 0x00000054) USB Request Type Register */ + + struct + { + __IM uint16_t BMREQUESTTYPE : 8; /*!< [7..0] Request Type */ + __IM uint16_t BREQUEST : 8; /*!< [15..8] Request */ + } USBREQ_b; + }; + + union + { + __IM uint16_t USBVAL; /*!< (@ 0x00000056) USB Request Value Register */ + + struct + { + __IM uint16_t WVALUE : 16; /*!< [15..0] Value */ + } USBVAL_b; + }; + + union + { + __IM uint16_t USBINDX; /*!< (@ 0x00000058) USB Request Index Register */ + + struct + { + __IM uint16_t WINDEX : 16; /*!< [15..0] Index */ + } USBINDX_b; + }; + + union + { + __IM uint16_t USBLENG; /*!< (@ 0x0000005A) USB Request Length Register */ + + struct + { + __IM uint16_t WLENGTH : 16; /*!< [15..0] Length */ + } USBLENG_b; + }; + + union + { + __IOM uint16_t DCPCFG; /*!< (@ 0x0000005C) DCP Configuration Register */ + + struct + { + uint16_t : 7; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Disabling PIPE at the End of Transfer */ + __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ + uint16_t : 7; + } DCPCFG_b; + }; + + union + { + __IOM uint16_t DCPMAXP; /*!< (@ 0x0000005E) DCP Maximum Packet Size Register */ + + struct + { + __IOM uint16_t MXPS : 7; /*!< [6..0] Maximum Packet Size */ + uint16_t : 9; + } DCPMAXP_b; + }; + + union + { + __IOM uint16_t DCPCTR; /*!< (@ 0x00000060) DCP Control Register */ + + struct + { + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + __IOM uint16_t CCPL : 1; /*!< [2..2] Control Transfer End Enable */ + uint16_t : 2; + __IM uint16_t PBUSY : 1; /*!< [5..5] PIPE Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Monitor */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Toggle Bit Clear */ + uint16_t : 6; + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } DCPCTR_b; + }; + __IM uint16_t RESERVED12; + + union + { + __IOM uint16_t PIPESEL; /*!< (@ 0x00000064) Pipe Window Select Register */ + + struct + { + __IOM uint16_t PIPESEL : 4; /*!< [3..0] Pipe Window Select */ + uint16_t : 12; + } PIPESEL_b; + }; + __IM uint16_t RESERVED13; + + union + { + __IOM uint16_t PIPECFG; /*!< (@ 0x00000068) Pipe Configuration Register */ + + struct + { + __IOM uint16_t EPNUM : 4; /*!< [3..0] Endpoint Number */ + __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ + uint16_t : 2; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disable at the End of Transfer */ + __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ + __IOM uint16_t DBLB : 1; /*!< [9..9] Double Buffer Mode */ + __IOM uint16_t BFRE : 1; /*!< [10..10] BRDY Interrupt Operation Specification */ + uint16_t : 3; + __IOM uint16_t TYPE : 2; /*!< [15..14] Transfer Type */ + } PIPECFG_b; + }; + + union + { + __IOM uint16_t PIPEBUF; /*!< (@ 0x0000006A) Pipe Buffer Specification Register */ + + struct + { + __IOM uint16_t BUFNMB : 8; /*!< [7..0] Buffer number */ + uint16_t : 2; + __IOM uint16_t BUFSIZE : 5; /*!< [14..10] Buffer size */ + uint16_t : 1; + } PIPEBUF_b; + }; + + union + { + __IOM uint16_t PIPEMAXP; /*!< (@ 0x0000006C) Pipe Maximum Packet Size Register */ + + struct + { + __IOM uint16_t MXPS : 11; /*!< [10..0] Maximum Packet Size */ + uint16_t : 5; + } PIPEMAXP_b; + }; + + union + { + __IOM uint16_t PIPEPERI; /*!< (@ 0x0000006E) Pipe Timing Control Register */ + + struct + { + __IOM uint16_t IITV : 3; /*!< [2..0] Interval Error Detection Spacing */ + uint16_t : 9; + __IOM uint16_t IFIS : 1; /*!< [12..12] Isochronous IN Buffer Flush */ + uint16_t : 3; + } PIPEPERI_b; + }; + + union + { + __IOM uint16_t PIPE_CTR[9]; /*!< (@ 0x00000070) PIPE[0..8] Control Register */ + + struct + { + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + uint16_t : 3; + __IM uint16_t PBUSY : 1; /*!< [5..5] PIPE Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Toggle Bit Confirm */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Toggle Bit Clear */ + __IOM uint16_t ACLRM : 1; /*!< [9..9] Auto Buffer Clear Mode */ + __IOM uint16_t ATREPM : 1; /*!< [10..10] Auto Response Mode */ + uint16_t : 3; + __IM uint16_t INBUFM : 1; /*!< [14..14] Transfer Buffer Monitor */ + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } PIPE_CTR_b[9]; + }; + __IM uint16_t RESERVED14; + __IM uint32_t RESERVED15[3]; + __IOM R_USBF_PIPE_TR_Type PIPE_TR[5]; /*!< (@ 0x00000090) PIPEn Transaction Counter Registers (n=1-5) */ + __IM uint32_t RESERVED16[23]; + __IM uint16_t RESERVED17; + + union + { + __IOM uint16_t LPSTS; /*!< (@ 0x00000102) Low Power Status Register */ + + struct + { + uint16_t : 14; + __IOM uint16_t SUSPM : 1; /*!< [14..14] UTMI SuspendM Control */ + uint16_t : 1; + } LPSTS_b; + }; + __IM uint32_t RESERVED18[191]; + __IOM R_USBF_CHa_Type CHa[2]; /*!< (@ 0x00000400) Next Register Set */ + __IM uint32_t RESERVED19[96]; + __IOM R_USBF_CHb_Type CHb[2]; /*!< (@ 0x00000600) Skip Register Set */ + __IM uint32_t RESERVED20[48]; + + union + { + __IOM uint32_t DCTRL; /*!< (@ 0x00000700) DMA Control Register */ + + struct + { + __IOM uint32_t PR : 1; /*!< [0..0] Priority */ + uint32_t : 15; + __IOM uint32_t LDPR : 4; /*!< [19..16] Link Descriptor PROT */ + uint32_t : 4; + __IOM uint32_t LWPR : 4; /*!< [27..24] Link WriteBack PROT */ + uint32_t : 4; + } DCTRL_b; + }; + + union + { + __IOM uint32_t DSCITVL; /*!< (@ 0x00000704) Descriptor Interval Register */ + + struct + { + uint32_t : 8; + __IOM uint32_t DITVL : 8; /*!< [15..8] Descriptor Interval */ + uint32_t : 16; + } DSCITVL_b; + }; + __IM uint32_t RESERVED21[2]; + + union + { + __IM uint32_t DSTAT_EN; /*!< (@ 0x00000710) DMA Status EN Register */ + + struct + { + __IM uint32_t EN0 : 1; /*!< [0..0] Channel 0 EN */ + __IM uint32_t EN1 : 1; /*!< [1..1] Channel 1 EN */ + uint32_t : 30; + } DSTAT_EN_b; + }; + + union + { + __IM uint32_t DSTAT_ER; /*!< (@ 0x00000714) DMA Status ER Register */ + + struct + { + __IM uint32_t ER0 : 1; /*!< [0..0] Channel 0 ER */ + __IM uint32_t ER1 : 1; /*!< [1..1] Channel 1 ER */ + uint32_t : 30; + } DSTAT_ER_b; + }; + + union + { + __IM uint32_t DSTAT_END; /*!< (@ 0x00000718) DMA Status END Register */ + + struct + { + __IM uint32_t END0 : 1; /*!< [0..0] Channel 0 END */ + __IM uint32_t END1 : 1; /*!< [1..1] Channel 1 END */ + uint32_t : 30; + } DSTAT_END_b; + }; + + union + { + __IM uint32_t DSTAT_TC; /*!< (@ 0x0000071C) DMA Status TC Register */ + + struct + { + __IM uint32_t TC0 : 1; /*!< [0..0] Channel 0 TC */ + __IM uint32_t TC1 : 1; /*!< [1..1] Channel 1 TC */ + uint32_t : 30; + } DSTAT_TC_b; + }; + + union + { + __IM uint32_t DSTAT_SUS; /*!< (@ 0x00000720) DMA Status SUS Register */ + + struct + { + __IM uint32_t SUS0 : 1; /*!< [0..0] Channel 0 SUS */ + __IM uint32_t SUS1 : 1; /*!< [1..1] Channel 1 SUS */ + uint32_t : 30; + } DSTAT_SUS_b; + }; +} R_USBF_Type; /*!< Size = 1828 (0x724) */ + +/* =========================================================================================================================== */ +/* ================ R_BSC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Bus State Controller (R_BSC) + */ + +typedef struct /*!< (@ 0x80210000) R_BSC Structure */ +{ + union + { + __IOM uint32_t CMNCR; /*!< (@ 0x00000000) Common Control Register */ + + struct + { + uint32_t : 9; + __IOM uint32_t DPRTY : 2; /*!< [10..9] DMA Burst Transfer Priority */ + uint32_t : 13; + __IOM uint32_t AL : 1; /*!< [24..24] Acknowledge Level */ + uint32_t : 3; + __IOM uint32_t TL : 1; /*!< [28..28] Transfer End Level */ + uint32_t : 3; + } CMNCR_b; + }; + + union + { + __IOM uint32_t CSnBCR[6]; /*!< (@ 0x00000004) CS[0..5] Space Bus Control Register */ + + struct + { + uint32_t : 9; + __IOM uint32_t BSZ : 2; /*!< [10..9] Data Bus Width Specification */ + uint32_t : 1; + __IOM uint32_t TYPE : 3; /*!< [14..12] Memory Connected to a Space */ + uint32_t : 1; + __IOM uint32_t IWRRS : 3; /*!< [18..16] Idle State Insertion between Read-Read Cycles in the + * Same CS Space */ + __IOM uint32_t IWRRD : 3; /*!< [21..19] Idle State Insertion between Read-Read Cycles in Different + * CS Spaces */ + __IOM uint32_t IWRWS : 3; /*!< [24..22] Idle State Insertion between Read-Write Cycles in the + * Same CS Space */ + __IOM uint32_t IWRWD : 3; /*!< [27..25] Idle State Insertion between Read-Write Cycles in Different + * CS Spaces */ + __IOM uint32_t IWW : 3; /*!< [30..28] Idle Cycles between Write-Read Cycles and Write-Write + * Cycles */ + uint32_t : 1; + } CSnBCR_b[6]; + }; + __IM uint32_t RESERVED[3]; + + union + { + union + { + __IOM uint32_t CS0WCR_0; /*!< (@ 0x00000028) CS0 Space Wait Control Register for Normal Space, + * SRAM with Byte Selection */ + + struct + { + __IOM uint32_t HW : 2; /*!< [1..0] Delay States from RD#, WEn# Negation to Address, CS0# + * Negation */ + uint32_t : 4; + __IOM uint32_t WM : 1; /*!< [6..6] External Wait Mask Specification */ + __IOM uint32_t WR : 4; /*!< [10..7] Number of Access Waits */ + __IOM uint32_t SW : 2; /*!< [12..11] Number of Delay Cycles from Address, CSn# Assertion + * to RD#, WEn# Assertion */ + uint32_t : 7; + __IOM uint32_t BAS : 1; /*!< [20..20] SRAM with Byte Selection Byte Access Select */ + uint32_t : 11; + } CS0WCR_0_b; + }; + + union + { + __IOM uint32_t CS0WCR_1; /*!< (@ 0x00000028) CS0 Space Wait Control Register for Burst ROM + * with Clocked Asynchronous */ + + struct + { + uint32_t : 6; + __IOM uint32_t WM : 1; /*!< [6..6] External Wait Mask Specification */ + __IOM uint32_t W : 4; /*!< [10..7] Number of Access Waits */ + uint32_t : 5; + __IOM uint32_t BW : 2; /*!< [17..16] Number of Waits during Burst Access */ + uint32_t : 2; + __IOM uint32_t BST : 2; /*!< [21..20] Burst Count Specification */ + uint32_t : 10; + } CS0WCR_1_b; + }; + + union + { + __IOM uint32_t CS0WCR_2; /*!< (@ 0x00000028) CS0 Space Wait Control Register for Burst ROM + * with Clocked Synchronous */ + + struct + { + uint32_t : 6; + __IOM uint32_t WM : 1; /*!< [6..6] External Wait Mask Specification */ + __IOM uint32_t W : 4; /*!< [10..7] Number of Access Waits */ + uint32_t : 5; + __IOM uint32_t BW : 2; /*!< [17..16] Number of Burst Wait Cycles */ + uint32_t : 14; + } CS0WCR_2_b; + }; + }; + __IM uint32_t RESERVED1; + + union + { + union + { + __IOM uint32_t CS2WCR_0; /*!< (@ 0x00000030) CS2 Space Wait Control Register for Normal Space, + * SRAM with Byte Selection */ + + struct + { + uint32_t : 6; + __IOM uint32_t WM : 1; /*!< [6..6] External Wait Mask Specification */ + __IOM uint32_t WR : 4; /*!< [10..7] Number of Access Waits */ + uint32_t : 9; + __IOM uint32_t BAS : 1; /*!< [20..20] SRAM with Byte Selection Byte Access Select */ + uint32_t : 11; + } CS2WCR_0_b; + }; + + union + { + __IOM uint32_t CS2WCR_1; /*!< (@ 0x00000030) CS2 Space Wait Control Register for SDRAM */ + + struct + { + uint32_t : 7; + __IOM uint32_t A2CL : 2; /*!< [8..7] CAS Latency for Area 2 */ + uint32_t : 23; + } CS2WCR_1_b; + }; + }; + + union + { + union + { + __IOM uint32_t CS3WCR_0; /*!< (@ 0x00000034) CS3 Space Wait Control Register for Normal Space, + * SRAM with Byte Selection */ + + struct + { + uint32_t : 6; + __IOM uint32_t WM : 1; /*!< [6..6] External Wait Mask Specification */ + __IOM uint32_t WR : 4; /*!< [10..7] Number of Access Waits */ + uint32_t : 9; + __IOM uint32_t BAS : 1; /*!< [20..20] SRAM with Byte Selection Byte Access Select */ + uint32_t : 11; + } CS3WCR_0_b; + }; + + union + { + __IOM uint32_t CS3WCR_1; /*!< (@ 0x00000034) CS3 Space Wait Control Register for SDRAM */ + + struct + { + __IOM uint32_t WTRC : 2; /*!< [1..0] Number of Idle States from REF Command/Self-Refresh Release + * to ACTV/REF/MRS Command */ + uint32_t : 1; + __IOM uint32_t TRWL : 2; /*!< [4..3] Number of Auto-Precharge Startup Wait Cycles */ + uint32_t : 2; + __IOM uint32_t A3CL : 2; /*!< [8..7] CAS Latency for Area 3 */ + uint32_t : 1; + __IOM uint32_t WTRCD : 2; /*!< [11..10] Number of Waits between ACTV Command and READ(A)/WRIT(A) + * Command */ + uint32_t : 1; + __IOM uint32_t WTRP : 2; /*!< [14..13] Number of Auto-Precharge Completion Wait States */ + uint32_t : 17; + } CS3WCR_1_b; + }; + }; + __IM uint32_t RESERVED2; + + union + { + __IOM uint32_t CS5WCR; /*!< (@ 0x0000003C) CS5 Space Wait Control Register for Normal Space, + * SRAM with Byte Selection, and MPX-I/O */ + + struct + { + __IOM uint32_t HW : 2; /*!< [1..0] Delay Cycles from RD#, WEn# to Address, CS5# */ + uint32_t : 4; + __IOM uint32_t WM : 1; /*!< [6..6] External Wait Mask Specification */ + __IOM uint32_t WR : 4; /*!< [10..7] Number of Read Access Waits */ + __IOM uint32_t SW : 2; /*!< [12..11] Number of Delay Cycles from Address, CS5# Assertion + * to RD#, WEn# Assertion */ + uint32_t : 3; + __IOM uint32_t WW : 3; /*!< [18..16] Number of Write Access Waits */ + uint32_t : 1; + __IOM uint32_t MPXWSBAS : 1; /*!< [20..20] MPX-I/O Interface Address Cycle Wait and SRAM with + * Byte Selection Byte Access Select */ + __IOM uint32_t SZSEL : 1; /*!< [21..21] MPX-I/O Interface Bus Width Specification */ + uint32_t : 10; + } CS5WCR_b; + }; + __IM uint32_t RESERVED3[3]; + + union + { + __IOM uint32_t SDCR; /*!< (@ 0x0000004C) SDRAM Control Register */ + + struct + { + __IOM uint32_t A3COL : 2; /*!< [1..0] Number of Bits of Column Address for Area 3 */ + uint32_t : 1; + __IOM uint32_t A3ROW : 2; /*!< [4..3] Number of Bits of Row Address for Area 3 */ + uint32_t : 3; + __IOM uint32_t BACTV : 1; /*!< [8..8] Bank Active Mode */ + __IOM uint32_t PDOWN : 1; /*!< [9..9] Power-Down Mode */ + __IOM uint32_t RMODE : 1; /*!< [10..10] Refresh Mode */ + __IOM uint32_t RFSH : 1; /*!< [11..11] Refresh Control */ + uint32_t : 1; + __IOM uint32_t DEEP : 1; /*!< [13..13] Deep Power-Down Mode */ + uint32_t : 2; + __IOM uint32_t A2COL : 2; /*!< [17..16] Number of Bits of Column Address for Area 2 */ + uint32_t : 1; + __IOM uint32_t A2ROW : 2; /*!< [20..19] Number of Bits of Row Address for Area 2 */ + uint32_t : 11; + } SDCR_b; + }; + __IOM uint32_t RTCSR; /*!< (@ 0x00000050) Refresh Timer Control/Status Register */ + __IOM uint32_t RTCNT; /*!< (@ 0x00000054) Refresh Timer Counter */ + __IOM uint32_t RTCOR; /*!< (@ 0x00000058) Refresh Time Constant Register */ + __IM uint32_t RESERVED4; + + union + { + __IOM uint32_t TOSCOR[6]; /*!< (@ 0x00000060) Timeout Cycle Constant Register [0..5] */ + + struct + { + __IOM uint32_t TOCNUM : 16; /*!< [15..0] Timeout Cycle Number */ + uint32_t : 16; + } TOSCOR_b[6]; + }; + __IM uint32_t RESERVED5[2]; + + union + { + __IOM uint32_t TOSTR; /*!< (@ 0x00000080) Timeout Status Register */ + + struct + { + __IOM uint32_t CS0TOSTF : 1; /*!< [0..0] CS0 Space Timeout Status Flag */ + uint32_t : 1; + __IOM uint32_t CS2TOSTF : 1; /*!< [2..2] CS2 Space Timeout Status Flag */ + __IOM uint32_t CS3TOSTF : 1; /*!< [3..3] CS3 Space Timeout Status Flag */ + uint32_t : 1; + __IOM uint32_t CS5TOSTF : 1; /*!< [5..5] CS5 Space Timeout Status Flag */ + uint32_t : 26; + } TOSTR_b; + }; + + union + { + __IOM uint32_t TOENR; /*!< (@ 0x00000084) Timeout Enable Register */ + + struct + { + __IOM uint32_t CS0TOEN : 1; /*!< [0..0] CS0 Space Timeout Detection Enable */ + uint32_t : 1; + __IOM uint32_t CS2TOEN : 1; /*!< [2..2] CS2 Space Timeout Detection Enable */ + __IOM uint32_t CS3TOEN : 1; /*!< [3..3] CS3 Space Timeout Detection Enable */ + uint32_t : 1; + __IOM uint32_t CS5TOEN : 1; /*!< [5..5] CS5 Space Timeout Detection Enable */ + uint32_t : 26; + } TOENR_b; + }; +} R_BSC_Type; /*!< Size = 136 (0x88) */ + +/* =========================================================================================================================== */ +/* ================ R_XSPI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief xSPI (R_XSPI0) + */ + +typedef struct /*!< (@ 0x80220000) R_XSPI0 Structure */ +{ + union + { + __IOM uint32_t WRAPCFG; /*!< (@ 0x00000000) xSPI Wrapper Configuration Register */ + + struct + { + uint32_t : 8; + __IOM uint32_t DSSFTCS0 : 5; /*!< [12..8] DS shift for slave0 */ + uint32_t : 11; + __IOM uint32_t DSSFTCS1 : 5; /*!< [28..24] DS shift for slave1 */ + uint32_t : 3; + } WRAPCFG_b; + }; + + union + { + __IOM uint32_t COMCFG; /*!< (@ 0x00000004) xSPI Common Configuration Register */ + + struct + { + uint32_t : 16; + __IOM uint32_t OEASTEX : 1; /*!< [16..16] Output Enable Asserting extension */ + __IOM uint32_t OENEGEX : 1; /*!< [17..17] Output Enable Negating extension */ + uint32_t : 14; + } COMCFG_b; + }; + + union + { + __IOM uint32_t BMCFG; /*!< (@ 0x00000008) xSPI Bridge Map Configuration Register */ + + struct + { + __IOM uint32_t WRMD : 1; /*!< [0..0] AHB Write Response mode */ + uint32_t : 6; + __IOM uint32_t MWRCOMB : 1; /*!< [7..7] Memory Write Combination mode */ + __IOM uint32_t MWRSIZE : 8; /*!< [15..8] Memory Write Size */ + __IOM uint32_t PREEN : 1; /*!< [16..16] Prefetch enable */ + uint32_t : 15; + } BMCFG_b; + }; + __IM uint32_t RESERVED; + __IOM R_XSPI0_CSa_Type CSa[2]; /*!< (@ 0x00000010) xSPI Command Map Configuration Register [0..1] */ + __IM uint32_t RESERVED1[8]; + + union + { + __IOM uint32_t LIOCFGCS[2]; /*!< (@ 0x00000050) xSPI Link I/O Configuration Register CSn */ + + struct + { + __IOM uint32_t PRTMD : 10; /*!< [9..0] Protocol mode */ + __IOM uint32_t LATEMD : 1; /*!< [10..10] Latency mode */ + __IOM uint32_t WRMSKMD : 1; /*!< [11..11] Write mask mode */ + uint32_t : 4; + __IOM uint32_t CSMIN : 4; /*!< [19..16] CS minimum idle term */ + __IOM uint32_t CSASTEX : 1; /*!< [20..20] CS asserting extension */ + __IOM uint32_t CSNEGEX : 1; /*!< [21..21] CS negating extension */ + __IOM uint32_t SDRDRV : 1; /*!< [22..22] SDR driving timing */ + __IOM uint32_t SDRSMPMD : 1; /*!< [23..23] SDR Sampling mode */ + __IOM uint32_t SDRSMPSFT : 4; /*!< [27..24] SDR Sampling window shift */ + __IOM uint32_t DDRSMPEX : 4; /*!< [31..28] DDR sampling window extend */ + } LIOCFGCS_b[2]; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t BMCTL0; /*!< (@ 0x00000060) xSPI Bridge Map Control Register 0 */ + + struct + { + __IOM uint32_t CS0ACC : 2; /*!< [1..0] AHB channel to slave0 memory area access enable */ + __IOM uint32_t CS1ACC : 2; /*!< [3..2] AHB channel to slave1 memory area access enable */ + uint32_t : 28; + } BMCTL0_b; + }; + + union + { + __OM uint32_t BMCTL1; /*!< (@ 0x00000064) xSPI Bridge Map Control Register 1 */ + + struct + { + uint32_t : 8; + __OM uint32_t MWRPUSH : 1; /*!< [8..8] Memory Write Data Push */ + uint32_t : 1; + __OM uint32_t PBUFCLR : 1; /*!< [10..10] Prefetch Buffer clear */ + uint32_t : 21; + } BMCTL1_b; + }; + + union + { + __IOM uint32_t CMCTL; /*!< (@ 0x00000068) xSPI Command Map Control Register */ + + struct + { + __IOM uint32_t XIPENCODE : 8; /*!< [7..0] XiP mode enter code */ + __IOM uint32_t XIPEXCODE : 8; /*!< [15..8] XiP mode exit code */ + __IOM uint32_t XIPEN : 1; /*!< [16..16] XiP mode enable */ + uint32_t : 15; + } CMCTL_b; + }; + + union + { + __IOM uint32_t CSSCTL; /*!< (@ 0x0000006C) xSPI CS Size Control Register */ + + struct + { + __IOM uint32_t CS0SIZE : 6; /*!< [5..0] CS0 (slave0) size */ + uint32_t : 2; + __IOM uint32_t CS1SIZE : 6; /*!< [13..8] CS1 (slave1) size */ + uint32_t : 18; + } CSSCTL_b; + }; + + union + { + __IOM uint32_t CDCTL0; /*!< (@ 0x00000070) xSPI Command Manual Control Register 0 */ + + struct + { + __IOM uint32_t TRREQ : 1; /*!< [0..0] Transaction request */ + __IOM uint32_t PERMD : 1; /*!< [1..1] Periodic mode */ + uint32_t : 1; + __IOM uint32_t CSSEL : 1; /*!< [3..3] Chip select */ + __IOM uint32_t TRNUM : 2; /*!< [5..4] Transaction number */ + uint32_t : 10; + __IOM uint32_t PERITV : 5; /*!< [20..16] Periodic transaction interval */ + uint32_t : 3; + __IOM uint32_t PERREP : 4; /*!< [27..24] Periodic transaction repeat */ + uint32_t : 4; + } CDCTL0_b; + }; + + union + { + __IOM uint32_t CDCTL1; /*!< (@ 0x00000074) xSPI Command Manual Control Register 1 */ + + struct + { + __IOM uint32_t PEREXP : 32; /*!< [31..0] Periodic transaction expected value */ + } CDCTL1_b; + }; + + union + { + __IOM uint32_t CDCTL2; /*!< (@ 0x00000078) xSPI Command Manual Control Register 2 */ + + struct + { + __IOM uint32_t PERMSK : 32; /*!< [31..0] Periodic transaction masked value */ + } CDCTL2_b; + }; + __IM uint32_t RESERVED3; + __IOM R_XSPI0_BUF_Type BUF[4]; /*!< (@ 0x00000080) xSPI Command Manual Buf [0..3] */ + __IM uint32_t RESERVED4[16]; + + union + { + __IOM uint32_t LPCTL0; /*!< (@ 0x00000100) xSPI Link Pattern Control Register 0 */ + + struct + { + __IOM uint32_t PATREQ : 1; /*!< [0..0] Pattern request */ + uint32_t : 2; + __IOM uint32_t CSSEL : 1; /*!< [3..3] Chip select */ + __IOM uint32_t XDPIN : 2; /*!< [5..4] XiP Disable pattern pin */ + uint32_t : 10; + __IOM uint32_t XD1LEN : 5; /*!< [20..16] XiP Disable pattern 1st phase length */ + uint32_t : 2; + __IOM uint32_t XD1VAL : 1; /*!< [23..23] XiP Disable pattern 1st phase value */ + __IOM uint32_t XD2LEN : 5; /*!< [28..24] XiP Disable pattern 2nd phase length */ + uint32_t : 2; + __IOM uint32_t XD2VAL : 1; /*!< [31..31] XiP Disable pattern 2nd phase value */ + } LPCTL0_b; + }; + + union + { + __IOM uint32_t LPCTL1; /*!< (@ 0x00000104) xSPI Link Pattern Control Register 1 */ + + struct + { + __IOM uint32_t PATREQ : 2; /*!< [1..0] Pattern request */ + uint32_t : 1; + __IOM uint32_t CSSEL : 1; /*!< [3..3] Chip select */ + __IOM uint32_t RSTREP : 2; /*!< [5..4] Reset pattern repeat */ + uint32_t : 2; + __IOM uint32_t RSTWID : 3; /*!< [10..8] Reset pattern width */ + uint32_t : 1; + __IOM uint32_t RSTSU : 3; /*!< [14..12] Reset pattern data output setup time */ + uint32_t : 17; + } LPCTL1_b; + }; + + union + { + __IOM uint32_t LIOCTL; /*!< (@ 0x00000108) xSPI Link I/O Control Register */ + + struct + { + __IOM uint32_t WPCS0 : 1; /*!< [0..0] WP drive for slave0 */ + __IOM uint32_t WPCS1 : 1; /*!< [1..1] WP drive for slave1 */ + uint32_t : 14; + __IOM uint32_t RSTCS0 : 1; /*!< [16..16] Reset drive for slave0 */ + __IOM uint32_t RSTCS1 : 1; /*!< [17..17] Reset drive for slave1 */ + uint32_t : 14; + } LIOCTL_b; + }; + __IM uint32_t RESERVED5[9]; + __IOM R_XSPI0_CSb_Type CSb[2]; /*!< (@ 0x00000130) xSPI Command Calibration Control register [0..1] */ + __IM uint32_t RESERVED6[4]; + + union + { + __IM uint32_t VERSTT; /*!< (@ 0x00000180) xSPI Version Register */ + + struct + { + __IM uint32_t VER : 32; /*!< [31..0] Version */ + } VERSTT_b; + }; + + union + { + __IM uint32_t COMSTT; /*!< (@ 0x00000184) xSPI Common Status Register */ + + struct + { + __IM uint32_t MEMACC : 1; /*!< [0..0] Memory access ongoing */ + uint32_t : 3; + __IM uint32_t PBUFNE : 1; /*!< [4..4] Prefetch Buffer Not Empty */ + uint32_t : 1; + __IM uint32_t WRBUFNE : 1; /*!< [6..6] Write Buffer Not Empty */ + uint32_t : 9; + __IM uint32_t ECSCS0 : 1; /*!< [16..16] ECS monitor for slave0 */ + __IM uint32_t INTCS0 : 1; /*!< [17..17] INT monitor for slave0 */ + __IM uint32_t RSTOCS0 : 1; /*!< [18..18] RSTO monitor for slave0 */ + uint32_t : 1; + __IM uint32_t ECSCS1 : 1; /*!< [20..20] ECS monitor for slave1 */ + __IM uint32_t INTCS1 : 1; /*!< [21..21] INT monitor for slave1 */ + __IM uint32_t RSTOCS1 : 1; /*!< [22..22] RSTO monitor for slave1 */ + uint32_t : 9; + } COMSTT_b; + }; + + union + { + __IM uint32_t CASTTCS[2]; /*!< (@ 0x00000188) xSPI Calibration Status Register CSn */ + + struct + { + __IM uint32_t CASUC : 32; /*!< [31..0] Calibration Success */ + } CASTTCS_b[2]; + }; + + union + { + __IM uint32_t INTS; /*!< (@ 0x00000190) xSPI Interrupt Status Register */ + + struct + { + __IM uint32_t CMDCMP : 1; /*!< [0..0] Command Completed */ + __IM uint32_t PATCMP : 1; /*!< [1..1] Pattern Completed */ + __IM uint32_t INICMP : 1; /*!< [2..2] Initial Sequence Completed */ + __IM uint32_t PERTO : 1; /*!< [3..3] Periodic transaction timeout */ + __IM uint32_t DSTOCS0 : 1; /*!< [4..4] DS timeout for slave0 */ + __IM uint32_t DSTOCS1 : 1; /*!< [5..5] DS timeout for slave1 */ + uint32_t : 2; + __IM uint32_t ECSCS0 : 1; /*!< [8..8] ECC error detection for slave0 */ + __IM uint32_t ECSCS1 : 1; /*!< [9..9] ECC error detection for slave1 */ + uint32_t : 2; + __IM uint32_t INTCS0 : 1; /*!< [12..12] Interrupt detection for slave0 */ + __IM uint32_t INTCS1 : 1; /*!< [13..13] Interrupt detection for slave1 */ + uint32_t : 2; + __IM uint32_t BRGOF : 1; /*!< [16..16] Bridge Buffer overflow */ + uint32_t : 1; + __IM uint32_t BRGUF : 1; /*!< [18..18] Bridge Buffer underflow */ + uint32_t : 1; + __IM uint32_t BUSERR : 1; /*!< [20..20] AHB bus error */ + uint32_t : 7; + __IM uint32_t CAFAILCS0 : 1; /*!< [28..28] Calibration failed for slave0 */ + __IM uint32_t CAFAILCS1 : 1; /*!< [29..29] Calibration failed for slave1 */ + __IM uint32_t CASUCCS0 : 1; /*!< [30..30] Calibration success for slave0 */ + __IM uint32_t CASUCCS1 : 1; /*!< [31..31] Calibration success for slave1 */ + } INTS_b; + }; + + union + { + __OM uint32_t INTC; /*!< (@ 0x00000194) xSPI Interrupt Clear Register */ + + struct + { + __OM uint32_t CMDCMPC : 1; /*!< [0..0] Command Completed interrupt clear */ + __OM uint32_t PATCMPC : 1; /*!< [1..1] Pattern Completed interrupt clear */ + __OM uint32_t INICMPC : 1; /*!< [2..2] Initial Sequence Completed interrupt clear */ + __OM uint32_t PERTOC : 1; /*!< [3..3] Periodic transaction timeout interrupt clear */ + __OM uint32_t DSTOCS0C : 1; /*!< [4..4] DS timeout for slave0 interrupt clear */ + __OM uint32_t DSTOCS1C : 1; /*!< [5..5] DS timeout for slave1 interrupt clear */ + uint32_t : 2; + __OM uint32_t ECSCS0C : 1; /*!< [8..8] ECC error detection for slave0 interrupt clear */ + __OM uint32_t ECSCS1C : 1; /*!< [9..9] ECC error detection for slave1 interrupt clear */ + uint32_t : 2; + __OM uint32_t INTCS0C : 1; /*!< [12..12] Interrupt detection for slave0 interrupt clear */ + __OM uint32_t INTCS1C : 1; /*!< [13..13] Interrupt detection for slave1 interrupt clear */ + uint32_t : 2; + __OM uint32_t BRGOFC : 1; /*!< [16..16] Bridge Buffer overflow interrupt clear */ + uint32_t : 1; + __OM uint32_t BRGUFC : 1; /*!< [18..18] Bridge Buffer underflow interrupt clear */ + uint32_t : 1; + __OM uint32_t BUSERRC : 1; /*!< [20..20] AHB bus error interrupt clear */ + uint32_t : 7; + __OM uint32_t CAFAILCS0C : 1; /*!< [28..28] Calibration failed for slave0 interrupt clear */ + __OM uint32_t CAFAILCS1C : 1; /*!< [29..29] Calibration failed for slave1 interrupt clear */ + __OM uint32_t CASUCCS0C : 1; /*!< [30..30] Calibration success for slave0 interrupt clear */ + __OM uint32_t CASUCCS1C : 1; /*!< [31..31] Calibration success for slave1 interrupt clear */ + } INTC_b; + }; + + union + { + __IOM uint32_t INTE; /*!< (@ 0x00000198) xSPI Interrupt Enable Register */ + + struct + { + __IOM uint32_t CMDCMPE : 1; /*!< [0..0] Command Completed interrupt enable */ + __IOM uint32_t PATCMPE : 1; /*!< [1..1] Pattern Completed interrupt enable */ + __IOM uint32_t INICMPE : 1; /*!< [2..2] Initial Sequence Completed interrupt enable */ + __IOM uint32_t PERTOE : 1; /*!< [3..3] Periodic transaction timeout interrupt enable */ + __IOM uint32_t DSTOCS0E : 1; /*!< [4..4] DS timeout for slave0 interrupt enable */ + __IOM uint32_t DSTOCS1E : 1; /*!< [5..5] DS timeout for slave1 interrupt enable */ + uint32_t : 2; + __IOM uint32_t ECSCS0E : 1; /*!< [8..8] ECC error detection for slave0 interrupt enable */ + __IOM uint32_t ECSCS1E : 1; /*!< [9..9] ECC error detection for slave1 interrupt enable */ + uint32_t : 2; + __IOM uint32_t INTCS0E : 1; /*!< [12..12] Interrupt detection for slave0 interrupt enable */ + __IOM uint32_t INTCS1E : 1; /*!< [13..13] Interrupt detection for slave1 interrupt enable */ + uint32_t : 2; + __IOM uint32_t BRGOFE : 1; /*!< [16..16] Bridge Buffer overflow interrupt enable */ + uint32_t : 1; + __IOM uint32_t BRGUFE : 1; /*!< [18..18] Bridge Buffer underflow interrupt enable */ + uint32_t : 1; + __IOM uint32_t BUSERRE : 1; /*!< [20..20] AHB bus error interrupt enable */ + uint32_t : 7; + __IOM uint32_t CAFAILCS0E : 1; /*!< [28..28] Calibration failed for slave0 interrupt enable */ + __IOM uint32_t CAFAILCS1E : 1; /*!< [29..29] Calibration failed for slave1 interrupt enable */ + __IOM uint32_t CASUCCS0E : 1; /*!< [30..30] Calibration success for slave0 interrupt enable */ + __IOM uint32_t CASUCCS1E : 1; /*!< [31..31] Calibration success for slave1 interrupt enable */ + } INTE_b; + }; +} R_XSPI0_Type; /*!< Size = 412 (0x19c) */ + +/* =========================================================================================================================== */ +/* ================ R_MBXSEM ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Mailbox and Semaphore (R_MBXSEM) + */ + +typedef struct /*!< (@ 0x80240000) R_MBXSEM Structure */ +{ + union + { + __IOM uint32_t SEM[8]; /*!< (@ 0x00000000) Semaphore Register [0..7] */ + + struct + { + __IOM uint32_t SEM : 1; /*!< [0..0] Semaphore bit */ + uint32_t : 31; + } SEM_b[8]; + }; + + union + { + __IOM uint32_t SEMRCEN; /*!< (@ 0x00000020) Semaphore Read Clear Enable Register */ + + struct + { + __IOM uint32_t SEMRCEN0 : 1; /*!< [0..0] SEMRCEN0 */ + __IOM uint32_t SEMRCEN1 : 1; /*!< [1..1] SEMRCEN1 */ + __IOM uint32_t SEMRCEN2 : 1; /*!< [2..2] SEMRCEN2 */ + __IOM uint32_t SEMRCEN3 : 1; /*!< [3..3] SEMRCEN3 */ + __IOM uint32_t SEMRCEN4 : 1; /*!< [4..4] SEMRCEN4 */ + __IOM uint32_t SEMRCEN5 : 1; /*!< [5..5] SEMRCEN5 */ + __IOM uint32_t SEMRCEN6 : 1; /*!< [6..6] SEMRCEN6 */ + __IOM uint32_t SEMRCEN7 : 1; /*!< [7..7] SEMRCEN7 */ + uint32_t : 24; + } SEMRCEN_b; + }; + __IM uint32_t RESERVED[7]; + + union + { + __IM uint32_t MBXH2C[4]; /*!< (@ 0x00000040) Host to CR52 Mailbox Register [0..3] */ + + struct + { + __IM uint32_t MBX : 32; /*!< [31..0] MBX */ + } MBXH2C_b[4]; + }; + + union + { + __IM uint32_t MBXISETH2C; /*!< (@ 0x00000050) Host to CR52 Mailbox Interrupt Set Register */ + + struct + { + __IM uint32_t MBX_INT0S : 1; /*!< [0..0] Generates or indicates MBX_INT0 interrupt of mailbox + * from external host CPU to internal Cortex-R52. */ + __IM uint32_t MBX_INT1S : 1; /*!< [1..1] Generates or indicates MBX_INT1 interrupt of mailbox + * from external host CPU to internal Cortex-R52. */ + __IM uint32_t MBX_INT2S : 1; /*!< [2..2] Generates or indicates MBX_INT2 interrupt of mailbox + * from external host CPU to internal Cortex-R52. */ + __IM uint32_t MBX_INT3S : 1; /*!< [3..3] Generates or indicates MBX_INT3 interrupt of mailbox + * from external host CPU to internal Cortex-R52. */ + uint32_t : 28; + } MBXISETH2C_b; + }; + + union + { + __IOM uint32_t MBXICLRH2C; /*!< (@ 0x00000054) Host to CR52 Mailbox Interrupt Clear Register */ + + struct + { + __IOM uint32_t MBX_INT0C : 1; /*!< [0..0] Clears or indicates MBX_INT0 interrupt of mailbox from + * external host CPU to internal Cortex-R52. */ + __IOM uint32_t MBX_INT1C : 1; /*!< [1..1] Clears or indicates MBX_INT1 interrupt of mailbox from + * external host CPU to internal Cortex-R52. */ + __IOM uint32_t MBX_INT2C : 1; /*!< [2..2] Clears or indicates MBX_INT2 interrupt of mailbox from + * external host CPU to internal Cortex-R52. */ + __IOM uint32_t MBX_INT3C : 1; /*!< [3..3] Clears or indicates MBX_INT3 interrupt of mailbox from + * external host CPU to internal Cortex-R52. */ + uint32_t : 28; + } MBXICLRH2C_b; + }; + __IM uint32_t RESERVED1[10]; + + union + { + __IOM uint32_t MBXC2H[4]; /*!< (@ 0x00000080) CR52 to Host Mailbox Register [0..3] */ + + struct + { + __IOM uint32_t MBX : 32; /*!< [31..0] MBX */ + } MBXC2H_b[4]; + }; + + union + { + __IOM uint32_t MBXISETC2H; /*!< (@ 0x00000090) CR52 to Host Mailbox Interrupt Set Register */ + + struct + { + __IOM uint32_t MBX_HINT0S : 1; /*!< [0..0] Generates or indicates MBX_HINT0 interrupt of mailbox + * from internal Cortex-R52 to external host CPU. */ + __IOM uint32_t MBX_HINT1S : 1; /*!< [1..1] Generates or indicates MBX_HINT1 interrupt of mailbox + * from internal Cortex-R52 to external host CPU. */ + __IOM uint32_t MBX_HINT2S : 1; /*!< [2..2] Generates or indicates MBX_HINT2 interrupt of mailbox + * from internal Cortex-R52 to external host CPU. */ + __IOM uint32_t MBX_HINT3S : 1; /*!< [3..3] Generates or indicates MBX_HINT3 interrupt of mailbox + * from internal Cortex-R52 to external host CPU. */ + uint32_t : 28; + } MBXISETC2H_b; + }; + + union + { + __IM uint32_t MBXICLRC2H; /*!< (@ 0x00000094) CR52 to Host Mailbox Interrupt Clear Register */ + + struct + { + __IM uint32_t MBX_HINT0C : 1; /*!< [0..0] Clears or indicates MBX_HINT0 interrupt of mailbox from + * internal Cortex-R52 to external host CPU. */ + __IM uint32_t MBX_HINT1C : 1; /*!< [1..1] Clears or indicates MBX_HINT1 interrupt of mailbox from + * internal Cortex-R52 to external host CPU. */ + __IM uint32_t MBX_HINT2C : 1; /*!< [2..2] Clears or indicates MBX_HINT2 interrupt of mailbox from + * internal Cortex-R52 to external host CPU. */ + __IM uint32_t MBX_HINT3C : 1; /*!< [3..3] Clears or indicates MBX_HINT3 interrupt of mailbox from + * internal Cortex-R52 to external host CPU. */ + uint32_t : 28; + } MBXICLRC2H_b; + }; +} R_MBXSEM_Type; /*!< Size = 152 (0x98) */ + +/* =========================================================================================================================== */ +/* ================ R_SHOSTIF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Host Interface (R_SHOSTIF) + */ + +typedef struct /*!< (@ 0x80241000) R_SHOSTIF Structure */ +{ + union + { + __IOM uint32_t CTRLR0; /*!< (@ 0x00000000) Control Register 0 */ + + struct + { + uint32_t : 8; + __IOM uint32_t SCPH : 1; /*!< [8..8] Serial Clock Phase */ + __IOM uint32_t SCPOL : 1; /*!< [9..9] Serial Clock Polarity */ + uint32_t : 22; + } CTRLR0_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t ENR; /*!< (@ 0x00000008) Enable Register */ + + struct + { + __IOM uint32_t ENABLE : 1; /*!< [0..0] SHOSTIF Enable */ + uint32_t : 31; + } ENR_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t RXFBTR; /*!< (@ 0x00000014) Receive FIFO Burst Threshold Register */ + + struct + { + __IOM uint32_t RXFBTL : 6; /*!< [5..0] Receive FIFO Burst Threshold */ + uint32_t : 26; + } RXFBTR_b; + }; + + union + { + __IOM uint32_t TXFTLR; /*!< (@ 0x00000018) Transmit FIFO Threshold Level Register */ + + struct + { + __IOM uint32_t TFT : 6; /*!< [5..0] Transmit FIFO Threshold */ + uint32_t : 26; + } TXFTLR_b; + }; + + union + { + __IOM uint32_t RXFTLR; /*!< (@ 0x0000001C) Receive FIFO Threshold Level Register */ + + struct + { + __IOM uint32_t RFT : 6; /*!< [5..0] Receive FIFO Threshold */ + uint32_t : 26; + } RXFTLR_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IM uint32_t SR; /*!< (@ 0x00000028) Status Register */ + + struct + { + __IM uint32_t BUSY : 1; /*!< [0..0] Busy Flag */ + uint32_t : 31; + } SR_b; + }; + + union + { + __IOM uint32_t IMR; /*!< (@ 0x0000002C) Interrupt Mask Register */ + + struct + { + __IOM uint32_t TXEIM : 1; /*!< [0..0] Transmit FIFO Empty Interrupt Mask */ + uint32_t : 2; + __IOM uint32_t RXOIM : 1; /*!< [3..3] Receive FIFO Overflow Interrupt Mask */ + __IOM uint32_t RXFIM : 1; /*!< [4..4] Receive FIFO Full Interrupt Mask */ + uint32_t : 2; + __IOM uint32_t TXUIM : 1; /*!< [7..7] Transmit FIFO Underflow Mask */ + __IOM uint32_t AHBEM : 1; /*!< [8..8] AHB Error Interrupt Mask */ + __IOM uint32_t SPIMEM : 1; /*!< [9..9] SPI Master Error Interrupt Mask */ + uint32_t : 22; + } IMR_b; + }; + + union + { + __IM uint32_t ISR; /*!< (@ 0x00000030) Interrupt Status Register */ + + struct + { + __IM uint32_t TXEIS : 1; /*!< [0..0] Transmit FIFO Empty Interrupt Status */ + uint32_t : 2; + __IM uint32_t RXOIS : 1; /*!< [3..3] Receive FIFO Overflow Interrupt Status */ + __IM uint32_t RXFIS : 1; /*!< [4..4] Receive FIFO Full Interrupt Status */ + uint32_t : 2; + __IM uint32_t TXUIS : 1; /*!< [7..7] Transmit FIFO Underflow Status */ + __IM uint32_t AHBES : 1; /*!< [8..8] AHB Error Interrupt Status */ + __IM uint32_t SPIMES : 1; /*!< [9..9] SPI Master Error Interrupt Status */ + uint32_t : 22; + } ISR_b; + }; + + union + { + __IM uint32_t RISR; /*!< (@ 0x00000034) Raw Interrupt Status Register */ + + struct + { + __IM uint32_t TXEIR : 1; /*!< [0..0] Transmit FIFO Empty Raw Interrupt Status */ + uint32_t : 2; + __IM uint32_t RXOIR : 1; /*!< [3..3] Receive FIFO Overflow Raw Interrupt Status */ + __IM uint32_t RXFIR : 1; /*!< [4..4] Receive FIFO Full Raw Interrupt Status */ + uint32_t : 2; + __IM uint32_t TXUIR : 1; /*!< [7..7] Transmit FIFO Underflow Raw Interrupt Status */ + __IM uint32_t AHBER : 1; /*!< [8..8] AHB Error Raw Interrupt Status */ + __IM uint32_t SPIMER : 1; /*!< [9..9] SPI Master Error Raw Interrupt Status */ + uint32_t : 22; + } RISR_b; + }; + + union + { + __IM uint32_t TXUICR; /*!< (@ 0x00000038) Transmit FIFO Underflow Interrupt Clear Register */ + + struct + { + __IM uint32_t TXUICR : 1; /*!< [0..0] Clear Transmit FIFO Underflow Interrupt */ + uint32_t : 31; + } TXUICR_b; + }; + + union + { + __IM uint32_t RXOICR; /*!< (@ 0x0000003C) Receive FIFO Overflow Interrupt Clear Register */ + + struct + { + __IM uint32_t RXOICR : 1; /*!< [0..0] Clear Receive FIFO Overflow Interrupt */ + uint32_t : 31; + } RXOICR_b; + }; + + union + { + __IM uint32_t SPIMECR; /*!< (@ 0x00000040) SPI Master Interrupt Clear Register */ + + struct + { + __IM uint32_t SPIMECR : 1; /*!< [0..0] Clear SPI Master Error interrupt */ + uint32_t : 31; + } SPIMECR_b; + }; + + union + { + __IM uint32_t AHBECR; /*!< (@ 0x00000044) AHB Error Clear Register */ + + struct + { + __IM uint32_t AHBECR : 1; /*!< [0..0] Clear AHB Error Interrupt */ + uint32_t : 31; + } AHBECR_b; + }; + + union + { + __IM uint32_t ICR; /*!< (@ 0x00000048) Interrupt Clear Register */ + + struct + { + __IM uint32_t ICR : 1; /*!< [0..0] Clear Interrupts */ + uint32_t : 31; + } ICR_b; + }; +} R_SHOSTIF_Type; /*!< Size = 76 (0x4c) */ + +/* =========================================================================================================================== */ +/* ================ R_PHOSTIF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Parallel Host Interface (R_PHOSTIF) + */ + +typedef struct /*!< (@ 0x80242000) R_PHOSTIF Structure */ +{ + union + { + __IOM uint16_t HIFBCC; /*!< (@ 0x00000000) HOSTIF Bus Control Register */ + + struct + { + __IOM uint16_t RBUFON0 : 1; /*!< [0..0] RBUFON0 */ + __IOM uint16_t RBUFON1 : 1; /*!< [1..1] RBUFON1 */ + __IOM uint16_t RBUFON2 : 1; /*!< [2..2] RBUFON2 */ + __IOM uint16_t RBUFON3 : 1; /*!< [3..3] RBUFON3 */ + __IOM uint16_t RBUFON4 : 1; /*!< [4..4] RBUFON4 */ + __IOM uint16_t RBUFON5 : 1; /*!< [5..5] RBUFON5 */ + uint16_t : 2; + __IOM uint16_t RBUFONX : 1; /*!< [8..8] RBUFONX */ + uint16_t : 3; + __IOM uint16_t BSTON : 1; /*!< [12..12] BSTON */ + __IOM uint16_t WRPON : 1; /*!< [13..13] WRPON */ + uint16_t : 2; + } HIFBCC_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t HIFBTC; /*!< (@ 0x00000004) HOSTIF Timing Control Register */ + + struct + { + __IOM uint16_t WRSTD : 3; /*!< [2..0] Specifies the timing for detecting the start of write + * operation by the HWRSTB# signal. */ + uint16_t : 1; + __IOM uint16_t RDSTD : 2; /*!< [5..4] Specifies the timing for detecting the start of read + * operation by the HRD# signal. */ + uint16_t : 2; + __IOM uint16_t PASTD : 3; /*!< [10..8] PASTD */ + uint16_t : 1; + __IOM uint16_t RDDTS : 2; /*!< [13..12] RDDTS */ + uint16_t : 2; + } HIFBTC_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t HIFPRC; /*!< (@ 0x00000008) HOSTIF Page ROM Control Register */ + + struct + { + __IOM uint16_t PAGEON0 : 1; /*!< [0..0] PAGEON0 */ + __IOM uint16_t PAGEON1 : 1; /*!< [1..1] PAGEON1 */ + __IOM uint16_t PAGEON2 : 1; /*!< [2..2] PAGEON2 */ + __IOM uint16_t PAGEON3 : 1; /*!< [3..3] PAGEON3 */ + __IOM uint16_t PAGEON4 : 1; /*!< [4..4] PAGEON4 */ + __IOM uint16_t PAGEON5 : 1; /*!< [5..5] PAGEON5 */ + uint16_t : 2; + __IOM uint16_t PAGEONX : 1; /*!< [8..8] PAGEONX */ + uint16_t : 3; + __IOM uint16_t PAGESZ : 1; /*!< [12..12] PAGESZ */ + uint16_t : 3; + } HIFPRC_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint16_t HIFIRC; /*!< (@ 0x0000000C) HOSTIF Interrupt Request Control Register */ + + struct + { + __IOM uint16_t ERRRSP : 1; /*!< [0..0] This bit is set to 1 on reception of an error response + * from internal slave modules. */ + uint16_t : 15; + } HIFIRC_b; + }; + __IM uint16_t RESERVED3; + + union + { + __IM uint32_t HIFECR0; /*!< (@ 0x00000010) HOSTIF Error Source Register 0 */ + + struct + { + __IM uint32_t ERRADDR : 32; /*!< [31..0] ERRADDR */ + } HIFECR0_b; + }; + + union + { + __IM uint16_t HIFECR1; /*!< (@ 0x00000014) HOSTIF Error Source Register 1 */ + + struct + { + __IM uint16_t ERRSZ : 3; /*!< [2..0] ERRSZ */ + __IM uint16_t ERRWR : 1; /*!< [3..3] ERRWR */ + uint16_t : 12; + } HIFECR1_b; + }; + __IM uint16_t RESERVED4; + __IM uint32_t RESERVED5[2]; + + union + { + __IOM uint16_t HIFMON1; /*!< (@ 0x00000020) HOSTIF Monitor Register 1 */ + + struct + { + __IOM uint16_t HIFRDY : 1; /*!< [0..0] HIFRDY */ + __IM uint16_t BUSSEL : 1; /*!< [1..1] BUSSEL */ + uint16_t : 1; + __IM uint16_t HIFSYNC : 1; /*!< [3..3] HIFSYNC */ + uint16_t : 12; + } HIFMON1_b; + }; + __IM uint16_t RESERVED6; + + union + { + __IM uint16_t HIFMON2; /*!< (@ 0x00000024) HOSTIF Monitor Register 2 */ + + struct + { + __IM uint16_t HIFBCC : 1; /*!< [0..0] HIFBCC */ + __IM uint16_t HIFBTC : 1; /*!< [1..1] HIFBTC */ + __IM uint16_t HIFPRC : 1; /*!< [2..2] HIFPRC */ + __IM uint16_t HIFIRC : 1; /*!< [3..3] HIFIRC */ + __IM uint16_t HIFXAL : 1; /*!< [4..4] HIFXAL */ + __IM uint16_t HIFXAH : 1; /*!< [5..5] HIFXAH */ + uint16_t : 10; + } HIFMON2_b; + }; + __IM uint16_t RESERVED7; + + union + { + __IM uint16_t HIFMON3; /*!< (@ 0x00000028) HOSTIF Monitor Register 3 */ + + struct + { + __IM uint16_t HIFEXT0 : 1; /*!< [0..0] HIFEXT0 */ + __IM uint16_t HIFEXT1 : 1; /*!< [1..1] HIFEXT1 */ + uint16_t : 14; + } HIFMON3_b; + }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9; + + union + { + __IOM uint16_t HIFXAL; /*!< (@ 0x00000030) HOSTIF Specified Area Lower-limit Register */ + + struct + { + __IOM uint16_t XADDRL : 9; /*!< [8..0] Specifies the lower-limit address of the specified area + * to be set in the external bus address space. */ + uint16_t : 7; + } HIFXAL_b; + }; + __IM uint16_t RESERVED10; + + union + { + __IOM uint16_t HIFXAH; /*!< (@ 0x00000034) HOSTIF Specified Area Upper-limit Register */ + + struct + { + __IOM uint16_t XADDRH : 9; /*!< [8..0] Specifies the upper-limit address of the specified area + * to be set in the external bus address space. */ + uint16_t : 7; + } HIFXAH_b; + }; + __IM uint16_t RESERVED11; + __IM uint32_t RESERVED12[18]; + + union + { + __IOM uint16_t HIFEXT0; /*!< (@ 0x00000080) HOSTIF Synchronous Burst Transfer Control Register + * 0 */ + + struct + { + __IOM uint16_t KESSBI : 1; /*!< [0..0] KESSBI */ + uint16_t : 1; + __IOM uint16_t KESDTI : 1; /*!< [2..2] KESDTI */ + __IOM uint16_t KESAVI : 1; /*!< [3..3] KESAVI */ + __IOM uint16_t KESDTO : 1; /*!< [4..4] KESDTO */ + __IOM uint16_t KESWTO : 1; /*!< [5..5] KESWTO */ + uint16_t : 3; + __IOM uint16_t CNDWEO : 1; /*!< [9..9] CNDWEO */ + uint16_t : 5; + __IOM uint16_t MODTRN : 1; /*!< [15..15] MODTRN */ + } HIFEXT0_b; + }; + __IM uint16_t RESERVED13; + + union + { + __IOM uint16_t HIFEXT1; /*!< (@ 0x00000084) HOSTIF Synchronous Burst Transfer Control Register + * 1 */ + + struct + { + __IOM uint16_t DLYWA : 4; /*!< [3..0] Minimum time from the last input of the Low level on + * the HBS# pin to the point where write data is received. + * (twc)DLYWA[3:0]CNDWEO = 0CNDWEO = 0HWRSTB# = 0HWRSTB# = + * 1HWRSTB# = 0HWRSTB# = 10x034450x134450x234450x344450x455550x566660x677770 + * 788880x899990x9101010100xA111111110xB121212120xC131313130xD141414140xE151 + * 15150xF16161616 */ + uint16_t : 4; + __IOM uint16_t DLYRA : 4; /*!< [11..8] Minimum time from the last input of the Low level on + * the HBS# pin to the point where read data can be acquired. + * (trc)DLYRA[3:0]CNDWEO = 0CNDWEO = 10x0450x1450x2550x3660x4770x5880x6990x7 + * 0100x811110x912120xA13130xB14140xC15150xD16160xE17170xF1818 */ + uint16_t : 4; + } HIFEXT1_b; + }; + __IM uint16_t RESERVED14; +} R_PHOSTIF_Type; /*!< Size = 136 (0x88) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSC_NS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief System Control for Non-safety region (R_SYSC_NS) + */ + +typedef struct /*!< (@ 0x80280000) R_SYSC_NS Structure */ +{ + union + { + __IOM uint32_t SCKCR; /*!< (@ 0x00000000) System Clock Control Register */ + + struct + { + __IOM uint32_t FSELXSPI0 : 3; /*!< [2..0] Set the frequency of the clock provided to xSPI Unit + * 0 in combination with bit 6 (DIVSELXSPI0). The combination + * is shown below. */ + uint32_t : 3; + __IOM uint32_t DIVSELXSPI0 : 1; /*!< [6..6] Select the base clock to generate serial clock for xSPI + * Unit 0 */ + uint32_t : 1; + __IOM uint32_t FSELXSPI1 : 3; /*!< [10..8] Set the frequency of the clock provided to xSPI Unit + * 1 in combination with bit 14 (DIVSELXSPI1). */ + uint32_t : 3; + __IOM uint32_t DIVSELXSPI1 : 1; /*!< [14..14] Select the base clock to generate serial clock for + * xSPI Unit 1 */ + uint32_t : 1; + __IOM uint32_t CKIO : 3; /*!< [18..16] Set the frequency of the external bus clock (CKIO) + * and the clock supplied to BSC in combination with the DIVSELSUB + * in the SCKCR2 register. The combination is shown below. */ + uint32_t : 1; + __IOM uint32_t FSELCANFD : 1; /*!< [20..20] Select the frequency of the clock supplied to CANFD */ + __IOM uint32_t PHYSEL : 1; /*!< [21..21] Select the Ethernet PHY reference clock output (ETHn_REFCLK, + * n = 0 to 2) */ + __IOM uint32_t CLMASEL : 1; /*!< [22..22] Select alternative clock when main clock abnormal oscillation + * is detected in CLMA3 */ + uint32_t : 1; + __IOM uint32_t SPI0ASYNCSEL : 1; /*!< [24..24] Select clock frequency when asynchronous serial clock + * is selected in SPI0 */ + __IOM uint32_t SPI1ASYNCSEL : 1; /*!< [25..25] Select clock frequency when asynchronous serial clock + * is selected in SPI1 */ + __IOM uint32_t SPI2ASYNCSEL : 1; /*!< [26..26] Select clock frequency when asynchronous serial clock + * is selected in SPI2 */ + __IOM uint32_t SCI0ASYNCSEL : 1; /*!< [27..27] Select clock frequency when asynchronous serial clock + * is selected in SCI0 */ + __IOM uint32_t SCI1ASYNCSEL : 1; /*!< [28..28] Select clock frequency when asynchronous serial clock + * is selected in SCI1 */ + __IOM uint32_t SCI2ASYNCSEL : 1; /*!< [29..29] Select clock frequency when asynchronous serial clock + * is selected in SCI2 */ + __IOM uint32_t SCI3ASYNCSEL : 1; /*!< [30..30] Select clock frequency when asynchronous serial clock + * is selected in SCI3 */ + __IOM uint32_t SCI4ASYNCSEL : 1; /*!< [31..31] Select clock frequency when asynchronous serial clock + * is selected in SCI4 */ + } SCKCR_b; + }; + __IM uint32_t RESERVED[127]; + + union + { + __IOM uint32_t RSTSR0; /*!< (@ 0x00000200) Reset Status Register 0 */ + + struct + { + uint32_t : 1; + __IOM uint32_t TRF : 1; /*!< [1..1] RES# Pin Reset Detect Flag */ + __IOM uint32_t ERRF : 1; /*!< [2..2] Error Reset Detect Flag */ + __IOM uint32_t SWRSF : 1; /*!< [3..3] System Software Reset Detect Flag */ + __IOM uint32_t SWR0F : 1; /*!< [4..4] CPU0 Software Reset Detect Flag */ + uint32_t : 27; + } RSTSR0_b; + }; + __IM uint32_t RESERVED1[15]; + + union + { + __IOM uint32_t MRCTLA; /*!< (@ 0x00000240) Module Reset Control Register A */ + + struct + { + uint32_t : 4; + __IOM uint32_t MRCTLA04 : 1; /*!< [4..4] xSPI Unit 0 Reset Control */ + __IOM uint32_t MRCTLA05 : 1; /*!< [5..5] xSPI Unit 1 Reset Control */ + uint32_t : 26; + } MRCTLA_b; + }; + __IM uint32_t RESERVED2[3]; + + union + { + __IOM uint32_t MRCTLE; /*!< (@ 0x00000250) Module Reset Control Register E */ + + struct + { + __IOM uint32_t MRCTLE00 : 1; /*!< [0..0] GMAC (PCLKH clock domain) Reset Control */ + __IOM uint32_t MRCTLE01 : 1; /*!< [1..1] GMAC (PCLKM clock domain) Reset Control */ + __IOM uint32_t MRCTLE02 : 1; /*!< [2..2] ETHSW Reset Control */ + __IOM uint32_t MRCTLE03 : 1; /*!< [3..3] ESC (Bus clock domain) Reset Control */ + __IOM uint32_t MRCTLE04 : 1; /*!< [4..4] ESC (IP clock domain) Reset Control */ + __IOM uint32_t MRCTLE05 : 1; /*!< [5..5] Ethernet Subsystem Register Reset Control */ + __IOM uint32_t MRCTLE06 : 1; /*!< [6..6] MII Converter Reset Control */ + uint32_t : 25; + } MRCTLE_b; + }; + __IM uint32_t RESERVED3[43]; + + union + { + __IOM uint32_t MSTPCRA; /*!< (@ 0x00000300) Module Stop Control Register A */ + + struct + { + __IOM uint32_t MSTPCRA00 : 1; /*!< [0..0] BSC Module Stop */ + uint32_t : 3; + __IOM uint32_t MSTPCRA04 : 1; /*!< [4..4] xSPI Unit 0 Module Stop */ + __IOM uint32_t MSTPCRA05 : 1; /*!< [5..5] xSPI Unit 1 Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPCRA08 : 1; /*!< [8..8] SCI Unit 0 Module Stop */ + __IOM uint32_t MSTPCRA09 : 1; /*!< [9..9] SCI Unit 1 Module Stop */ + __IOM uint32_t MSTPCRA10 : 1; /*!< [10..10] SCI Unit 2 Module Stop */ + __IOM uint32_t MSTPCRA11 : 1; /*!< [11..11] SCI Unit 3 Module Stop */ + __IOM uint32_t MSTPCRA12 : 1; /*!< [12..12] SCI Unit 4 Module Stop */ + uint32_t : 19; + } MSTPCRA_b; + }; + + union + { + __IOM uint32_t MSTPCRB; /*!< (@ 0x00000304) Module Stop Control Register B */ + + struct + { + __IOM uint32_t MSTPCRB00 : 1; /*!< [0..0] IIC Unit 0 Module Stop */ + __IOM uint32_t MSTPCRB01 : 1; /*!< [1..1] IIC Unit 1 Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPCRB04 : 1; /*!< [4..4] SPI Unit 0 Module Stop */ + __IOM uint32_t MSTPCRB05 : 1; /*!< [5..5] SPI Unit 1 Module Stop */ + __IOM uint32_t MSTPCRB06 : 1; /*!< [6..6] SPI Unit 2 Module Stop */ + uint32_t : 25; + } MSTPCRB_b; + }; + + union + { + __IOM uint32_t MSTPCRC; /*!< (@ 0x00000308) Module Stop Control Register C */ + + struct + { + __IOM uint32_t MSTPCRC00 : 1; /*!< [0..0] MTU3 Module Stop */ + __IOM uint32_t MSTPCRC01 : 1; /*!< [1..1] GPT Unit 0 Module Stop */ + __IOM uint32_t MSTPCRC02 : 1; /*!< [2..2] GPT Unit 1 Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPCRC05 : 1; /*!< [5..5] TFU Module Stop */ + __IOM uint32_t MSTPCRC06 : 1; /*!< [6..6] ADC12 Unit 0 Module Stop */ + __IOM uint32_t MSTPCRC07 : 1; /*!< [7..7] ADC12 Unit 1 Module Stop */ + uint32_t : 24; + } MSTPCRC_b; + }; + + union + { + __IOM uint32_t MSTPCRD; /*!< (@ 0x0000030C) Module Stop Control Register D */ + + struct + { + __IOM uint32_t MSTPCRD00 : 1; /*!< [0..0] DSMIF Unit 0 Module Stop */ + __IOM uint32_t MSTPCRD01 : 1; /*!< [1..1] DSMIF Unit 1 Module Stop */ + __IOM uint32_t MSTPCRD02 : 1; /*!< [2..2] CMT Unit 0 Module Stop */ + __IOM uint32_t MSTPCRD03 : 1; /*!< [3..3] CMT Unit 1 Module Stop */ + __IOM uint32_t MSTPCRD04 : 1; /*!< [4..4] CMT Unit 2 Module Stop */ + __IOM uint32_t MSTPCRD05 : 1; /*!< [5..5] CMTW Unit 0 Module Stop */ + __IOM uint32_t MSTPCRD06 : 1; /*!< [6..6] CMTW Unit 1 Module Stop */ + __IOM uint32_t MSTPCRD07 : 1; /*!< [7..7] TSU Module Stop */ + __IOM uint32_t MSTPCRD08 : 1; /*!< [8..8] DOC Module Stop */ + __IOM uint32_t MSTPCRD09 : 1; /*!< [9..9] CRC Unit 0 Module Stop */ + __IOM uint32_t MSTPCRD10 : 1; /*!< [10..10] CANFD Module Stop */ + __IOM uint32_t MSTPCRD11 : 1; /*!< [11..11] CKIO Module Stop */ + uint32_t : 20; + } MSTPCRD_b; + }; + + union + { + __IOM uint32_t MSTPCRE; /*!< (@ 0x00000310) Module Stop Control Register E */ + + struct + { + __IOM uint32_t MSTPCRE00 : 1; /*!< [0..0] GMAC Module Stop */ + __IOM uint32_t MSTPCRE01 : 1; /*!< [1..1] ETHSW Module Stop */ + __IOM uint32_t MSTPCRE02 : 1; /*!< [2..2] ESC Module Stop */ + __IOM uint32_t MSTPCRE03 : 1; /*!< [3..3] Ethernet Subsystem Register Module Stop */ + uint32_t : 4; + __IOM uint32_t MSTPCRE08 : 1; /*!< [8..8] USB Module Stop */ + uint32_t : 23; + } MSTPCRE_b; + }; + __IM uint32_t RESERVED4[891]; + + union + { + __IM uint32_t MD_MON; /*!< (@ 0x00001100) Operating Mode Monitor Register */ + + struct + { + __IM uint32_t MDDMON : 1; /*!< [0..0] MDD status flag */ + uint32_t : 7; + __IM uint32_t MDP : 1; /*!< [8..8] Package type */ + uint32_t : 3; + __IM uint32_t MD0MON : 1; /*!< [12..12] MD0 pin status flag */ + __IM uint32_t MD1MON : 1; /*!< [13..13] MD1 pin status flag */ + __IM uint32_t MD2MON : 1; /*!< [14..14] MD2 pin status flag */ + uint32_t : 1; + __IM uint32_t MDV0MON : 1; /*!< [16..16] MDV0 status flag (ETH0 domain) */ + __IM uint32_t MDV1MON : 1; /*!< [17..17] MDV1 status flag (ETH1 domain) */ + __IM uint32_t MDV2MON : 1; /*!< [18..18] MDV2 status flag (ETH2 domain) */ + __IM uint32_t MDV3MON : 1; /*!< [19..19] MDV3 status flag (xSPI0 domain) */ + __IM uint32_t MDV4MON : 1; /*!< [20..20] MDV4 status flag (xSPI1 domain) */ + uint32_t : 11; + } MD_MON_b; + }; +} R_SYSC_NS_Type; /*!< Size = 4356 (0x1104) */ + +/* =========================================================================================================================== */ +/* ================ R_ELO ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Evnet Link Option Setting (R_ELO) + */ + +typedef struct /*!< (@ 0x80281200) R_ELO Structure */ +{ + union + { + __IOM uint32_t ELOPA; /*!< (@ 0x00000000) Event Link Option Setting Register A */ + + struct + { + __IOM uint32_t MTU0MD : 2; /*!< [1..0] MTU0 Operation Select */ + uint32_t : 4; + __IOM uint32_t MTU3MD : 2; /*!< [7..6] MTU3 Operation Select */ + uint32_t : 24; + } ELOPA_b; + }; + + union + { + __IOM uint32_t ELOPB; /*!< (@ 0x00000004) Event Link Option Setting Register B */ + + struct + { + __IOM uint32_t MTU4MD : 2; /*!< [1..0] MTU4 Operation Select */ + uint32_t : 30; + } ELOPB_b; + }; +} R_ELO_Type; /*!< Size = 8 (0x8) */ + +/* =========================================================================================================================== */ +/* ================ R_RWP_NS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Register Write Protection for Non-safety Area (R_RWP_NS) + */ + +typedef struct /*!< (@ 0x80281A10) R_RWP_NS Structure */ +{ + union + { + __IOM uint32_t PRCRN; /*!< (@ 0x00000000) Non_Safety Area Protect Register */ + + struct + { + __IOM uint32_t PRC0 : 1; /*!< [0..0] Protect 0 */ + __IOM uint32_t PRC1 : 1; /*!< [1..1] Protect 1 */ + __IOM uint32_t PRC2 : 1; /*!< [2..2] Protect 2 */ + uint32_t : 5; + __OM uint32_t PRKEY : 8; /*!< [15..8] PRC Key Code */ + uint32_t : 16; + } PRCRN_b; + }; +} R_RWP_NS_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_RTC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Real Time Clock (R_RTC) + */ + +typedef struct /*!< (@ 0x81009000) R_RTC Structure */ +{ + union + { + __IOM uint32_t RTCA0CTL0; /*!< (@ 0x00000000) RTC Control Register 0 */ + + struct + { + uint32_t : 4; + __IOM uint32_t RTCA0SLSB : 1; /*!< [4..4] RTCA0SCMP enable/disable setting */ + __IOM uint32_t RTCA0AMPM : 1; /*!< [5..5] RTCA0HOUR, RTCA0ALH display format selection bit */ + __IM uint32_t RTCA0CEST : 1; /*!< [6..6] RTC Controller Enable Status */ + __IOM uint32_t RTCA0CE : 1; /*!< [7..7] RTC Controller Enable Bit */ + uint32_t : 24; + } RTCA0CTL0_b; + }; + + union + { + __IOM uint32_t RTCA0CTL1; /*!< (@ 0x00000004) RTC Control Register 1 */ + + struct + { + __IOM uint32_t RTCA0CT : 3; /*!< [2..0] Fixed interval interrupt (RTC_PRD) output setting bit */ + __IOM uint32_t RTCA01SE : 1; /*!< [3..3] 1 second interrupt (RTC_1S) output enable bit */ + __IOM uint32_t RTCA0ALME : 1; /*!< [4..4] Alarm interrupt (RTC_ALM) output enable bit */ + __IOM uint32_t RTCA01HZE : 1; /*!< [5..5] This bit enables/disables 1 Hz pulse output (RTCAT1HZ). */ + uint32_t : 26; + } RTCA0CTL1_b; + }; + + union + { + __IOM uint32_t RTCA0CTL2; /*!< (@ 0x00000008) RTC Control Register 2 */ + + struct + { + __IOM uint32_t RTCA0WAIT : 1; /*!< [0..0] RTC Controller Counter Wait Control */ + __IM uint32_t RTCA0WST : 1; /*!< [1..1] RTC Controller Counter Wait Status */ + __IOM uint32_t RTCA0RSUB : 1; /*!< [2..2] RTCA0SUBC Data Transfer Control */ + __IM uint32_t RTCA0RSST : 1; /*!< [3..3] RTCA0SRBU Transfer Status */ + __IM uint32_t RTCA0WSST : 1; /*!< [4..4] RTCA0SCMP Write Status */ + uint32_t : 27; + } RTCA0CTL2_b; + }; + + union + { + __IM uint32_t RTCA0SUBC; /*!< (@ 0x0000000C) RTC Sub Count Register */ + + struct + { + __IM uint32_t RTCA0SUBC : 22; /*!< [21..0] Register that counts the 1 second reference time */ + uint32_t : 10; + } RTCA0SUBC_b; + }; + + union + { + __IM uint32_t RTCA0SRBU; /*!< (@ 0x00000010) RTC Sub Count Register Read Buffer */ + + struct + { + __IM uint32_t RTCA0SRBU : 22; /*!< [21..0] Read buffer register of RTCA0SUBC */ + uint32_t : 10; + } RTCA0SRBU_b; + }; + + union + { + __IOM uint32_t RTCA0SEC; /*!< (@ 0x00000014) RTC Sec Count Buffer Register */ + + struct + { + __IOM uint32_t RTCA0SEC : 7; /*!< [6..0] Buffer register to read/write RTC Second Count register + * (RTCA0SECC). */ + uint32_t : 25; + } RTCA0SEC_b; + }; + + union + { + __IOM uint32_t RTCA0MIN; /*!< (@ 0x00000018) RTC Min Count Buffer Register */ + + struct + { + __IOM uint32_t RTCA0MIN : 7; /*!< [6..0] Buffer register to read/write RTC Minute Count register + * (RTCA0MINC). */ + uint32_t : 25; + } RTCA0MIN_b; + }; + + union + { + __IOM uint32_t RTCA0HOUR; /*!< (@ 0x0000001C) RTC Hour Count Buffer Register */ + + struct + { + __IOM uint32_t RTCA0HOUR : 6; /*!< [5..0] Buffer register to read/write RTC Hour Count register + * (RTCA0HOURC). */ + uint32_t : 26; + } RTCA0HOUR_b; + }; + + union + { + __IOM uint32_t RTCA0WEEK; /*!< (@ 0x00000020) RTC Week Count Buffer Register */ + + struct + { + __IOM uint32_t RTCA0WEEK : 3; /*!< [2..0] Buffer register to read/write RTC Week Count register + * (RTCA0WEEKC). */ + uint32_t : 29; + } RTCA0WEEK_b; + }; + + union + { + __IOM uint32_t RTCA0DAY; /*!< (@ 0x00000024) RTC Day Count Buffer Register */ + + struct + { + __IOM uint32_t RTCA0DAY : 6; /*!< [5..0] Buffer register to read/write RTC Day Count register + * (RTCA0DAYC). */ + uint32_t : 26; + } RTCA0DAY_b; + }; + + union + { + __IOM uint32_t RTCA0MONTH; /*!< (@ 0x00000028) RTC Month Count Buffer Register */ + + struct + { + __IOM uint32_t RTCA0MONTH : 5; /*!< [4..0] Buffer register to read/write RTC Month Count register + * (RTCA0MONC). */ + uint32_t : 27; + } RTCA0MONTH_b; + }; + + union + { + __IOM uint32_t RTCA0YEAR; /*!< (@ 0x0000002C) RTC Year Count Buffer Register */ + + struct + { + __IOM uint32_t RTCA0YEAR : 8; /*!< [7..0] Buffer register to read/write RTC Year Count register + * (RTCA0YEARC). */ + uint32_t : 24; + } RTCA0YEAR_b; + }; + + union + { + __IOM uint32_t RTCA0TIME; /*!< (@ 0x00000030) RTC Time Set Register */ + + struct + { + __IOM uint32_t RTCA0SEC : 8; /*!< [7..0] See RTCA0SEC register */ + __IOM uint32_t RTCA0MIN : 8; /*!< [15..8] See RTCA0MIN register */ + __IOM uint32_t RTCA0HOUR : 8; /*!< [23..16] See RTCA0HOUR register */ + uint32_t : 8; + } RTCA0TIME_b; + }; + + union + { + __IOM uint32_t RTCA0CAL; /*!< (@ 0x00000034) RTC Calendar Set Register */ + + struct + { + __IOM uint32_t RTCA0WEEK : 8; /*!< [7..0] See RTCA0WEEK register */ + __IOM uint32_t RTCA0DAY : 8; /*!< [15..8] See RTCA0DAY register */ + __IOM uint32_t RTCA0MONTH : 8; /*!< [23..16] See RTCA0MONTH register */ + __IOM uint32_t RTCA0YEAR : 8; /*!< [31..24] See RTCA0YEAR register */ + } RTCA0CAL_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t RTCA0SCMP; /*!< (@ 0x0000003C) RTC Sub Count Compare Register */ + + struct + { + __IOM uint32_t RTCA0SCMP : 22; /*!< [21..0] Register that sets the compare value of RTCA0SUBC (sub-counter). */ + uint32_t : 10; + } RTCA0SCMP_b; + }; + + union + { + __IOM uint32_t RTCA0ALM; /*!< (@ 0x00000040) RTC Alarm Min Set Register */ + + struct + { + __IOM uint32_t RTCA0ALM : 7; /*!< [6..0] RTCA0ALM is a register that performs the minute setting + * for the alarm interrupt. */ + uint32_t : 25; + } RTCA0ALM_b; + }; + + union + { + __IOM uint32_t RTCA0ALH; /*!< (@ 0x00000044) RTC Alarm Hour Set Register */ + + struct + { + __IOM uint32_t RTCA0ALH : 6; /*!< [5..0] RTCA0ALH is a register that performs the hour setting + * for the alarm interrupt. */ + uint32_t : 26; + } RTCA0ALH_b; + }; + + union + { + __IOM uint32_t RTCA0ALW; /*!< (@ 0x00000048) RTC Alarm Week Set Register */ + + struct + { + __IOM uint32_t RTCA0ALW0 : 1; /*!< [0..0] Alarm interrupt day of the week setting bit 0 */ + __IOM uint32_t RTCA0ALW1 : 1; /*!< [1..1] Alarm interrupt day of the week setting bit 1 */ + __IOM uint32_t RTCA0ALW2 : 1; /*!< [2..2] Alarm interrupt day of the week setting bit 2 */ + __IOM uint32_t RTCA0ALW3 : 1; /*!< [3..3] Alarm interrupt day of the week setting bit 3 */ + __IOM uint32_t RTCA0ALW4 : 1; /*!< [4..4] Alarm interrupt day of the week setting bit 4 */ + __IOM uint32_t RTCA0ALW5 : 1; /*!< [5..5] Alarm interrupt day of the week setting bit 5 */ + __IOM uint32_t RTCA0ALW6 : 1; /*!< [6..6] Alarm interrupt day of the week setting bit 6 */ + uint32_t : 25; + } RTCA0ALW_b; + }; + + union + { + __IM uint32_t RTCA0SECC; /*!< (@ 0x0000004C) RTC Second Count Register */ + + struct + { + __IM uint32_t RTCA0SECC : 7; /*!< [6..0] Counts up the seconds */ + uint32_t : 25; + } RTCA0SECC_b; + }; + + union + { + __IM uint32_t RTCA0MINC; /*!< (@ 0x00000050) RTC Minute Count Register */ + + struct + { + __IM uint32_t RTCA0MINC : 7; /*!< [6..0] Counts up the minutes */ + uint32_t : 25; + } RTCA0MINC_b; + }; + + union + { + __IM uint32_t RTCA0HOURC; /*!< (@ 0x00000054) RTC Hour Count Register */ + + struct + { + __IM uint32_t RTCA0HOURC : 6; /*!< [5..0] Counts up the hours */ + uint32_t : 26; + } RTCA0HOURC_b; + }; + + union + { + __IM uint32_t RTCA0WEEKC; /*!< (@ 0x00000058) RTC Week Count Register */ + + struct + { + __IM uint32_t RTCA0WEEKC : 3; /*!< [2..0] Counts up the weeks */ + uint32_t : 29; + } RTCA0WEEKC_b; + }; + + union + { + __IM uint32_t RTCA0DAYC; /*!< (@ 0x0000005C) RTC Day Count Register */ + + struct + { + __IM uint32_t RTCA0DAYC : 6; /*!< [5..0] Counts up the days */ + uint32_t : 26; + } RTCA0DAYC_b; + }; + + union + { + __IM uint32_t RTCA0MONC; /*!< (@ 0x00000060) RTC Month Count Register */ + + struct + { + __IM uint32_t RTCA0MONC : 5; /*!< [4..0] Counts up the months */ + uint32_t : 27; + } RTCA0MONC_b; + }; + + union + { + __IM uint32_t RTCA0YEARC; /*!< (@ 0x00000064) RTC Year Count Register */ + + struct + { + __IM uint32_t RTCA0YEARC : 8; /*!< [7..0] Counts up the years */ + uint32_t : 24; + } RTCA0YEARC_b; + }; + + union + { + __IM uint32_t RTCA0TIMEC; /*!< (@ 0x00000068) RTC Time Count Register */ + + struct + { + __IM uint32_t RTCA0SECC : 8; /*!< [7..0] See RTCA0SECC register */ + __IM uint32_t RTCA0MINC : 8; /*!< [15..8] See RTCA0MINC register */ + __IM uint32_t RTCA0HOURC : 8; /*!< [23..16] See RTCA0HOURC register */ + uint32_t : 8; + } RTCA0TIMEC_b; + }; + + union + { + __IM uint32_t RTCA0CALC; /*!< (@ 0x0000006C) RTC Calendar Count Register */ + + struct + { + __IM uint32_t RTCA0WEEKC : 8; /*!< [7..0] See RTCA0WEEKC register */ + __IM uint32_t RTCA0DAYC : 8; /*!< [15..8] See RTCA0DAYC register */ + __IM uint32_t RTCA0MONC : 8; /*!< [23..16] See RTCA0MONC register */ + __IM uint32_t RTCA0YEARC : 8; /*!< [31..24] See RTCA0YEARC register */ + } RTCA0CALC_b; + }; +} R_RTC_Type; /*!< Size = 112 (0x70) */ + +/* =========================================================================================================================== */ +/* ================ R_POEG2 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief GPT Port Output Enable 2 (R_POEG2) + */ + +typedef struct /*!< (@ 0x8100A000) R_POEG2 Structure */ +{ + union + { + __IOM uint32_t POEG2GA; /*!< (@ 0x00000000) POEG2 Group A Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG2GA_b; + }; + __IM uint32_t RESERVED[255]; + + union + { + __IOM uint32_t POEG2GB; /*!< (@ 0x00000400) POEG2 Group B Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG2GB_b; + }; + __IM uint32_t RESERVED1[255]; + + union + { + __IOM uint32_t POEG2GC; /*!< (@ 0x00000800) POEG2 Group C Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG2GC_b; + }; + __IM uint32_t RESERVED2[255]; + + union + { + __IOM uint32_t POEG2GD; /*!< (@ 0x00000C00) POEG2 Group D Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG2GD_b; + }; +} R_POEG2_Type; /*!< Size = 3076 (0xc04) */ + +/* =========================================================================================================================== */ +/* ================ R_OTP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief One-Time Programmable Memory (R_OTP) + */ + +typedef struct /*!< (@ 0x81028000) R_OTP Structure */ +{ + union + { + __IOM uint32_t OTPPWR; /*!< (@ 0x00000000) OTP Power Control Register */ + + struct + { + __IOM uint32_t PWR : 1; /*!< [0..0] OTP power on/off setting */ + uint32_t : 3; + __IOM uint32_t ACCL : 1; /*!< [4..4] Selects OTP access I/F */ + uint32_t : 27; + } OTPPWR_b; + }; + + union + { + __IOM uint32_t OTPSTR; /*!< (@ 0x00000004) OTP Access Status Register */ + + struct + { + __IM uint32_t CMD_RDY : 1; /*!< [0..0] Indicates whether OTP controller is ready to receive + * command or not. */ + __IM uint32_t ERR_WR : 2; /*!< [2..1] OTP write status */ + __IM uint32_t ERR_WP : 1; /*!< [3..3] Write protection error */ + __IM uint32_t ERR_RP : 1; /*!< [4..4] Read protection error */ + uint32_t : 3; + __IOM uint32_t ERR_RDY_WR : 1; /*!< [8..8] OTP write command ready error */ + __IOM uint32_t ERR_RDY_RD : 1; /*!< [9..9] OTP read command ready error */ + uint32_t : 5; + __IM uint32_t CNT_ST_IDLE : 1; /*!< [15..15] Indicates status of OTP controller */ + uint32_t : 16; + } OTPSTR_b; + }; + + union + { + __IOM uint32_t OTPSTAWR; /*!< (@ 0x00000008) OTP Write Command Register */ + + struct + { + __IOM uint32_t STAWR : 1; /*!< [0..0] OTP write start */ + uint32_t : 31; + } OTPSTAWR_b; + }; + + union + { + __IOM uint32_t OTPADRWR; /*!< (@ 0x0000000C) OTP Write Address Register */ + + struct + { + __IOM uint32_t ADRWR : 9; /*!< [8..0] OTP write address */ + uint32_t : 23; + } OTPADRWR_b; + }; + + union + { + __IOM uint32_t OTPDATAWR; /*!< (@ 0x00000010) OTP Write Data Register */ + + struct + { + __IOM uint32_t DATAWR : 16; /*!< [15..0] OTP write data */ + uint32_t : 16; + } OTPDATAWR_b; + }; + + union + { + __IOM uint32_t OTPADRRD; /*!< (@ 0x00000014) OTP Read Address Register */ + + struct + { + __IOM uint32_t ADRRD : 9; /*!< [8..0] OTP read address */ + uint32_t : 23; + } OTPADRRD_b; + }; + + union + { + __IM uint32_t OTPDATARD; /*!< (@ 0x00000018) OTP Read Data Register */ + + struct + { + __IM uint32_t DATARD : 16; /*!< [15..0] OTP read data */ + uint32_t : 16; + } OTPDATARD_b; + }; +} R_OTP_Type; /*!< Size = 28 (0x1c) */ + +/* =========================================================================================================================== */ +/* ================ R_PTADR ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Port Address Selection (R_PTADR) + */ + +typedef struct /*!< (@ 0x81030C00) R_PTADR Structure */ +{ + union + { + __IOM uint8_t RSELP[25]; /*!< (@ 0x00000000) Port [0..24] Region Select Register */ + + struct + { + __IOM uint8_t RS0 : 1; /*!< [0..0] Pm_n pin I/O port registers Region Select (n = bit position) */ + __IOM uint8_t RS1 : 1; /*!< [1..1] Pm_n pin I/O port registers Region Select (n = bit position) */ + __IOM uint8_t RS2 : 1; /*!< [2..2] Pm_n pin I/O port registers Region Select (n = bit position) */ + __IOM uint8_t RS3 : 1; /*!< [3..3] Pm_n pin I/O port registers Region Select (n = bit position) */ + __IOM uint8_t RS4 : 1; /*!< [4..4] Pm_n pin I/O port registers Region Select (n = bit position) */ + __IOM uint8_t RS5 : 1; /*!< [5..5] Pm_n pin I/O port registers Region Select (n = bit position) */ + __IOM uint8_t RS6 : 1; /*!< [6..6] Pm_n pin I/O port registers Region Select (n = bit position) */ + __IOM uint8_t RS7 : 1; /*!< [7..7] Pm_n pin I/O port registers Region Select (n = bit position) */ + } RSELP_b[25]; + }; +} R_PTADR_Type; /*!< Size = 25 (0x19) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSRAM0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief System SRAM 0 (R_SYSRAM0) + */ + +typedef struct /*!< (@ 0x81040000) R_SYSRAM0 Structure */ +{ + __IOM R_SYSRAM0_W_Type W[4]; /*!< (@ 0x00000000) System SRAM Wn Registers (n = 0 to 3) */ +} R_SYSRAM0_Type; /*!< Size = 256 (0x100) */ + +/* =========================================================================================================================== */ +/* ================ R_ICU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Interrupt Controller (R_ICU) + */ + +typedef struct /*!< (@ 0x81048000) R_ICU Structure */ +{ + union + { + __OM uint32_t S_SWINT; /*!< (@ 0x00000000) Software Interrupt Register for Safety Register */ + + struct + { + __OM uint32_t IC6 : 1; /*!< [0..0] Software Interrupt register */ + __OM uint32_t IC7 : 1; /*!< [1..1] Software Interrupt register */ + uint32_t : 30; + } S_SWINT_b; + }; + + union + { + __IOM uint32_t S_PORTNF_FLTSEL; /*!< (@ 0x00000004) Interrupt Noise Filter Enable Register for Safety + * Register */ + + struct + { + __IOM uint32_t FLT14 : 1; /*!< [0..0] Noise filter enable for IRQ14 */ + __IOM uint32_t FLT15 : 1; /*!< [1..1] Noise filter enable for IRQ15 */ + __IOM uint32_t FLTNMI : 1; /*!< [2..2] Noise filter enable for NMI */ + uint32_t : 29; + } S_PORTNF_FLTSEL_b; + }; + + union + { + __IOM uint32_t S_PORTNF_CLKSEL; /*!< (@ 0x00000008) Interrupt Noise Filter Setting Register for Safety + * Register */ + + struct + { + __IOM uint32_t CKSEL14 : 2; /*!< [1..0] Select noise filter sampling frequency dividend rate + * for IRQ14. */ + __IOM uint32_t CKSEL15 : 2; /*!< [3..2] Select noise filter sampling frequency dividend rate + * for IRQ15. */ + __IOM uint32_t CKSELNMI : 2; /*!< [5..4] Select noise filter sampling frequency dividend rate + * for NMI. */ + uint32_t : 26; + } S_PORTNF_CLKSEL_b; + }; + + union + { + __IOM uint32_t S_PORTNF_MD; /*!< (@ 0x0000000C) Interrupt Edge Detection Setting Register for + * Safety Register */ + + struct + { + __IOM uint32_t MD14 : 2; /*!< [1..0] Select detection mode for IRQ14 */ + __IOM uint32_t MD15 : 2; /*!< [3..2] Select detection mode for IRQ15 */ + __IOM uint32_t MDNMI : 2; /*!< [5..4] Select detection mode for NMI */ + uint32_t : 26; + } S_PORTNF_MD_b; + }; + __IM uint32_t RESERVED[20]; + + union + { + __IM uint32_t CPU0ERR_STAT; /*!< (@ 0x00000060) CPU0 Error Event Status Register */ + + struct + { + __IM uint32_t ER_ST0 : 1; /*!< [0..0] Indicate captured error status for CPU0_ERREVENT0 */ + __IM uint32_t ER_ST1 : 1; /*!< [1..1] Indicate captured error status for CPU0_ERREVENT1 */ + __IM uint32_t ER_ST2 : 1; /*!< [2..2] Indicate captured error status for CPU0_ERREVENT2 */ + __IM uint32_t ER_ST3 : 1; /*!< [3..3] Indicate captured error status for CPU0_ERREVENT3 */ + __IM uint32_t ER_ST4 : 1; /*!< [4..4] Indicate captured error status for CPU0_ERREVENT4 */ + __IM uint32_t ER_ST5 : 1; /*!< [5..5] Indicate captured error status for CPU0_ERREVENT5 */ + __IM uint32_t ER_ST6 : 1; /*!< [6..6] Indicate captured error status for CPU0_ERREVENT6 */ + __IM uint32_t ER_ST7 : 1; /*!< [7..7] Indicate captured error status for CPU0_ERREVENT7 */ + __IM uint32_t ER_ST8 : 1; /*!< [8..8] Indicate captured error status for CPU0_ERREVENT8 */ + __IM uint32_t ER_ST9 : 1; /*!< [9..9] Indicate captured error status for CPU0_ERREVENT9 */ + __IM uint32_t ER_ST10 : 1; /*!< [10..10] Indicate captured error status for CPU0_ERREVENT10 */ + __IM uint32_t ER_ST11 : 1; /*!< [11..11] Indicate captured error status for CPU0_ERREVENT11 */ + __IM uint32_t ER_ST12 : 1; /*!< [12..12] Indicate captured error status for CPU0_ERREVENT12 */ + __IM uint32_t ER_ST13 : 1; /*!< [13..13] Indicate captured error status for CPU0_ERREVENT13 */ + __IM uint32_t ER_ST14 : 1; /*!< [14..14] Indicate captured error status for CPU0_ERREVENT14 */ + __IM uint32_t ER_ST15 : 1; /*!< [15..15] Indicate captured error status for CPU0_ERREVENT15 */ + __IM uint32_t ER_ST16 : 1; /*!< [16..16] Indicate captured error status for CPU0_ERREVENT16 */ + __IM uint32_t ER_ST17 : 1; /*!< [17..17] Indicate captured error status for CPU0_ERREVENT17 */ + __IM uint32_t ER_ST18 : 1; /*!< [18..18] Indicate captured error status for CPU0_ERREVENT18 */ + __IM uint32_t ER_ST19 : 1; /*!< [19..19] Indicate captured error status for CPU0_ERREVENT19 */ + __IM uint32_t ER_ST20 : 1; /*!< [20..20] Indicate captured error status for CPU0_ERREVENT20 */ + __IM uint32_t ER_ST21 : 1; /*!< [21..21] Indicate captured error status for CPU0_ERREVENT21 */ + __IM uint32_t ER_ST22 : 1; /*!< [22..22] Indicate captured error status for CPU0_ERREVENT22 */ + __IM uint32_t ER_ST23 : 1; /*!< [23..23] Indicate captured error status for CPU0_ERREVENT23 */ + __IM uint32_t ER_ST24 : 1; /*!< [24..24] Indicate captured error status for CPU0_ERREVENT24 */ + __IM uint32_t ER_ST25 : 1; /*!< [25..25] Indicate captured error status for CPU0_ERREVENT25 */ + uint32_t : 6; + } CPU0ERR_STAT_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IM uint32_t PERIERR_STAT0; /*!< (@ 0x00000068) Peripheral Error Event Status Register 0 */ + + struct + { + __IM uint32_t ER_ST0 : 1; /*!< [0..0] Indicate captured error status for CLMA3_INT */ + __IM uint32_t ER_ST1 : 1; /*!< [1..1] Indicate captured error status for CLMA0_INT */ + __IM uint32_t ER_ST2 : 1; /*!< [2..2] Indicate captured error status for CLMA1_INT */ + __IM uint32_t ER_ST3 : 1; /*!< [3..3] Indicate captured error status for CLMA2_INT */ + __IM uint32_t ER_ST4 : 1; /*!< [4..4] Indicate captured error status for BSC_WTO */ + __IM uint32_t ER_ST5 : 1; /*!< [5..5] Indicate captured error status for DMAC0_ERR */ + __IM uint32_t ER_ST6 : 1; /*!< [6..6] Indicate captured error status for DMAC1_ERR */ + __IM uint32_t ER_ST7 : 1; /*!< [7..7] Indicate captured error status for WDT_NMIUNDF0 */ + uint32_t : 1; + __IM uint32_t ER_ST9 : 1; /*!< [9..9] Indicate captured error status for USB_FDMAERR */ + __IM uint32_t ER_ST10 : 1; /*!< [10..10] Indicate captured error status for DSMIF0_LTCSE */ + __IM uint32_t ER_ST11 : 1; /*!< [11..11] Indicate captured error status for DSMIF0_UTCSE */ + __IM uint32_t ER_ST12 : 1; /*!< [12..12] Indicate captured error status for DSMIF0_LTODE0 */ + __IM uint32_t ER_ST13 : 1; /*!< [13..13] Indicate captured error status for DSMIF0_LTODE1 */ + __IM uint32_t ER_ST14 : 1; /*!< [14..14] Indicate captured error status for DSMIF0_LTODE2 */ + __IM uint32_t ER_ST15 : 1; /*!< [15..15] Indicate captured error status for DSMIF0_UTODE0 */ + __IM uint32_t ER_ST16 : 1; /*!< [16..16] Indicate captured error status for DSMIF0_UTODE1 */ + __IM uint32_t ER_ST17 : 1; /*!< [17..17] Indicate captured error status for DSMIF0_UTODE2 */ + __IM uint32_t ER_ST18 : 1; /*!< [18..18] Indicate captured error status for DSMIF0_SCDE0 */ + __IM uint32_t ER_ST19 : 1; /*!< [19..19] Indicate captured error status for DSMIF0_SCDE1 */ + __IM uint32_t ER_ST20 : 1; /*!< [20..20] Indicate captured error status for DSMIF0_SCDE2 */ + __IM uint32_t ER_ST21 : 1; /*!< [21..21] Indicate captured error status for DSMIF1_LTCSE */ + __IM uint32_t ER_ST22 : 1; /*!< [22..22] Indicate captured error status for DSMIF1_UTCSE */ + __IM uint32_t ER_ST23 : 1; /*!< [23..23] Indicate captured error status for DSMIF1_LTODE0 */ + __IM uint32_t ER_ST24 : 1; /*!< [24..24] Indicate captured error status for DSMIF1_LTODE1 */ + __IM uint32_t ER_ST25 : 1; /*!< [25..25] Indicate captured error status for DSMIF1_LTODE2 */ + __IM uint32_t ER_ST26 : 1; /*!< [26..26] Indicate captured error status for DSMIF1_UTODE0 */ + __IM uint32_t ER_ST27 : 1; /*!< [27..27] Indicate captured error status for DSMIF1_UTODE1 */ + __IM uint32_t ER_ST28 : 1; /*!< [28..28] Indicate captured error status for DSMIF1_UTODE2 */ + __IM uint32_t ER_ST29 : 1; /*!< [29..29] Indicate captured error status for DSMIF1_SCDE0 */ + __IM uint32_t ER_ST30 : 1; /*!< [30..30] Indicate captured error status for DSMIF1_SCDE1 */ + __IM uint32_t ER_ST31 : 1; /*!< [31..31] Indicate captured error status for DSMIF1_SCDE2 */ + } PERIERR_STAT0_b; + }; + + union + { + __IM uint32_t PERIERR_STAT1; /*!< (@ 0x0000006C) Peripheral Error Event Status Register 1 */ + + struct + { + __IM uint32_t ER_ST0 : 1; /*!< [0..0] Indicate captured error status for DOC_DOPCI */ + __IM uint32_t ER_ST1 : 1; /*!< [1..1] Indicate captured error status for SRAM0_IE1 */ + __IM uint32_t ER_ST2 : 1; /*!< [2..2] Indicate captured error status for SRAM0_IE2 */ + __IM uint32_t ER_ST3 : 1; /*!< [3..3] Indicate captured error status for SRAM0_OVF */ + __IM uint32_t ER_ST4 : 1; /*!< [4..4] Indicate captured error status for SRAM1_IE1 */ + __IM uint32_t ER_ST5 : 1; /*!< [5..5] Indicate captured error status for SRAM1_IE2 */ + __IM uint32_t ER_ST6 : 1; /*!< [6..6] Indicate captured error status for SRAM1_OVF */ + __IM uint32_t ER_ST7 : 1; /*!< [7..7] Indicate captured error status for SRAM2_IE1 */ + __IM uint32_t ER_ST8 : 1; /*!< [8..8] Indicate captured error status for SRAM2_IE2 */ + __IM uint32_t ER_ST9 : 1; /*!< [9..9] Indicate captured error status for SRAM2_OVF */ + uint32_t : 3; + __IM uint32_t ER_ST13 : 1; /*!< [13..13] Indicate captured error status for BUS_ERRINT */ + uint32_t : 1; + __IM uint32_t ER_ST15 : 1; /*!< [15..15] Indicate captured error status for MPU_SHOSTIF */ + __IM uint32_t ER_ST16 : 1; /*!< [16..16] Indicate captured error status for MPU_PHOSTIF */ + __IM uint32_t ER_ST17 : 1; /*!< [17..17] Indicate captured error status for MPU_DMACR0 */ + __IM uint32_t ER_ST18 : 1; /*!< [18..18] Indicate captured error status for MPU_DMACW0 */ + __IM uint32_t ER_ST19 : 1; /*!< [19..19] Indicate captured error status for MPU_DMACR1 */ + __IM uint32_t ER_ST20 : 1; /*!< [20..20] Indicate captured error status for MPU_DMACW1 */ + __IM uint32_t ER_ST21 : 1; /*!< [21..21] Indicate captured error status for MPU_GMACR */ + __IM uint32_t ER_ST22 : 1; /*!< [22..22] Indicate captured error status for MPU_GMACW */ + __IM uint32_t ER_ST23 : 1; /*!< [23..23] Indicate captured error status for MPU_USBH */ + __IM uint32_t ER_ST24 : 1; /*!< [24..24] Indicate captured error status for MPU_USBF */ + uint32_t : 2; + __IM uint32_t ER_ST27 : 1; /*!< [27..27] Indicate captured error status for MPU_DBGR */ + __IM uint32_t ER_ST28 : 1; /*!< [28..28] Indicate captured error status for MPU_DBGW */ + uint32_t : 3; + } PERIERR_STAT1_b; + }; + + union + { + __OM uint32_t CPU0ERR_CLR; /*!< (@ 0x00000070) CPU0 Error Event Status Clear Register */ + + struct + { + __OM uint32_t ER_CL0 : 1; /*!< [0..0] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL1 : 1; /*!< [1..1] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL2 : 1; /*!< [2..2] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL3 : 1; /*!< [3..3] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL4 : 1; /*!< [4..4] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL5 : 1; /*!< [5..5] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL6 : 1; /*!< [6..6] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL7 : 1; /*!< [7..7] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL8 : 1; /*!< [8..8] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL9 : 1; /*!< [9..9] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL10 : 1; /*!< [10..10] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL11 : 1; /*!< [11..11] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL12 : 1; /*!< [12..12] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL13 : 1; /*!< [13..13] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL14 : 1; /*!< [14..14] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL15 : 1; /*!< [15..15] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL16 : 1; /*!< [16..16] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL17 : 1; /*!< [17..17] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL18 : 1; /*!< [18..18] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL19 : 1; /*!< [19..19] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL20 : 1; /*!< [20..20] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL21 : 1; /*!< [21..21] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL22 : 1; /*!< [22..22] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL23 : 1; /*!< [23..23] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL24 : 1; /*!< [24..24] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + __OM uint32_t ER_CL25 : 1; /*!< [25..25] Clear captured error status for CPU0ERR_STAT register + * by writing 1 */ + uint32_t : 6; + } CPU0ERR_CLR_b; + }; + __IM uint32_t RESERVED2; + + union + { + __OM uint32_t PERIERR_CLR0; /*!< (@ 0x00000078) Peripheral Error Event Status Clear Register + * 0 */ + + struct + { + __OM uint32_t ER_CL0 : 1; /*!< [0..0] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL1 : 1; /*!< [1..1] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL2 : 1; /*!< [2..2] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL3 : 1; /*!< [3..3] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL4 : 1; /*!< [4..4] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL5 : 1; /*!< [5..5] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL6 : 1; /*!< [6..6] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL7 : 1; /*!< [7..7] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + uint32_t : 1; + __OM uint32_t ER_CL9 : 1; /*!< [9..9] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL10 : 1; /*!< [10..10] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL11 : 1; /*!< [11..11] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL12 : 1; /*!< [12..12] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL13 : 1; /*!< [13..13] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL14 : 1; /*!< [14..14] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL15 : 1; /*!< [15..15] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL16 : 1; /*!< [16..16] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL17 : 1; /*!< [17..17] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL18 : 1; /*!< [18..18] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL19 : 1; /*!< [19..19] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL20 : 1; /*!< [20..20] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL21 : 1; /*!< [21..21] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL22 : 1; /*!< [22..22] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL23 : 1; /*!< [23..23] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL24 : 1; /*!< [24..24] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL25 : 1; /*!< [25..25] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL26 : 1; /*!< [26..26] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL27 : 1; /*!< [27..27] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL28 : 1; /*!< [28..28] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL29 : 1; /*!< [29..29] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL30 : 1; /*!< [30..30] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + __OM uint32_t ER_CL31 : 1; /*!< [31..31] Clear captured error status for PERIERR_STAT0 register + * by writing 1 */ + } PERIERR_CLR0_b; + }; + + union + { + __OM uint32_t PERIERR_CLR1; /*!< (@ 0x0000007C) Peripheral Error Event Status Clear Register + * 1 */ + + struct + { + __OM uint32_t ER_CL0 : 1; /*!< [0..0] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL1 : 1; /*!< [1..1] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL2 : 1; /*!< [2..2] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL3 : 1; /*!< [3..3] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL4 : 1; /*!< [4..4] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL5 : 1; /*!< [5..5] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL6 : 1; /*!< [6..6] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL7 : 1; /*!< [7..7] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL8 : 1; /*!< [8..8] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL9 : 1; /*!< [9..9] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + uint32_t : 3; + __OM uint32_t ER_CL13 : 1; /*!< [13..13] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + uint32_t : 1; + __OM uint32_t ER_CL15 : 1; /*!< [15..15] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL16 : 1; /*!< [16..16] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL17 : 1; /*!< [17..17] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL18 : 1; /*!< [18..18] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL19 : 1; /*!< [19..19] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL20 : 1; /*!< [20..20] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL21 : 1; /*!< [21..21] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL22 : 1; /*!< [22..22] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL23 : 1; /*!< [23..23] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL24 : 1; /*!< [24..24] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + uint32_t : 2; + __OM uint32_t ER_CL27 : 1; /*!< [27..27] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + __OM uint32_t ER_CL28 : 1; /*!< [28..28] Clear captured error status for PERIERR_STAT1 register + * by writing 1 */ + uint32_t : 3; + } PERIERR_CLR1_b; + }; + + union + { + __IOM uint32_t CPU0ERR_RSTMSK; /*!< (@ 0x00000080) CPU0 Error Event Reset Mask Register */ + + struct + { + __IOM uint32_t RS_MK0 : 1; /*!< [0..0] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK1 : 1; /*!< [1..1] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK2 : 1; /*!< [2..2] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK3 : 1; /*!< [3..3] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK4 : 1; /*!< [4..4] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK5 : 1; /*!< [5..5] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK6 : 1; /*!< [6..6] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK7 : 1; /*!< [7..7] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK8 : 1; /*!< [8..8] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK9 : 1; /*!< [9..9] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK10 : 1; /*!< [10..10] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK11 : 1; /*!< [11..11] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK12 : 1; /*!< [12..12] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK13 : 1; /*!< [13..13] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK14 : 1; /*!< [14..14] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK15 : 1; /*!< [15..15] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK16 : 1; /*!< [16..16] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK17 : 1; /*!< [17..17] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK18 : 1; /*!< [18..18] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK19 : 1; /*!< [19..19] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK20 : 1; /*!< [20..20] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK21 : 1; /*!< [21..21] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK22 : 1; /*!< [22..22] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK23 : 1; /*!< [23..23] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK24 : 1; /*!< [24..24] Mask captured error status as a reset event for CPU0ERR_STAT */ + __IOM uint32_t RS_MK25 : 1; /*!< [25..25] Mask captured error status as a reset event for CPU0ERR_STAT */ + uint32_t : 6; + } CPU0ERR_RSTMSK_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IOM uint32_t PERIERR_RSTMSK0; /*!< (@ 0x00000088) Peripheral Error Event Reset Mask Register 0 */ + + struct + { + __IOM uint32_t RS_MK0 : 1; /*!< [0..0] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK1 : 1; /*!< [1..1] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK2 : 1; /*!< [2..2] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK3 : 1; /*!< [3..3] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK4 : 1; /*!< [4..4] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK5 : 1; /*!< [5..5] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK6 : 1; /*!< [6..6] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK7 : 1; /*!< [7..7] Mask captured error status as a reset event for PERIERR_STAT0 */ + uint32_t : 1; + __IOM uint32_t RS_MK9 : 1; /*!< [9..9] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK10 : 1; /*!< [10..10] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK11 : 1; /*!< [11..11] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK12 : 1; /*!< [12..12] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK13 : 1; /*!< [13..13] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK14 : 1; /*!< [14..14] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK15 : 1; /*!< [15..15] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK16 : 1; /*!< [16..16] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK17 : 1; /*!< [17..17] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK18 : 1; /*!< [18..18] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK19 : 1; /*!< [19..19] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK20 : 1; /*!< [20..20] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK21 : 1; /*!< [21..21] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK22 : 1; /*!< [22..22] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK23 : 1; /*!< [23..23] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK24 : 1; /*!< [24..24] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK25 : 1; /*!< [25..25] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK26 : 1; /*!< [26..26] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK27 : 1; /*!< [27..27] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK28 : 1; /*!< [28..28] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK29 : 1; /*!< [29..29] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK30 : 1; /*!< [30..30] Mask captured error status as a reset event for PERIERR_STAT0 */ + __IOM uint32_t RS_MK31 : 1; /*!< [31..31] Mask captured error status as a reset event for PERIERR_STAT0 */ + } PERIERR_RSTMSK0_b; + }; + + union + { + __IOM uint32_t PERIERR_RSTMSK1; /*!< (@ 0x0000008C) Peripheral Error Event Reset Mask Register 1 */ + + struct + { + __IOM uint32_t RS_MK0 : 1; /*!< [0..0] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK1 : 1; /*!< [1..1] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK2 : 1; /*!< [2..2] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK3 : 1; /*!< [3..3] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK4 : 1; /*!< [4..4] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK5 : 1; /*!< [5..5] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK6 : 1; /*!< [6..6] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK7 : 1; /*!< [7..7] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK8 : 1; /*!< [8..8] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK9 : 1; /*!< [9..9] Mask captured error status as a reset event for PERIERR_STAT1 */ + uint32_t : 3; + __IOM uint32_t RS_MK13 : 1; /*!< [13..13] Mask captured error status as a reset event for PERIERR_STAT1 */ + uint32_t : 1; + __IOM uint32_t RS_MK15 : 1; /*!< [15..15] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK16 : 1; /*!< [16..16] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK17 : 1; /*!< [17..17] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK18 : 1; /*!< [18..18] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK19 : 1; /*!< [19..19] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK20 : 1; /*!< [20..20] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK21 : 1; /*!< [21..21] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK22 : 1; /*!< [22..22] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK23 : 1; /*!< [23..23] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK24 : 1; /*!< [24..24] Mask captured error status as a reset event for PERIERR_STAT1 */ + uint32_t : 2; + __IOM uint32_t RS_MK27 : 1; /*!< [27..27] Mask captured error status as a reset event for PERIERR_STAT1 */ + __IOM uint32_t RS_MK28 : 1; /*!< [28..28] Mask captured error status as a reset event for PERIERR_STAT1 */ + uint32_t : 3; + } PERIERR_RSTMSK1_b; + }; + + union + { + __IOM uint32_t CPU0ERR_E0MSK; /*!< (@ 0x00000090) CPU0 E0 Error Event Mask Register */ + + struct + { + __IOM uint32_t E0_MK0 : 1; /*!< [0..0] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK1 : 1; /*!< [1..1] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK2 : 1; /*!< [2..2] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK3 : 1; /*!< [3..3] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK4 : 1; /*!< [4..4] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK5 : 1; /*!< [5..5] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK6 : 1; /*!< [6..6] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK7 : 1; /*!< [7..7] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK8 : 1; /*!< [8..8] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK9 : 1; /*!< [9..9] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK10 : 1; /*!< [10..10] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK11 : 1; /*!< [11..11] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK12 : 1; /*!< [12..12] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK13 : 1; /*!< [13..13] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK14 : 1; /*!< [14..14] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK15 : 1; /*!< [15..15] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK16 : 1; /*!< [16..16] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK17 : 1; /*!< [17..17] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK18 : 1; /*!< [18..18] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK19 : 1; /*!< [19..19] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK20 : 1; /*!< [20..20] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK21 : 1; /*!< [21..21] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK22 : 1; /*!< [22..22] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK23 : 1; /*!< [23..23] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK24 : 1; /*!< [24..24] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + __IOM uint32_t E0_MK25 : 1; /*!< [25..25] Mask captured error status as an CPU0_ERR0 event for + * CPU0ERR_STAT */ + uint32_t : 6; + } CPU0ERR_E0MSK_b; + }; + __IM uint32_t RESERVED4; + + union + { + __IOM uint32_t PERIERR_E0MSK0; /*!< (@ 0x00000098) Peripheral E0 Error Event Mask Register 0 */ + + struct + { + __IOM uint32_t E0_MK0 : 1; /*!< [0..0] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK1 : 1; /*!< [1..1] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK2 : 1; /*!< [2..2] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK3 : 1; /*!< [3..3] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK4 : 1; /*!< [4..4] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK5 : 1; /*!< [5..5] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK6 : 1; /*!< [6..6] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK7 : 1; /*!< [7..7] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + uint32_t : 1; + __IOM uint32_t E0_MK9 : 1; /*!< [9..9] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK10 : 1; /*!< [10..10] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK11 : 1; /*!< [11..11] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK12 : 1; /*!< [12..12] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK13 : 1; /*!< [13..13] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK14 : 1; /*!< [14..14] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK15 : 1; /*!< [15..15] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK16 : 1; /*!< [16..16] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK17 : 1; /*!< [17..17] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK18 : 1; /*!< [18..18] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK19 : 1; /*!< [19..19] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK20 : 1; /*!< [20..20] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK21 : 1; /*!< [21..21] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK22 : 1; /*!< [22..22] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK23 : 1; /*!< [23..23] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK24 : 1; /*!< [24..24] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK25 : 1; /*!< [25..25] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK26 : 1; /*!< [26..26] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK27 : 1; /*!< [27..27] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK28 : 1; /*!< [28..28] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK29 : 1; /*!< [29..29] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK30 : 1; /*!< [30..30] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + __IOM uint32_t E0_MK31 : 1; /*!< [31..31] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT0 */ + } PERIERR_E0MSK0_b; + }; + + union + { + __IOM uint32_t PERIERR_E0MSK1; /*!< (@ 0x0000009C) Peripheral E0 Error Event Mask Register 1 */ + + struct + { + __IOM uint32_t E0_MK0 : 1; /*!< [0..0] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK1 : 1; /*!< [1..1] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK2 : 1; /*!< [2..2] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK3 : 1; /*!< [3..3] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK4 : 1; /*!< [4..4] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK5 : 1; /*!< [5..5] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK6 : 1; /*!< [6..6] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK7 : 1; /*!< [7..7] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK8 : 1; /*!< [8..8] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK9 : 1; /*!< [9..9] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + uint32_t : 3; + __IOM uint32_t E0_MK13 : 1; /*!< [13..13] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + uint32_t : 1; + __IOM uint32_t E0_MK15 : 1; /*!< [15..15] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK16 : 1; /*!< [16..16] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK17 : 1; /*!< [17..17] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK18 : 1; /*!< [18..18] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK19 : 1; /*!< [19..19] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK20 : 1; /*!< [20..20] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK21 : 1; /*!< [21..21] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK22 : 1; /*!< [22..22] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK23 : 1; /*!< [23..23] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK24 : 1; /*!< [24..24] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + uint32_t : 2; + __IOM uint32_t E0_MK27 : 1; /*!< [27..27] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + __IOM uint32_t E0_MK28 : 1; /*!< [28..28] Mask captured error status as an PERI_ERR0 event for + * PERIERR_STAT1 */ + uint32_t : 3; + } PERIERR_E0MSK1_b; + }; + __IM uint32_t RESERVED5[24]; + + union + { + __IOM uint32_t CPU0ERR_E1MSK; /*!< (@ 0x00000100) CPU0 E1 Error Event Mask Register */ + + struct + { + __IOM uint32_t E1_MK0 : 1; /*!< [0..0] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK1 : 1; /*!< [1..1] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK2 : 1; /*!< [2..2] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK3 : 1; /*!< [3..3] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK4 : 1; /*!< [4..4] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK5 : 1; /*!< [5..5] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK6 : 1; /*!< [6..6] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK7 : 1; /*!< [7..7] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK8 : 1; /*!< [8..8] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK9 : 1; /*!< [9..9] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK10 : 1; /*!< [10..10] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK11 : 1; /*!< [11..11] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK12 : 1; /*!< [12..12] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK13 : 1; /*!< [13..13] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK14 : 1; /*!< [14..14] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK15 : 1; /*!< [15..15] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK16 : 1; /*!< [16..16] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK17 : 1; /*!< [17..17] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK18 : 1; /*!< [18..18] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK19 : 1; /*!< [19..19] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK20 : 1; /*!< [20..20] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK21 : 1; /*!< [21..21] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK22 : 1; /*!< [22..22] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK23 : 1; /*!< [23..23] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK24 : 1; /*!< [24..24] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + __IOM uint32_t E1_MK25 : 1; /*!< [25..25] Mask captured error status as an CPU0_ERR1 event for + * CPU0ERR_STAT */ + uint32_t : 6; + } CPU0ERR_E1MSK_b; + }; + __IM uint32_t RESERVED6; + + union + { + __IOM uint32_t PERIERR_E1MSK0; /*!< (@ 0x00000108) Peripheral E1 Error Event Mask Register 0 */ + + struct + { + __IOM uint32_t E1_MK0 : 1; /*!< [0..0] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK1 : 1; /*!< [1..1] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK2 : 1; /*!< [2..2] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK3 : 1; /*!< [3..3] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK4 : 1; /*!< [4..4] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK5 : 1; /*!< [5..5] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK6 : 1; /*!< [6..6] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK7 : 1; /*!< [7..7] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + uint32_t : 1; + __IOM uint32_t E1_MK9 : 1; /*!< [9..9] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK10 : 1; /*!< [10..10] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK11 : 1; /*!< [11..11] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK12 : 1; /*!< [12..12] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK13 : 1; /*!< [13..13] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK14 : 1; /*!< [14..14] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK15 : 1; /*!< [15..15] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK16 : 1; /*!< [16..16] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK17 : 1; /*!< [17..17] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK18 : 1; /*!< [18..18] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK19 : 1; /*!< [19..19] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK20 : 1; /*!< [20..20] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK21 : 1; /*!< [21..21] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK22 : 1; /*!< [22..22] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK23 : 1; /*!< [23..23] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK24 : 1; /*!< [24..24] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK25 : 1; /*!< [25..25] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK26 : 1; /*!< [26..26] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK27 : 1; /*!< [27..27] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK28 : 1; /*!< [28..28] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK29 : 1; /*!< [29..29] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK30 : 1; /*!< [30..30] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + __IOM uint32_t E1_MK31 : 1; /*!< [31..31] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT0 */ + } PERIERR_E1MSK0_b; + }; + + union + { + __IOM uint32_t PERIERR_E1MSK1; /*!< (@ 0x0000010C) Peripheral E1 Error Event Mask Register 1 */ + + struct + { + __IOM uint32_t E1_MK0 : 1; /*!< [0..0] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK1 : 1; /*!< [1..1] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK2 : 1; /*!< [2..2] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK3 : 1; /*!< [3..3] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK4 : 1; /*!< [4..4] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK5 : 1; /*!< [5..5] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK6 : 1; /*!< [6..6] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK7 : 1; /*!< [7..7] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK8 : 1; /*!< [8..8] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK9 : 1; /*!< [9..9] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + uint32_t : 3; + __IOM uint32_t E1_MK13 : 1; /*!< [13..13] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + uint32_t : 1; + __IOM uint32_t E1_MK15 : 1; /*!< [15..15] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK16 : 1; /*!< [16..16] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK17 : 1; /*!< [17..17] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK18 : 1; /*!< [18..18] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK19 : 1; /*!< [19..19] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK20 : 1; /*!< [20..20] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK21 : 1; /*!< [21..21] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK22 : 1; /*!< [22..22] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK23 : 1; /*!< [23..23] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK24 : 1; /*!< [24..24] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + uint32_t : 2; + __IOM uint32_t E1_MK27 : 1; /*!< [27..27] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + __IOM uint32_t E1_MK28 : 1; /*!< [28..28] Mask captured error status as an PERI_ERR1 event for + * PERIERR_STAT1 */ + uint32_t : 3; + } PERIERR_E1MSK1_b; + }; +} R_ICU_Type; /*!< Size = 272 (0x110) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSC_S ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Register Write Protection for Safety Area (R_SYSC_S) + */ + +typedef struct /*!< (@ 0x81280000) R_SYSC_S Structure */ +{ + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t SCKCR2; /*!< (@ 0x00000004) System Clock Control Register 2 */ + + struct + { + __IOM uint32_t FSELCPU0 : 1; /*!< [0..0] Set the frequency of the clock provided to Coretex-R52 + * CPU0 in combination with bit 5 (DIVSELSUB). The combination + * is shown below. */ + uint32_t : 4; + __IOM uint32_t DIVSELSUB : 1; /*!< [5..5] Select the base clock frequency for peripheral module. */ + uint32_t : 18; + __IOM uint32_t SPI3ASYNCSEL : 1; /*!< [24..24] Select clock frequency when asynchronous serial clock + * is selected in SPI3 */ + __IOM uint32_t SCI5ASYNCSEL : 1; /*!< [25..25] Select clock frequency when asynchronous serial clock + * is selected in SCI5 */ + uint32_t : 6; + } SCKCR2_b; + }; + __IM uint32_t RESERVED1[6]; + + union + { + __IM uint32_t PLL0MON; /*!< (@ 0x00000020) PLL0 Monitor Register */ + + struct + { + __IM uint32_t PLL0MON : 1; /*!< [0..0] PLL0 Lock State Monitor */ + uint32_t : 31; + } PLL0MON_b; + }; + __IM uint32_t RESERVED2[7]; + + union + { + __IM uint32_t PLL1MON; /*!< (@ 0x00000040) PLL1 Monitor Register */ + + struct + { + __IM uint32_t PLL1MON : 1; /*!< [0..0] PLL1 Lock State Monitor */ + uint32_t : 31; + } PLL1MON_b; + }; + __IM uint32_t RESERVED3[3]; + + union + { + __IOM uint32_t PLL1EN; /*!< (@ 0x00000050) PLL1 Enable Register */ + + struct + { + __IOM uint32_t PLL1EN : 1; /*!< [0..0] PLL1 Enable */ + uint32_t : 31; + } PLL1EN_b; + }; + __IM uint32_t RESERVED4[7]; + + union + { + __IOM uint32_t LOCOCR; /*!< (@ 0x00000070) Low-Speed On-Chip Oscillator Control Register */ + + struct + { + __IOM uint32_t LCSTP : 1; /*!< [0..0] LOCO Stop */ + uint32_t : 31; + } LOCOCR_b; + }; + __IM uint32_t RESERVED5[3]; + + union + { + __IOM uint32_t HIZCTRLEN; /*!< (@ 0x00000080) High-Impedance Control Enable Register */ + + struct + { + __IOM uint32_t CLMA3MASK : 1; /*!< [0..0] CLMA3 error mask to POE3 and POEG */ + __IOM uint32_t CLMA0MASK : 1; /*!< [1..1] CLMA0 error mask to POE3 and POEG */ + __IOM uint32_t CLMA1MASK : 1; /*!< [2..2] CLMA1 error mask to POE3 and POEG */ + uint32_t : 29; + } HIZCTRLEN_b; + }; + __IM uint32_t RESERVED6[99]; + + union + { + __OM uint32_t SWRSYS; /*!< (@ 0x00000210) System Software Reset Register */ + + struct + { + __OM uint32_t SWR : 32; /*!< [31..0] System Software Reset */ + } SWRSYS_b; + }; + __IM uint32_t RESERVED7[3]; + + union + { + __IOM uint32_t SWRCPU0; /*!< (@ 0x00000220) CPU0 Software Reset Register */ + + struct + { + __IOM uint32_t SWR : 32; /*!< [31..0] CPU0 Software Reset */ + } SWRCPU0_b; + }; + __IM uint32_t RESERVED8[15]; + + union + { + __IOM uint32_t MRCTLI; /*!< (@ 0x00000260) Module Reset Control Register I */ + + struct + { + __IOM uint32_t MRCTLI00 : 1; /*!< [0..0] PHOSTIF Reset Control */ + __IOM uint32_t MRCTLI01 : 1; /*!< [1..1] SHOSTIF (Master bus clock domain) Reset Control */ + __IOM uint32_t MRCTLI02 : 1; /*!< [2..2] SHOSTIF (Slave bus clock domain) Reset Control */ + __IOM uint32_t MRCTLI03 : 1; /*!< [3..3] SHOSTIF (IP clock domain) Reset Control */ + uint32_t : 28; + } MRCTLI_b; + }; + __IM uint32_t RESERVED9[44]; + + union + { + __IOM uint32_t MSTPCRF; /*!< (@ 0x00000314) Module Stop Control Register F */ + + struct + { + __IOM uint32_t MSTPCRF00 : 1; /*!< [0..0] Trace Clock for Debugging Interface Module Stop */ + uint32_t : 31; + } MSTPCRF_b; + }; + + union + { + __IOM uint32_t MSTPCRG; /*!< (@ 0x00000318) Module Stop Control Register G */ + + struct + { + __IOM uint32_t MSTPCRG00 : 1; /*!< [0..0] SCI Unit 5 Module Stop */ + __IOM uint32_t MSTPCRG01 : 1; /*!< [1..1] IIC Unit 2 Module Stop */ + __IOM uint32_t MSTPCRG02 : 1; /*!< [2..2] SPI Unit 3 Module Stop */ + __IOM uint32_t MSTPCRG03 : 1; /*!< [3..3] GPT Unit 2 Module Stop */ + __IOM uint32_t MSTPCRG04 : 1; /*!< [4..4] CRC Unit 1 Module Stop */ + __IOM uint32_t MSTPCRG05 : 1; /*!< [5..5] RTC Module Stop */ + uint32_t : 2; + __IOM uint32_t MSTPCRG08 : 1; /*!< [8..8] CLMA3 Module Stop */ + __IOM uint32_t MSTPCRG09 : 1; /*!< [9..9] CLMA0 Module Stop */ + __IOM uint32_t MSTPCRG10 : 1; /*!< [10..10] CLMA1 Module Stop */ + __IOM uint32_t MSTPCRG11 : 1; /*!< [11..11] CLMA2 Module Stop */ + uint32_t : 20; + } MSTPCRG_b; + }; + __IM uint32_t RESERVED10; + + union + { + __IOM uint32_t MSTPCRI; /*!< (@ 0x00000320) Module Stop Control Register I */ + + struct + { + __IOM uint32_t MSTPCRI00 : 1; /*!< [0..0] PHOSTIF Module Stop */ + __IOM uint32_t MSTPCRI01 : 1; /*!< [1..1] SHOSTIF Module Stop */ + uint32_t : 30; + } MSTPCRI_b; + }; +} R_SYSC_S_Type; /*!< Size = 804 (0x324) */ + +/* =========================================================================================================================== */ +/* ================ R_CLMA0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Clock Monitor Circuit 0 (R_CLMA0) + */ + +typedef struct /*!< (@ 0x81280800) R_CLMA0 Structure */ +{ + union + { + __IOM uint8_t CTL0; /*!< (@ 0x00000000) CLMA Control Register 0 */ + + struct + { + __IOM uint8_t CLME : 1; /*!< [0..0] Clock Monitor m Enable (m = 0 to 3) */ + uint8_t : 7; + } CTL0_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1[3]; + + union + { + __IOM uint16_t CMPL; /*!< (@ 0x00000008) CLMA Compare Register L */ + + struct + { + __IOM uint16_t CMPL : 12; /*!< [11..0] Clock Monitor m Compare L (m = 0 to 3) */ + uint16_t : 4; + } CMPL_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint16_t CMPH; /*!< (@ 0x0000000C) CLMA Compare Register H */ + + struct + { + __IOM uint16_t CMPH : 12; /*!< [11..0] Clock Monitor m Compare H (m = 0 to 3) */ + uint16_t : 4; + } CMPH_b; + }; + __IM uint16_t RESERVED3; + __OM uint8_t PCMD; /*!< (@ 0x00000010) CLMA Command Register */ + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5; + + union + { + __IM uint8_t PROTSR; /*!< (@ 0x00000014) CLMA Protection Status Register */ + + struct + { + __IM uint8_t PRERR : 1; /*!< [0..0] CLMAm Error (m = 0 to 3) */ + uint8_t : 7; + } PROTSR_b; + }; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; +} R_CLMA0_Type; /*!< Size = 24 (0x18) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Master MPU 0 (R_MPU0) + */ + +typedef struct /*!< (@ 0x81281100) R_MPU0 Structure */ +{ + __IOM R_MPU0_RGN_Type RGN[8]; /*!< (@ 0x00000000) Master MPU Safety Region Start Address Register + * [0..7] */ + + union + { + __IOM uint32_t ERRINF_R; /*!< (@ 0x00000080) Master MPU Error Information Register for AXI + * type */ + + struct + { + __IOM uint32_t VALID : 1; /*!< [0..0] Validity of access error information */ + __IM uint32_t RW : 1; /*!< [1..1] Access error type */ + __IM uint32_t ERRADDR : 30; /*!< [31..2] Access error address */ + } ERRINF_R_b; + }; + + union + { + __IOM uint32_t ERRINF_W; /*!< (@ 0x00000084) Master MPU Error Information Register for AXI + * type */ + + struct + { + __IOM uint32_t VALID : 1; /*!< [0..0] Validity of access error information */ + __IM uint32_t RW : 1; /*!< [1..1] Access error type */ + __IM uint32_t ERRADDR : 30; /*!< [31..2] Access error address */ + } ERRINF_W_b; + }; +} R_MPU0_Type; /*!< Size = 136 (0x88) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU3 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Master MPU 3 (R_MPU3) + */ + +typedef struct /*!< (@ 0x81281400) R_MPU3 Structure */ +{ + __IOM R_MPU0_RGN_Type RGN[8]; /*!< (@ 0x00000000) Master MPU Safety Region Start Address Register + * [0..7] */ + + union + { + __IOM uint32_t ERRINF; /*!< (@ 0x00000080) Master MPU Error Information Register for AHB + * type */ + + struct + { + __IOM uint32_t VALID : 1; /*!< [0..0] Validity of Access Error Information */ + __IM uint32_t RW : 1; /*!< [1..1] Access error type */ + __IM uint32_t ERRADDR : 30; /*!< [31..2] Access Error Address */ + } ERRINF_b; + }; +} R_MPU3_Type; /*!< Size = 132 (0x84) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSRAM_CTL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief System SRAM Control (R_SYSRAM_CTL) + */ + +typedef struct /*!< (@ 0x81281800) R_SYSRAM_CTL Structure */ +{ + union + { + __IOM uint32_t SYSRAM_CTRL0; /*!< (@ 0x00000000) System SRAM Control Register 0 */ + + struct + { + __IOM uint32_t VECEN : 1; /*!< [0..0] Enables or disables error correction with ECC */ + uint32_t : 15; + __IOM uint32_t VRWEN : 4; /*!< [19..16] Enables write for each page of RAM */ + __IOM uint32_t VCEN : 1; /*!< [20..20] Enables access to RAM */ + __IOM uint32_t VLWEN : 1; /*!< [21..21] Enables write for RAM */ + uint32_t : 2; + __IOM uint32_t MKICCAXIERR : 1; /*!< [24..24] Controls AXI-SLVERR issuance for ECC 2-bit errors */ + uint32_t : 7; + } SYSRAM_CTRL0_b; + }; + __IM uint32_t RESERVED[3]; + + union + { + __IOM uint32_t SYSRAM_CTRL1; /*!< (@ 0x00000010) System SRAM Control Register 1 */ + + struct + { + __IOM uint32_t VECEN : 1; /*!< [0..0] Enables or disables error correction with ECC */ + uint32_t : 15; + __IOM uint32_t VRWEN : 4; /*!< [19..16] Enables write for each page of RAM */ + __IOM uint32_t VCEN : 1; /*!< [20..20] Enables access to RAM */ + __IOM uint32_t VLWEN : 1; /*!< [21..21] Enables write for RAM */ + uint32_t : 2; + __IOM uint32_t MKICCAXIERR : 1; /*!< [24..24] Controls AXI-SLVERR issuance for ECC 2-bit errors */ + uint32_t : 7; + } SYSRAM_CTRL1_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t SYSRAM_CTRL2; /*!< (@ 0x00000020) System SRAM Control Register 2 */ + + struct + { + __IOM uint32_t VECEN : 1; /*!< [0..0] Enables or disables error correction with ECC */ + uint32_t : 15; + __IOM uint32_t VRWEN : 4; /*!< [19..16] Enables write for each page of RAM */ + __IOM uint32_t VCEN : 1; /*!< [20..20] Enables access to RAM */ + __IOM uint32_t VLWEN : 1; /*!< [21..21] Enables write for RAM */ + uint32_t : 2; + __IOM uint32_t MKICCAXIERR : 1; /*!< [24..24] Controls AXI-SLVERR issuance for ECC 2-bit errors */ + uint32_t : 7; + } SYSRAM_CTRL2_b; + }; +} R_SYSRAM_CTL_Type; /*!< Size = 36 (0x24) */ + +/* =========================================================================================================================== */ +/* ================ R_SHOSTIF_CFG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Host Interface Configuration (R_SHOSTIF_CFG) + */ + +typedef struct /*!< (@ 0x81281920) R_SHOSTIF_CFG Structure */ +{ + union + { + __IOM uint32_t SHCFG; /*!< (@ 0x00000000) SHOSTIF Configuration Register */ + + struct + { + __IOM uint32_t SPIMODE : 2; /*!< [1..0] SPI Frame Format Select */ + __IOM uint32_t BYTESWAP : 1; /*!< [2..2] Byte Swap Mode */ + __IOM uint32_t ADDRESSING : 1; /*!< [3..3] Addressing Mode */ + __IM uint32_t SLEEP : 1; /*!< [4..4] SHOSTIF Enable Flag Monitor */ + uint32_t : 11; + __IOM uint32_t INTMASKI : 6; /*!< [21..16] Interrupt Mask Enable for Internal Interrupt (SHOST_INT) */ + uint32_t : 2; + __IOM uint32_t INTMASKE : 6; /*!< [29..24] Interrupt Mask Enable for External Interrupt (HSPI_INT# + * signal) */ + uint32_t : 2; + } SHCFG_b; + }; +} R_SHOSTIF_CFG_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_PHOSTIF_CFG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Parallel Host Interface Configuration (R_PHOSTIF_CFG) + */ + +typedef struct /*!< (@ 0x81281930) R_PHOSTIF_CFG Structure */ +{ + union + { + __IOM uint32_t PHCFG; /*!< (@ 0x00000000) PHOSTIF Configureation Register */ + + struct + { + __IOM uint32_t MEMIFSEL : 1; /*!< [0..0] MEMIFSEL */ + uint32_t : 3; + __IOM uint32_t BUSSSEL : 1; /*!< [4..4] BUSSSEL */ + uint32_t : 3; + __IOM uint32_t HIFSYNC : 1; /*!< [8..8] HIFSYNC */ + uint32_t : 3; + __IOM uint32_t MEMCSEL : 1; /*!< [12..12] MEMCSEL */ + uint32_t : 3; + __IOM uint32_t HWRZSEL : 1; /*!< [16..16] HWRZSEL */ + uint32_t : 3; + __IOM uint32_t ADMUXMODE : 1; /*!< [20..20] ADMUXMODE */ + uint32_t : 11; + } PHCFG_b; + }; + + union + { + __IOM uint32_t PHACC; /*!< (@ 0x00000004) PHOSTIF Register Access Control Register */ + + struct + { + __IOM uint32_t HIFRDYSEL : 1; /*!< [0..0] HIFRDYSEL */ + uint32_t : 7; + __IOM uint32_t HIFBCCSEL : 1; /*!< [8..8] HIFBCCSEL */ + __IOM uint32_t HIFBTCSEL : 1; /*!< [9..9] HIFBTCSEL */ + __IOM uint32_t HIFPRCSEL : 1; /*!< [10..10] HIFPRCSEL */ + __IOM uint32_t HIFIRCSEL : 1; /*!< [11..11] HIFIRCSEL */ + __IOM uint32_t HIFXALSEL : 1; /*!< [12..12] HIFXALSEL */ + __IOM uint32_t HIFXAHSEL : 1; /*!< [13..13] HIFXAHSEL */ + __IOM uint32_t HIFEXT0SEL : 1; /*!< [14..14] HIFEXT0SEL */ + __IOM uint32_t HIFEXT1SEL : 1; /*!< [15..15] HIFEXT1SEL */ + __IOM uint32_t CSSWAP : 1; /*!< [16..16] CSSWAP */ + __IOM uint32_t BSCADMUX : 1; /*!< [17..17] BSCADMUX */ + uint32_t : 14; + } PHACC_b; + }; +} R_PHOSTIF_CFG_Type; /*!< Size = 8 (0x8) */ + +/* =========================================================================================================================== */ +/* ================ R_RWP_S ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Register Write Protection for Safety Area (R_RWP_S) + */ + +typedef struct /*!< (@ 0x81281A00) R_RWP_S Structure */ +{ + union + { + __IOM uint32_t PRCRS; /*!< (@ 0x00000000) Safety Area Protect Register */ + + struct + { + __IOM uint32_t PRC0 : 1; /*!< [0..0] Protect 0 */ + __IOM uint32_t PRC1 : 1; /*!< [1..1] Protect 1 */ + __IOM uint32_t PRC2 : 1; /*!< [2..2] Protect 2 */ + __IOM uint32_t PRC3 : 1; /*!< [3..3] Protect 3 */ + uint32_t : 4; + __OM uint32_t PRKEY : 8; /*!< [15..8] PRC Key Code */ + uint32_t : 16; + } PRCRS_b; + }; +} R_RWP_S_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit (R_MTU) + */ + +typedef struct /*!< (@ 0x90001000) R_MTU Structure */ +{ + __IM uint16_t RESERVED[261]; + + union + { + __IOM uint8_t TOERA; /*!< (@ 0x0000020A) Timer Output Master Enable Register A */ + + struct + { + __IOM uint8_t OE3B : 1; /*!< [0..0] Master Enable MTIOC3B */ + __IOM uint8_t OE4A : 1; /*!< [1..1] Master Enable MTIOC4A */ + __IOM uint8_t OE4B : 1; /*!< [2..2] Master Enable MTIOC4B */ + __IOM uint8_t OE3D : 1; /*!< [3..3] Master Enable MTIOC3D */ + __IOM uint8_t OE4C : 1; /*!< [4..4] Master Enable MTIOC4C */ + __IOM uint8_t OE4D : 1; /*!< [5..5] Master Enable MTIOC4D */ + uint8_t : 2; + } TOERA_b; + }; + __IM uint8_t RESERVED1[2]; + + union + { + __IOM uint8_t TGCRA; /*!< (@ 0x0000020D) Timer Gate Control Register A */ + + struct + { + __IOM uint8_t UF : 1; /*!< [0..0] Output Phase Switch */ + __IOM uint8_t VF : 1; /*!< [1..1] Output Phase Switch */ + __IOM uint8_t WF : 1; /*!< [2..2] Output Phase Switch */ + __IOM uint8_t FB : 1; /*!< [3..3] External Feedback Signal Enable */ + __IOM uint8_t P : 1; /*!< [4..4] Positive-Phase Output (P) Control */ + __IOM uint8_t N : 1; /*!< [5..5] Negative-Phase Output (N) Control */ + __IOM uint8_t BDC : 1; /*!< [6..6] Brushless DC Motor */ + uint8_t : 1; + } TGCRA_b; + }; + + union + { + __IOM uint8_t TOCR1A; /*!< (@ 0x0000020E) Timer Output Control Register 1A */ + + struct + { + __IOM uint8_t OLSP : 1; /*!< [0..0] Output Level Select P */ + __IOM uint8_t OLSN : 1; /*!< [1..1] Output Level Select N */ + __IOM uint8_t TOCS : 1; /*!< [2..2] TOC Select */ + __IOM uint8_t TOCL : 1; /*!< [3..3] TOC Register Write Protection */ + uint8_t : 2; + __IOM uint8_t PSYE : 1; /*!< [6..6] PWM Synchronous Output Enable */ + uint8_t : 1; + } TOCR1A_b; + }; + + union + { + __IOM uint8_t TOCR2A; /*!< (@ 0x0000020F) Timer Output Control Register 2A */ + + struct + { + __IOM uint8_t OLS1P : 1; /*!< [0..0] Output Level Select 1P */ + __IOM uint8_t OLS1N : 1; /*!< [1..1] Output Level Select 1N */ + __IOM uint8_t OLS2P : 1; /*!< [2..2] Output Level Select 2P */ + __IOM uint8_t OLS2N : 1; /*!< [3..3] Output Level Select 2N */ + __IOM uint8_t OLS3P : 1; /*!< [4..4] Output Level Select 3P */ + __IOM uint8_t OLS3N : 1; /*!< [5..5] Output Level Select 3N */ + __IOM uint8_t BF : 2; /*!< [7..6] TOLBR Buffer Transfer Timing Select */ + } TOCR2A_b; + }; + __IM uint16_t RESERVED2[2]; + __IOM uint16_t TCDRA; /*!< (@ 0x00000214) Timer Cycle Data Register A */ + __IOM uint16_t TDDRA; /*!< (@ 0x00000216) Timer Dead Time Data Register A */ + __IM uint16_t RESERVED3[4]; + __IM uint16_t TCNTSA; /*!< (@ 0x00000220) Timer Subcounter A */ + __IOM uint16_t TCBRA; /*!< (@ 0x00000222) Timer Cycle Buffer Register A */ + __IM uint16_t RESERVED4[6]; + + union + { + __IOM uint8_t TITCR1A; /*!< (@ 0x00000230) Timer Interrupt Skipping Set Register 1A */ + + struct + { + __IOM uint8_t T4VCOR : 3; /*!< [2..0] TCIV4 Interrupt Skipping Count Setting */ + __IOM uint8_t T4VEN : 1; /*!< [3..3] TCIV4 Interrupt Skipping Enable */ + __IOM uint8_t T3ACOR : 3; /*!< [6..4] TGIA3 Interrupt Skipping Count Setting */ + __IOM uint8_t T3AEN : 1; /*!< [7..7] TGIA3 Interrupt Skipping Enable */ + } TITCR1A_b; + }; + + union + { + __IM uint8_t TITCNT1A; /*!< (@ 0x00000231) Timer Interrupt Skipping Counter 1A */ + + struct + { + __IM uint8_t T4VCNT : 3; /*!< [2..0] TCIV4 Interrupt Counter */ + uint8_t : 1; + __IM uint8_t T3ACNT : 3; /*!< [6..4] TGIA3 Interrupt Counter */ + uint8_t : 1; + } TITCNT1A_b; + }; + + union + { + __IOM uint8_t TBTERA; /*!< (@ 0x00000232) Timer Buffer Transfer Set Register A */ + + struct + { + __IOM uint8_t BTE : 2; /*!< [1..0] Buffer Transfer Disable and Interrupt Skipping Link Setting */ + uint8_t : 6; + } TBTERA_b; + }; + __IM uint8_t RESERVED5; + + union + { + __IOM uint8_t TDERA; /*!< (@ 0x00000234) Timer Dead Time Enable Register A */ + + struct + { + __IOM uint8_t TDER : 1; /*!< [0..0] Dead Time Enable */ + uint8_t : 7; + } TDERA_b; + }; + __IM uint8_t RESERVED6; + + union + { + __IOM uint8_t TOLBRA; /*!< (@ 0x00000236) Timer Output Level Buffer Register A */ + + struct + { + __IOM uint8_t OLS1P : 1; /*!< [0..0] Output Level Select 1P */ + __IOM uint8_t OLS1N : 1; /*!< [1..1] Output Level Select 1N */ + __IOM uint8_t OLS2P : 1; /*!< [2..2] Output Level Select 2P */ + __IOM uint8_t OLS2N : 1; /*!< [3..3] Output Level Select 2N */ + __IOM uint8_t OLS3P : 1; /*!< [4..4] Output Level Select 3P */ + __IOM uint8_t OLS3N : 1; /*!< [5..5] Output Level Select 3N */ + uint8_t : 2; + } TOLBRA_b; + }; + __IM uint8_t RESERVED7; + __IM uint16_t RESERVED8; + + union + { + __IOM uint8_t TITMRA; /*!< (@ 0x0000023A) Timer Interrupt Skipping Mode Register A */ + + struct + { + __IOM uint8_t TITM : 1; /*!< [0..0] Interrupt Skipping Function Select */ + uint8_t : 7; + } TITMRA_b; + }; + + union + { + __IOM uint8_t TITCR2A; /*!< (@ 0x0000023B) Timer Interrupt Skipping Set Register 2A */ + + struct + { + __IOM uint8_t TRG4COR : 3; /*!< [2..0] TRG4AN/TRG4BN Interrupt Skipping Count Setting */ + uint8_t : 5; + } TITCR2A_b; + }; + + union + { + __IM uint8_t TITCNT2A; /*!< (@ 0x0000023C) Timer Interrupt Skipping Counter 2A */ + + struct + { + __IM uint8_t TRG4CNT : 3; /*!< [2..0] TRG4AN/TRG4BN Interrupt Counter */ + uint8_t : 5; + } TITCNT2A_b; + }; + __IM uint8_t RESERVED9; + __IM uint16_t RESERVED10[17]; + + union + { + __IOM uint8_t TWCRA; /*!< (@ 0x00000260) Timer Waveform Control Register A */ + + struct + { + __IOM uint8_t WRE : 1; /*!< [0..0] Waveform Retain Enable */ + __IOM uint8_t SCC : 1; /*!< [1..1] Synchronous Clearing Control (Only valid in TWCRB) */ + uint8_t : 5; + __IOM uint8_t CCE : 1; /*!< [7..7] Compare Match Clear Enable */ + } TWCRA_b; + }; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12[7]; + + union + { + __IOM uint8_t TMDR2A; /*!< (@ 0x00000270) Timer Mode Register 2A */ + + struct + { + __IOM uint8_t DRS : 1; /*!< [0..0] Double Buffer Select */ + uint8_t : 7; + } TMDR2A_b; + }; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14[7]; + + union + { + __IOM uint8_t TSTRA; /*!< (@ 0x00000280) Timer Start Register A */ + + struct + { + __IOM uint8_t CST0 : 1; /*!< [0..0] Counter Start 0 */ + __IOM uint8_t CST1 : 1; /*!< [1..1] Counter Start 1 */ + __IOM uint8_t CST2 : 1; /*!< [2..2] Counter Start 2 */ + __IOM uint8_t CST8 : 1; /*!< [3..3] Counter Start 8 */ + uint8_t : 2; + __IOM uint8_t CST3 : 1; /*!< [6..6] Counter Start 3 */ + __IOM uint8_t CST4 : 1; /*!< [7..7] Counter Start 4 */ + } TSTRA_b; + }; + + union + { + __IOM uint8_t TSYRA; /*!< (@ 0x00000281) Timer Synchronous Register A */ + + struct + { + __IOM uint8_t SYNC0 : 1; /*!< [0..0] Timer Synchronous Operation 0 */ + __IOM uint8_t SYNC1 : 1; /*!< [1..1] Timer Synchronous Operation 1 */ + __IOM uint8_t SYNC2 : 1; /*!< [2..2] Timer Synchronous Operation 2 */ + uint8_t : 3; + __IOM uint8_t SYNC3 : 1; /*!< [6..6] Timer Synchronous Operation 3 */ + __IOM uint8_t SYNC4 : 1; /*!< [7..7] Timer Synchronous Operation 4 */ + } TSYRA_b; + }; + + union + { + __IOM uint8_t TCSYSTR; /*!< (@ 0x00000282) Timer Counter Synchronous Start Register */ + + struct + { + __IOM uint8_t SCH7 : 1; /*!< [0..0] Synchronous Start 7 */ + __IOM uint8_t SCH6 : 1; /*!< [1..1] Synchronous Start 6 */ + uint8_t : 1; + __IOM uint8_t SCH4 : 1; /*!< [3..3] Synchronous Start 4 */ + __IOM uint8_t SCH3 : 1; /*!< [4..4] Synchronous Start 3 */ + __IOM uint8_t SCH2 : 1; /*!< [5..5] Synchronous Start 2 */ + __IOM uint8_t SCH1 : 1; /*!< [6..6] Synchronous Start 1 */ + __IOM uint8_t SCH0 : 1; /*!< [7..7] Synchronous Start 0 */ + } TCSYSTR_b; + }; + __IM uint8_t RESERVED15; + + union + { + __IOM uint8_t TRWERA; /*!< (@ 0x00000284) Timer Read/Write Enable Register A */ + + struct + { + __IOM uint8_t RWE : 1; /*!< [0..0] Read/Write Enable */ + uint8_t : 7; + } TRWERA_b; + }; + __IM uint8_t RESERVED16; + __IM uint16_t RESERVED17[962]; + + union + { + __IOM uint8_t TOERB; /*!< (@ 0x00000A0A) Timer Output Master Enable Register B */ + + struct + { + __IOM uint8_t OE6B : 1; /*!< [0..0] Master Enable MTIOC6B */ + __IOM uint8_t OE7A : 1; /*!< [1..1] Master Enable MTIOC7A */ + __IOM uint8_t OE7B : 1; /*!< [2..2] Master Enable MTIOC7B */ + __IOM uint8_t OE6D : 1; /*!< [3..3] Master Enable MTIOC6D */ + __IOM uint8_t OE7C : 1; /*!< [4..4] Master Enable MTIOC7C */ + __IOM uint8_t OE7D : 1; /*!< [5..5] Master Enable MTIOC7D */ + uint8_t : 2; + } TOERB_b; + }; + __IM uint8_t RESERVED18; + __IM uint16_t RESERVED19; + + union + { + __IOM uint8_t TOCR1B; /*!< (@ 0x00000A0E) Timer Output Control Register 1B */ + + struct + { + __IOM uint8_t OLSP : 1; /*!< [0..0] Output Level Select P */ + __IOM uint8_t OLSN : 1; /*!< [1..1] Output Level Select N */ + __IOM uint8_t TOCS : 1; /*!< [2..2] TOC Select */ + __IOM uint8_t TOCL : 1; /*!< [3..3] TOC Register Write Protection */ + uint8_t : 2; + __IOM uint8_t PSYE : 1; /*!< [6..6] PWM Synchronous Output Enable */ + uint8_t : 1; + } TOCR1B_b; + }; + + union + { + __IOM uint8_t TOCR2B; /*!< (@ 0x00000A0F) Timer Output Control Register 2B */ + + struct + { + __IOM uint8_t OLS1P : 1; /*!< [0..0] Output Level Select 1P */ + __IOM uint8_t OLS1N : 1; /*!< [1..1] Output Level Select 1N */ + __IOM uint8_t OLS2P : 1; /*!< [2..2] Output Level Select 2P */ + __IOM uint8_t OLS2N : 1; /*!< [3..3] Output Level Select 2N */ + __IOM uint8_t OLS3P : 1; /*!< [4..4] Output Level Select 3P */ + __IOM uint8_t OLS3N : 1; /*!< [5..5] Output Level Select 3N */ + __IOM uint8_t BF : 2; /*!< [7..6] TOLBR Buffer Transfer Timing Select */ + } TOCR2B_b; + }; + __IM uint16_t RESERVED20[2]; + __IOM uint16_t TCDRB; /*!< (@ 0x00000A14) Timer Cycle Data Register B */ + __IOM uint16_t TDDRB; /*!< (@ 0x00000A16) Timer Dead Time Data Register B */ + __IM uint16_t RESERVED21[4]; + __IM uint16_t TCNTSB; /*!< (@ 0x00000A20) Timer Subcounter B */ + __IOM uint16_t TCBRB; /*!< (@ 0x00000A22) Timer Cycle Buffer Register B */ + __IM uint16_t RESERVED22[6]; + + union + { + __IOM uint8_t TITCR1B; /*!< (@ 0x00000A30) Timer Interrupt Skipping Set Register 1B */ + + struct + { + __IOM uint8_t T7VCOR : 3; /*!< [2..0] TCIV7 Interrupt Skipping Count Setting */ + __IOM uint8_t T7VEN : 1; /*!< [3..3] TCIV7 Interrupt Skipping Enable */ + __IOM uint8_t T6ACOR : 3; /*!< [6..4] TGIA6 Interrupt Skipping Count Setting */ + __IOM uint8_t T6AEN : 1; /*!< [7..7] TGIA6 Interrupt Skipping Enable */ + } TITCR1B_b; + }; + + union + { + __IM uint8_t TITCNT1B; /*!< (@ 0x00000A31) Timer Interrupt Skipping Counter 1B */ + + struct + { + __IM uint8_t T7VCNT : 3; /*!< [2..0] TCIV7 Interrupt Counter */ + uint8_t : 1; + __IM uint8_t T6ACNT : 3; /*!< [6..4] TGIA6 Interrupt Counter */ + uint8_t : 1; + } TITCNT1B_b; + }; + + union + { + __IOM uint8_t TBTERB; /*!< (@ 0x00000A32) Timer Buffer Transfer Set Register B */ + + struct + { + __IOM uint8_t BTE : 2; /*!< [1..0] Buffer Transfer Disable and Interrupt Skipping Link Setting */ + uint8_t : 6; + } TBTERB_b; + }; + __IM uint8_t RESERVED23; + + union + { + __IOM uint8_t TDERB; /*!< (@ 0x00000A34) Timer Dead Time Enable Register B */ + + struct + { + __IOM uint8_t TDER : 1; /*!< [0..0] Dead Time Enable */ + uint8_t : 7; + } TDERB_b; + }; + __IM uint8_t RESERVED24; + + union + { + __IOM uint8_t TOLBRB; /*!< (@ 0x00000A36) Timer Output Level Buffer Register B */ + + struct + { + __IOM uint8_t OLS1P : 1; /*!< [0..0] Output Level Select 1P */ + __IOM uint8_t OLS1N : 1; /*!< [1..1] Output Level Select 1N */ + __IOM uint8_t OLS2P : 1; /*!< [2..2] Output Level Select 2P */ + __IOM uint8_t OLS2N : 1; /*!< [3..3] Output Level Select 2N */ + __IOM uint8_t OLS3P : 1; /*!< [4..4] Output Level Select 3P */ + __IOM uint8_t OLS3N : 1; /*!< [5..5] Output Level Select 3N */ + uint8_t : 2; + } TOLBRB_b; + }; + __IM uint8_t RESERVED25; + __IM uint16_t RESERVED26; + + union + { + __IOM uint8_t TITMRB; /*!< (@ 0x00000A3A) Timer Interrupt Skipping Mode Register B */ + + struct + { + __IOM uint8_t TITM : 1; /*!< [0..0] Interrupt Skipping Function Select */ + uint8_t : 7; + } TITMRB_b; + }; + + union + { + __IOM uint8_t TITCR2B; /*!< (@ 0x00000A3B) Timer Interrupt Skipping Set Register 2B */ + + struct + { + __IOM uint8_t TRG7COR : 3; /*!< [2..0] TRG7AN/TRG7BN Interrupt Skipping Count Setting */ + uint8_t : 5; + } TITCR2B_b; + }; + + union + { + __IM uint8_t TITCNT2B; /*!< (@ 0x00000A3C) Timer Interrupt Skipping Counter 2B */ + + struct + { + __IM uint8_t TRG7CNT : 3; /*!< [2..0] TRG7AN/TRG7BN Interrupt Counter */ + uint8_t : 5; + } TITCNT2B_b; + }; + __IM uint8_t RESERVED27; + __IM uint16_t RESERVED28[17]; + + union + { + __IOM uint8_t TWCRB; /*!< (@ 0x00000A60) Timer Waveform Control Register B */ + + struct + { + __IOM uint8_t WRE : 1; /*!< [0..0] Waveform Retain Enable */ + __IOM uint8_t SCC : 1; /*!< [1..1] Synchronous Clearing Control (Only valid in TWCRB) */ + uint8_t : 5; + __IOM uint8_t CCE : 1; /*!< [7..7] Compare Match Clear Enable */ + } TWCRB_b; + }; + __IM uint8_t RESERVED29; + __IM uint16_t RESERVED30[7]; + + union + { + __IOM uint8_t TMDR2B; /*!< (@ 0x00000A70) Timer Mode Register 2B */ + + struct + { + __IOM uint8_t DRS : 1; /*!< [0..0] Double Buffer Select */ + uint8_t : 7; + } TMDR2B_b; + }; + __IM uint8_t RESERVED31; + __IM uint16_t RESERVED32[7]; + + union + { + __IOM uint8_t TSTRB; /*!< (@ 0x00000A80) Timer Start Register B */ + + struct + { + uint8_t : 6; + __IOM uint8_t CST6 : 1; /*!< [6..6] Counter Start 6 */ + __IOM uint8_t CST7 : 1; /*!< [7..7] Counter Start 7 */ + } TSTRB_b; + }; + + union + { + __IOM uint8_t TSYRB; /*!< (@ 0x00000A81) Timer Synchronous Register B */ + + struct + { + uint8_t : 6; + __IOM uint8_t SYNC6 : 1; /*!< [6..6] Timer Synchronous Operation 6 */ + __IOM uint8_t SYNC7 : 1; /*!< [7..7] Timer Synchronous Operation 7 */ + } TSYRB_b; + }; + __IM uint16_t RESERVED33; + + union + { + __IOM uint8_t TRWERB; /*!< (@ 0x00000A84) Timer Read/Write Enable Register B */ + + struct + { + __IOM uint8_t RWE : 1; /*!< [0..0] Read/Write Enable */ + uint8_t : 7; + } TRWERB_b; + }; + __IM uint8_t RESERVED34; + __IM uint16_t RESERVED35; +} R_MTU_Type; /*!< Size = 2696 (0xa88) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU3 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 3 (R_MTU3) + */ + +typedef struct /*!< (@ 0x90001100) R_MTU3 Structure */ +{ + __IM uint16_t RESERVED[128]; + + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000100) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + __IM uint8_t RESERVED1; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000102) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + __IOM uint8_t BFA : 1; /*!< [4..4] Buffer Operation A */ + __IOM uint8_t BFB : 1; /*!< [5..5] Buffer Operation B */ + uint8_t : 2; + } TMDR1_b; + }; + __IM uint8_t RESERVED2; + + union + { + __IOM uint8_t TIORH; /*!< (@ 0x00000104) Timer I/O Control Register H */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIORH_b; + }; + + union + { + __IOM uint8_t TIORL; /*!< (@ 0x00000105) Timer I/O Control Register L */ + + struct + { + __IOM uint8_t IOC : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOD : 4; /*!< [7..4] I/O Control B */ + } TIORL_b; + }; + __IM uint16_t RESERVED3; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000108) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + __IOM uint8_t TGIEC : 1; /*!< [2..2] TGR Interrupt Enable C */ + __IOM uint8_t TGIED : 1; /*!< [3..3] TGR Interrupt Enable D */ + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + uint8_t : 2; + __IOM uint8_t TTGE : 1; /*!< [7..7] A/D Converter Start Request Enable */ + } TIER_b; + }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5[3]; + __IOM uint16_t TCNT; /*!< (@ 0x00000110) Timer Counter */ + __IM uint16_t RESERVED6[3]; + __IOM uint16_t TGRA; /*!< (@ 0x00000118) Timer General Register A */ + __IOM uint16_t TGRB; /*!< (@ 0x0000011A) Timer General Register B */ + __IM uint16_t RESERVED7[4]; + __IOM uint16_t TGRC; /*!< (@ 0x00000124) Timer General Register C */ + __IOM uint16_t TGRD; /*!< (@ 0x00000126) Timer General Register D */ + __IM uint16_t RESERVED8[2]; + + union + { + __IOM uint8_t TSR; /*!< (@ 0x0000012C) Timer Status Register */ + + struct + { + __IOM uint8_t TGFA : 1; /*!< [0..0] Input Capture/Output Compare Flag A */ + __IOM uint8_t TGFB : 1; /*!< [1..1] Input Capture/Output Compare Flag B */ + __IOM uint8_t TGFC : 1; /*!< [2..2] Input Capture/Output Compare Flag C */ + __IOM uint8_t TGFD : 1; /*!< [3..3] Input Capture/Output Compare Flag D */ + __IOM uint8_t TCFV : 1; /*!< [4..4] Overflow flag */ + __IOM uint8_t TCFU : 1; /*!< [5..5] Underflow flag */ + uint8_t : 1; + __IM uint8_t TCFD : 1; /*!< [7..7] Count Direction Flag */ + } TSR_b; + }; + __IM uint8_t RESERVED9; + __IM uint16_t RESERVED10[5]; + + union + { + __IOM uint8_t TBTM; /*!< (@ 0x00000138) Timer Buffer Operation Transfer Mode Register */ + + struct + { + __IOM uint8_t TTSA : 1; /*!< [0..0] Timing Select A */ + __IOM uint8_t TTSB : 1; /*!< [1..1] Timing Select B */ + uint8_t : 6; + } TBTM_b; + }; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12[9]; + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x0000014C) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + uint8_t : 5; + } TCR2_b; + }; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14[18]; + __IOM uint16_t TGRE; /*!< (@ 0x00000172) Timer General Register E */ +} R_MTU3_Type; /*!< Size = 372 (0x174) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU4 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 4 (R_MTU4) + */ + +typedef struct /*!< (@ 0x90001200) R_MTU4 Structure */ +{ + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000001) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + __IM uint8_t RESERVED1; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000003) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + __IOM uint8_t BFA : 1; /*!< [4..4] Buffer Operation A */ + __IOM uint8_t BFB : 1; /*!< [5..5] Buffer Operation B */ + uint8_t : 2; + } TMDR1_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint8_t TIORH; /*!< (@ 0x00000006) Timer I/O Control Register H */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIORH_b; + }; + + union + { + __IOM uint8_t TIORL; /*!< (@ 0x00000007) Timer I/O Control Register L */ + + struct + { + __IOM uint8_t IOC : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOD : 4; /*!< [7..4] I/O Control B */ + } TIORL_b; + }; + __IM uint8_t RESERVED3; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000009) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + __IOM uint8_t TGIEC : 1; /*!< [2..2] TGR Interrupt Enable C */ + __IOM uint8_t TGIED : 1; /*!< [3..3] TGR Interrupt Enable D */ + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + uint8_t : 1; + __IOM uint8_t TTGE2 : 1; /*!< [6..6] A/D Converter Start Request Enable 2 */ + __IOM uint8_t TTGE : 1; /*!< [7..7] A/D Converter Start Request Enable */ + } TIER_b; + }; + __IM uint16_t RESERVED4[4]; + __IOM uint16_t TCNT; /*!< (@ 0x00000012) Timer Counter */ + __IM uint16_t RESERVED5[4]; + __IOM uint16_t TGRA; /*!< (@ 0x0000001C) Timer General Register A */ + __IOM uint16_t TGRB; /*!< (@ 0x0000001E) Timer General Register B */ + __IM uint16_t RESERVED6[4]; + __IOM uint16_t TGRC; /*!< (@ 0x00000028) Timer General Register C */ + __IOM uint16_t TGRD; /*!< (@ 0x0000002A) Timer General Register D */ + __IM uint8_t RESERVED7; + + union + { + __IOM uint8_t TSR; /*!< (@ 0x0000002D) Timer Status Register */ + + struct + { + __IOM uint8_t TGFA : 1; /*!< [0..0] Input Capture/Output Compare Flag A */ + __IOM uint8_t TGFB : 1; /*!< [1..1] Input Capture/Output Compare Flag B */ + __IOM uint8_t TGFC : 1; /*!< [2..2] Input Capture/Output Compare Flag C */ + __IOM uint8_t TGFD : 1; /*!< [3..3] Input Capture/Output Compare Flag D */ + __IOM uint8_t TCFV : 1; /*!< [4..4] Overflow flag */ + __IOM uint8_t TCFU : 1; /*!< [5..5] Underflow flag */ + uint8_t : 1; + __IM uint8_t TCFD : 1; /*!< [7..7] Count Direction Flag */ + } TSR_b; + }; + __IM uint16_t RESERVED8[5]; + __IM uint8_t RESERVED9; + + union + { + __IOM uint8_t TBTM; /*!< (@ 0x00000039) Timer Buffer Operation Transfer Mode Register */ + + struct + { + __IOM uint8_t TTSA : 1; /*!< [0..0] Timing Select A */ + __IOM uint8_t TTSB : 1; /*!< [1..1] Timing Select B */ + uint8_t : 6; + } TBTM_b; + }; + __IM uint16_t RESERVED10[3]; + + union + { + __IOM uint16_t TADCR; /*!< (@ 0x00000040) Timer A/D Converter Start Request Control Register */ + + struct + { + __IOM uint16_t ITB4VE : 1; /*!< [0..0] TCIV4 Interrupt Skipping Link Enable */ + __IOM uint16_t ITB3AE : 1; /*!< [1..1] TGIA3 Interrupt Skipping Link Enable */ + __IOM uint16_t ITA4VE : 1; /*!< [2..2] TCIV4 Interrupt Skipping Link Enable */ + __IOM uint16_t ITA3AE : 1; /*!< [3..3] TGIA3 Interrupt Skipping Link Enable */ + __IOM uint16_t DT4BE : 1; /*!< [4..4] Down-Count TRG4BN Enable */ + __IOM uint16_t UT4BE : 1; /*!< [5..5] Up-Count TRG4BN Enable */ + __IOM uint16_t DT4AE : 1; /*!< [6..6] Down-Count TRG4AN Enable */ + __IOM uint16_t UT4AE : 1; /*!< [7..7] Up-Count TRG4AN Enable */ + uint16_t : 6; + __IOM uint16_t BF : 2; /*!< [15..14] MTU4.TADCOBRA/TADCOBRB Transfer Timing Select */ + } TADCR_b; + }; + __IM uint16_t RESERVED11; + __IOM uint16_t TADCORA; /*!< (@ 0x00000044) Timer A/D Converter Start Request Cycle Set Register + * A */ + __IOM uint16_t TADCORB; /*!< (@ 0x00000046) Timer A/D Converter Start Request Cycle Set Register + * B */ + __IOM uint16_t TADCOBRA; /*!< (@ 0x00000048) Timer A/D Converter Start Request Cycle Set Buffer + * Register A */ + __IOM uint16_t TADCOBRB; /*!< (@ 0x0000004A) Timer A/D Converter Start Request Cycle Set Buffer + * Register B */ + __IM uint8_t RESERVED12; + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x0000004D) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + uint8_t : 5; + } TCR2_b; + }; + __IM uint16_t RESERVED13[19]; + __IOM uint16_t TGRE; /*!< (@ 0x00000074) Timer General Register E */ + __IOM uint16_t TGRF; /*!< (@ 0x00000076) Timer General Register F */ +} R_MTU4_Type; /*!< Size = 120 (0x78) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU_NF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Noise Filter (R_MTU_NF) + */ + +typedef struct /*!< (@ 0x90001290) R_MTU_NF Structure */ +{ + union + { + __IOM uint8_t NFCR0; /*!< (@ 0x00000000) Noise Filter Control Register 0 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + __IOM uint8_t NFCEN : 1; /*!< [2..2] Noise Filter C Enable */ + __IOM uint8_t NFDEN : 1; /*!< [3..3] Noise Filter D Enable */ + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR0_b; + }; + + union + { + __IOM uint8_t NFCR1; /*!< (@ 0x00000001) Noise Filter Control Register 1 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + uint8_t : 2; + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR1_b; + }; + + union + { + __IOM uint8_t NFCR2; /*!< (@ 0x00000002) Noise Filter Control Register 2 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + uint8_t : 2; + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR2_b; + }; + + union + { + __IOM uint8_t NFCR3; /*!< (@ 0x00000003) Noise Filter Control Register 3 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + __IOM uint8_t NFCEN : 1; /*!< [2..2] Noise Filter C Enable */ + __IOM uint8_t NFDEN : 1; /*!< [3..3] Noise Filter D Enable */ + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR3_b; + }; + + union + { + __IOM uint8_t NFCR4; /*!< (@ 0x00000004) Noise Filter Control Register 4 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + __IOM uint8_t NFCEN : 1; /*!< [2..2] Noise Filter C Enable */ + __IOM uint8_t NFDEN : 1; /*!< [3..3] Noise Filter D Enable */ + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR4_b; + }; + __IM uint8_t RESERVED[3]; + + union + { + __IOM uint8_t NFCR8; /*!< (@ 0x00000008) Noise Filter Control Register 8 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + __IOM uint8_t NFCEN : 1; /*!< [2..2] Noise Filter C Enable */ + __IOM uint8_t NFDEN : 1; /*!< [3..3] Noise Filter D Enable */ + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR8_b; + }; + + union + { + __IOM uint8_t NFCRC; /*!< (@ 0x00000009) Noise Filter Control Register C */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + __IOM uint8_t NFCEN : 1; /*!< [2..2] Noise Filter C Enable */ + __IOM uint8_t NFDEN : 1; /*!< [3..3] Noise Filter D Enable */ + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCRC_b; + }; + __IM uint8_t RESERVED1[2041]; + + union + { + __IOM uint8_t NFCR6; /*!< (@ 0x00000803) Noise Filter Control Register 6 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + __IOM uint8_t NFCEN : 1; /*!< [2..2] Noise Filter C Enable */ + __IOM uint8_t NFDEN : 1; /*!< [3..3] Noise Filter D Enable */ + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR6_b; + }; + + union + { + __IOM uint8_t NFCR7; /*!< (@ 0x00000804) Noise Filter Control Register 7 */ + + struct + { + __IOM uint8_t NFAEN : 1; /*!< [0..0] Noise Filter A Enable */ + __IOM uint8_t NFBEN : 1; /*!< [1..1] Noise Filter B Enable */ + __IOM uint8_t NFCEN : 1; /*!< [2..2] Noise Filter C Enable */ + __IOM uint8_t NFDEN : 1; /*!< [3..3] Noise Filter D Enable */ + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR7_b; + }; + + union + { + __IOM uint8_t NFCR5; /*!< (@ 0x00000805) Noise Filter Control Register 5 */ + + struct + { + __IOM uint8_t NFUEN : 1; /*!< [0..0] Noise Filter U Enable */ + __IOM uint8_t NFVEN : 1; /*!< [1..1] Noise Filter V Enable */ + __IOM uint8_t NFWEN : 1; /*!< [2..2] Noise Filter W Enable */ + uint8_t : 1; + __IOM uint8_t NFCS : 2; /*!< [5..4] Noise Filter Clock Select */ + uint8_t : 2; + } NFCR5_b; + }; +} R_MTU_NF_Type; /*!< Size = 2054 (0x806) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 0 (R_MTU0) + */ + +typedef struct /*!< (@ 0x90001300) R_MTU0 Structure */ +{ + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000001) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + __IOM uint8_t BFA : 1; /*!< [4..4] Buffer Operation A */ + __IOM uint8_t BFB : 1; /*!< [5..5] Buffer Operation B */ + __IOM uint8_t BFE : 1; /*!< [6..6] Buffer Operation E */ + uint8_t : 1; + } TMDR1_b; + }; + + union + { + __IOM uint8_t TIORH; /*!< (@ 0x00000002) Timer I/O Control Register H */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIORH_b; + }; + + union + { + __IOM uint8_t TIORL; /*!< (@ 0x00000003) Timer I/O Control Register L */ + + struct + { + __IOM uint8_t IOC : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOD : 4; /*!< [7..4] I/O Control B */ + } TIORL_b; + }; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000004) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + __IOM uint8_t TGIEC : 1; /*!< [2..2] TGR Interrupt Enable C */ + __IOM uint8_t TGIED : 1; /*!< [3..3] TGR Interrupt Enable D */ + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + uint8_t : 2; + __IOM uint8_t TTGE : 1; /*!< [7..7] A/D Converter Start Request Enable */ + } TIER_b; + }; + __IM uint8_t RESERVED; + __IOM uint16_t TCNT; /*!< (@ 0x00000006) Timer Counter */ + __IOM uint16_t TGRA; /*!< (@ 0x00000008) Timer General Register A */ + __IOM uint16_t TGRB; /*!< (@ 0x0000000A) Timer General Register B */ + __IOM uint16_t TGRC; /*!< (@ 0x0000000C) Timer General Register C */ + __IOM uint16_t TGRD; /*!< (@ 0x0000000E) Timer General Register D */ + __IM uint16_t RESERVED1[8]; + __IOM uint16_t TGRE; /*!< (@ 0x00000020) Timer General Register E */ + __IOM uint16_t TGRF; /*!< (@ 0x00000022) Timer General Register F */ + + union + { + __IOM uint8_t TIER2; /*!< (@ 0x00000024) Timer Interrupt Enable Register 2 */ + + struct + { + __IOM uint8_t TGIEE : 1; /*!< [0..0] TGR Interrupt Enable E */ + __IOM uint8_t TGIEF : 1; /*!< [1..1] TGR Interrupt Enable F */ + uint8_t : 5; + __IOM uint8_t TTGE2 : 1; /*!< [7..7] A/D Converter Start Request Enable 2 */ + } TIER2_b; + }; + __IM uint8_t RESERVED2; + + union + { + __IOM uint8_t TBTM; /*!< (@ 0x00000026) Timer Buffer Operation Transfer Mode Register */ + + struct + { + __IOM uint8_t TTSA : 1; /*!< [0..0] Timing Select A */ + __IOM uint8_t TTSB : 1; /*!< [1..1] Timing Select B */ + __IOM uint8_t TTSE : 1; /*!< [2..2] Timing Select E */ + uint8_t : 5; + } TBTM_b; + }; + __IM uint8_t RESERVED3; + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x00000028) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + uint8_t : 5; + } TCR2_b; + }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5; +} R_MTU0_Type; /*!< Size = 44 (0x2c) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU1 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 1 (R_MTU1) + */ + +typedef struct /*!< (@ 0x90001380) R_MTU1 Structure */ +{ + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000001) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + uint8_t : 4; + } TMDR1_b; + }; + + union + { + __IOM uint8_t TIOR; /*!< (@ 0x00000002) Timer I/O Control Register */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIOR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000004) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + uint8_t : 2; + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + __IOM uint8_t TCIEU : 1; /*!< [5..5] Underflow Interrupt Enable */ + uint8_t : 1; + __IOM uint8_t TTGE : 1; /*!< [7..7] A/D Converter Start Request Enable */ + } TIER_b; + }; + + union + { + __IOM uint8_t TSR; /*!< (@ 0x00000005) Timer Status Register */ + + struct + { + __IOM uint8_t TGFA : 1; /*!< [0..0] Input Capture/Output Compare Flag A */ + __IOM uint8_t TGFB : 1; /*!< [1..1] Input Capture/Output Compare Flag B */ + __IOM uint8_t TGFC : 1; /*!< [2..2] Input Capture/Output Compare Flag C */ + __IOM uint8_t TGFD : 1; /*!< [3..3] Input Capture/Output Compare Flag D */ + __IOM uint8_t TCFV : 1; /*!< [4..4] Overflow flag */ + __IOM uint8_t TCFU : 1; /*!< [5..5] Underflow flag */ + uint8_t : 1; + __IM uint8_t TCFD : 1; /*!< [7..7] Count Direction Flag */ + } TSR_b; + }; + __IOM uint16_t TCNT; /*!< (@ 0x00000006) Timer Counter */ + __IOM uint16_t TGRA; /*!< (@ 0x00000008) Timer General Register A */ + __IOM uint16_t TGRB; /*!< (@ 0x0000000A) Timer General Register B */ + __IM uint32_t RESERVED1; + + union + { + __IOM uint8_t TICCR; /*!< (@ 0x00000010) Timer Input Capture Control Register */ + + struct + { + __IOM uint8_t I1AE : 1; /*!< [0..0] Input Capture Enable */ + __IOM uint8_t I1BE : 1; /*!< [1..1] Input Capture Enable */ + __IOM uint8_t I2AE : 1; /*!< [2..2] Input Capture Enable */ + __IOM uint8_t I2BE : 1; /*!< [3..3] Input Capture Enable */ + uint8_t : 4; + } TICCR_b; + }; + + union + { + __IOM uint8_t TMDR3; /*!< (@ 0x00000011) Timer Mode Register 3 */ + + struct + { + __IOM uint8_t LWA : 1; /*!< [0..0] MTU1/MTU2 Combination Longword Access Control */ + __IOM uint8_t PHCKSEL : 1; /*!< [1..1] External Input Phase Clock Select */ + uint8_t : 6; + } TMDR3_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x00000014) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t PCB : 2; /*!< [4..3] Functional Expansion Control for Phase Counting Modes + * 2, 3, and 5 */ + uint8_t : 3; + } TCR2_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; + __IM uint32_t RESERVED5[2]; + __IOM uint32_t TCNTLW; /*!< (@ 0x00000020) Timer Longword Counter */ + __IOM uint32_t TGRALW; /*!< (@ 0x00000024) Timer Longword General Register A */ + __IOM uint32_t TGRBLW; /*!< (@ 0x00000028) Timer Longword General Register B */ +} R_MTU1_Type; /*!< Size = 44 (0x2c) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU2 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 2 (R_MTU2) + */ + +typedef struct /*!< (@ 0x90001400) R_MTU2 Structure */ +{ + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000001) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + uint8_t : 4; + } TMDR1_b; + }; + + union + { + __IOM uint8_t TIOR; /*!< (@ 0x00000002) Timer I/O Control Register */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIOR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000004) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + uint8_t : 2; + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + __IOM uint8_t TCIEU : 1; /*!< [5..5] Underflow Interrupt Enable */ + uint8_t : 1; + __IOM uint8_t TTGE : 1; /*!< [7..7] A/D Converter Start Request Enable */ + } TIER_b; + }; + + union + { + __IOM uint8_t TSR; /*!< (@ 0x00000005) Timer Status Register */ + + struct + { + __IOM uint8_t TGFA : 1; /*!< [0..0] Input Capture/Output Compare Flag A */ + __IOM uint8_t TGFB : 1; /*!< [1..1] Input Capture/Output Compare Flag B */ + __IOM uint8_t TGFC : 1; /*!< [2..2] Input Capture/Output Compare Flag C */ + __IOM uint8_t TGFD : 1; /*!< [3..3] Input Capture/Output Compare Flag D */ + __IOM uint8_t TCFV : 1; /*!< [4..4] Overflow flag */ + __IOM uint8_t TCFU : 1; /*!< [5..5] Underflow flag */ + uint8_t : 1; + __IM uint8_t TCFD : 1; /*!< [7..7] Count Direction Flag */ + } TSR_b; + }; + __IOM uint16_t TCNT; /*!< (@ 0x00000006) Timer Counter */ + __IOM uint16_t TGRA; /*!< (@ 0x00000008) Timer General Register A */ + __IOM uint16_t TGRB; /*!< (@ 0x0000000A) Timer General Register B */ + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x0000000C) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t PCB : 2; /*!< [4..3] Functional Expansion Control for Phase Counting Modes + * 2, 3, and 5 */ + uint8_t : 3; + } TCR2_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; +} R_MTU2_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU8 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 8 (R_MTU8) + */ + +typedef struct /*!< (@ 0x90001600) R_MTU8 Structure */ +{ + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000000) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000001) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + __IOM uint8_t BFA : 1; /*!< [4..4] Buffer Operation A */ + __IOM uint8_t BFB : 1; /*!< [5..5] Buffer Operation B */ + uint8_t : 2; + } TMDR1_b; + }; + + union + { + __IOM uint8_t TIORH; /*!< (@ 0x00000002) Timer I/O Control Register H */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIORH_b; + }; + + union + { + __IOM uint8_t TIORL; /*!< (@ 0x00000003) Timer I/O Control Register L */ + + struct + { + __IOM uint8_t IOC : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOD : 4; /*!< [7..4] I/O Control B */ + } TIORL_b; + }; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000004) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + __IOM uint8_t TGIEC : 1; /*!< [2..2] TGR Interrupt Enable C */ + __IOM uint8_t TGIED : 1; /*!< [3..3] TGR Interrupt Enable D */ + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + uint8_t : 3; + } TIER_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x00000006) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + uint8_t : 5; + } TCR2_b; + }; + __IM uint8_t RESERVED1; + __IOM uint32_t TCNT; /*!< (@ 0x00000008) Timer Counter */ + __IOM uint32_t TGRA; /*!< (@ 0x0000000C) Timer General Register A */ + __IOM uint32_t TGRB; /*!< (@ 0x00000010) Timer General Register B */ + __IOM uint32_t TGRC; /*!< (@ 0x00000014) Timer General Register C */ + __IOM uint32_t TGRD; /*!< (@ 0x00000018) Timer General Register D */ +} R_MTU8_Type; /*!< Size = 28 (0x1c) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU6 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 6 (R_MTU6) + */ + +typedef struct /*!< (@ 0x90001900) R_MTU6 Structure */ +{ + __IM uint16_t RESERVED[128]; + + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000100) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + __IM uint8_t RESERVED1; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000102) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + __IOM uint8_t BFA : 1; /*!< [4..4] Buffer Operation A */ + __IOM uint8_t BFB : 1; /*!< [5..5] Buffer Operation B */ + uint8_t : 2; + } TMDR1_b; + }; + __IM uint8_t RESERVED2; + + union + { + __IOM uint8_t TIORH; /*!< (@ 0x00000104) Timer I/O Control Register H */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIORH_b; + }; + + union + { + __IOM uint8_t TIORL; /*!< (@ 0x00000105) Timer I/O Control Register L */ + + struct + { + __IOM uint8_t IOC : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOD : 4; /*!< [7..4] I/O Control B */ + } TIORL_b; + }; + __IM uint16_t RESERVED3; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000108) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + __IOM uint8_t TGIEC : 1; /*!< [2..2] TGR Interrupt Enable C */ + __IOM uint8_t TGIED : 1; /*!< [3..3] TGR Interrupt Enable D */ + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + uint8_t : 2; + __IOM uint8_t TTGE : 1; /*!< [7..7] A/D Converter Start Request Enable */ + } TIER_b; + }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5[3]; + __IOM uint16_t TCNT; /*!< (@ 0x00000110) Timer Counter */ + __IM uint16_t RESERVED6[3]; + __IOM uint16_t TGRA; /*!< (@ 0x00000118) Timer General Register A */ + __IOM uint16_t TGRB; /*!< (@ 0x0000011A) Timer General Register B */ + __IM uint16_t RESERVED7[4]; + __IOM uint16_t TGRC; /*!< (@ 0x00000124) Timer General Register C */ + __IOM uint16_t TGRD; /*!< (@ 0x00000126) Timer General Register D */ + __IM uint16_t RESERVED8[2]; + + union + { + __IOM uint8_t TSR; /*!< (@ 0x0000012C) Timer Status Register */ + + struct + { + __IOM uint8_t TGFA : 1; /*!< [0..0] Input Capture/Output Compare Flag A */ + __IOM uint8_t TGFB : 1; /*!< [1..1] Input Capture/Output Compare Flag B */ + __IOM uint8_t TGFC : 1; /*!< [2..2] Input Capture/Output Compare Flag C */ + __IOM uint8_t TGFD : 1; /*!< [3..3] Input Capture/Output Compare Flag D */ + __IOM uint8_t TCFV : 1; /*!< [4..4] Overflow flag */ + __IOM uint8_t TCFU : 1; /*!< [5..5] Underflow flag */ + uint8_t : 1; + __IM uint8_t TCFD : 1; /*!< [7..7] Count Direction Flag */ + } TSR_b; + }; + __IM uint8_t RESERVED9; + __IM uint16_t RESERVED10[5]; + + union + { + __IOM uint8_t TBTM; /*!< (@ 0x00000138) Timer Buffer Operation Transfer Mode Register */ + + struct + { + __IOM uint8_t TTSA : 1; /*!< [0..0] Timing Select A */ + __IOM uint8_t TTSB : 1; /*!< [1..1] Timing Select B */ + uint8_t : 6; + } TBTM_b; + }; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12[9]; + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x0000014C) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + uint8_t : 5; + } TCR2_b; + }; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14; + + union + { + __IOM uint8_t TSYCR; /*!< (@ 0x00000150) Timer Synchronous Clear Register */ + + struct + { + __IOM uint8_t CE2B : 1; /*!< [0..0] Clear Enable 2B */ + __IOM uint8_t CE2A : 1; /*!< [1..1] Clear Enable 2A */ + __IOM uint8_t CE1B : 1; /*!< [2..2] Clear Enable 1B */ + __IOM uint8_t CE1A : 1; /*!< [3..3] Clear Enable 1A */ + __IOM uint8_t CE0D : 1; /*!< [4..4] Clear Enable 0D */ + __IOM uint8_t CE0C : 1; /*!< [5..5] Clear Enable 0C */ + __IOM uint8_t CE0B : 1; /*!< [6..6] Clear Enable 0B */ + __IOM uint8_t CE0A : 1; /*!< [7..7] Clear Enable 0A */ + } TSYCR_b; + }; + __IM uint8_t RESERVED15; + __IM uint16_t RESERVED16[16]; + __IOM uint16_t TGRE; /*!< (@ 0x00000172) Timer General Register E */ +} R_MTU6_Type; /*!< Size = 372 (0x174) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU7 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 7 (R_MTU7) + */ + +typedef struct /*!< (@ 0x90001A00) R_MTU7 Structure */ +{ + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000001) Timer Control Register */ + + struct + { + __IOM uint8_t TPSC : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + __IOM uint8_t CCLR : 3; /*!< [7..5] Counter Clear Source Select */ + } TCR_b; + }; + __IM uint8_t RESERVED1; + + union + { + __IOM uint8_t TMDR1; /*!< (@ 0x00000003) Timer Mode Register 1 */ + + struct + { + __IOM uint8_t MD : 4; /*!< [3..0] Mode Select */ + __IOM uint8_t BFA : 1; /*!< [4..4] Buffer Operation A */ + __IOM uint8_t BFB : 1; /*!< [5..5] Buffer Operation B */ + uint8_t : 2; + } TMDR1_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint8_t TIORH; /*!< (@ 0x00000006) Timer I/O Control Register H */ + + struct + { + __IOM uint8_t IOA : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOB : 4; /*!< [7..4] I/O Control B */ + } TIORH_b; + }; + + union + { + __IOM uint8_t TIORL; /*!< (@ 0x00000007) Timer I/O Control Register L */ + + struct + { + __IOM uint8_t IOC : 4; /*!< [3..0] I/O Control A */ + __IOM uint8_t IOD : 4; /*!< [7..4] I/O Control B */ + } TIORL_b; + }; + __IM uint8_t RESERVED3; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x00000009) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIEA : 1; /*!< [0..0] TGR Interrupt Enable A */ + __IOM uint8_t TGIEB : 1; /*!< [1..1] TGR Interrupt Enable B */ + __IOM uint8_t TGIEC : 1; /*!< [2..2] TGR Interrupt Enable C */ + __IOM uint8_t TGIED : 1; /*!< [3..3] TGR Interrupt Enable D */ + __IOM uint8_t TCIEV : 1; /*!< [4..4] Overflow Interrupt Enable */ + uint8_t : 1; + __IOM uint8_t TTGE2 : 1; /*!< [6..6] A/D Converter Start Request Enable 2 */ + __IOM uint8_t TTGE : 1; /*!< [7..7] A/D Converter Start Request Enable */ + } TIER_b; + }; + __IM uint16_t RESERVED4[4]; + __IOM uint16_t TCNT; /*!< (@ 0x00000012) Timer Counter */ + __IM uint16_t RESERVED5[4]; + __IOM uint16_t TGRA; /*!< (@ 0x0000001C) Timer General Register A */ + __IOM uint16_t TGRB; /*!< (@ 0x0000001E) Timer General Register B */ + __IM uint16_t RESERVED6[4]; + __IOM uint16_t TGRC; /*!< (@ 0x00000028) Timer General Register C */ + __IOM uint16_t TGRD; /*!< (@ 0x0000002A) Timer General Register D */ + __IM uint8_t RESERVED7; + + union + { + __IOM uint8_t TSR; /*!< (@ 0x0000002D) Timer Status Register */ + + struct + { + __IOM uint8_t TGFA : 1; /*!< [0..0] Input Capture/Output Compare Flag A */ + __IOM uint8_t TGFB : 1; /*!< [1..1] Input Capture/Output Compare Flag B */ + __IOM uint8_t TGFC : 1; /*!< [2..2] Input Capture/Output Compare Flag C */ + __IOM uint8_t TGFD : 1; /*!< [3..3] Input Capture/Output Compare Flag D */ + __IOM uint8_t TCFV : 1; /*!< [4..4] Overflow flag */ + __IOM uint8_t TCFU : 1; /*!< [5..5] Underflow flag */ + uint8_t : 1; + __IM uint8_t TCFD : 1; /*!< [7..7] Count Direction Flag */ + } TSR_b; + }; + __IM uint16_t RESERVED8[5]; + __IM uint8_t RESERVED9; + + union + { + __IOM uint8_t TBTM; /*!< (@ 0x00000039) Timer Buffer Operation Transfer Mode Register */ + + struct + { + __IOM uint8_t TTSA : 1; /*!< [0..0] Timing Select A */ + __IOM uint8_t TTSB : 1; /*!< [1..1] Timing Select B */ + uint8_t : 6; + } TBTM_b; + }; + __IM uint16_t RESERVED10[3]; + + union + { + __IOM uint16_t TADCR; /*!< (@ 0x00000040) Timer A/D Converter Start Request Control Register */ + + struct + { + __IOM uint16_t ITB7VE : 1; /*!< [0..0] TCIV7 Interrupt Skipping Link Enable */ + __IOM uint16_t ITB6AE : 1; /*!< [1..1] TGIA6 Interrupt Skipping Link Enable */ + __IOM uint16_t ITA7VE : 1; /*!< [2..2] TCIV7 Interrupt Skipping Link Enable */ + __IOM uint16_t ITA6AE : 1; /*!< [3..3] TGIA6 Interrupt Skipping Link Enable */ + __IOM uint16_t DT7BE : 1; /*!< [4..4] Down-Count TRG7BN Enable */ + __IOM uint16_t UT7BE : 1; /*!< [5..5] Up-Count TRG7BN Enable */ + __IOM uint16_t DT7AE : 1; /*!< [6..6] Down-Count TRG7AN Enable */ + __IOM uint16_t UT7AE : 1; /*!< [7..7] Up-Count TRG7AN Enable */ + uint16_t : 6; + __IOM uint16_t BF : 2; /*!< [15..14] MTU7.TADCOBRA/TADCOBRB Transfer Timing Select */ + } TADCR_b; + }; + __IM uint16_t RESERVED11; + __IOM uint16_t TADCORA; /*!< (@ 0x00000044) Timer A/D Converter Start Request Cycle Set Register + * A */ + __IOM uint16_t TADCORB; /*!< (@ 0x00000046) Timer A/D Converter Start Request Cycle Set Register + * B */ + __IOM uint16_t TADCOBRA; /*!< (@ 0x00000048) Timer A/D Converter Start Request Cycle Set Buffer + * Register A */ + __IOM uint16_t TADCOBRB; /*!< (@ 0x0000004A) Timer A/D Converter Start Request Cycle Set Buffer + * Register B */ + __IM uint8_t RESERVED12; + + union + { + __IOM uint8_t TCR2; /*!< (@ 0x0000004D) Timer Control Register 2 */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + uint8_t : 5; + } TCR2_b; + }; + __IM uint16_t RESERVED13[19]; + __IOM uint16_t TGRE; /*!< (@ 0x00000074) Timer General Register E */ + __IOM uint16_t TGRF; /*!< (@ 0x00000076) Timer General Register F */ +} R_MTU7_Type; /*!< Size = 120 (0x78) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU5 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Multi-Function Timer Pulse Unit Channel 5 (R_MTU5) + */ + +typedef struct /*!< (@ 0x90001C00) R_MTU5 Structure */ +{ + __IM uint16_t RESERVED[64]; + __IOM uint16_t TCNTU; /*!< (@ 0x00000080) Timer Counter U */ + __IOM uint16_t TGRU; /*!< (@ 0x00000082) Timer General Register U */ + + union + { + __IOM uint8_t TCRU; /*!< (@ 0x00000084) Timer Control Register U */ + + struct + { + __IOM uint8_t TPSC : 2; /*!< [1..0] Time Prescaler Select */ + uint8_t : 6; + } TCRU_b; + }; + + union + { + __IOM uint8_t TCR2U; /*!< (@ 0x00000085) Timer Control Register 2U */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + uint8_t : 3; + } TCR2U_b; + }; + + union + { + __IOM uint8_t TIORU; /*!< (@ 0x00000086) Timer I/O Control Register U */ + + struct + { + __IOM uint8_t IOC : 5; /*!< [4..0] I/O Control C */ + uint8_t : 3; + } TIORU_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2[4]; + __IOM uint16_t TCNTV; /*!< (@ 0x00000090) Timer Counter V */ + __IOM uint16_t TGRV; /*!< (@ 0x00000092) Timer General Register V */ + + union + { + __IOM uint8_t TCRV; /*!< (@ 0x00000094) Timer Control Register V */ + + struct + { + __IOM uint8_t TPSC : 2; /*!< [1..0] Time Prescaler Select */ + uint8_t : 6; + } TCRV_b; + }; + + union + { + __IOM uint8_t TCR2V; /*!< (@ 0x00000095) Timer Control Register 2V */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + uint8_t : 3; + } TCR2V_b; + }; + + union + { + __IOM uint8_t TIORV; /*!< (@ 0x00000096) Timer I/O Control Register V */ + + struct + { + __IOM uint8_t IOC : 5; /*!< [4..0] I/O Control C */ + uint8_t : 3; + } TIORV_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4[4]; + __IOM uint16_t TCNTW; /*!< (@ 0x000000A0) Timer Counter W */ + __IOM uint16_t TGRW; /*!< (@ 0x000000A2) Timer General Register W */ + + union + { + __IOM uint8_t TCRW; /*!< (@ 0x000000A4) Timer Control Register W */ + + struct + { + __IOM uint8_t TPSC : 2; /*!< [1..0] Time Prescaler Select */ + uint8_t : 6; + } TCRW_b; + }; + + union + { + __IOM uint8_t TCR2W; /*!< (@ 0x000000A5) Timer Control Register 2W */ + + struct + { + __IOM uint8_t TPSC2 : 3; /*!< [2..0] Time Prescaler Select */ + __IOM uint8_t CKEG : 2; /*!< [4..3] Clock Edge Select */ + uint8_t : 3; + } TCR2W_b; + }; + + union + { + __IOM uint8_t TIORW; /*!< (@ 0x000000A6) Timer I/O Control Register W */ + + struct + { + __IOM uint8_t IOC : 5; /*!< [4..0] I/O Control C */ + uint8_t : 3; + } TIORW_b; + }; + __IM uint8_t RESERVED5; + __IM uint16_t RESERVED6[5]; + + union + { + __IOM uint8_t TIER; /*!< (@ 0x000000B2) Timer Interrupt Enable Register */ + + struct + { + __IOM uint8_t TGIE5W : 1; /*!< [0..0] TGR Interrupt Enable 5W */ + __IOM uint8_t TGIE5V : 1; /*!< [1..1] TGR Interrupt Enable 5V */ + __IOM uint8_t TGIE5U : 1; /*!< [2..2] TGR Interrupt Enable 5U */ + uint8_t : 5; + } TIER_b; + }; + __IM uint8_t RESERVED7; + + union + { + __IOM uint8_t TSTR; /*!< (@ 0x000000B4) Timer Start Register */ + + struct + { + __IOM uint8_t CSTW5 : 1; /*!< [0..0] Counter Start W5 */ + __IOM uint8_t CSTV5 : 1; /*!< [1..1] Counter Start V5 */ + __IOM uint8_t CSTU5 : 1; /*!< [2..2] Counter Start U5 */ + uint8_t : 5; + } TSTR_b; + }; + __IM uint8_t RESERVED8; + + union + { + __IOM uint8_t TCNTCMPCLR; /*!< (@ 0x000000B6) Timer Compare Match Clear Register */ + + struct + { + __IOM uint8_t CMPCLR5W : 1; /*!< [0..0] TCNT Compare Clear 5W */ + __IOM uint8_t CMPCLR5V : 1; /*!< [1..1] TCNT Compare Clear 5V */ + __IOM uint8_t CMPCLR5U : 1; /*!< [2..2] TCNT Compare Clear 5U */ + uint8_t : 5; + } TCNTCMPCLR_b; + }; + __IM uint8_t RESERVED9; + __IM uint16_t RESERVED10; +} R_MTU5_Type; /*!< Size = 186 (0xba) */ + +/* =========================================================================================================================== */ +/* ================ R_TFU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Trigonometric Function Unit (R_TFU) + */ + +typedef struct /*!< (@ 0x90003000) R_TFU Structure */ +{ + __IM uint32_t RESERVED[2]; + + union + { + __IM uint8_t TRGSTS; /*!< (@ 0x00000008) Trigonometric Status Register */ + + struct + { + __IM uint8_t BSYF : 1; /*!< [0..0] Calculation in progress flag */ + __IM uint8_t ERRF : 1; /*!< [1..1] Input error flag */ + uint8_t : 6; + } TRGSTS_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + __IM uint32_t RESERVED3; + + union + { + __IOM float SCDT0; /*!< (@ 0x00000010) Sine Cosine Data Register 0 */ + + struct + { + __IOM uint32_t SCDT0 : 32; /*!< [31..0] Sine Cosine Data Register 0 (single-precision floating-point) */ + } SCDT0_b; + }; + + union + { + __IOM float SCDT1; /*!< (@ 0x00000014) Sine Cosine Data Register 1 */ + + struct + { + __IOM uint32_t SCDT1 : 32; /*!< [31..0] Sine Cosine Data Register 1 (single-precision floating-point) */ + } SCDT1_b; + }; + + union + { + __IOM float ATDT0; /*!< (@ 0x00000018) Arctangent Data Register 0 */ + + struct + { + __IOM uint32_t ATDT0 : 32; /*!< [31..0] Arctangent Data Register 0 (single-precision floating-point) */ + } ATDT0_b; + }; + + union + { + __IOM float ATDT1; /*!< (@ 0x0000001C) Arctangent Data Register 1 */ + + struct + { + __IOM uint32_t ATDT1 : 32; /*!< [31..0] Arctangent Data Register 1 (single-precision floating-point) */ + } ATDT1_b; + }; +} R_TFU_Type; /*!< Size = 32 (0x20) */ + +/* =========================================================================================================================== */ +/* ================ R_POE3 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Port Output Enable 3 (R_POE3) + */ + +typedef struct /*!< (@ 0x90005000) R_POE3 Structure */ +{ + union + { + __IOM uint16_t ICSR1; /*!< (@ 0x00000000) Input Level Control/Status Register 1 */ + + struct + { + __IOM uint16_t POE0M : 2; /*!< [1..0] POE0 Mode Select */ + uint16_t : 6; + __IOM uint16_t PIE1 : 1; /*!< [8..8] Port Interrupt Enable 1 */ + uint16_t : 3; + __IOM uint16_t POE0F : 1; /*!< [12..12] POE0 Flag */ + uint16_t : 3; + } ICSR1_b; + }; + + union + { + __IOM uint16_t OCSR1; /*!< (@ 0x00000002) Output Level Control/Status Register 1 */ + + struct + { + uint16_t : 8; + __IOM uint16_t OIE1 : 1; /*!< [8..8] Output Short Circuit Interrupt Enable 1 */ + __IOM uint16_t OCE1 : 1; /*!< [9..9] Output Short Circuit High-Impedance Enable 1 */ + uint16_t : 5; + __IOM uint16_t OSF1 : 1; /*!< [15..15] Output Short Circuit Flag 1 */ + } OCSR1_b; + }; + + union + { + __IOM uint16_t ICSR2; /*!< (@ 0x00000004) Input Level Control/Status Register 2 */ + + struct + { + __IOM uint16_t POE4M : 2; /*!< [1..0] POE4 Mode Select */ + uint16_t : 6; + __IOM uint16_t PIE2 : 1; /*!< [8..8] Port Interrupt Enable 2 */ + uint16_t : 3; + __IOM uint16_t POE4F : 1; /*!< [12..12] POE4 Flag */ + uint16_t : 3; + } ICSR2_b; + }; + + union + { + __IOM uint16_t OCSR2; /*!< (@ 0x00000006) Output Level Control/Status Register 2 */ + + struct + { + uint16_t : 8; + __IOM uint16_t OIE2 : 1; /*!< [8..8] Output Short Circuit Interrupt Enable 2 */ + __IOM uint16_t OCE2 : 1; /*!< [9..9] Output Short Circuit High-Impedance Enable 2 */ + uint16_t : 5; + __IOM uint16_t OSF2 : 1; /*!< [15..15] Output Short Circuit Flag 2 */ + } OCSR2_b; + }; + + union + { + __IOM uint16_t ICSR3; /*!< (@ 0x00000008) Input Level Control/Status Register 3 */ + + struct + { + __IOM uint16_t POE8M : 2; /*!< [1..0] POE8 Mode Select */ + uint16_t : 6; + __IOM uint16_t PIE3 : 1; /*!< [8..8] Port Interrupt Enable 3 */ + __IOM uint16_t POE8E : 1; /*!< [9..9] POE8 High-Impedance Enable */ + uint16_t : 2; + __IOM uint16_t POE8F : 1; /*!< [12..12] POE8 Flag */ + uint16_t : 3; + } ICSR3_b; + }; + + union + { + __IOM uint8_t SPOER; /*!< (@ 0x0000000A) Software Port Output Enable Register */ + + struct + { + __IOM uint8_t MTUCH34HIZ : 1; /*!< [0..0] MTU3 and MTU4 Output High-Impedance Enable */ + __IOM uint8_t MTUCH67HIZ : 1; /*!< [1..1] MTU6 and MTU7 Output High-Impedance Enable */ + __IOM uint8_t MTUCH0HIZ : 1; /*!< [2..2] MTU0 Pin High-Impedance Enable */ + uint8_t : 5; + } SPOER_b; + }; + + union + { + __IOM uint8_t POECR1; /*!< (@ 0x0000000B) Port Output Enable Control Register 1 */ + + struct + { + __IOM uint8_t MTU0AZE : 1; /*!< [0..0] MTIOC0A High-Impedance Enable */ + __IOM uint8_t MTU0BZE : 1; /*!< [1..1] MTIOC0B High-Impedance Enable */ + __IOM uint8_t MTU0CZE : 1; /*!< [2..2] MTIOC0C High-Impedance Enable */ + __IOM uint8_t MTU0DZE : 1; /*!< [3..3] MTIOC0D High-Impedance Enable */ + uint8_t : 4; + } POECR1_b; + }; + + union + { + __IOM uint16_t POECR2; /*!< (@ 0x0000000C) Port Output Enable Control Register 2 */ + + struct + { + __IOM uint16_t MTU7BDZE : 1; /*!< [0..0] MTIOC7B/MTIOC7D High-Impedance Enable */ + __IOM uint16_t MTU7ACZE : 1; /*!< [1..1] MTIOC7A/MTIOC7C High-Impedance Enable */ + __IOM uint16_t MTU6BDZE : 1; /*!< [2..2] MTIOC6B/MTIOC6D High-Impedance Enable */ + uint16_t : 5; + __IOM uint16_t MTU4BDZE : 1; /*!< [8..8] MTIOC4B/MTIOC4D High-Impedance Enable */ + __IOM uint16_t MTU4ACZE : 1; /*!< [9..9] MTIOC4A/MTIOC4C High-Impedance Enable */ + __IOM uint16_t MTU3BDZE : 1; /*!< [10..10] MTIOC3B/MTIOC3D High-Impedance Enable */ + uint16_t : 5; + } POECR2_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t POECR4; /*!< (@ 0x00000010) Port Output Enable Control Register 4 */ + + struct + { + uint16_t : 2; + __IOM uint16_t IC2ADDMT34ZE : 1; /*!< [2..2] MTU3 and MTU4 High-Impedance POE4F Add */ + __IOM uint16_t IC3ADDMT34ZE : 1; /*!< [3..3] MTU3 and MTU4 High-Impedance POE8F Add */ + __IOM uint16_t IC4ADDMT34ZE : 1; /*!< [4..4] MTU3 and MTU4 High-Impedance POE10F Add */ + __IOM uint16_t IC5ADDMT34ZE : 1; /*!< [5..5] MTU3 and MTU4 High-Impedance POE11F Add */ + __IOM uint16_t DE0ADDMT34ZE : 1; /*!< [6..6] MTU3 and MTU4 High-Impedance DERR0ST Add */ + __IOM uint16_t DE1ADDMT34ZE : 1; /*!< [7..7] MTU3 and MTU4 High-Impedance DERR1ST Add */ + uint16_t : 1; + __IOM uint16_t IC1ADDMT67ZE : 1; /*!< [9..9] MTU6 and MTU7 High-Impedance POE0F Add */ + uint16_t : 1; + __IOM uint16_t IC3ADDMT67ZE : 1; /*!< [11..11] MTU6 and MTU7 High-Impedance POE8F Add */ + __IOM uint16_t IC4ADDMT67ZE : 1; /*!< [12..12] MTU6 and MTU7 High-Impedance POE10F Add */ + __IOM uint16_t IC5ADDMT67ZE : 1; /*!< [13..13] MTU6 and MTU7 High-Impedance POE11F Add */ + __IOM uint16_t DE0ADDMT67ZE : 1; /*!< [14..14] MTU6 and MTU7 High-Impedance DERR0ST Add */ + __IOM uint16_t DE1ADDMT67ZE : 1; /*!< [15..15] MTU6 and MTU7 High-Impedance DERR1ST Add */ + } POECR4_b; + }; + + union + { + __IOM uint16_t POECR5; /*!< (@ 0x00000012) Port Output Enable Control Register 5 */ + + struct + { + uint16_t : 1; + __IOM uint16_t IC1ADDMT0ZE : 1; /*!< [1..1] MTU0 High-Impedance POE0F Add */ + __IOM uint16_t IC2ADDMT0ZE : 1; /*!< [2..2] MTU0 High-Impedance POE4F Add */ + uint16_t : 1; + __IOM uint16_t IC4ADDMT0ZE : 1; /*!< [4..4] MTU0 High-Impedance POE10F Add */ + __IOM uint16_t IC5ADDMT0ZE : 1; /*!< [5..5] MTU0 High-Impedance POE11F Add */ + __IOM uint16_t DE0ADDMT0ZE : 1; /*!< [6..6] MTU0 High-Impedance DERR0ST Add */ + __IOM uint16_t DE1ADDMT0ZE : 1; /*!< [7..7] MTU0 High-Impedance DERR1ST Add */ + uint16_t : 8; + } POECR5_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t ICSR4; /*!< (@ 0x00000016) Input Level Control/Status Register 4 */ + + struct + { + __IOM uint16_t POE10M : 2; /*!< [1..0] POE10 Mode Select */ + uint16_t : 6; + __IOM uint16_t PIE4 : 1; /*!< [8..8] Port Interrupt Enable 4 */ + __IOM uint16_t POE10E : 1; /*!< [9..9] POE10 High-Impedance Enable */ + uint16_t : 2; + __IOM uint16_t POE10F : 1; /*!< [12..12] POE10 Flag */ + uint16_t : 3; + } ICSR4_b; + }; + + union + { + __IOM uint16_t ICSR5; /*!< (@ 0x00000018) Input Level Control/Status Register 5 */ + + struct + { + __IOM uint16_t POE11M : 2; /*!< [1..0] POE11 Mode Select */ + uint16_t : 6; + __IOM uint16_t PIE5 : 1; /*!< [8..8] Port Interrupt Enable 5 */ + __IOM uint16_t POE11E : 1; /*!< [9..9] POE11 High-Impedance Enable */ + uint16_t : 2; + __IOM uint16_t POE11F : 1; /*!< [12..12] POE11 Flag */ + uint16_t : 3; + } ICSR5_b; + }; + + union + { + __IOM uint16_t ALR1; /*!< (@ 0x0000001A) Active Level Setting Register 1 */ + + struct + { + __IOM uint16_t OLSG0A : 1; /*!< [0..0] MTIOC3B Pin Active Level Setting */ + __IOM uint16_t OLSG0B : 1; /*!< [1..1] MTIOC3D Pin Active Level Setting */ + __IOM uint16_t OLSG1A : 1; /*!< [2..2] MTIOC4A Pin Active Level Setting */ + __IOM uint16_t OLSG1B : 1; /*!< [3..3] MTIOC4C Pin Active Level Setting */ + __IOM uint16_t OLSG2A : 1; /*!< [4..4] MTIOC4B Pin Active Level Setting */ + __IOM uint16_t OLSG2B : 1; /*!< [5..5] MTIOC4D Pin Active Level Setting */ + uint16_t : 1; + __IOM uint16_t OLSEN : 1; /*!< [7..7] Active Level Setting Enable */ + uint16_t : 8; + } ALR1_b; + }; + + union + { + __IOM uint16_t ICSR6; /*!< (@ 0x0000001C) Input Level Control/Status Register 6 */ + + struct + { + uint16_t : 9; + __IOM uint16_t OSTSTE : 1; /*!< [9..9] Oscillation Stop High-Impedance Enable */ + uint16_t : 2; + __IOM uint16_t OSTSTF : 1; /*!< [12..12] Oscillation Stop High-Impedance Flag */ + uint16_t : 3; + } ICSR6_b; + }; + + union + { + __IOM uint16_t ICSR7; /*!< (@ 0x0000001E) Input Level Control/Status Register 7 */ + + struct + { + uint16_t : 6; + __IOM uint16_t DERR0IE : 1; /*!< [6..6] DSMIF0 Error Interrupt Enable */ + __IOM uint16_t DERR1IE : 1; /*!< [7..7] DSMIF1 Error Interrupt Enable */ + uint16_t : 5; + __IM uint16_t DERR0ST : 1; /*!< [13..13] DSMIF0 Error Status */ + __IM uint16_t DERR1ST : 1; /*!< [14..14] DSMIF1 Error Status */ + uint16_t : 1; + } ICSR7_b; + }; + __IM uint16_t RESERVED2[2]; + + union + { + __IOM uint8_t M0SELR1; /*!< (@ 0x00000024) MTU0 Pin Select Register 1 */ + + struct + { + __IOM uint8_t M0ASEL : 4; /*!< [3..0] MTU0-A (MTIOC0A) Pin Select */ + __IOM uint8_t M0BSEL : 4; /*!< [7..4] MTU0-B (MTIOC0B) Pin Select */ + } M0SELR1_b; + }; + + union + { + __IOM uint8_t M0SELR2; /*!< (@ 0x00000025) MTU0 Pin Select Register 2 */ + + struct + { + __IOM uint8_t M0CSEL : 4; /*!< [3..0] MTU0-C (MTIOC0C) Pin Select */ + __IOM uint8_t M0DSEL : 4; /*!< [7..4] MTU0-D (MTIOC0D) Pin Select */ + } M0SELR2_b; + }; + + union + { + __IOM uint8_t M3SELR; /*!< (@ 0x00000026) MTU3 Pin Select Register */ + + struct + { + __IOM uint8_t M3BSEL : 4; /*!< [3..0] MTU3-B (MTIOC3B) Pin Select */ + __IOM uint8_t M3DSEL : 4; /*!< [7..4] MTU3-D (MTIOC3D) Pin Select */ + } M3SELR_b; + }; + + union + { + __IOM uint8_t M4SELR1; /*!< (@ 0x00000027) MTU4 Pin Select Register 1 */ + + struct + { + __IOM uint8_t M4ASEL : 4; /*!< [3..0] MTU4-A (MTIOC4A) Pin Select */ + __IOM uint8_t M4CSEL : 4; /*!< [7..4] MTU4-C (MTIOC4C) Pin Select */ + } M4SELR1_b; + }; + + union + { + __IOM uint8_t M4SELR2; /*!< (@ 0x00000028) MTU4 Pin Select Register 2 */ + + struct + { + __IOM uint8_t M4BSEL : 4; /*!< [3..0] MTU4-B (MTIOC4B) Pin Select */ + __IOM uint8_t M4DSEL : 4; /*!< [7..4] MTU4-D (MTIOC4D) Pin Select */ + } M4SELR2_b; + }; + __IM uint8_t RESERVED3; + + union + { + __IOM uint8_t M6SELR; /*!< (@ 0x0000002A) MTU6 Pin Select Register */ + + struct + { + __IOM uint8_t M6BSEL : 4; /*!< [3..0] MTU6-B (MTIOC6B) Pin Select */ + __IOM uint8_t M6DSEL : 4; /*!< [7..4] MTU6-D (MTIOC6D) Pin Select */ + } M6SELR_b; + }; + + union + { + __IOM uint8_t M7SELR1; /*!< (@ 0x0000002B) MTU7 Pin Select Register 1 */ + + struct + { + __IOM uint8_t M7ASEL : 4; /*!< [3..0] MTU7-A (MTIOC7A) Pin Select */ + __IOM uint8_t M7CSEL : 4; /*!< [7..4] MTU7-C (MTIOC7C) Pin Select */ + } M7SELR1_b; + }; + + union + { + __IOM uint8_t M7SELR2; /*!< (@ 0x0000002C) MTU7 Pin Select Register 2 */ + + struct + { + __IOM uint8_t M7BSEL : 4; /*!< [3..0] MTU7-B (MTIOC7B) Pin Select */ + __IOM uint8_t M7DSEL : 4; /*!< [7..4] MTU7-D (MTIOC7D) Pin Select */ + } M7SELR2_b; + }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5; +} R_POE3_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ R_POEG0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief GPT Port Output Enable 0 (R_POEG0) + */ + +typedef struct /*!< (@ 0x90006000) R_POEG0 Structure */ +{ + union + { + __IOM uint32_t POEG0GA; /*!< (@ 0x00000000) POEG0 Group A Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 7; + __IOM uint32_t DERR0ST : 1; /*!< [24..24] DSMIF0 error status */ + __IOM uint32_t DERR1ST : 1; /*!< [25..25] DSMIF1 error status */ + __IOM uint32_t DERR0E : 1; /*!< [26..26] Permit output disabled by DSMIF0 error detection */ + __IOM uint32_t DERR1E : 1; /*!< [27..27] Permit output disabled by DSMIF1 error detection */ + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG0GA_b; + }; + __IM uint32_t RESERVED[255]; + + union + { + __IOM uint32_t POEG0GB; /*!< (@ 0x00000400) POEG0 Group B Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 7; + __IOM uint32_t DERR0ST : 1; /*!< [24..24] DSMIF0 error status */ + __IOM uint32_t DERR1ST : 1; /*!< [25..25] DSMIF1 error status */ + __IOM uint32_t DERR0E : 1; /*!< [26..26] Permit output disabled by DSMIF0 error detection */ + __IOM uint32_t DERR1E : 1; /*!< [27..27] Permit output disabled by DSMIF1 error detection */ + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG0GB_b; + }; + __IM uint32_t RESERVED1[255]; + + union + { + __IOM uint32_t POEG0GC; /*!< (@ 0x00000800) POEG0 Group C Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 7; + __IOM uint32_t DERR0ST : 1; /*!< [24..24] DSMIF0 error status */ + __IOM uint32_t DERR1ST : 1; /*!< [25..25] DSMIF1 error status */ + __IOM uint32_t DERR0E : 1; /*!< [26..26] Permit output disabled by DSMIF0 error detection */ + __IOM uint32_t DERR1E : 1; /*!< [27..27] Permit output disabled by DSMIF1 error detection */ + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG0GC_b; + }; + __IM uint32_t RESERVED2[255]; + + union + { + __IOM uint32_t POEG0GD; /*!< (@ 0x00000C00) POEG0 Group D Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] GPT Output Stop Request Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable */ + __IOM uint32_t IOCE : 1; /*!< [5..5] GPT Output Stop Request Enable */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Enable Stopping Output on Stopping of Oscillation */ + uint32_t : 9; + __IM uint32_t ST : 1; /*!< [16..16] GTETRGn Input Status Flag */ + uint32_t : 7; + __IOM uint32_t DERR0ST : 1; /*!< [24..24] DSMIF0 error status */ + __IOM uint32_t DERR1ST : 1; /*!< [25..25] DSMIF1 error status */ + __IOM uint32_t DERR0E : 1; /*!< [26..26] Permit output disabled by DSMIF0 error detection */ + __IOM uint32_t DERR1E : 1; /*!< [27..27] Permit output disabled by DSMIF1 error detection */ + __IOM uint32_t INV : 1; /*!< [28..28] GTETRGn Input Inverting */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise filter Clock Select */ + } POEG0GD_b; + }; +} R_POEG0_Type; /*!< Size = 3076 (0xc04) */ + +/* =========================================================================================================================== */ +/* ================ R_DSMIF0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Delta-sigma Interface 0 (R_DSMIF0) + */ + +typedef struct /*!< (@ 0x90008000) R_DSMIF0 Structure */ +{ + __IM uint32_t RESERVED[16]; + + union + { + __IOM uint32_t DSSEICR; /*!< (@ 0x00000040) Overcurrent Sum Error Detect Interrupt Control + * Register */ + + struct + { + __IOM uint32_t ISEL : 1; /*!< [0..0] Overcurrent sum error lower limit detection interrupt + * enable bit */ + __IOM uint32_t ISEH : 1; /*!< [1..1] Overcurrent sum error upper limit detection interrupt + * enable bit */ + uint32_t : 30; + } DSSEICR_b; + }; + + union + { + __IOM uint32_t DSSECSR; /*!< (@ 0x00000044) Overcurrent Sum Error Detect Channel Setting + * Register */ + + struct + { + __IOM uint32_t SEDM : 3; /*!< [2..0] Overcurrent sum error detect mode setting bit */ + uint32_t : 29; + } DSSECSR_b; + }; + + union + { + __IOM uint32_t DSSELTR; /*!< (@ 0x00000048) Overcurrent Sum Error Detect Low Threshold Register */ + + struct + { + __IOM uint32_t SCMPTBL : 18; /*!< [17..0] Overcurrent sum error detect lower limit */ + uint32_t : 14; + } DSSELTR_b; + }; + + union + { + __IOM uint32_t DSSEHTR; /*!< (@ 0x0000004C) Overcurrent Sum Error Detect High Threshold Register */ + + struct + { + __IOM uint32_t SCMPTBH : 18; /*!< [17..0] Overcurrent sum error detect upper limit */ + uint32_t : 14; + } DSSEHTR_b; + }; + + union + { + __IOM uint32_t DSSECR; /*!< (@ 0x00000050) Overcurrent Sum Error Detect Control Register */ + + struct + { + __IOM uint32_t SEEL : 1; /*!< [0..0] Overcurrent sum error lower limit detection enable bit */ + __IOM uint32_t SEEH : 1; /*!< [1..1] Overcurrent sum error upper limit detection enable bit */ + uint32_t : 30; + } DSSECR_b; + }; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint32_t DSSECDR[3]; /*!< (@ 0x00000060) Overcurrent Sum Error Detect Capture Data Register + * [0..2] */ + + struct + { + __IOM uint32_t SECDR : 16; /*!< [15..0] Overcurrent sum error detect capture data n */ + uint32_t : 16; + } DSSECDR_b[3]; + }; + __IM uint32_t RESERVED2[37]; + + union + { + __IOM uint32_t DSCSTRTR; /*!< (@ 0x00000100) Channel Software Start Trigger Register */ + + struct + { + __IOM uint32_t STRTRG0 : 1; /*!< [0..0] Channel 0 start trigger */ + __IOM uint32_t STRTRG1 : 1; /*!< [1..1] Channel 1 start trigger */ + __IOM uint32_t STRTRG2 : 1; /*!< [2..2] Channel 2 start trigger */ + uint32_t : 29; + } DSCSTRTR_b; + }; + + union + { + __IOM uint32_t DSCSTPTR; /*!< (@ 0x00000104) Channel Software Stop Trigger Register */ + + struct + { + __IOM uint32_t STPTRG0 : 1; /*!< [0..0] Channel 0 stop trigger */ + __IOM uint32_t STPTRG1 : 1; /*!< [1..1] Channel 1 stop trigger */ + __IOM uint32_t STPTRG2 : 1; /*!< [2..2] Channel 2 stop trigger */ + uint32_t : 29; + } DSCSTPTR_b; + }; + __IM uint32_t RESERVED3[2]; + + union + { + __IM uint32_t DSCESR; /*!< (@ 0x00000110) Channel Error Status Register */ + + struct + { + __IM uint32_t OCFL0 : 1; /*!< [0..0] Channel 0 overcurrent lower limit detection flag */ + __IM uint32_t OCFL1 : 1; /*!< [1..1] Channel 1 overcurrent lower limit detection flag */ + __IM uint32_t OCFL2 : 1; /*!< [2..2] Channel 2 overcurrent lower limit detection flag */ + uint32_t : 1; + __IM uint32_t OCFH0 : 1; /*!< [4..4] Channel 0 overcurrent upper limit detection flag */ + __IM uint32_t OCFH1 : 1; /*!< [5..5] Channel 1 overcurrent upper limit detection flag */ + __IM uint32_t OCFH2 : 1; /*!< [6..6] Channel 2 overcurrent upper limit detection flag */ + uint32_t : 1; + __IM uint32_t SCF0 : 1; /*!< [8..8] Channel 0 short circuit detection flag */ + __IM uint32_t SCF1 : 1; /*!< [9..9] Channel 1 short circuit detection flag */ + __IM uint32_t SCF2 : 1; /*!< [10..10] Channel 2 short circuit detection flag */ + uint32_t : 5; + __IM uint32_t SUMERRL : 1; /*!< [16..16] Overcurrent sum error lower limit detection flag */ + __IM uint32_t SUMERRH : 1; /*!< [17..17] Overcurrent sum error upper limit detection flag */ + uint32_t : 14; + } DSCESR_b; + }; + __IM uint32_t RESERVED4; + + union + { + __IM uint32_t DSCSR; /*!< (@ 0x00000118) Channel Status Register */ + + struct + { + __IM uint32_t DUF0 : 1; /*!< [0..0] Channel 0 Data Update flag */ + __IM uint32_t DUF1 : 1; /*!< [1..1] Channel 1 Data Update flag */ + __IM uint32_t DUF2 : 1; /*!< [2..2] Channel 2 Data Update flag */ + uint32_t : 29; + } DSCSR_b; + }; + + union + { + __IM uint32_t DSCSSR; /*!< (@ 0x0000011C) Channel State Status Register */ + + struct + { + __IM uint32_t CHSTATE0 : 1; /*!< [0..0] Channel 0 state */ + uint32_t : 3; + __IM uint32_t CHSTATE1 : 1; /*!< [4..4] Channel 1 state */ + uint32_t : 3; + __IM uint32_t CHSTATE2 : 1; /*!< [8..8] Channel 2 state */ + uint32_t : 23; + } DSCSSR_b; + }; + + union + { + __OM uint32_t DSCESCR; /*!< (@ 0x00000120) Channel Error Status Clear Register */ + + struct + { + __OM uint32_t CLROCFL0 : 1; /*!< [0..0] Channel 0 Overcurrent Lower Limit Detection Flag Clear */ + __OM uint32_t CLROCFL1 : 1; /*!< [1..1] Channel 1 Overcurrent Lower Limit Detection Flag Clear */ + __OM uint32_t CLROCFL2 : 1; /*!< [2..2] Channel 2 Overcurrent Lower Limit Detection Flag Clear */ + uint32_t : 1; + __OM uint32_t CLROCFH0 : 1; /*!< [4..4] Channel 0 Overcurrent Upper Limit Detection Flag Clear */ + __OM uint32_t CLROCFH1 : 1; /*!< [5..5] Channel 1 Overcurrent Upper Limit Detection Flag Clear */ + __OM uint32_t CLROCFH2 : 1; /*!< [6..6] Channel 2 Overcurrent Upper Limit Detection Flag Clear */ + uint32_t : 1; + __OM uint32_t CLRSCF0 : 1; /*!< [8..8] Channel 0 Short Circuit Detection Flag Clear */ + __OM uint32_t CLRSCF1 : 1; /*!< [9..9] Channel 1 Short Circuit Detection Flag Clear */ + __OM uint32_t CLRSCF2 : 1; /*!< [10..10] Channel 2 Short Circuit Detection Flag Clear */ + uint32_t : 5; + __OM uint32_t CLRSUMERRL : 1; /*!< [16..16] Overcurrent Sum Error Lower Limit Detection Flag Clear */ + __OM uint32_t CLRSUMERRH : 1; /*!< [17..17] Overcurrent Sum Error Upper Limit Detection Flag Clear */ + uint32_t : 14; + } DSCESCR_b; + }; + __IM uint32_t RESERVED5; + + union + { + __OM uint32_t DSCSCR; /*!< (@ 0x00000128) Channel Status Clear Register */ + + struct + { + __OM uint32_t CLRDUF0 : 1; /*!< [0..0] Channel 0 Data Update Flag Clear */ + __OM uint32_t CLRDUF1 : 1; /*!< [1..1] Channel 1 Data Update Flag Clear */ + __OM uint32_t CLRDUF2 : 1; /*!< [2..2] Channel 2 Data Update Flag Clear */ + uint32_t : 29; + } DSCSCR_b; + }; + __IM uint32_t RESERVED6[21]; + __IOM R_DSMIF0_CH_Type CH[3]; /*!< (@ 0x00000180) Channel Registers [0..2] */ +} R_DSMIF0_Type; /*!< Size = 816 (0x330) */ + +/* =========================================================================================================================== */ +/* ================ R_GSC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Global System Counter (R_GSC) + */ + +typedef struct /*!< (@ 0xC0060000) R_GSC Structure */ +{ + union + { + __IOM uint32_t CNTCR; /*!< (@ 0x00000000) Global System Counter Control Register */ + + struct + { + __IOM uint32_t EN : 1; /*!< [0..0] Counter Enable */ + __IOM uint32_t HDBG : 1; /*!< [1..1] Halt on Debug */ + uint32_t : 30; + } CNTCR_b; + }; + + union + { + __IM uint32_t CNTSR; /*!< (@ 0x00000004) Global System Counter Status Register */ + + struct + { + uint32_t : 1; + __IM uint32_t DBGH : 1; /*!< [1..1] Debug Halted */ + uint32_t : 30; + } CNTSR_b; + }; + + union + { + __IOM uint32_t CNTCVL; /*!< (@ 0x00000008) Global System Counter Current Value Lower Register */ + + struct + { + __IOM uint32_t CNTCVL_L_32 : 32; /*!< [31..0] Current value of the counter, lower 32 bits */ + } CNTCVL_b; + }; + + union + { + __IOM uint32_t CNTCVU; /*!< (@ 0x0000000C) Global System Counter Current Value Upper Register */ + + struct + { + __IOM uint32_t CNTCVU_U_32 : 32; /*!< [31..0] Current value of the counter, upper 32 bits */ + } CNTCVU_b; + }; + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint32_t CNTFID0; /*!< (@ 0x00000020) Global System Counter Base Frequency ID Register */ + + struct + { + __IOM uint32_t FREQ : 32; /*!< [31..0] Frequency in number of ticks per second */ + } CNTFID0_b; + }; +} R_GSC_Type; /*!< Size = 36 (0x24) */ + +/** @} */ /* End of group Device_Peripheral_peripherals */ + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Address Map ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripheralAddr + * @{ + */ + + #define R_GPT7_BASE 0x80000000UL + #define R_GPT8_BASE 0x80000100UL + #define R_GPT9_BASE 0x80000200UL + #define R_GPT10_BASE 0x80000300UL + #define R_GPT11_BASE 0x80000400UL + #define R_GPT12_BASE 0x80000500UL + #define R_GPT13_BASE 0x80000600UL + #define R_SCI0_BASE 0x80001000UL + #define R_SCI1_BASE 0x80001400UL + #define R_SCI2_BASE 0x80001800UL + #define R_SCI3_BASE 0x80001C00UL + #define R_SCI4_BASE 0x80002000UL + #define R_SPI0_BASE 0x80003000UL + #define R_SPI1_BASE 0x80003400UL + #define R_SPI2_BASE 0x80003800UL + #define R_CRC0_BASE 0x80004000UL + #define R_CANFD_BASE 0x80020000UL + #define R_CMT_BASE 0x80040000UL + #define R_CMTW0_BASE 0x80041000UL + #define R_CMTW1_BASE 0x80041400UL + #define R_WDT0_BASE 0x80042000UL + #define R_IIC0_BASE 0x80043000UL + #define R_IIC1_BASE 0x80043400UL + #define R_DOC_BASE 0x80044000UL + #define R_ADC121_BASE 0x80045000UL + #define R_TSU_BASE 0x80046000UL + #define R_POEG1_BASE 0x80047000UL + #define R_DMAC0_BASE 0x80080000UL + #define R_DMAC1_BASE 0x80081000UL + #define R_ICU_NS_BASE 0x80090000UL + #define R_ELC_BASE 0x80090010UL + #define R_DMA_BASE 0x80090060UL + #define R_PORT_NSR_BASE 0x800A0000UL + #define R_GMAC_BASE 0x80100000UL + #define R_ETHSS_BASE 0x80110000UL + #define R_ESC_INI_BASE 0x80110200UL + #define R_ETHSW_PTP_BASE 0x80110400UL + #define R_ETHSW_BASE 0x80120000UL + #define R_ESC_BASE 0x80130000UL + #define R_USBHC_BASE 0x80200000UL + #define R_USBF_BASE 0x80201000UL + #define R_BSC_BASE 0x80210000UL + #define R_XSPI0_BASE 0x80220000UL + #define R_XSPI1_BASE 0x80221000UL + #define R_MBXSEM_BASE 0x80240000UL + #define R_SHOSTIF_BASE 0x80241000UL + #define R_PHOSTIF_BASE 0x80242000UL + #define R_SYSC_NS_BASE 0x80280000UL + #define R_ELO_BASE 0x80281200UL + #define R_RWP_NS_BASE 0x80281A10UL + #define R_GPT14_BASE 0x81000000UL + #define R_GPT15_BASE 0x81000100UL + #define R_GPT16_BASE 0x81000200UL + #define R_GPT17_BASE 0x81000300UL + #define R_SCI5_BASE 0x81001000UL + #define R_SPI3_BASE 0x81002000UL + #define R_CRC1_BASE 0x81003000UL + #define R_IIC2_BASE 0x81008000UL + #define R_RTC_BASE 0x81009000UL + #define R_POEG2_BASE 0x8100A000UL + #define R_OTP_BASE 0x81028000UL + #define R_PORT_SR_BASE 0x81030000UL + #define R_PTADR_BASE 0x81030C00UL + #define R_SYSRAM0_BASE 0x81040000UL + #define R_SYSRAM1_BASE 0x81041000UL + #define R_SYSRAM2_BASE 0x81042000UL + #define R_ICU_BASE 0x81048000UL + #define R_SYSC_S_BASE 0x81280000UL + #define R_CLMA0_BASE 0x81280800UL + #define R_CLMA1_BASE 0x81280820UL + #define R_CLMA2_BASE 0x81280840UL + #define R_CLMA3_BASE 0x81280860UL + #define R_MPU0_BASE 0x81281100UL + #define R_MPU1_BASE 0x81281200UL + #define R_MPU2_BASE 0x81281300UL + #define R_MPU3_BASE 0x81281400UL + #define R_MPU4_BASE 0x81281500UL + #define R_MPU6_BASE 0x81281700UL + #define R_SYSRAM_CTL_BASE 0x81281800UL + #define R_SHOSTIF_CFG_BASE 0x81281920UL + #define R_PHOSTIF_CFG_BASE 0x81281930UL + #define R_RWP_S_BASE 0x81281A00UL + #define R_MPU7_BASE 0x81281C00UL + #define R_MPU8_BASE 0x81281D00UL + #define R_MTU_BASE 0x90001000UL + #define R_MTU3_BASE 0x90001100UL + #define R_MTU4_BASE 0x90001200UL + #define R_MTU_NF_BASE 0x90001290UL + #define R_MTU0_BASE 0x90001300UL + #define R_MTU1_BASE 0x90001380UL + #define R_MTU2_BASE 0x90001400UL + #define R_MTU8_BASE 0x90001600UL + #define R_MTU6_BASE 0x90001900UL + #define R_MTU7_BASE 0x90001A00UL + #define R_MTU5_BASE 0x90001C00UL + #define R_GPT0_BASE 0x90002000UL + #define R_GPT1_BASE 0x90002100UL + #define R_GPT2_BASE 0x90002200UL + #define R_GPT3_BASE 0x90002300UL + #define R_GPT4_BASE 0x90002400UL + #define R_GPT5_BASE 0x90002500UL + #define R_GPT6_BASE 0x90002600UL + #define R_TFU_BASE 0x90003000UL + #define R_ADC120_BASE 0x90004000UL + #define R_POE3_BASE 0x90005000UL + #define R_POEG0_BASE 0x90006000UL + #define R_DSMIF0_BASE 0x90008000UL + #define R_DSMIF1_BASE 0x90008400UL + #define R_GSC_BASE 0xC0060000UL + +/** @} */ /* End of group Device_Peripheral_peripheralAddr */ + +/* =========================================================================================================================== */ +/* ================ Peripheral declaration ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_declaration + * @{ + */ + + #define R_GPT7 ((R_GPT0_Type *) R_GPT7_BASE) + #define R_GPT8 ((R_GPT0_Type *) R_GPT8_BASE) + #define R_GPT9 ((R_GPT0_Type *) R_GPT9_BASE) + #define R_GPT10 ((R_GPT0_Type *) R_GPT10_BASE) + #define R_GPT11 ((R_GPT0_Type *) R_GPT11_BASE) + #define R_GPT12 ((R_GPT0_Type *) R_GPT12_BASE) + #define R_GPT13 ((R_GPT0_Type *) R_GPT13_BASE) + #define R_SCI0 ((R_SCI0_Type *) R_SCI0_BASE) + #define R_SCI1 ((R_SCI0_Type *) R_SCI1_BASE) + #define R_SCI2 ((R_SCI0_Type *) R_SCI2_BASE) + #define R_SCI3 ((R_SCI0_Type *) R_SCI3_BASE) + #define R_SCI4 ((R_SCI0_Type *) R_SCI4_BASE) + #define R_SPI0 ((R_SPI0_Type *) R_SPI0_BASE) + #define R_SPI1 ((R_SPI0_Type *) R_SPI1_BASE) + #define R_SPI2 ((R_SPI0_Type *) R_SPI2_BASE) + #define R_CRC0 ((R_CRC0_Type *) R_CRC0_BASE) + #define R_CANFD ((R_CANFD_Type *) R_CANFD_BASE) + #define R_CMT ((R_CMT_Type *) R_CMT_BASE) + #define R_CMTW0 ((R_CMTW0_Type *) R_CMTW0_BASE) + #define R_CMTW1 ((R_CMTW0_Type *) R_CMTW1_BASE) + #define R_WDT0 ((R_WDT0_Type *) R_WDT0_BASE) + #define R_IIC0 ((R_IIC0_Type *) R_IIC0_BASE) + #define R_IIC1 ((R_IIC0_Type *) R_IIC1_BASE) + #define R_DOC ((R_DOC_Type *) R_DOC_BASE) + #define R_ADC121 ((R_ADC121_Type *) R_ADC121_BASE) + #define R_TSU ((R_TSU_Type *) R_TSU_BASE) + #define R_POEG1 ((R_POEG1_Type *) R_POEG1_BASE) + #define R_DMAC0 ((R_DMAC0_Type *) R_DMAC0_BASE) + #define R_DMAC1 ((R_DMAC0_Type *) R_DMAC1_BASE) + #define R_ICU_NS ((R_ICU_NS_Type *) R_ICU_NS_BASE) + #define R_ELC ((R_ELC_Type *) R_ELC_BASE) + #define R_DMA ((R_DMA_Type *) R_DMA_BASE) + #define R_PORT_NSR ((R_PORT_COMMON_Type *) R_PORT_NSR_BASE) + #define R_GMAC ((R_GMAC_Type *) R_GMAC_BASE) + #define R_ETHSS ((R_ETHSS_Type *) R_ETHSS_BASE) + #define R_ESC_INI ((R_ESC_INI_Type *) R_ESC_INI_BASE) + #define R_ETHSW_PTP ((R_ETHSW_PTP_Type *) R_ETHSW_PTP_BASE) + #define R_ETHSW ((R_ETHSW_Type *) R_ETHSW_BASE) + #define R_ESC ((R_ESC_Type *) R_ESC_BASE) + #define R_USBHC ((R_USBHC_Type *) R_USBHC_BASE) + #define R_USBF ((R_USBF_Type *) R_USBF_BASE) + #define R_BSC ((R_BSC_Type *) R_BSC_BASE) + #define R_XSPI0 ((R_XSPI0_Type *) R_XSPI0_BASE) + #define R_XSPI1 ((R_XSPI0_Type *) R_XSPI1_BASE) + #define R_MBXSEM ((R_MBXSEM_Type *) R_MBXSEM_BASE) + #define R_SHOSTIF ((R_SHOSTIF_Type *) R_SHOSTIF_BASE) + #define R_PHOSTIF ((R_PHOSTIF_Type *) R_PHOSTIF_BASE) + #define R_SYSC_NS ((R_SYSC_NS_Type *) R_SYSC_NS_BASE) + #define R_ELO ((R_ELO_Type *) R_ELO_BASE) + #define R_RWP_NS ((R_RWP_NS_Type *) R_RWP_NS_BASE) + #define R_GPT14 ((R_GPT0_Type *) R_GPT14_BASE) + #define R_GPT15 ((R_GPT0_Type *) R_GPT15_BASE) + #define R_GPT16 ((R_GPT0_Type *) R_GPT16_BASE) + #define R_GPT17 ((R_GPT0_Type *) R_GPT17_BASE) + #define R_SCI5 ((R_SCI0_Type *) R_SCI5_BASE) + #define R_SPI3 ((R_SPI0_Type *) R_SPI3_BASE) + #define R_CRC1 ((R_CRC0_Type *) R_CRC1_BASE) + #define R_IIC2 ((R_IIC0_Type *) R_IIC2_BASE) + #define R_RTC ((R_RTC_Type *) R_RTC_BASE) + #define R_POEG2 ((R_POEG2_Type *) R_POEG2_BASE) + #define R_OTP ((R_OTP_Type *) R_OTP_BASE) + #define R_PORT_SR ((R_PORT_COMMON_Type *) R_PORT_SR_BASE) + #define R_PTADR ((R_PTADR_Type *) R_PTADR_BASE) + #define R_SYSRAM0 ((R_SYSRAM0_Type *) R_SYSRAM0_BASE) + #define R_SYSRAM1 ((R_SYSRAM0_Type *) R_SYSRAM1_BASE) + #define R_SYSRAM2 ((R_SYSRAM0_Type *) R_SYSRAM2_BASE) + #define R_ICU ((R_ICU_Type *) R_ICU_BASE) + #define R_SYSC_S ((R_SYSC_S_Type *) R_SYSC_S_BASE) + #define R_CLMA0 ((R_CLMA0_Type *) R_CLMA0_BASE) + #define R_CLMA1 ((R_CLMA0_Type *) R_CLMA1_BASE) + #define R_CLMA2 ((R_CLMA0_Type *) R_CLMA2_BASE) + #define R_CLMA3 ((R_CLMA0_Type *) R_CLMA3_BASE) + #define R_MPU0 ((R_MPU0_Type *) R_MPU0_BASE) + #define R_MPU1 ((R_MPU0_Type *) R_MPU1_BASE) + #define R_MPU2 ((R_MPU0_Type *) R_MPU2_BASE) + #define R_MPU3 ((R_MPU3_Type *) R_MPU3_BASE) + #define R_MPU4 ((R_MPU3_Type *) R_MPU4_BASE) + #define R_MPU6 ((R_MPU0_Type *) R_MPU6_BASE) + #define R_SYSRAM_CTL ((R_SYSRAM_CTL_Type *) R_SYSRAM_CTL_BASE) + #define R_SHOSTIF_CFG ((R_SHOSTIF_CFG_Type *) R_SHOSTIF_CFG_BASE) + #define R_PHOSTIF_CFG ((R_PHOSTIF_CFG_Type *) R_PHOSTIF_CFG_BASE) + #define R_RWP_S ((R_RWP_S_Type *) R_RWP_S_BASE) + #define R_MPU7 ((R_MPU3_Type *) R_MPU7_BASE) + #define R_MPU8 ((R_MPU3_Type *) R_MPU8_BASE) + #define R_MTU ((R_MTU_Type *) R_MTU_BASE) + #define R_MTU3 ((R_MTU3_Type *) R_MTU3_BASE) + #define R_MTU4 ((R_MTU4_Type *) R_MTU4_BASE) + #define R_MTU_NF ((R_MTU_NF_Type *) R_MTU_NF_BASE) + #define R_MTU0 ((R_MTU0_Type *) R_MTU0_BASE) + #define R_MTU1 ((R_MTU1_Type *) R_MTU1_BASE) + #define R_MTU2 ((R_MTU2_Type *) R_MTU2_BASE) + #define R_MTU8 ((R_MTU8_Type *) R_MTU8_BASE) + #define R_MTU6 ((R_MTU6_Type *) R_MTU6_BASE) + #define R_MTU7 ((R_MTU7_Type *) R_MTU7_BASE) + #define R_MTU5 ((R_MTU5_Type *) R_MTU5_BASE) + #define R_GPT0 ((R_GPT0_Type *) R_GPT0_BASE) + #define R_GPT1 ((R_GPT0_Type *) R_GPT1_BASE) + #define R_GPT2 ((R_GPT0_Type *) R_GPT2_BASE) + #define R_GPT3 ((R_GPT0_Type *) R_GPT3_BASE) + #define R_GPT4 ((R_GPT0_Type *) R_GPT4_BASE) + #define R_GPT5 ((R_GPT0_Type *) R_GPT5_BASE) + #define R_GPT6 ((R_GPT0_Type *) R_GPT6_BASE) + #define R_TFU ((R_TFU_Type *) R_TFU_BASE) + #define R_ADC120 ((R_ADC121_Type *) R_ADC120_BASE) + #define R_POE3 ((R_POE3_Type *) R_POE3_BASE) + #define R_POEG0 ((R_POEG0_Type *) R_POEG0_BASE) + #define R_DSMIF0 ((R_DSMIF0_Type *) R_DSMIF0_BASE) + #define R_DSMIF1 ((R_DSMIF0_Type *) R_DSMIF1_BASE) + #define R_GSC ((R_GSC_Type *) R_GSC_BASE) + +/** @} */ /* End of group Device_Peripheral_declaration */ + +/* ========================================= End of section using anonymous unions ========================================= */ + #if defined(__CC_ARM) + #pragma pop + #elif defined(__ICCARM__) + +/* leave anonymous unions enabled */ + #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop + #elif defined(__GNUC__) + +/* anonymous unions are enabled by default */ + #elif defined(__TMS470__) + +/* anonymous unions are enabled by default */ + #elif defined(__TASKING__) + #pragma warning restore + #elif defined(__CSMC__) + +/* anonymous unions are enabled by default */ + #endif + +/* =========================================================================================================================== */ +/* ================ Pos/Mask Cluster Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup PosMask_clusters + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ CFDC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= NCFG ========================================================== */ + #define R_CANFD_CFDC_NCFG_NBRP_Pos (0UL) /*!< NBRP (Bit 0) */ + #define R_CANFD_CFDC_NCFG_NBRP_Msk (0x3ffUL) /*!< NBRP (Bitfield-Mask: 0x3ff) */ + #define R_CANFD_CFDC_NCFG_NSJW_Pos (10UL) /*!< NSJW (Bit 10) */ + #define R_CANFD_CFDC_NCFG_NSJW_Msk (0x1fc00UL) /*!< NSJW (Bitfield-Mask: 0x7f) */ + #define R_CANFD_CFDC_NCFG_NTSEG1_Pos (17UL) /*!< NTSEG1 (Bit 17) */ + #define R_CANFD_CFDC_NCFG_NTSEG1_Msk (0x1fe0000UL) /*!< NTSEG1 (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC_NCFG_NTSEG2_Pos (25UL) /*!< NTSEG2 (Bit 25) */ + #define R_CANFD_CFDC_NCFG_NTSEG2_Msk (0xfe000000UL) /*!< NTSEG2 (Bitfield-Mask: 0x7f) */ +/* ========================================================== CTR ========================================================== */ + #define R_CANFD_CFDC_CTR_CHMDC_Pos (0UL) /*!< CHMDC (Bit 0) */ + #define R_CANFD_CFDC_CTR_CHMDC_Msk (0x3UL) /*!< CHMDC (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDC_CTR_CSLPR_Pos (2UL) /*!< CSLPR (Bit 2) */ + #define R_CANFD_CFDC_CTR_CSLPR_Msk (0x4UL) /*!< CSLPR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_RTBO_Pos (3UL) /*!< RTBO (Bit 3) */ + #define R_CANFD_CFDC_CTR_RTBO_Msk (0x8UL) /*!< RTBO (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BEIE_Pos (8UL) /*!< BEIE (Bit 8) */ + #define R_CANFD_CFDC_CTR_BEIE_Msk (0x100UL) /*!< BEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_EWIE_Pos (9UL) /*!< EWIE (Bit 9) */ + #define R_CANFD_CFDC_CTR_EWIE_Msk (0x200UL) /*!< EWIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_EPIE_Pos (10UL) /*!< EPIE (Bit 10) */ + #define R_CANFD_CFDC_CTR_EPIE_Msk (0x400UL) /*!< EPIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BOEIE_Pos (11UL) /*!< BOEIE (Bit 11) */ + #define R_CANFD_CFDC_CTR_BOEIE_Msk (0x800UL) /*!< BOEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BORIE_Pos (12UL) /*!< BORIE (Bit 12) */ + #define R_CANFD_CFDC_CTR_BORIE_Msk (0x1000UL) /*!< BORIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_OLIE_Pos (13UL) /*!< OLIE (Bit 13) */ + #define R_CANFD_CFDC_CTR_OLIE_Msk (0x2000UL) /*!< OLIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BLIE_Pos (14UL) /*!< BLIE (Bit 14) */ + #define R_CANFD_CFDC_CTR_BLIE_Msk (0x4000UL) /*!< BLIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_ALIE_Pos (15UL) /*!< ALIE (Bit 15) */ + #define R_CANFD_CFDC_CTR_ALIE_Msk (0x8000UL) /*!< ALIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_TAIE_Pos (16UL) /*!< TAIE (Bit 16) */ + #define R_CANFD_CFDC_CTR_TAIE_Msk (0x10000UL) /*!< TAIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_EOCOIE_Pos (17UL) /*!< EOCOIE (Bit 17) */ + #define R_CANFD_CFDC_CTR_EOCOIE_Msk (0x20000UL) /*!< EOCOIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_SOCOIE_Pos (18UL) /*!< SOCOIE (Bit 18) */ + #define R_CANFD_CFDC_CTR_SOCOIE_Msk (0x40000UL) /*!< SOCOIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_TDCVFIE_Pos (19UL) /*!< TDCVFIE (Bit 19) */ + #define R_CANFD_CFDC_CTR_TDCVFIE_Msk (0x80000UL) /*!< TDCVFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BOM_Pos (21UL) /*!< BOM (Bit 21) */ + #define R_CANFD_CFDC_CTR_BOM_Msk (0x600000UL) /*!< BOM (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDC_CTR_ERRD_Pos (23UL) /*!< ERRD (Bit 23) */ + #define R_CANFD_CFDC_CTR_ERRD_Msk (0x800000UL) /*!< ERRD (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_CTME_Pos (24UL) /*!< CTME (Bit 24) */ + #define R_CANFD_CFDC_CTR_CTME_Msk (0x1000000UL) /*!< CTME (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_CTMS_Pos (25UL) /*!< CTMS (Bit 25) */ + #define R_CANFD_CFDC_CTR_CTMS_Msk (0x6000000UL) /*!< CTMS (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDC_CTR_CRCT_Pos (30UL) /*!< CRCT (Bit 30) */ + #define R_CANFD_CFDC_CTR_CRCT_Msk (0x40000000UL) /*!< CRCT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_ROM_Pos (31UL) /*!< ROM (Bit 31) */ + #define R_CANFD_CFDC_CTR_ROM_Msk (0x80000000UL) /*!< ROM (Bitfield-Mask: 0x01) */ +/* ========================================================== STS ========================================================== */ + #define R_CANFD_CFDC_STS_CRSTSTS_Pos (0UL) /*!< CRSTSTS (Bit 0) */ + #define R_CANFD_CFDC_STS_CRSTSTS_Msk (0x1UL) /*!< CRSTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_CHLTSTS_Pos (1UL) /*!< CHLTSTS (Bit 1) */ + #define R_CANFD_CFDC_STS_CHLTSTS_Msk (0x2UL) /*!< CHLTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_CSLPSTS_Pos (2UL) /*!< CSLPSTS (Bit 2) */ + #define R_CANFD_CFDC_STS_CSLPSTS_Msk (0x4UL) /*!< CSLPSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_EPSTS_Pos (3UL) /*!< EPSTS (Bit 3) */ + #define R_CANFD_CFDC_STS_EPSTS_Msk (0x8UL) /*!< EPSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_BOSTS_Pos (4UL) /*!< BOSTS (Bit 4) */ + #define R_CANFD_CFDC_STS_BOSTS_Msk (0x10UL) /*!< BOSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_TRMSTS_Pos (5UL) /*!< TRMSTS (Bit 5) */ + #define R_CANFD_CFDC_STS_TRMSTS_Msk (0x20UL) /*!< TRMSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_RECSTS_Pos (6UL) /*!< RECSTS (Bit 6) */ + #define R_CANFD_CFDC_STS_RECSTS_Msk (0x40UL) /*!< RECSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_COMSTS_Pos (7UL) /*!< COMSTS (Bit 7) */ + #define R_CANFD_CFDC_STS_COMSTS_Msk (0x80UL) /*!< COMSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_ESIF_Pos (8UL) /*!< ESIF (Bit 8) */ + #define R_CANFD_CFDC_STS_ESIF_Msk (0x100UL) /*!< ESIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_REC_Pos (16UL) /*!< REC (Bit 16) */ + #define R_CANFD_CFDC_STS_REC_Msk (0xff0000UL) /*!< REC (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC_STS_TEC_Pos (24UL) /*!< TEC (Bit 24) */ + #define R_CANFD_CFDC_STS_TEC_Msk (0xff000000UL) /*!< TEC (Bitfield-Mask: 0xff) */ +/* ========================================================= ERFL ========================================================== */ + #define R_CANFD_CFDC_ERFL_BEF_Pos (0UL) /*!< BEF (Bit 0) */ + #define R_CANFD_CFDC_ERFL_BEF_Msk (0x1UL) /*!< BEF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_EWF_Pos (1UL) /*!< EWF (Bit 1) */ + #define R_CANFD_CFDC_ERFL_EWF_Msk (0x2UL) /*!< EWF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_EPF_Pos (2UL) /*!< EPF (Bit 2) */ + #define R_CANFD_CFDC_ERFL_EPF_Msk (0x4UL) /*!< EPF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_BOEF_Pos (3UL) /*!< BOEF (Bit 3) */ + #define R_CANFD_CFDC_ERFL_BOEF_Msk (0x8UL) /*!< BOEF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_BORF_Pos (4UL) /*!< BORF (Bit 4) */ + #define R_CANFD_CFDC_ERFL_BORF_Msk (0x10UL) /*!< BORF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_OVLF_Pos (5UL) /*!< OVLF (Bit 5) */ + #define R_CANFD_CFDC_ERFL_OVLF_Msk (0x20UL) /*!< OVLF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_BLF_Pos (6UL) /*!< BLF (Bit 6) */ + #define R_CANFD_CFDC_ERFL_BLF_Msk (0x40UL) /*!< BLF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_ALF_Pos (7UL) /*!< ALF (Bit 7) */ + #define R_CANFD_CFDC_ERFL_ALF_Msk (0x80UL) /*!< ALF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_SERR_Pos (8UL) /*!< SERR (Bit 8) */ + #define R_CANFD_CFDC_ERFL_SERR_Msk (0x100UL) /*!< SERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_FERR_Pos (9UL) /*!< FERR (Bit 9) */ + #define R_CANFD_CFDC_ERFL_FERR_Msk (0x200UL) /*!< FERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_AERR_Pos (10UL) /*!< AERR (Bit 10) */ + #define R_CANFD_CFDC_ERFL_AERR_Msk (0x400UL) /*!< AERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_CERR_Pos (11UL) /*!< CERR (Bit 11) */ + #define R_CANFD_CFDC_ERFL_CERR_Msk (0x800UL) /*!< CERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_B1ERR_Pos (12UL) /*!< B1ERR (Bit 12) */ + #define R_CANFD_CFDC_ERFL_B1ERR_Msk (0x1000UL) /*!< B1ERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_B0ERR_Pos (13UL) /*!< B0ERR (Bit 13) */ + #define R_CANFD_CFDC_ERFL_B0ERR_Msk (0x2000UL) /*!< B0ERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_ADERR_Pos (14UL) /*!< ADERR (Bit 14) */ + #define R_CANFD_CFDC_ERFL_ADERR_Msk (0x4000UL) /*!< ADERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_CRCREG_Pos (16UL) /*!< CRCREG (Bit 16) */ + #define R_CANFD_CFDC_ERFL_CRCREG_Msk (0x7fff0000UL) /*!< CRCREG (Bitfield-Mask: 0x7fff) */ + +/* =========================================================================================================================== */ +/* ================ CFDC2 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DCFG ========================================================== */ + #define R_CANFD_CFDC2_DCFG_DBRP_Pos (0UL) /*!< DBRP (Bit 0) */ + #define R_CANFD_CFDC2_DCFG_DBRP_Msk (0xffUL) /*!< DBRP (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_DCFG_DTSEG1_Pos (8UL) /*!< DTSEG1 (Bit 8) */ + #define R_CANFD_CFDC2_DCFG_DTSEG1_Msk (0x1f00UL) /*!< DTSEG1 (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDC2_DCFG_DTSEG2_Pos (16UL) /*!< DTSEG2 (Bit 16) */ + #define R_CANFD_CFDC2_DCFG_DTSEG2_Msk (0xf0000UL) /*!< DTSEG2 (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDC2_DCFG_DSJW_Pos (24UL) /*!< DSJW (Bit 24) */ + #define R_CANFD_CFDC2_DCFG_DSJW_Msk (0xf000000UL) /*!< DSJW (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDCFG ========================================================= */ + #define R_CANFD_CFDC2_FDCFG_EOCCFG_Pos (0UL) /*!< EOCCFG (Bit 0) */ + #define R_CANFD_CFDC2_FDCFG_EOCCFG_Msk (0x7UL) /*!< EOCCFG (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDC2_FDCFG_TDCOC_Pos (8UL) /*!< TDCOC (Bit 8) */ + #define R_CANFD_CFDC2_FDCFG_TDCOC_Msk (0x100UL) /*!< TDCOC (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_TDCE_Pos (9UL) /*!< TDCE (Bit 9) */ + #define R_CANFD_CFDC2_FDCFG_TDCE_Msk (0x200UL) /*!< TDCE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_ESIC_Pos (10UL) /*!< ESIC (Bit 10) */ + #define R_CANFD_CFDC2_FDCFG_ESIC_Msk (0x400UL) /*!< ESIC (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_TDCO_Pos (16UL) /*!< TDCO (Bit 16) */ + #define R_CANFD_CFDC2_FDCFG_TDCO_Msk (0xff0000UL) /*!< TDCO (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_FDCFG_GWEN_Pos (24UL) /*!< GWEN (Bit 24) */ + #define R_CANFD_CFDC2_FDCFG_GWEN_Msk (0x1000000UL) /*!< GWEN (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_GWFDF_Pos (25UL) /*!< GWFDF (Bit 25) */ + #define R_CANFD_CFDC2_FDCFG_GWFDF_Msk (0x2000000UL) /*!< GWFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_GWBRS_Pos (26UL) /*!< GWBRS (Bit 26) */ + #define R_CANFD_CFDC2_FDCFG_GWBRS_Msk (0x4000000UL) /*!< GWBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_FDOE_Pos (28UL) /*!< FDOE (Bit 28) */ + #define R_CANFD_CFDC2_FDCFG_FDOE_Msk (0x10000000UL) /*!< FDOE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_REFE_Pos (29UL) /*!< REFE (Bit 29) */ + #define R_CANFD_CFDC2_FDCFG_REFE_Msk (0x20000000UL) /*!< REFE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_CLOE_Pos (30UL) /*!< CLOE (Bit 30) */ + #define R_CANFD_CFDC2_FDCFG_CLOE_Msk (0x40000000UL) /*!< CLOE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_CFDTE_Pos (31UL) /*!< CFDTE (Bit 31) */ + #define R_CANFD_CFDC2_FDCFG_CFDTE_Msk (0x80000000UL) /*!< CFDTE (Bitfield-Mask: 0x01) */ +/* ========================================================= FDCTR ========================================================= */ + #define R_CANFD_CFDC2_FDCTR_EOCCLR_Pos (0UL) /*!< EOCCLR (Bit 0) */ + #define R_CANFD_CFDC2_FDCTR_EOCCLR_Msk (0x1UL) /*!< EOCCLR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCTR_SOCCLR_Pos (1UL) /*!< SOCCLR (Bit 1) */ + #define R_CANFD_CFDC2_FDCTR_SOCCLR_Msk (0x2UL) /*!< SOCCLR (Bitfield-Mask: 0x01) */ +/* ========================================================= FDSTS ========================================================= */ + #define R_CANFD_CFDC2_FDSTS_TDCR_Pos (0UL) /*!< TDCR (Bit 0) */ + #define R_CANFD_CFDC2_FDSTS_TDCR_Msk (0xffUL) /*!< TDCR (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_FDSTS_EOCO_Pos (8UL) /*!< EOCO (Bit 8) */ + #define R_CANFD_CFDC2_FDSTS_EOCO_Msk (0x100UL) /*!< EOCO (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDSTS_SOCO_Pos (9UL) /*!< SOCO (Bit 9) */ + #define R_CANFD_CFDC2_FDSTS_SOCO_Msk (0x200UL) /*!< SOCO (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDSTS_TDCVF_Pos (15UL) /*!< TDCVF (Bit 15) */ + #define R_CANFD_CFDC2_FDSTS_TDCVF_Msk (0x8000UL) /*!< TDCVF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDSTS_EOC_Pos (16UL) /*!< EOC (Bit 16) */ + #define R_CANFD_CFDC2_FDSTS_EOC_Msk (0xff0000UL) /*!< EOC (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_FDSTS_SOC_Pos (24UL) /*!< SOC (Bit 24) */ + #define R_CANFD_CFDC2_FDSTS_SOC_Msk (0xff000000UL) /*!< SOC (Bitfield-Mask: 0xff) */ +/* ========================================================= FDCRC ========================================================= */ + #define R_CANFD_CFDC2_FDCRC_CRCREG_Pos (0UL) /*!< CRCREG (Bit 0) */ + #define R_CANFD_CFDC2_FDCRC_CRCREG_Msk (0x1fffffUL) /*!< CRCREG (Bitfield-Mask: 0x1fffff) */ + #define R_CANFD_CFDC2_FDCRC_SCNT_Pos (25UL) /*!< SCNT (Bit 25) */ + #define R_CANFD_CFDC2_FDCRC_SCNT_Msk (0x1e000000UL) /*!< SCNT (Bitfield-Mask: 0x0f) */ +/* ========================================================= BLCT ========================================================== */ + #define R_CANFD_CFDC2_BLCT_BLCE_Pos (0UL) /*!< BLCE (Bit 0) */ + #define R_CANFD_CFDC2_BLCT_BLCE_Msk (0x1UL) /*!< BLCE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_BLCT_BLCLD_Pos (8UL) /*!< BLCLD (Bit 8) */ + #define R_CANFD_CFDC2_BLCT_BLCLD_Msk (0x100UL) /*!< BLCLD (Bitfield-Mask: 0x01) */ +/* ========================================================= BLSTS ========================================================= */ + #define R_CANFD_CFDC2_BLSTS_BLC_Pos (3UL) /*!< BLC (Bit 3) */ + #define R_CANFD_CFDC2_BLSTS_BLC_Msk (0xfffffff8UL) /*!< BLC (Bitfield-Mask: 0x1fffffff) */ + +/* =========================================================================================================================== */ +/* ================ CFDGAFL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDGAFL_ID_GAFLID_Pos (0UL) /*!< GAFLID (Bit 0) */ + #define R_CANFD_CFDGAFL_ID_GAFLID_Msk (0x1fffffffUL) /*!< GAFLID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDGAFL_ID_GAFLLB_Pos (29UL) /*!< GAFLLB (Bit 29) */ + #define R_CANFD_CFDGAFL_ID_GAFLLB_Msk (0x20000000UL) /*!< GAFLLB (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_ID_GAFLRTR_Pos (30UL) /*!< GAFLRTR (Bit 30) */ + #define R_CANFD_CFDGAFL_ID_GAFLRTR_Msk (0x40000000UL) /*!< GAFLRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_ID_GAFLIDE_Pos (31UL) /*!< GAFLIDE (Bit 31) */ + #define R_CANFD_CFDGAFL_ID_GAFLIDE_Msk (0x80000000UL) /*!< GAFLIDE (Bitfield-Mask: 0x01) */ +/* =========================================================== M =========================================================== */ + #define R_CANFD_CFDGAFL_M_GAFLIDM_Pos (0UL) /*!< GAFLIDM (Bit 0) */ + #define R_CANFD_CFDGAFL_M_GAFLIDM_Msk (0x1fffffffUL) /*!< GAFLIDM (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDGAFL_M_GAFLIFL1_Pos (29UL) /*!< GAFLIFL1 (Bit 29) */ + #define R_CANFD_CFDGAFL_M_GAFLIFL1_Msk (0x20000000UL) /*!< GAFLIFL1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_M_GAFLRTRM_Pos (30UL) /*!< GAFLRTRM (Bit 30) */ + #define R_CANFD_CFDGAFL_M_GAFLRTRM_Msk (0x40000000UL) /*!< GAFLRTRM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_M_GAFLIDEM_Pos (31UL) /*!< GAFLIDEM (Bit 31) */ + #define R_CANFD_CFDGAFL_M_GAFLIDEM_Msk (0x80000000UL) /*!< GAFLIDEM (Bitfield-Mask: 0x01) */ +/* ========================================================== P0 =========================================================== */ + #define R_CANFD_CFDGAFL_P0_GAFLDLC_Pos (0UL) /*!< GAFLDLC (Bit 0) */ + #define R_CANFD_CFDGAFL_P0_GAFLDLC_Msk (0xfUL) /*!< GAFLDLC (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDGAFL_P0_GAFLSRD0_Pos (4UL) /*!< GAFLSRD0 (Bit 4) */ + #define R_CANFD_CFDGAFL_P0_GAFLSRD0_Msk (0x10UL) /*!< GAFLSRD0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_P0_GAFLSRD1_Pos (5UL) /*!< GAFLSRD1 (Bit 5) */ + #define R_CANFD_CFDGAFL_P0_GAFLSRD1_Msk (0x20UL) /*!< GAFLSRD1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_P0_GAFLSRD2_Pos (6UL) /*!< GAFLSRD2 (Bit 6) */ + #define R_CANFD_CFDGAFL_P0_GAFLSRD2_Msk (0x40UL) /*!< GAFLSRD2 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_P0_GAFLIFL0_Pos (7UL) /*!< GAFLIFL0 (Bit 7) */ + #define R_CANFD_CFDGAFL_P0_GAFLIFL0_Msk (0x80UL) /*!< GAFLIFL0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMDP_Pos (8UL) /*!< GAFLRMDP (Bit 8) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMDP_Msk (0x1f00UL) /*!< GAFLRMDP (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMV_Pos (15UL) /*!< GAFLRMV (Bit 15) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMV_Msk (0x8000UL) /*!< GAFLRMV (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_P0_GAFLPTR_Pos (16UL) /*!< GAFLPTR (Bit 16) */ + #define R_CANFD_CFDGAFL_P0_GAFLPTR_Msk (0xffff0000UL) /*!< GAFLPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================== P1 =========================================================== */ + #define R_CANFD_CFDGAFL_P1_GAFLFDP_Pos (0UL) /*!< GAFLFDP (Bit 0) */ + #define R_CANFD_CFDGAFL_P1_GAFLFDP_Msk (0x3fffUL) /*!< GAFLFDP (Bitfield-Mask: 0x3fff) */ + +/* =========================================================================================================================== */ +/* ================ CFDRM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDRM_ID_RMID_Pos (0UL) /*!< RMID (Bit 0) */ + #define R_CANFD_CFDRM_ID_RMID_Msk (0x1fffffffUL) /*!< RMID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDRM_ID_RMRTR_Pos (30UL) /*!< RMRTR (Bit 30) */ + #define R_CANFD_CFDRM_ID_RMRTR_Msk (0x40000000UL) /*!< RMRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_ID_RMIDE_Pos (31UL) /*!< RMIDE (Bit 31) */ + #define R_CANFD_CFDRM_ID_RMIDE_Msk (0x80000000UL) /*!< RMIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDRM_PTR_RMTS_Pos (0UL) /*!< RMTS (Bit 0) */ + #define R_CANFD_CFDRM_PTR_RMTS_Msk (0xffffUL) /*!< RMTS (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDRM_PTR_RMDLC_Pos (28UL) /*!< RMDLC (Bit 28) */ + #define R_CANFD_CFDRM_PTR_RMDLC_Msk (0xf0000000UL) /*!< RMDLC (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDSTS ========================================================= */ + #define R_CANFD_CFDRM_FDSTS_RMESI_Pos (0UL) /*!< RMESI (Bit 0) */ + #define R_CANFD_CFDRM_FDSTS_RMESI_Msk (0x1UL) /*!< RMESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_FDSTS_RMBRS_Pos (1UL) /*!< RMBRS (Bit 1) */ + #define R_CANFD_CFDRM_FDSTS_RMBRS_Msk (0x2UL) /*!< RMBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_FDSTS_RMFDF_Pos (2UL) /*!< RMFDF (Bit 2) */ + #define R_CANFD_CFDRM_FDSTS_RMFDF_Msk (0x4UL) /*!< RMFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_FDSTS_RMIFL_Pos (8UL) /*!< RMIFL (Bit 8) */ + #define R_CANFD_CFDRM_FDSTS_RMIFL_Msk (0x300UL) /*!< RMIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDRM_FDSTS_RMPTR_Pos (16UL) /*!< RMPTR (Bit 16) */ + #define R_CANFD_CFDRM_FDSTS_RMPTR_Msk (0xffff0000UL) /*!< RMPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================= DF_WD ========================================================= */ + #define R_CANFD_CFDRM_DF_WD_RMDB_LL_Pos (0UL) /*!< RMDB_LL (Bit 0) */ + #define R_CANFD_CFDRM_DF_WD_RMDB_LL_Msk (0xffUL) /*!< RMDB_LL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRM_DF_WD_RMDB_LH_Pos (8UL) /*!< RMDB_LH (Bit 8) */ + #define R_CANFD_CFDRM_DF_WD_RMDB_LH_Msk (0xff00UL) /*!< RMDB_LH (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRM_DF_WD_RMDB_HL_Pos (16UL) /*!< RMDB_HL (Bit 16) */ + #define R_CANFD_CFDRM_DF_WD_RMDB_HL_Msk (0xff0000UL) /*!< RMDB_HL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRM_DF_WD_RMDB_HH_Pos (24UL) /*!< RMDB_HH (Bit 24) */ + #define R_CANFD_CFDRM_DF_WD_RMDB_HH_Msk (0xff000000UL) /*!< RMDB_HH (Bitfield-Mask: 0xff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDRM_DF_RMDB_Pos (0UL) /*!< RMDB (Bit 0) */ + #define R_CANFD_CFDRM_DF_RMDB_Msk (0xffUL) /*!< RMDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ CFDRF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDRF_ID_RFID_Pos (0UL) /*!< RFID (Bit 0) */ + #define R_CANFD_CFDRF_ID_RFID_Msk (0x1fffffffUL) /*!< RFID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDRF_ID_RFRTR_Pos (30UL) /*!< RFRTR (Bit 30) */ + #define R_CANFD_CFDRF_ID_RFRTR_Msk (0x40000000UL) /*!< RFRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_ID_RFIDE_Pos (31UL) /*!< RFIDE (Bit 31) */ + #define R_CANFD_CFDRF_ID_RFIDE_Msk (0x80000000UL) /*!< RFIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDRF_PTR_RFTS_Pos (0UL) /*!< RFTS (Bit 0) */ + #define R_CANFD_CFDRF_PTR_RFTS_Msk (0xffffUL) /*!< RFTS (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDRF_PTR_RFDLC_Pos (28UL) /*!< RFDLC (Bit 28) */ + #define R_CANFD_CFDRF_PTR_RFDLC_Msk (0xf0000000UL) /*!< RFDLC (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDSTS ========================================================= */ + #define R_CANFD_CFDRF_FDSTS_RFESI_Pos (0UL) /*!< RFESI (Bit 0) */ + #define R_CANFD_CFDRF_FDSTS_RFESI_Msk (0x1UL) /*!< RFESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_FDSTS_RFBRS_Pos (1UL) /*!< RFBRS (Bit 1) */ + #define R_CANFD_CFDRF_FDSTS_RFBRS_Msk (0x2UL) /*!< RFBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_FDSTS_RFFDF_Pos (2UL) /*!< RFFDF (Bit 2) */ + #define R_CANFD_CFDRF_FDSTS_RFFDF_Msk (0x4UL) /*!< RFFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_FDSTS_RFIFL_Pos (8UL) /*!< RFIFL (Bit 8) */ + #define R_CANFD_CFDRF_FDSTS_RFIFL_Msk (0x300UL) /*!< RFIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDRF_FDSTS_CFDRFPTR_Pos (16UL) /*!< CFDRFPTR (Bit 16) */ + #define R_CANFD_CFDRF_FDSTS_CFDRFPTR_Msk (0xffff0000UL) /*!< CFDRFPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================= DF_WD ========================================================= */ + #define R_CANFD_CFDRF_DF_WD_RFDB_LL_Pos (0UL) /*!< RFDB_LL (Bit 0) */ + #define R_CANFD_CFDRF_DF_WD_RFDB_LL_Msk (0xffUL) /*!< RFDB_LL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRF_DF_WD_RFDB_LH_Pos (8UL) /*!< RFDB_LH (Bit 8) */ + #define R_CANFD_CFDRF_DF_WD_RFDB_LH_Msk (0xff00UL) /*!< RFDB_LH (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRF_DF_WD_RFDB_HL_Pos (16UL) /*!< RFDB_HL (Bit 16) */ + #define R_CANFD_CFDRF_DF_WD_RFDB_HL_Msk (0xff0000UL) /*!< RFDB_HL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRF_DF_WD_RFDB_HH_Pos (24UL) /*!< RFDB_HH (Bit 24) */ + #define R_CANFD_CFDRF_DF_WD_RFDB_HH_Msk (0xff000000UL) /*!< RFDB_HH (Bitfield-Mask: 0xff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDRF_DF_RFDB_Pos (0UL) /*!< RFDB (Bit 0) */ + #define R_CANFD_CFDRF_DF_RFDB_Msk (0xffUL) /*!< RFDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ CFDCF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDCF_ID_CFID_Pos (0UL) /*!< CFID (Bit 0) */ + #define R_CANFD_CFDCF_ID_CFID_Msk (0x1fffffffUL) /*!< CFID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDCF_ID_THLEN_Pos (29UL) /*!< THLEN (Bit 29) */ + #define R_CANFD_CFDCF_ID_THLEN_Msk (0x20000000UL) /*!< THLEN (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_ID_CFRTR_Pos (30UL) /*!< CFRTR (Bit 30) */ + #define R_CANFD_CFDCF_ID_CFRTR_Msk (0x40000000UL) /*!< CFRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_ID_CFIDE_Pos (31UL) /*!< CFIDE (Bit 31) */ + #define R_CANFD_CFDCF_ID_CFIDE_Msk (0x80000000UL) /*!< CFIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDCF_PTR_CFTS_Pos (0UL) /*!< CFTS (Bit 0) */ + #define R_CANFD_CFDCF_PTR_CFTS_Msk (0xffffUL) /*!< CFTS (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDCF_PTR_CFDLC_Pos (28UL) /*!< CFDLC (Bit 28) */ + #define R_CANFD_CFDCF_PTR_CFDLC_Msk (0xf0000000UL) /*!< CFDLC (Bitfield-Mask: 0x0f) */ +/* ======================================================== FDCSTS ========================================================= */ + #define R_CANFD_CFDCF_FDCSTS_CFESI_Pos (0UL) /*!< CFESI (Bit 0) */ + #define R_CANFD_CFDCF_FDCSTS_CFESI_Msk (0x1UL) /*!< CFESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_FDCSTS_CFBRS_Pos (1UL) /*!< CFBRS (Bit 1) */ + #define R_CANFD_CFDCF_FDCSTS_CFBRS_Msk (0x2UL) /*!< CFBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_FDCSTS_CFFDF_Pos (2UL) /*!< CFFDF (Bit 2) */ + #define R_CANFD_CFDCF_FDCSTS_CFFDF_Msk (0x4UL) /*!< CFFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_FDCSTS_CFIFL_Pos (8UL) /*!< CFIFL (Bit 8) */ + #define R_CANFD_CFDCF_FDCSTS_CFIFL_Msk (0x300UL) /*!< CFIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDCF_FDCSTS_CFPTR_Pos (16UL) /*!< CFPTR (Bit 16) */ + #define R_CANFD_CFDCF_FDCSTS_CFPTR_Msk (0xffff0000UL) /*!< CFPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================= DF_WD ========================================================= */ + #define R_CANFD_CFDCF_DF_WD_CFDB_LL_Pos (0UL) /*!< CFDB_LL (Bit 0) */ + #define R_CANFD_CFDCF_DF_WD_CFDB_LL_Msk (0xffUL) /*!< CFDB_LL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDCF_DF_WD_CFDB_LH_Pos (8UL) /*!< CFDB_LH (Bit 8) */ + #define R_CANFD_CFDCF_DF_WD_CFDB_LH_Msk (0xff00UL) /*!< CFDB_LH (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDCF_DF_WD_CFDB_HL_Pos (16UL) /*!< CFDB_HL (Bit 16) */ + #define R_CANFD_CFDCF_DF_WD_CFDB_HL_Msk (0xff0000UL) /*!< CFDB_HL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDCF_DF_WD_CFDB_HH_Pos (24UL) /*!< CFDB_HH (Bit 24) */ + #define R_CANFD_CFDCF_DF_WD_CFDB_HH_Msk (0xff000000UL) /*!< CFDB_HH (Bitfield-Mask: 0xff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDCF_DF_CFDB_Pos (0UL) /*!< CFDB (Bit 0) */ + #define R_CANFD_CFDCF_DF_CFDB_Msk (0xffUL) /*!< CFDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ CFDTHL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ACC0 ========================================================== */ + #define R_CANFD_CFDTHL_ACC0_BT_Pos (0UL) /*!< BT (Bit 0) */ + #define R_CANFD_CFDTHL_ACC0_BT_Msk (0x7UL) /*!< BT (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDTHL_ACC0_BN_Pos (3UL) /*!< BN (Bit 3) */ + #define R_CANFD_CFDTHL_ACC0_BN_Msk (0x3f8UL) /*!< BN (Bitfield-Mask: 0x7f) */ + #define R_CANFD_CFDTHL_ACC0_TGW_Pos (15UL) /*!< TGW (Bit 15) */ + #define R_CANFD_CFDTHL_ACC0_TGW_Msk (0x8000UL) /*!< TGW (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHL_ACC0_TMTS_Pos (16UL) /*!< TMTS (Bit 16) */ + #define R_CANFD_CFDTHL_ACC0_TMTS_Msk (0xffff0000UL) /*!< TMTS (Bitfield-Mask: 0xffff) */ +/* ========================================================= ACC1 ========================================================== */ + #define R_CANFD_CFDTHL_ACC1_TID_Pos (0UL) /*!< TID (Bit 0) */ + #define R_CANFD_CFDTHL_ACC1_TID_Msk (0xffffUL) /*!< TID (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDTHL_ACC1_TIFL_Pos (16UL) /*!< TIFL (Bit 16) */ + #define R_CANFD_CFDTHL_ACC1_TIFL_Msk (0x30000UL) /*!< TIFL (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ CFDTM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDTM_ID_TMID_Pos (0UL) /*!< TMID (Bit 0) */ + #define R_CANFD_CFDTM_ID_TMID_Msk (0x1fffffffUL) /*!< TMID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDTM_ID_THLEN_Pos (29UL) /*!< THLEN (Bit 29) */ + #define R_CANFD_CFDTM_ID_THLEN_Msk (0x20000000UL) /*!< THLEN (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_ID_TMRTR_Pos (30UL) /*!< TMRTR (Bit 30) */ + #define R_CANFD_CFDTM_ID_TMRTR_Msk (0x40000000UL) /*!< TMRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_ID_TMIDE_Pos (31UL) /*!< TMIDE (Bit 31) */ + #define R_CANFD_CFDTM_ID_TMIDE_Msk (0x80000000UL) /*!< TMIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDTM_PTR_TMDLC_Pos (28UL) /*!< TMDLC (Bit 28) */ + #define R_CANFD_CFDTM_PTR_TMDLC_Msk (0xf0000000UL) /*!< TMDLC (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDCTR ========================================================= */ + #define R_CANFD_CFDTM_FDCTR_TMESI_Pos (0UL) /*!< TMESI (Bit 0) */ + #define R_CANFD_CFDTM_FDCTR_TMESI_Msk (0x1UL) /*!< TMESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_FDCTR_TMBRS_Pos (1UL) /*!< TMBRS (Bit 1) */ + #define R_CANFD_CFDTM_FDCTR_TMBRS_Msk (0x2UL) /*!< TMBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_FDCTR_TMFDF_Pos (2UL) /*!< TMFDF (Bit 2) */ + #define R_CANFD_CFDTM_FDCTR_TMFDF_Msk (0x4UL) /*!< TMFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_FDCTR_TMIFL_Pos (8UL) /*!< TMIFL (Bit 8) */ + #define R_CANFD_CFDTM_FDCTR_TMIFL_Msk (0x300UL) /*!< TMIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDTM_FDCTR_TMPTR_Pos (16UL) /*!< TMPTR (Bit 16) */ + #define R_CANFD_CFDTM_FDCTR_TMPTR_Msk (0xffff0000UL) /*!< TMPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================= DF_WD ========================================================= */ + #define R_CANFD_CFDTM_DF_WD_TMDB_LL_Pos (0UL) /*!< TMDB_LL (Bit 0) */ + #define R_CANFD_CFDTM_DF_WD_TMDB_LL_Msk (0xffUL) /*!< TMDB_LL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDTM_DF_WD_TMDB_LH_Pos (8UL) /*!< TMDB_LH (Bit 8) */ + #define R_CANFD_CFDTM_DF_WD_TMDB_LH_Msk (0xff00UL) /*!< TMDB_LH (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDTM_DF_WD_TMDB_HL_Pos (16UL) /*!< TMDB_HL (Bit 16) */ + #define R_CANFD_CFDTM_DF_WD_TMDB_HL_Msk (0xff0000UL) /*!< TMDB_HL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDTM_DF_WD_TMDB_HH_Pos (24UL) /*!< TMDB_HH (Bit 24) */ + #define R_CANFD_CFDTM_DF_WD_TMDB_HH_Msk (0xff000000UL) /*!< TMDB_HH (Bitfield-Mask: 0xff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDTM_DF_TMDB_Pos (0UL) /*!< TMDB (Bit 0) */ + #define R_CANFD_CFDTM_DF_TMDB_Msk (0xffUL) /*!< TMDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ CM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== CR =========================================================== */ + #define R_CMT_UNT_CM_CR_CKS_Pos (0UL) /*!< CKS (Bit 0) */ + #define R_CMT_UNT_CM_CR_CKS_Msk (0x3UL) /*!< CKS (Bitfield-Mask: 0x03) */ + #define R_CMT_UNT_CM_CR_CMIE_Pos (6UL) /*!< CMIE (Bit 6) */ + #define R_CMT_UNT_CM_CR_CMIE_Msk (0x40UL) /*!< CMIE (Bitfield-Mask: 0x01) */ +/* ========================================================== CNT ========================================================== */ +/* ========================================================== COR ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ UNT ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CMSTR0 ========================================================= */ + #define R_CMT_UNT_CMSTR0_STR0_Pos (0UL) /*!< STR0 (Bit 0) */ + #define R_CMT_UNT_CMSTR0_STR0_Msk (0x1UL) /*!< STR0 (Bitfield-Mask: 0x01) */ + #define R_CMT_UNT_CMSTR0_STR1_Pos (1UL) /*!< STR1 (Bit 1) */ + #define R_CMT_UNT_CMSTR0_STR1_Msk (0x2UL) /*!< STR1 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ SAR ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== L =========================================================== */ + #define R_IIC0_SAR_L_SVA0_Pos (0UL) /*!< SVA0 (Bit 0) */ + #define R_IIC0_SAR_L_SVA0_Msk (0x1UL) /*!< SVA0 (Bitfield-Mask: 0x01) */ + #define R_IIC0_SAR_L_SVA_Pos (1UL) /*!< SVA (Bit 1) */ + #define R_IIC0_SAR_L_SVA_Msk (0xfeUL) /*!< SVA (Bitfield-Mask: 0x7f) */ +/* =========================================================== U =========================================================== */ + #define R_IIC0_SAR_U_FS_Pos (0UL) /*!< FS (Bit 0) */ + #define R_IIC0_SAR_U_FS_Msk (0x1UL) /*!< FS (Bitfield-Mask: 0x01) */ + #define R_IIC0_SAR_U_SVA_Pos (1UL) /*!< SVA (Bit 1) */ + #define R_IIC0_SAR_U_SVA_Msk (0x6UL) /*!< SVA (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ N ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== SA =========================================================== */ +/* ========================================================== DA =========================================================== */ +/* ========================================================== TB =========================================================== */ + +/* =========================================================================================================================== */ +/* ================ CH ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CRSA ========================================================== */ +/* ========================================================= CRDA ========================================================== */ +/* ========================================================= CRTB ========================================================== */ +/* ======================================================== CHSTAT ========================================================= */ + #define R_DMAC0_GRP_CH_CHSTAT_EN_Pos (0UL) /*!< EN (Bit 0) */ + #define R_DMAC0_GRP_CH_CHSTAT_EN_Msk (0x1UL) /*!< EN (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_RQST_Pos (1UL) /*!< RQST (Bit 1) */ + #define R_DMAC0_GRP_CH_CHSTAT_RQST_Msk (0x2UL) /*!< RQST (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_TACT_Pos (2UL) /*!< TACT (Bit 2) */ + #define R_DMAC0_GRP_CH_CHSTAT_TACT_Msk (0x4UL) /*!< TACT (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_SUS_Pos (3UL) /*!< SUS (Bit 3) */ + #define R_DMAC0_GRP_CH_CHSTAT_SUS_Msk (0x8UL) /*!< SUS (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_ER_Pos (4UL) /*!< ER (Bit 4) */ + #define R_DMAC0_GRP_CH_CHSTAT_ER_Msk (0x10UL) /*!< ER (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_END_Pos (5UL) /*!< END (Bit 5) */ + #define R_DMAC0_GRP_CH_CHSTAT_END_Msk (0x20UL) /*!< END (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_TC_Pos (6UL) /*!< TC (Bit 6) */ + #define R_DMAC0_GRP_CH_CHSTAT_TC_Msk (0x40UL) /*!< TC (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_SR_Pos (7UL) /*!< SR (Bit 7) */ + #define R_DMAC0_GRP_CH_CHSTAT_SR_Msk (0x80UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_DL_Pos (8UL) /*!< DL (Bit 8) */ + #define R_DMAC0_GRP_CH_CHSTAT_DL_Msk (0x100UL) /*!< DL (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_DW_Pos (9UL) /*!< DW (Bit 9) */ + #define R_DMAC0_GRP_CH_CHSTAT_DW_Msk (0x200UL) /*!< DW (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_DER_Pos (10UL) /*!< DER (Bit 10) */ + #define R_DMAC0_GRP_CH_CHSTAT_DER_Msk (0x400UL) /*!< DER (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_MODE_Pos (11UL) /*!< MODE (Bit 11) */ + #define R_DMAC0_GRP_CH_CHSTAT_MODE_Msk (0x800UL) /*!< MODE (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHSTAT_INTM_Pos (16UL) /*!< INTM (Bit 16) */ + #define R_DMAC0_GRP_CH_CHSTAT_INTM_Msk (0x10000UL) /*!< INTM (Bitfield-Mask: 0x01) */ +/* ======================================================== CHCTRL ========================================================= */ + #define R_DMAC0_GRP_CH_CHCTRL_SETEN_Pos (0UL) /*!< SETEN (Bit 0) */ + #define R_DMAC0_GRP_CH_CHCTRL_SETEN_Msk (0x1UL) /*!< SETEN (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLREN_Pos (1UL) /*!< CLREN (Bit 1) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLREN_Msk (0x2UL) /*!< CLREN (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_STG_Pos (2UL) /*!< STG (Bit 2) */ + #define R_DMAC0_GRP_CH_CHCTRL_STG_Msk (0x4UL) /*!< STG (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_SWRST_Pos (3UL) /*!< SWRST (Bit 3) */ + #define R_DMAC0_GRP_CH_CHCTRL_SWRST_Msk (0x8UL) /*!< SWRST (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRRQ_Pos (4UL) /*!< CLRRQ (Bit 4) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRRQ_Msk (0x10UL) /*!< CLRRQ (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLREND_Pos (5UL) /*!< CLREND (Bit 5) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLREND_Msk (0x20UL) /*!< CLREND (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRTC_Pos (6UL) /*!< CLRTC (Bit 6) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRTC_Msk (0x40UL) /*!< CLRTC (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_SETSUS_Pos (8UL) /*!< SETSUS (Bit 8) */ + #define R_DMAC0_GRP_CH_CHCTRL_SETSUS_Msk (0x100UL) /*!< SETSUS (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRSUS_Pos (9UL) /*!< CLRSUS (Bit 9) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRSUS_Msk (0x200UL) /*!< CLRSUS (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_SETINTM_Pos (16UL) /*!< SETINTM (Bit 16) */ + #define R_DMAC0_GRP_CH_CHCTRL_SETINTM_Msk (0x10000UL) /*!< SETINTM (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRINTM_Pos (17UL) /*!< CLRINTM (Bit 17) */ + #define R_DMAC0_GRP_CH_CHCTRL_CLRINTM_Msk (0x20000UL) /*!< CLRINTM (Bitfield-Mask: 0x01) */ +/* ========================================================= CHCFG ========================================================= */ + #define R_DMAC0_GRP_CH_CHCFG_SEL_Pos (0UL) /*!< SEL (Bit 0) */ + #define R_DMAC0_GRP_CH_CHCFG_SEL_Msk (0x7UL) /*!< SEL (Bitfield-Mask: 0x07) */ + #define R_DMAC0_GRP_CH_CHCFG_REQD_Pos (3UL) /*!< REQD (Bit 3) */ + #define R_DMAC0_GRP_CH_CHCFG_REQD_Msk (0x8UL) /*!< REQD (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_LOEN_Pos (4UL) /*!< LOEN (Bit 4) */ + #define R_DMAC0_GRP_CH_CHCFG_LOEN_Msk (0x10UL) /*!< LOEN (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_HIEN_Pos (5UL) /*!< HIEN (Bit 5) */ + #define R_DMAC0_GRP_CH_CHCFG_HIEN_Msk (0x20UL) /*!< HIEN (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_LVL_Pos (6UL) /*!< LVL (Bit 6) */ + #define R_DMAC0_GRP_CH_CHCFG_LVL_Msk (0x40UL) /*!< LVL (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_AM_Pos (8UL) /*!< AM (Bit 8) */ + #define R_DMAC0_GRP_CH_CHCFG_AM_Msk (0x700UL) /*!< AM (Bitfield-Mask: 0x07) */ + #define R_DMAC0_GRP_CH_CHCFG_SDS_Pos (12UL) /*!< SDS (Bit 12) */ + #define R_DMAC0_GRP_CH_CHCFG_SDS_Msk (0xf000UL) /*!< SDS (Bitfield-Mask: 0x0f) */ + #define R_DMAC0_GRP_CH_CHCFG_DDS_Pos (16UL) /*!< DDS (Bit 16) */ + #define R_DMAC0_GRP_CH_CHCFG_DDS_Msk (0xf0000UL) /*!< DDS (Bitfield-Mask: 0x0f) */ + #define R_DMAC0_GRP_CH_CHCFG_SAD_Pos (20UL) /*!< SAD (Bit 20) */ + #define R_DMAC0_GRP_CH_CHCFG_SAD_Msk (0x100000UL) /*!< SAD (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_DAD_Pos (21UL) /*!< DAD (Bit 21) */ + #define R_DMAC0_GRP_CH_CHCFG_DAD_Msk (0x200000UL) /*!< DAD (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_TM_Pos (22UL) /*!< TM (Bit 22) */ + #define R_DMAC0_GRP_CH_CHCFG_TM_Msk (0x400000UL) /*!< TM (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_DEM_Pos (24UL) /*!< DEM (Bit 24) */ + #define R_DMAC0_GRP_CH_CHCFG_DEM_Msk (0x1000000UL) /*!< DEM (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_TCM_Pos (25UL) /*!< TCM (Bit 25) */ + #define R_DMAC0_GRP_CH_CHCFG_TCM_Msk (0x2000000UL) /*!< TCM (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_SBE_Pos (27UL) /*!< SBE (Bit 27) */ + #define R_DMAC0_GRP_CH_CHCFG_SBE_Msk (0x8000000UL) /*!< SBE (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_RSEL_Pos (28UL) /*!< RSEL (Bit 28) */ + #define R_DMAC0_GRP_CH_CHCFG_RSEL_Msk (0x10000000UL) /*!< RSEL (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_RSW_Pos (29UL) /*!< RSW (Bit 29) */ + #define R_DMAC0_GRP_CH_CHCFG_RSW_Msk (0x20000000UL) /*!< RSW (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_REN_Pos (30UL) /*!< REN (Bit 30) */ + #define R_DMAC0_GRP_CH_CHCFG_REN_Msk (0x40000000UL) /*!< REN (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_CH_CHCFG_DMS_Pos (31UL) /*!< DMS (Bit 31) */ + #define R_DMAC0_GRP_CH_CHCFG_DMS_Msk (0x80000000UL) /*!< DMS (Bitfield-Mask: 0x01) */ +/* ======================================================== CHITVL ========================================================= */ + #define R_DMAC0_GRP_CH_CHITVL_ITVL_Pos (0UL) /*!< ITVL (Bit 0) */ + #define R_DMAC0_GRP_CH_CHITVL_ITVL_Msk (0xffffUL) /*!< ITVL (Bitfield-Mask: 0xffff) */ +/* ========================================================= CHEXT ========================================================= */ + #define R_DMAC0_GRP_CH_CHEXT_SPR_Pos (0UL) /*!< SPR (Bit 0) */ + #define R_DMAC0_GRP_CH_CHEXT_SPR_Msk (0x7UL) /*!< SPR (Bitfield-Mask: 0x07) */ + #define R_DMAC0_GRP_CH_CHEXT_SCA_Pos (4UL) /*!< SCA (Bit 4) */ + #define R_DMAC0_GRP_CH_CHEXT_SCA_Msk (0xf0UL) /*!< SCA (Bitfield-Mask: 0x0f) */ + #define R_DMAC0_GRP_CH_CHEXT_DPR_Pos (8UL) /*!< DPR (Bit 8) */ + #define R_DMAC0_GRP_CH_CHEXT_DPR_Msk (0x700UL) /*!< DPR (Bitfield-Mask: 0x07) */ + #define R_DMAC0_GRP_CH_CHEXT_DCA_Pos (12UL) /*!< DCA (Bit 12) */ + #define R_DMAC0_GRP_CH_CHEXT_DCA_Msk (0xf000UL) /*!< DCA (Bitfield-Mask: 0x0f) */ +/* ========================================================= NXLA ========================================================== */ +/* ========================================================= CRLA ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ GRP ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DCTRL ========================================================= */ + #define R_DMAC0_GRP_DCTRL_PR_Pos (0UL) /*!< PR (Bit 0) */ + #define R_DMAC0_GRP_DCTRL_PR_Msk (0x1UL) /*!< PR (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DCTRL_LVINT_Pos (1UL) /*!< LVINT (Bit 1) */ + #define R_DMAC0_GRP_DCTRL_LVINT_Msk (0x2UL) /*!< LVINT (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_EN ======================================================== */ + #define R_DMAC0_GRP_DSTAT_EN_EN00_Pos (0UL) /*!< EN00 (Bit 0) */ + #define R_DMAC0_GRP_DSTAT_EN_EN00_Msk (0x1UL) /*!< EN00 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_EN_EN01_Pos (1UL) /*!< EN01 (Bit 1) */ + #define R_DMAC0_GRP_DSTAT_EN_EN01_Msk (0x2UL) /*!< EN01 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_EN_EN02_Pos (2UL) /*!< EN02 (Bit 2) */ + #define R_DMAC0_GRP_DSTAT_EN_EN02_Msk (0x4UL) /*!< EN02 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_EN_EN03_Pos (3UL) /*!< EN03 (Bit 3) */ + #define R_DMAC0_GRP_DSTAT_EN_EN03_Msk (0x8UL) /*!< EN03 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_EN_EN04_Pos (4UL) /*!< EN04 (Bit 4) */ + #define R_DMAC0_GRP_DSTAT_EN_EN04_Msk (0x10UL) /*!< EN04 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_EN_EN05_Pos (5UL) /*!< EN05 (Bit 5) */ + #define R_DMAC0_GRP_DSTAT_EN_EN05_Msk (0x20UL) /*!< EN05 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_EN_EN06_Pos (6UL) /*!< EN06 (Bit 6) */ + #define R_DMAC0_GRP_DSTAT_EN_EN06_Msk (0x40UL) /*!< EN06 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_EN_EN07_Pos (7UL) /*!< EN07 (Bit 7) */ + #define R_DMAC0_GRP_DSTAT_EN_EN07_Msk (0x80UL) /*!< EN07 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_ER ======================================================== */ + #define R_DMAC0_GRP_DSTAT_ER_ER00_Pos (0UL) /*!< ER00 (Bit 0) */ + #define R_DMAC0_GRP_DSTAT_ER_ER00_Msk (0x1UL) /*!< ER00 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_ER_ER01_Pos (1UL) /*!< ER01 (Bit 1) */ + #define R_DMAC0_GRP_DSTAT_ER_ER01_Msk (0x2UL) /*!< ER01 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_ER_ER02_Pos (2UL) /*!< ER02 (Bit 2) */ + #define R_DMAC0_GRP_DSTAT_ER_ER02_Msk (0x4UL) /*!< ER02 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_ER_ER03_Pos (3UL) /*!< ER03 (Bit 3) */ + #define R_DMAC0_GRP_DSTAT_ER_ER03_Msk (0x8UL) /*!< ER03 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_ER_ER04_Pos (4UL) /*!< ER04 (Bit 4) */ + #define R_DMAC0_GRP_DSTAT_ER_ER04_Msk (0x10UL) /*!< ER04 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_ER_ER05_Pos (5UL) /*!< ER05 (Bit 5) */ + #define R_DMAC0_GRP_DSTAT_ER_ER05_Msk (0x20UL) /*!< ER05 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_ER_ER06_Pos (6UL) /*!< ER06 (Bit 6) */ + #define R_DMAC0_GRP_DSTAT_ER_ER06_Msk (0x40UL) /*!< ER06 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_ER_ER07_Pos (7UL) /*!< ER07 (Bit 7) */ + #define R_DMAC0_GRP_DSTAT_ER_ER07_Msk (0x80UL) /*!< ER07 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_END ======================================================= */ + #define R_DMAC0_GRP_DSTAT_END_END00_Pos (0UL) /*!< END00 (Bit 0) */ + #define R_DMAC0_GRP_DSTAT_END_END00_Msk (0x1UL) /*!< END00 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_END_END01_Pos (1UL) /*!< END01 (Bit 1) */ + #define R_DMAC0_GRP_DSTAT_END_END01_Msk (0x2UL) /*!< END01 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_END_END02_Pos (2UL) /*!< END02 (Bit 2) */ + #define R_DMAC0_GRP_DSTAT_END_END02_Msk (0x4UL) /*!< END02 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_END_END03_Pos (3UL) /*!< END03 (Bit 3) */ + #define R_DMAC0_GRP_DSTAT_END_END03_Msk (0x8UL) /*!< END03 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_END_END04_Pos (4UL) /*!< END04 (Bit 4) */ + #define R_DMAC0_GRP_DSTAT_END_END04_Msk (0x10UL) /*!< END04 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_END_END05_Pos (5UL) /*!< END05 (Bit 5) */ + #define R_DMAC0_GRP_DSTAT_END_END05_Msk (0x20UL) /*!< END05 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_END_END06_Pos (6UL) /*!< END06 (Bit 6) */ + #define R_DMAC0_GRP_DSTAT_END_END06_Msk (0x40UL) /*!< END06 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_END_END07_Pos (7UL) /*!< END07 (Bit 7) */ + #define R_DMAC0_GRP_DSTAT_END_END07_Msk (0x80UL) /*!< END07 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_SUS ======================================================= */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS00_Pos (0UL) /*!< SUS00 (Bit 0) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS00_Msk (0x1UL) /*!< SUS00 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS01_Pos (1UL) /*!< SUS01 (Bit 1) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS01_Msk (0x2UL) /*!< SUS01 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS02_Pos (2UL) /*!< SUS02 (Bit 2) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS02_Msk (0x4UL) /*!< SUS02 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS03_Pos (3UL) /*!< SUS03 (Bit 3) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS03_Msk (0x8UL) /*!< SUS03 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS04_Pos (4UL) /*!< SUS04 (Bit 4) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS04_Msk (0x10UL) /*!< SUS04 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS05_Pos (5UL) /*!< SUS05 (Bit 5) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS05_Msk (0x20UL) /*!< SUS05 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS06_Pos (6UL) /*!< SUS06 (Bit 6) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS06_Msk (0x40UL) /*!< SUS06 (Bitfield-Mask: 0x01) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS07_Pos (7UL) /*!< SUS07 (Bit 7) */ + #define R_DMAC0_GRP_DSTAT_SUS_SUS07_Msk (0x80UL) /*!< SUS07 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ DRCTL ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== L =========================================================== */ + #define R_PORT_NSR_DRCTL_L_DRV0_Pos (0UL) /*!< DRV0 (Bit 0) */ + #define R_PORT_NSR_DRCTL_L_DRV0_Msk (0x3UL) /*!< DRV0 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_PUD0_Pos (2UL) /*!< PUD0 (Bit 2) */ + #define R_PORT_NSR_DRCTL_L_PUD0_Msk (0xcUL) /*!< PUD0 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_SMT0_Pos (4UL) /*!< SMT0 (Bit 4) */ + #define R_PORT_NSR_DRCTL_L_SMT0_Msk (0x10UL) /*!< SMT0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_L_SR0_Pos (5UL) /*!< SR0 (Bit 5) */ + #define R_PORT_NSR_DRCTL_L_SR0_Msk (0x20UL) /*!< SR0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_L_DRV1_Pos (8UL) /*!< DRV1 (Bit 8) */ + #define R_PORT_NSR_DRCTL_L_DRV1_Msk (0x300UL) /*!< DRV1 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_PUD1_Pos (10UL) /*!< PUD1 (Bit 10) */ + #define R_PORT_NSR_DRCTL_L_PUD1_Msk (0xc00UL) /*!< PUD1 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_SMT1_Pos (12UL) /*!< SMT1 (Bit 12) */ + #define R_PORT_NSR_DRCTL_L_SMT1_Msk (0x1000UL) /*!< SMT1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_L_SR1_Pos (13UL) /*!< SR1 (Bit 13) */ + #define R_PORT_NSR_DRCTL_L_SR1_Msk (0x2000UL) /*!< SR1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_L_DRV2_Pos (16UL) /*!< DRV2 (Bit 16) */ + #define R_PORT_NSR_DRCTL_L_DRV2_Msk (0x30000UL) /*!< DRV2 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_PUD2_Pos (18UL) /*!< PUD2 (Bit 18) */ + #define R_PORT_NSR_DRCTL_L_PUD2_Msk (0xc0000UL) /*!< PUD2 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_SMT2_Pos (20UL) /*!< SMT2 (Bit 20) */ + #define R_PORT_NSR_DRCTL_L_SMT2_Msk (0x100000UL) /*!< SMT2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_L_SR2_Pos (21UL) /*!< SR2 (Bit 21) */ + #define R_PORT_NSR_DRCTL_L_SR2_Msk (0x200000UL) /*!< SR2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_L_DRV3_Pos (24UL) /*!< DRV3 (Bit 24) */ + #define R_PORT_NSR_DRCTL_L_DRV3_Msk (0x3000000UL) /*!< DRV3 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_PUD3_Pos (26UL) /*!< PUD3 (Bit 26) */ + #define R_PORT_NSR_DRCTL_L_PUD3_Msk (0xc000000UL) /*!< PUD3 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_L_SMT3_Pos (28UL) /*!< SMT3 (Bit 28) */ + #define R_PORT_NSR_DRCTL_L_SMT3_Msk (0x10000000UL) /*!< SMT3 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_L_SR3_Pos (29UL) /*!< SR3 (Bit 29) */ + #define R_PORT_NSR_DRCTL_L_SR3_Msk (0x20000000UL) /*!< SR3 (Bitfield-Mask: 0x01) */ +/* =========================================================== H =========================================================== */ + #define R_PORT_NSR_DRCTL_H_DRV4_Pos (0UL) /*!< DRV4 (Bit 0) */ + #define R_PORT_NSR_DRCTL_H_DRV4_Msk (0x3UL) /*!< DRV4 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_PUD4_Pos (2UL) /*!< PUD4 (Bit 2) */ + #define R_PORT_NSR_DRCTL_H_PUD4_Msk (0xcUL) /*!< PUD4 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_SMT4_Pos (4UL) /*!< SMT4 (Bit 4) */ + #define R_PORT_NSR_DRCTL_H_SMT4_Msk (0x10UL) /*!< SMT4 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_H_SR4_Pos (5UL) /*!< SR4 (Bit 5) */ + #define R_PORT_NSR_DRCTL_H_SR4_Msk (0x20UL) /*!< SR4 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_H_DRV5_Pos (8UL) /*!< DRV5 (Bit 8) */ + #define R_PORT_NSR_DRCTL_H_DRV5_Msk (0x300UL) /*!< DRV5 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_PUD5_Pos (10UL) /*!< PUD5 (Bit 10) */ + #define R_PORT_NSR_DRCTL_H_PUD5_Msk (0xc00UL) /*!< PUD5 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_SMT5_Pos (12UL) /*!< SMT5 (Bit 12) */ + #define R_PORT_NSR_DRCTL_H_SMT5_Msk (0x1000UL) /*!< SMT5 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_H_SR5_Pos (13UL) /*!< SR5 (Bit 13) */ + #define R_PORT_NSR_DRCTL_H_SR5_Msk (0x2000UL) /*!< SR5 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_H_DRV6_Pos (16UL) /*!< DRV6 (Bit 16) */ + #define R_PORT_NSR_DRCTL_H_DRV6_Msk (0x30000UL) /*!< DRV6 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_PUD6_Pos (18UL) /*!< PUD6 (Bit 18) */ + #define R_PORT_NSR_DRCTL_H_PUD6_Msk (0xc0000UL) /*!< PUD6 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_SMT6_Pos (20UL) /*!< SMT6 (Bit 20) */ + #define R_PORT_NSR_DRCTL_H_SMT6_Msk (0x100000UL) /*!< SMT6 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_H_SR6_Pos (21UL) /*!< SR6 (Bit 21) */ + #define R_PORT_NSR_DRCTL_H_SR6_Msk (0x200000UL) /*!< SR6 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_H_DRV7_Pos (24UL) /*!< DRV7 (Bit 24) */ + #define R_PORT_NSR_DRCTL_H_DRV7_Msk (0x3000000UL) /*!< DRV7 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_PUD7_Pos (26UL) /*!< PUD7 (Bit 26) */ + #define R_PORT_NSR_DRCTL_H_PUD7_Msk (0xc000000UL) /*!< PUD7 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_DRCTL_H_SMT7_Pos (28UL) /*!< SMT7 (Bit 28) */ + #define R_PORT_NSR_DRCTL_H_SMT7_Msk (0x10000000UL) /*!< SMT7 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_DRCTL_H_SR7_Pos (29UL) /*!< SR7 (Bit 29) */ + #define R_PORT_NSR_DRCTL_H_SR7_Msk (0x20000000UL) /*!< SR7 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ ELC_PDBF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== BY =========================================================== */ + #define R_PORT_NSR_ELC_PDBF_BY_PB0_Pos (0UL) /*!< PB0 (Bit 0) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB0_Msk (0x1UL) /*!< PB0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB1_Pos (1UL) /*!< PB1 (Bit 1) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB1_Msk (0x2UL) /*!< PB1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB2_Pos (2UL) /*!< PB2 (Bit 2) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB2_Msk (0x4UL) /*!< PB2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB3_Pos (3UL) /*!< PB3 (Bit 3) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB3_Msk (0x8UL) /*!< PB3 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB4_Pos (4UL) /*!< PB4 (Bit 4) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB4_Msk (0x10UL) /*!< PB4 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB5_Pos (5UL) /*!< PB5 (Bit 5) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB5_Msk (0x20UL) /*!< PB5 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB6_Pos (6UL) /*!< PB6 (Bit 6) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB6_Msk (0x40UL) /*!< PB6 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB7_Pos (7UL) /*!< PB7 (Bit 7) */ + #define R_PORT_NSR_ELC_PDBF_BY_PB7_Msk (0x80UL) /*!< PB7 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ SWTM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== EN =========================================================== */ + #define R_ETHSW_PTP_SWTM_EN_OUTEN_Pos (0UL) /*!< OUTEN (Bit 0) */ + #define R_ETHSW_PTP_SWTM_EN_OUTEN_Msk (0x1UL) /*!< OUTEN (Bitfield-Mask: 0x01) */ +/* ========================================================= STSEC ========================================================= */ + #define R_ETHSW_PTP_SWTM_STSEC_STSEC_Pos (0UL) /*!< STSEC (Bit 0) */ + #define R_ETHSW_PTP_SWTM_STSEC_STSEC_Msk (0xffffffffUL) /*!< STSEC (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= STNS ========================================================== */ + #define R_ETHSW_PTP_SWTM_STNS_STNS_Pos (0UL) /*!< STNS (Bit 0) */ + #define R_ETHSW_PTP_SWTM_STNS_STNS_Msk (0xffffffffUL) /*!< STNS (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= PSEC ========================================================== */ + #define R_ETHSW_PTP_SWTM_PSEC_PSEC_Pos (0UL) /*!< PSEC (Bit 0) */ + #define R_ETHSW_PTP_SWTM_PSEC_PSEC_Msk (0xffffffffUL) /*!< PSEC (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== PNS ========================================================== */ + #define R_ETHSW_PTP_SWTM_PNS_PNS_Pos (0UL) /*!< PNS (Bit 0) */ + #define R_ETHSW_PTP_SWTM_PNS_PNS_Msk (0xffffffffUL) /*!< PNS (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== WTH ========================================================== */ + #define R_ETHSW_PTP_SWTM_WTH_WIDTH_Pos (0UL) /*!< WIDTH (Bit 0) */ + #define R_ETHSW_PTP_SWTM_WTH_WIDTH_Msk (0xffffUL) /*!< WIDTH (Bitfield-Mask: 0xffff) */ +/* ========================================================= MAXP ========================================================== */ + #define R_ETHSW_PTP_SWTM_MAXP_MAXP_Pos (0UL) /*!< MAXP (Bit 0) */ + #define R_ETHSW_PTP_SWTM_MAXP_MAXP_Msk (0xffffffffUL) /*!< MAXP (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== LATSEC ========================================================= */ + #define R_ETHSW_PTP_SWTM_LATSEC_LATSEC_Pos (0UL) /*!< LATSEC (Bit 0) */ + #define R_ETHSW_PTP_SWTM_LATSEC_LATSEC_Msk (0xffffffffUL) /*!< LATSEC (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= LATNS ========================================================= */ + #define R_ETHSW_PTP_SWTM_LATNS_LATNS_Pos (0UL) /*!< LATNS (Bit 0) */ + #define R_ETHSW_PTP_SWTM_LATNS_LATNS_Msk (0xffffffffUL) /*!< LATNS (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ MGMT_ADDR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== lo =========================================================== */ + #define R_ETHSW_MGMT_ADDR_lo_BPDU_DST_Pos (0UL) /*!< BPDU_DST (Bit 0) */ + #define R_ETHSW_MGMT_ADDR_lo_BPDU_DST_Msk (0xffffffffUL) /*!< BPDU_DST (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== hi =========================================================== */ + #define R_ETHSW_MGMT_ADDR_hi_BPDU_DST_Pos (0UL) /*!< BPDU_DST (Bit 0) */ + #define R_ETHSW_MGMT_ADDR_hi_BPDU_DST_Msk (0xffffUL) /*!< BPDU_DST (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_MGMT_ADDR_hi_MASK_Pos (16UL) /*!< MASK (Bit 16) */ + #define R_ETHSW_MGMT_ADDR_hi_MASK_Msk (0xff0000UL) /*!< MASK (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ FMMU ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== L_START_ADR ====================================================== */ + #define R_ESC_FMMU_L_START_ADR_LSTAADR_Pos (0UL) /*!< LSTAADR (Bit 0) */ + #define R_ESC_FMMU_L_START_ADR_LSTAADR_Msk (0xffffffffUL) /*!< LSTAADR (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== LEN ========================================================== */ + #define R_ESC_FMMU_LEN_FMMULEN_Pos (0UL) /*!< FMMULEN (Bit 0) */ + #define R_ESC_FMMU_LEN_FMMULEN_Msk (0xffffUL) /*!< FMMULEN (Bitfield-Mask: 0xffff) */ +/* ====================================================== L_START_BIT ====================================================== */ + #define R_ESC_FMMU_L_START_BIT_LSTABIT_Pos (0UL) /*!< LSTABIT (Bit 0) */ + #define R_ESC_FMMU_L_START_BIT_LSTABIT_Msk (0x7UL) /*!< LSTABIT (Bitfield-Mask: 0x07) */ +/* ====================================================== L_STOP_BIT ======================================================= */ + #define R_ESC_FMMU_L_STOP_BIT_LSTPBIT_Pos (0UL) /*!< LSTPBIT (Bit 0) */ + #define R_ESC_FMMU_L_STOP_BIT_LSTPBIT_Msk (0x7UL) /*!< LSTPBIT (Bitfield-Mask: 0x07) */ +/* ====================================================== P_START_ADR ====================================================== */ + #define R_ESC_FMMU_P_START_ADR_PHYSTAADR_Pos (0UL) /*!< PHYSTAADR (Bit 0) */ + #define R_ESC_FMMU_P_START_ADR_PHYSTAADR_Msk (0xffffUL) /*!< PHYSTAADR (Bitfield-Mask: 0xffff) */ +/* ====================================================== P_START_BIT ====================================================== */ + #define R_ESC_FMMU_P_START_BIT_PHYSTABIT_Pos (0UL) /*!< PHYSTABIT (Bit 0) */ + #define R_ESC_FMMU_P_START_BIT_PHYSTABIT_Msk (0x7UL) /*!< PHYSTABIT (Bitfield-Mask: 0x07) */ +/* ========================================================= TYPE ========================================================== */ + #define R_ESC_FMMU_TYPE_READ_Pos (0UL) /*!< READ (Bit 0) */ + #define R_ESC_FMMU_TYPE_READ_Msk (0x1UL) /*!< READ (Bitfield-Mask: 0x01) */ + #define R_ESC_FMMU_TYPE_WRITE_Pos (1UL) /*!< WRITE (Bit 1) */ + #define R_ESC_FMMU_TYPE_WRITE_Msk (0x2UL) /*!< WRITE (Bitfield-Mask: 0x01) */ +/* ========================================================== ACT ========================================================== */ + #define R_ESC_FMMU_ACT_ACTIVATE_Pos (0UL) /*!< ACTIVATE (Bit 0) */ + #define R_ESC_FMMU_ACT_ACTIVATE_Msk (0x1UL) /*!< ACTIVATE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ SM ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== P_START_ADR ====================================================== */ + #define R_ESC_SM_P_START_ADR_SMSTAADDR_Pos (0UL) /*!< SMSTAADDR (Bit 0) */ + #define R_ESC_SM_P_START_ADR_SMSTAADDR_Msk (0xffffUL) /*!< SMSTAADDR (Bitfield-Mask: 0xffff) */ +/* ========================================================== LEN ========================================================== */ + #define R_ESC_SM_LEN_SMLEN_Pos (0UL) /*!< SMLEN (Bit 0) */ + #define R_ESC_SM_LEN_SMLEN_Msk (0xffffUL) /*!< SMLEN (Bitfield-Mask: 0xffff) */ +/* ======================================================== CONTROL ======================================================== */ + #define R_ESC_SM_CONTROL_OPEMODE_Pos (0UL) /*!< OPEMODE (Bit 0) */ + #define R_ESC_SM_CONTROL_OPEMODE_Msk (0x3UL) /*!< OPEMODE (Bitfield-Mask: 0x03) */ + #define R_ESC_SM_CONTROL_DIR_Pos (2UL) /*!< DIR (Bit 2) */ + #define R_ESC_SM_CONTROL_DIR_Msk (0xcUL) /*!< DIR (Bitfield-Mask: 0x03) */ + #define R_ESC_SM_CONTROL_IRQECAT_Pos (4UL) /*!< IRQECAT (Bit 4) */ + #define R_ESC_SM_CONTROL_IRQECAT_Msk (0x10UL) /*!< IRQECAT (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_CONTROL_IRQPDI_Pos (5UL) /*!< IRQPDI (Bit 5) */ + #define R_ESC_SM_CONTROL_IRQPDI_Msk (0x20UL) /*!< IRQPDI (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_CONTROL_WDTRGEN_Pos (6UL) /*!< WDTRGEN (Bit 6) */ + #define R_ESC_SM_CONTROL_WDTRGEN_Msk (0x40UL) /*!< WDTRGEN (Bitfield-Mask: 0x01) */ +/* ======================================================== STATUS ========================================================= */ + #define R_ESC_SM_STATUS_INTWR_Pos (0UL) /*!< INTWR (Bit 0) */ + #define R_ESC_SM_STATUS_INTWR_Msk (0x1UL) /*!< INTWR (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_STATUS_INTRD_Pos (1UL) /*!< INTRD (Bit 1) */ + #define R_ESC_SM_STATUS_INTRD_Msk (0x2UL) /*!< INTRD (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_STATUS_MAILBOX_Pos (3UL) /*!< MAILBOX (Bit 3) */ + #define R_ESC_SM_STATUS_MAILBOX_Msk (0x8UL) /*!< MAILBOX (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_STATUS_BUFFERED_Pos (4UL) /*!< BUFFERED (Bit 4) */ + #define R_ESC_SM_STATUS_BUFFERED_Msk (0x30UL) /*!< BUFFERED (Bitfield-Mask: 0x03) */ + #define R_ESC_SM_STATUS_RDBUF_Pos (6UL) /*!< RDBUF (Bit 6) */ + #define R_ESC_SM_STATUS_RDBUF_Msk (0x40UL) /*!< RDBUF (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_STATUS_WRBUF_Pos (7UL) /*!< WRBUF (Bit 7) */ + #define R_ESC_SM_STATUS_WRBUF_Msk (0x80UL) /*!< WRBUF (Bitfield-Mask: 0x01) */ +/* ========================================================== ACT ========================================================== */ + #define R_ESC_SM_ACT_SMEN_Pos (0UL) /*!< SMEN (Bit 0) */ + #define R_ESC_SM_ACT_SMEN_Msk (0x1UL) /*!< SMEN (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_ACT_REPEATREQ_Pos (1UL) /*!< REPEATREQ (Bit 1) */ + #define R_ESC_SM_ACT_REPEATREQ_Msk (0x2UL) /*!< REPEATREQ (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_ACT_LATCHECAT_Pos (6UL) /*!< LATCHECAT (Bit 6) */ + #define R_ESC_SM_ACT_LATCHECAT_Msk (0x40UL) /*!< LATCHECAT (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_ACT_LATCHPDI_Pos (7UL) /*!< LATCHPDI (Bit 7) */ + #define R_ESC_SM_ACT_LATCHPDI_Msk (0x80UL) /*!< LATCHPDI (Bitfield-Mask: 0x01) */ +/* ======================================================= PDI_CONT ======================================================== */ + #define R_ESC_SM_PDI_CONT_DEACTIVE_Pos (0UL) /*!< DEACTIVE (Bit 0) */ + #define R_ESC_SM_PDI_CONT_DEACTIVE_Msk (0x1UL) /*!< DEACTIVE (Bitfield-Mask: 0x01) */ + #define R_ESC_SM_PDI_CONT_REPEATACK_Pos (1UL) /*!< REPEATACK (Bit 1) */ + #define R_ESC_SM_PDI_CONT_REPEATACK_Msk (0x2UL) /*!< REPEATACK (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ PIPE_TR ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== E =========================================================== */ + #define R_USBF_PIPE_TR_E_TRCLR_Pos (8UL) /*!< TRCLR (Bit 8) */ + #define R_USBF_PIPE_TR_E_TRCLR_Msk (0x100UL) /*!< TRCLR (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_TR_E_TRENB_Pos (9UL) /*!< TRENB (Bit 9) */ + #define R_USBF_PIPE_TR_E_TRENB_Msk (0x200UL) /*!< TRENB (Bitfield-Mask: 0x01) */ +/* =========================================================== N =========================================================== */ + #define R_USBF_PIPE_TR_N_TRNCNT_Pos (0UL) /*!< TRNCNT (Bit 0) */ + #define R_USBF_PIPE_TR_N_TRNCNT_Msk (0xffffUL) /*!< TRNCNT (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ N ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== SA =========================================================== */ + #define R_USBF_CHa_N_SA_SAWD_Pos (0UL) /*!< SAWD (Bit 0) */ + #define R_USBF_CHa_N_SA_SAWD_Msk (0xffffffffUL) /*!< SAWD (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== DA =========================================================== */ + #define R_USBF_CHa_N_DA_DA_Pos (0UL) /*!< DA (Bit 0) */ + #define R_USBF_CHa_N_DA_DA_Msk (0xffffffffUL) /*!< DA (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== TB =========================================================== */ + #define R_USBF_CHa_N_TB_TB_Pos (0UL) /*!< TB (Bit 0) */ + #define R_USBF_CHa_N_TB_TB_Msk (0xffffffffUL) /*!< TB (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ CHa ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CRSA ========================================================== */ + #define R_USBF_CHa_CRSA_CRSA_Pos (0UL) /*!< CRSA (Bit 0) */ + #define R_USBF_CHa_CRSA_CRSA_Msk (0xffffffffUL) /*!< CRSA (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= CRDA ========================================================== */ + #define R_USBF_CHa_CRDA_CRDA_Pos (0UL) /*!< CRDA (Bit 0) */ + #define R_USBF_CHa_CRDA_CRDA_Msk (0xffffffffUL) /*!< CRDA (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= CRTB ========================================================== */ + #define R_USBF_CHa_CRTB_CRTB_Pos (0UL) /*!< CRTB (Bit 0) */ + #define R_USBF_CHa_CRTB_CRTB_Msk (0xffffffffUL) /*!< CRTB (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CHSTAT ========================================================= */ + #define R_USBF_CHa_CHSTAT_EN_Pos (0UL) /*!< EN (Bit 0) */ + #define R_USBF_CHa_CHSTAT_EN_Msk (0x1UL) /*!< EN (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_RQST_Pos (1UL) /*!< RQST (Bit 1) */ + #define R_USBF_CHa_CHSTAT_RQST_Msk (0x2UL) /*!< RQST (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_TACT_Pos (2UL) /*!< TACT (Bit 2) */ + #define R_USBF_CHa_CHSTAT_TACT_Msk (0x4UL) /*!< TACT (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_SUS_Pos (3UL) /*!< SUS (Bit 3) */ + #define R_USBF_CHa_CHSTAT_SUS_Msk (0x8UL) /*!< SUS (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_ER_Pos (4UL) /*!< ER (Bit 4) */ + #define R_USBF_CHa_CHSTAT_ER_Msk (0x10UL) /*!< ER (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_END_Pos (5UL) /*!< END (Bit 5) */ + #define R_USBF_CHa_CHSTAT_END_Msk (0x20UL) /*!< END (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_TC_Pos (6UL) /*!< TC (Bit 6) */ + #define R_USBF_CHa_CHSTAT_TC_Msk (0x40UL) /*!< TC (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_SR_Pos (7UL) /*!< SR (Bit 7) */ + #define R_USBF_CHa_CHSTAT_SR_Msk (0x80UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_DL_Pos (8UL) /*!< DL (Bit 8) */ + #define R_USBF_CHa_CHSTAT_DL_Msk (0x100UL) /*!< DL (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_DW_Pos (9UL) /*!< DW (Bit 9) */ + #define R_USBF_CHa_CHSTAT_DW_Msk (0x200UL) /*!< DW (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_DER_Pos (10UL) /*!< DER (Bit 10) */ + #define R_USBF_CHa_CHSTAT_DER_Msk (0x400UL) /*!< DER (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_MODE_Pos (11UL) /*!< MODE (Bit 11) */ + #define R_USBF_CHa_CHSTAT_MODE_Msk (0x800UL) /*!< MODE (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_INTM_Pos (16UL) /*!< INTM (Bit 16) */ + #define R_USBF_CHa_CHSTAT_INTM_Msk (0x10000UL) /*!< INTM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_DMARQM_Pos (17UL) /*!< DMARQM (Bit 17) */ + #define R_USBF_CHa_CHSTAT_DMARQM_Msk (0x20000UL) /*!< DMARQM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_SWPRQ_Pos (18UL) /*!< SWPRQ (Bit 18) */ + #define R_USBF_CHa_CHSTAT_SWPRQ_Msk (0x40000UL) /*!< SWPRQ (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHSTAT_DNUM_Pos (24UL) /*!< DNUM (Bit 24) */ + #define R_USBF_CHa_CHSTAT_DNUM_Msk (0xff000000UL) /*!< DNUM (Bitfield-Mask: 0xff) */ +/* ======================================================== CHCTRL ========================================================= */ + #define R_USBF_CHa_CHCTRL_SETEN_Pos (0UL) /*!< SETEN (Bit 0) */ + #define R_USBF_CHa_CHCTRL_SETEN_Msk (0x1UL) /*!< SETEN (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLREN_Pos (1UL) /*!< CLREN (Bit 1) */ + #define R_USBF_CHa_CHCTRL_CLREN_Msk (0x2UL) /*!< CLREN (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_STG_Pos (2UL) /*!< STG (Bit 2) */ + #define R_USBF_CHa_CHCTRL_STG_Msk (0x4UL) /*!< STG (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_SWRST_Pos (3UL) /*!< SWRST (Bit 3) */ + #define R_USBF_CHa_CHCTRL_SWRST_Msk (0x8UL) /*!< SWRST (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLRRQ_Pos (4UL) /*!< CLRRQ (Bit 4) */ + #define R_USBF_CHa_CHCTRL_CLRRQ_Msk (0x10UL) /*!< CLRRQ (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLREND_Pos (5UL) /*!< CLREND (Bit 5) */ + #define R_USBF_CHa_CHCTRL_CLREND_Msk (0x20UL) /*!< CLREND (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLRTC_Pos (6UL) /*!< CLRTC (Bit 6) */ + #define R_USBF_CHa_CHCTRL_CLRTC_Msk (0x40UL) /*!< CLRTC (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLRDER_Pos (7UL) /*!< CLRDER (Bit 7) */ + #define R_USBF_CHa_CHCTRL_CLRDER_Msk (0x80UL) /*!< CLRDER (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_SETSUS_Pos (8UL) /*!< SETSUS (Bit 8) */ + #define R_USBF_CHa_CHCTRL_SETSUS_Msk (0x100UL) /*!< SETSUS (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLRSUS_Pos (9UL) /*!< CLRSUS (Bit 9) */ + #define R_USBF_CHa_CHCTRL_CLRSUS_Msk (0x200UL) /*!< CLRSUS (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_SETREN_Pos (12UL) /*!< SETREN (Bit 12) */ + #define R_USBF_CHa_CHCTRL_SETREN_Msk (0x1000UL) /*!< SETREN (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_SETSSWPRQ_Pos (14UL) /*!< SETSSWPRQ (Bit 14) */ + #define R_USBF_CHa_CHCTRL_SETSSWPRQ_Msk (0x4000UL) /*!< SETSSWPRQ (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_SETINTM_Pos (16UL) /*!< SETINTM (Bit 16) */ + #define R_USBF_CHa_CHCTRL_SETINTM_Msk (0x10000UL) /*!< SETINTM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLRINTM_Pos (17UL) /*!< CLRINTM (Bit 17) */ + #define R_USBF_CHa_CHCTRL_CLRINTM_Msk (0x20000UL) /*!< CLRINTM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_SETDMARQM_Pos (18UL) /*!< SETDMARQM (Bit 18) */ + #define R_USBF_CHa_CHCTRL_SETDMARQM_Msk (0x40000UL) /*!< SETDMARQM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCTRL_CLRDMARQM_Pos (19UL) /*!< CLRDMARQM (Bit 19) */ + #define R_USBF_CHa_CHCTRL_CLRDMARQM_Msk (0x80000UL) /*!< CLRDMARQM (Bitfield-Mask: 0x01) */ +/* ========================================================= CHCFG ========================================================= */ + #define R_USBF_CHa_CHCFG_SEL_Pos (0UL) /*!< SEL (Bit 0) */ + #define R_USBF_CHa_CHCFG_SEL_Msk (0x1UL) /*!< SEL (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_REQD_Pos (3UL) /*!< REQD (Bit 3) */ + #define R_USBF_CHa_CHCFG_REQD_Msk (0x8UL) /*!< REQD (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_LOEN_Pos (4UL) /*!< LOEN (Bit 4) */ + #define R_USBF_CHa_CHCFG_LOEN_Msk (0x10UL) /*!< LOEN (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_HIEN_Pos (5UL) /*!< HIEN (Bit 5) */ + #define R_USBF_CHa_CHCFG_HIEN_Msk (0x20UL) /*!< HIEN (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_LVL_Pos (6UL) /*!< LVL (Bit 6) */ + #define R_USBF_CHa_CHCFG_LVL_Msk (0x40UL) /*!< LVL (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_AM_Pos (8UL) /*!< AM (Bit 8) */ + #define R_USBF_CHa_CHCFG_AM_Msk (0x700UL) /*!< AM (Bitfield-Mask: 0x07) */ + #define R_USBF_CHa_CHCFG_DRRP_Pos (11UL) /*!< DRRP (Bit 11) */ + #define R_USBF_CHa_CHCFG_DRRP_Msk (0x800UL) /*!< DRRP (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_SDS_Pos (12UL) /*!< SDS (Bit 12) */ + #define R_USBF_CHa_CHCFG_SDS_Msk (0xf000UL) /*!< SDS (Bitfield-Mask: 0x0f) */ + #define R_USBF_CHa_CHCFG_DDS_Pos (16UL) /*!< DDS (Bit 16) */ + #define R_USBF_CHa_CHCFG_DDS_Msk (0xf0000UL) /*!< DDS (Bitfield-Mask: 0x0f) */ + #define R_USBF_CHa_CHCFG_SAD_Pos (20UL) /*!< SAD (Bit 20) */ + #define R_USBF_CHa_CHCFG_SAD_Msk (0x100000UL) /*!< SAD (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_DAD_Pos (21UL) /*!< DAD (Bit 21) */ + #define R_USBF_CHa_CHCFG_DAD_Msk (0x200000UL) /*!< DAD (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_TM_Pos (22UL) /*!< TM (Bit 22) */ + #define R_USBF_CHa_CHCFG_TM_Msk (0x400000UL) /*!< TM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_WONLY_Pos (23UL) /*!< WONLY (Bit 23) */ + #define R_USBF_CHa_CHCFG_WONLY_Msk (0x800000UL) /*!< WONLY (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_DEM_Pos (24UL) /*!< DEM (Bit 24) */ + #define R_USBF_CHa_CHCFG_DEM_Msk (0x1000000UL) /*!< DEM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_DIM_Pos (26UL) /*!< DIM (Bit 26) */ + #define R_USBF_CHa_CHCFG_DIM_Msk (0x4000000UL) /*!< DIM (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_SBE_Pos (27UL) /*!< SBE (Bit 27) */ + #define R_USBF_CHa_CHCFG_SBE_Msk (0x8000000UL) /*!< SBE (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_RSEL_Pos (28UL) /*!< RSEL (Bit 28) */ + #define R_USBF_CHa_CHCFG_RSEL_Msk (0x10000000UL) /*!< RSEL (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_RSW_Pos (29UL) /*!< RSW (Bit 29) */ + #define R_USBF_CHa_CHCFG_RSW_Msk (0x20000000UL) /*!< RSW (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_REN_Pos (30UL) /*!< REN (Bit 30) */ + #define R_USBF_CHa_CHCFG_REN_Msk (0x40000000UL) /*!< REN (Bitfield-Mask: 0x01) */ + #define R_USBF_CHa_CHCFG_DMS_Pos (31UL) /*!< DMS (Bit 31) */ + #define R_USBF_CHa_CHCFG_DMS_Msk (0x80000000UL) /*!< DMS (Bitfield-Mask: 0x01) */ +/* ======================================================== CHITVL ========================================================= */ + #define R_USBF_CHa_CHITVL_ITVL_Pos (0UL) /*!< ITVL (Bit 0) */ + #define R_USBF_CHa_CHITVL_ITVL_Msk (0xffffUL) /*!< ITVL (Bitfield-Mask: 0xffff) */ +/* ========================================================= CHEXT ========================================================= */ + #define R_USBF_CHa_CHEXT_SPR_Pos (0UL) /*!< SPR (Bit 0) */ + #define R_USBF_CHa_CHEXT_SPR_Msk (0xfUL) /*!< SPR (Bitfield-Mask: 0x0f) */ + #define R_USBF_CHa_CHEXT_DPR_Pos (8UL) /*!< DPR (Bit 8) */ + #define R_USBF_CHa_CHEXT_DPR_Msk (0xf00UL) /*!< DPR (Bitfield-Mask: 0x0f) */ +/* ========================================================= NXLA ========================================================== */ + #define R_USBF_CHa_NXLA_NXLA_Pos (0UL) /*!< NXLA (Bit 0) */ + #define R_USBF_CHa_NXLA_NXLA_Msk (0xffffffffUL) /*!< NXLA (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= CRLA ========================================================== */ + #define R_USBF_CHa_CRLA_CRLA_Pos (0UL) /*!< CRLA (Bit 0) */ + #define R_USBF_CHa_CRLA_CRLA_Msk (0xffffffffUL) /*!< CRLA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ CHb ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SCNT ========================================================== */ + #define R_USBF_CHb_SCNT_SCNT_Pos (0UL) /*!< SCNT (Bit 0) */ + #define R_USBF_CHb_SCNT_SCNT_Msk (0xffffffffUL) /*!< SCNT (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= SSKP ========================================================== */ + #define R_USBF_CHb_SSKP_SSKP_Pos (0UL) /*!< SSKP (Bit 0) */ + #define R_USBF_CHb_SSKP_SSKP_Msk (0xffffffffUL) /*!< SSKP (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= DCNT ========================================================== */ + #define R_USBF_CHb_DCNT_DCNT_Pos (0UL) /*!< DCNT (Bit 0) */ + #define R_USBF_CHb_DCNT_DCNT_Msk (0xffffffffUL) /*!< DCNT (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= DSKP ========================================================== */ + #define R_USBF_CHb_DSKP_DSKP_Pos (0UL) /*!< DSKP (Bit 0) */ + #define R_USBF_CHb_DSKP_DSKP_Msk (0xffffffffUL) /*!< DSKP (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ CSa ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CMCFG0 ========================================================= */ + #define R_XSPI0_CSa_CMCFG0_FFMT_Pos (0UL) /*!< FFMT (Bit 0) */ + #define R_XSPI0_CSa_CMCFG0_FFMT_Msk (0x3UL) /*!< FFMT (Bitfield-Mask: 0x03) */ + #define R_XSPI0_CSa_CMCFG0_ADDSIZE_Pos (2UL) /*!< ADDSIZE (Bit 2) */ + #define R_XSPI0_CSa_CMCFG0_ADDSIZE_Msk (0xcUL) /*!< ADDSIZE (Bitfield-Mask: 0x03) */ + #define R_XSPI0_CSa_CMCFG0_ADDRPEN_Pos (16UL) /*!< ADDRPEN (Bit 16) */ + #define R_XSPI0_CSa_CMCFG0_ADDRPEN_Msk (0xff0000UL) /*!< ADDRPEN (Bitfield-Mask: 0xff) */ + #define R_XSPI0_CSa_CMCFG0_ADDRPCD_Pos (24UL) /*!< ADDRPCD (Bit 24) */ + #define R_XSPI0_CSa_CMCFG0_ADDRPCD_Msk (0xff000000UL) /*!< ADDRPCD (Bitfield-Mask: 0xff) */ +/* ======================================================== CMCFG1 ========================================================= */ + #define R_XSPI0_CSa_CMCFG1_RDCMD_Pos (0UL) /*!< RDCMD (Bit 0) */ + #define R_XSPI0_CSa_CMCFG1_RDCMD_Msk (0xffffUL) /*!< RDCMD (Bitfield-Mask: 0xffff) */ + #define R_XSPI0_CSa_CMCFG1_RDLATE_Pos (16UL) /*!< RDLATE (Bit 16) */ + #define R_XSPI0_CSa_CMCFG1_RDLATE_Msk (0x1f0000UL) /*!< RDLATE (Bitfield-Mask: 0x1f) */ +/* ======================================================== CMCFG2 ========================================================= */ + #define R_XSPI0_CSa_CMCFG2_WRCMD_Pos (0UL) /*!< WRCMD (Bit 0) */ + #define R_XSPI0_CSa_CMCFG2_WRCMD_Msk (0xffffUL) /*!< WRCMD (Bitfield-Mask: 0xffff) */ + #define R_XSPI0_CSa_CMCFG2_WRLATE_Pos (16UL) /*!< WRLATE (Bit 16) */ + #define R_XSPI0_CSa_CMCFG2_WRLATE_Msk (0x1f0000UL) /*!< WRLATE (Bitfield-Mask: 0x1f) */ + +/* =========================================================================================================================== */ +/* ================ BUF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== CDT ========================================================== */ + #define R_XSPI0_BUF_CDT_CMDSIZE_Pos (0UL) /*!< CMDSIZE (Bit 0) */ + #define R_XSPI0_BUF_CDT_CMDSIZE_Msk (0x3UL) /*!< CMDSIZE (Bitfield-Mask: 0x03) */ + #define R_XSPI0_BUF_CDT_ADDSIZE_Pos (2UL) /*!< ADDSIZE (Bit 2) */ + #define R_XSPI0_BUF_CDT_ADDSIZE_Msk (0x1cUL) /*!< ADDSIZE (Bitfield-Mask: 0x07) */ + #define R_XSPI0_BUF_CDT_DATASIZE_Pos (5UL) /*!< DATASIZE (Bit 5) */ + #define R_XSPI0_BUF_CDT_DATASIZE_Msk (0x1e0UL) /*!< DATASIZE (Bitfield-Mask: 0x0f) */ + #define R_XSPI0_BUF_CDT_LATE_Pos (9UL) /*!< LATE (Bit 9) */ + #define R_XSPI0_BUF_CDT_LATE_Msk (0x3e00UL) /*!< LATE (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_BUF_CDT_TRTYPE_Pos (15UL) /*!< TRTYPE (Bit 15) */ + #define R_XSPI0_BUF_CDT_TRTYPE_Msk (0x8000UL) /*!< TRTYPE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_BUF_CDT_CMD_Pos (16UL) /*!< CMD (Bit 16) */ + #define R_XSPI0_BUF_CDT_CMD_Msk (0xffff0000UL) /*!< CMD (Bitfield-Mask: 0xffff) */ +/* ========================================================== CDA ========================================================== */ + #define R_XSPI0_BUF_CDA_ADD_Pos (0UL) /*!< ADD (Bit 0) */ + #define R_XSPI0_BUF_CDA_ADD_Msk (0xffffffffUL) /*!< ADD (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= CDD0 ========================================================== */ + #define R_XSPI0_BUF_CDD0_DATA_Pos (0UL) /*!< DATA (Bit 0) */ + #define R_XSPI0_BUF_CDD0_DATA_Msk (0xffffffffUL) /*!< DATA (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= CDD1 ========================================================== */ + #define R_XSPI0_BUF_CDD1_DATA_Pos (0UL) /*!< DATA (Bit 0) */ + #define R_XSPI0_BUF_CDD1_DATA_Msk (0xffffffffUL) /*!< DATA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ CSb ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CCCTL0 ========================================================= */ + #define R_XSPI0_CSb_CCCTL0_CAEN_Pos (0UL) /*!< CAEN (Bit 0) */ + #define R_XSPI0_CSb_CCCTL0_CAEN_Msk (0x1UL) /*!< CAEN (Bitfield-Mask: 0x01) */ + #define R_XSPI0_CSb_CCCTL0_CANOWR_Pos (1UL) /*!< CANOWR (Bit 1) */ + #define R_XSPI0_CSb_CCCTL0_CANOWR_Msk (0x2UL) /*!< CANOWR (Bitfield-Mask: 0x01) */ + #define R_XSPI0_CSb_CCCTL0_CAITV_Pos (8UL) /*!< CAITV (Bit 8) */ + #define R_XSPI0_CSb_CCCTL0_CAITV_Msk (0x1f00UL) /*!< CAITV (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_CSb_CCCTL0_CASFTSTA_Pos (16UL) /*!< CASFTSTA (Bit 16) */ + #define R_XSPI0_CSb_CCCTL0_CASFTSTA_Msk (0x1f0000UL) /*!< CASFTSTA (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_CSb_CCCTL0_CASFTEND_Pos (24UL) /*!< CASFTEND (Bit 24) */ + #define R_XSPI0_CSb_CCCTL0_CASFTEND_Msk (0x1f000000UL) /*!< CASFTEND (Bitfield-Mask: 0x1f) */ +/* ======================================================== CCCTL1 ========================================================= */ + #define R_XSPI0_CSb_CCCTL1_CACMDSIZE_Pos (0UL) /*!< CACMDSIZE (Bit 0) */ + #define R_XSPI0_CSb_CCCTL1_CACMDSIZE_Msk (0x3UL) /*!< CACMDSIZE (Bitfield-Mask: 0x03) */ + #define R_XSPI0_CSb_CCCTL1_CAADDSIZE_Pos (2UL) /*!< CAADDSIZE (Bit 2) */ + #define R_XSPI0_CSb_CCCTL1_CAADDSIZE_Msk (0x1cUL) /*!< CAADDSIZE (Bitfield-Mask: 0x07) */ + #define R_XSPI0_CSb_CCCTL1_CADATASIZE_Pos (5UL) /*!< CADATASIZE (Bit 5) */ + #define R_XSPI0_CSb_CCCTL1_CADATASIZE_Msk (0x1e0UL) /*!< CADATASIZE (Bitfield-Mask: 0x0f) */ + #define R_XSPI0_CSb_CCCTL1_CAWRLATE_Pos (16UL) /*!< CAWRLATE (Bit 16) */ + #define R_XSPI0_CSb_CCCTL1_CAWRLATE_Msk (0x1f0000UL) /*!< CAWRLATE (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_CSb_CCCTL1_CARDLATE_Pos (24UL) /*!< CARDLATE (Bit 24) */ + #define R_XSPI0_CSb_CCCTL1_CARDLATE_Msk (0x1f000000UL) /*!< CARDLATE (Bitfield-Mask: 0x1f) */ +/* ======================================================== CCCTL2 ========================================================= */ + #define R_XSPI0_CSb_CCCTL2_CAWRCMD_Pos (0UL) /*!< CAWRCMD (Bit 0) */ + #define R_XSPI0_CSb_CCCTL2_CAWRCMD_Msk (0xffffUL) /*!< CAWRCMD (Bitfield-Mask: 0xffff) */ + #define R_XSPI0_CSb_CCCTL2_CARDCMD_Pos (16UL) /*!< CARDCMD (Bit 16) */ + #define R_XSPI0_CSb_CCCTL2_CARDCMD_Msk (0xffff0000UL) /*!< CARDCMD (Bitfield-Mask: 0xffff) */ +/* ======================================================== CCCTL3 ========================================================= */ + #define R_XSPI0_CSb_CCCTL3_CAADD_Pos (0UL) /*!< CAADD (Bit 0) */ + #define R_XSPI0_CSb_CCCTL3_CAADD_Msk (0xffffffffUL) /*!< CAADD (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CCCTL4 ========================================================= */ + #define R_XSPI0_CSb_CCCTL4_CADATA_Pos (0UL) /*!< CADATA (Bit 0) */ + #define R_XSPI0_CSb_CCCTL4_CADATA_Msk (0xffffffffUL) /*!< CADATA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CCCTL5 ========================================================= */ + #define R_XSPI0_CSb_CCCTL5_CADATA_Pos (0UL) /*!< CADATA (Bit 0) */ + #define R_XSPI0_CSb_CCCTL5_CADATA_Msk (0xffffffffUL) /*!< CADATA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CCCTL6 ========================================================= */ + #define R_XSPI0_CSb_CCCTL6_CADATA_Pos (0UL) /*!< CADATA (Bit 0) */ + #define R_XSPI0_CSb_CCCTL6_CADATA_Msk (0xffffffffUL) /*!< CADATA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CCCTL7 ========================================================= */ + #define R_XSPI0_CSb_CCCTL7_CADATA_Pos (0UL) /*!< CADATA (Bit 0) */ + #define R_XSPI0_CSb_CCCTL7_CADATA_Msk (0xffffffffUL) /*!< CADATA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ W ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= EC710CTL ======================================================== */ + #define R_SYSRAM0_W_EC710CTL_ECEMF_Pos (0UL) /*!< ECEMF (Bit 0) */ + #define R_SYSRAM0_W_EC710CTL_ECEMF_Msk (0x1UL) /*!< ECEMF (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_ECER1F_Pos (1UL) /*!< ECER1F (Bit 1) */ + #define R_SYSRAM0_W_EC710CTL_ECER1F_Msk (0x2UL) /*!< ECER1F (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_ECER2F_Pos (2UL) /*!< ECER2F (Bit 2) */ + #define R_SYSRAM0_W_EC710CTL_ECER2F_Msk (0x4UL) /*!< ECER2F (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_EC1EDIC_Pos (3UL) /*!< EC1EDIC (Bit 3) */ + #define R_SYSRAM0_W_EC710CTL_EC1EDIC_Msk (0x8UL) /*!< EC1EDIC (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_EC2EDIC_Pos (4UL) /*!< EC2EDIC (Bit 4) */ + #define R_SYSRAM0_W_EC710CTL_EC2EDIC_Msk (0x10UL) /*!< EC2EDIC (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_EC1ECP_Pos (5UL) /*!< EC1ECP (Bit 5) */ + #define R_SYSRAM0_W_EC710CTL_EC1ECP_Msk (0x20UL) /*!< EC1ECP (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_ECERVF_Pos (6UL) /*!< ECERVF (Bit 6) */ + #define R_SYSRAM0_W_EC710CTL_ECERVF_Msk (0x40UL) /*!< ECERVF (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_ECTHM_Pos (7UL) /*!< ECTHM (Bit 7) */ + #define R_SYSRAM0_W_EC710CTL_ECTHM_Msk (0x80UL) /*!< ECTHM (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_ECER1C_Pos (9UL) /*!< ECER1C (Bit 9) */ + #define R_SYSRAM0_W_EC710CTL_ECER1C_Msk (0x200UL) /*!< ECER1C (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_ECER2C_Pos (10UL) /*!< ECER2C (Bit 10) */ + #define R_SYSRAM0_W_EC710CTL_ECER2C_Msk (0x400UL) /*!< ECER2C (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_ECOVFF_Pos (11UL) /*!< ECOVFF (Bit 11) */ + #define R_SYSRAM0_W_EC710CTL_ECOVFF_Msk (0x800UL) /*!< ECOVFF (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710CTL_EMCA_Pos (14UL) /*!< EMCA (Bit 14) */ + #define R_SYSRAM0_W_EC710CTL_EMCA_Msk (0xc000UL) /*!< EMCA (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF0_Pos (16UL) /*!< ECEDF0 (Bit 16) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF0_Msk (0x30000UL) /*!< ECEDF0 (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF1_Pos (18UL) /*!< ECEDF1 (Bit 18) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF1_Msk (0xc0000UL) /*!< ECEDF1 (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF2_Pos (20UL) /*!< ECEDF2 (Bit 20) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF2_Msk (0x300000UL) /*!< ECEDF2 (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF3_Pos (22UL) /*!< ECEDF3 (Bit 22) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF3_Msk (0xc00000UL) /*!< ECEDF3 (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF4_Pos (24UL) /*!< ECEDF4 (Bit 24) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF4_Msk (0x3000000UL) /*!< ECEDF4 (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF5_Pos (26UL) /*!< ECEDF5 (Bit 26) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF5_Msk (0xc000000UL) /*!< ECEDF5 (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF6_Pos (28UL) /*!< ECEDF6 (Bit 28) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF6_Msk (0x30000000UL) /*!< ECEDF6 (Bitfield-Mask: 0x03) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF7_Pos (30UL) /*!< ECEDF7 (Bit 30) */ + #define R_SYSRAM0_W_EC710CTL_ECEDF7_Msk (0xc0000000UL) /*!< ECEDF7 (Bitfield-Mask: 0x03) */ +/* ======================================================= EC710TMC ======================================================== */ + #define R_SYSRAM0_W_EC710TMC_ECREIS_Pos (0UL) /*!< ECREIS (Bit 0) */ + #define R_SYSRAM0_W_EC710TMC_ECREIS_Msk (0x1UL) /*!< ECREIS (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710TMC_ECDCS_Pos (1UL) /*!< ECDCS (Bit 1) */ + #define R_SYSRAM0_W_EC710TMC_ECDCS_Msk (0x2UL) /*!< ECDCS (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710TMC_ECENS_Pos (2UL) /*!< ECENS (Bit 2) */ + #define R_SYSRAM0_W_EC710TMC_ECENS_Msk (0x4UL) /*!< ECENS (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710TMC_ECREOS_Pos (3UL) /*!< ECREOS (Bit 3) */ + #define R_SYSRAM0_W_EC710TMC_ECREOS_Msk (0x8UL) /*!< ECREOS (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710TMC_ECTRRS_Pos (4UL) /*!< ECTRRS (Bit 4) */ + #define R_SYSRAM0_W_EC710TMC_ECTRRS_Msk (0x10UL) /*!< ECTRRS (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710TMC_ECTMCE_Pos (7UL) /*!< ECTMCE (Bit 7) */ + #define R_SYSRAM0_W_EC710TMC_ECTMCE_Msk (0x80UL) /*!< ECTMCE (Bitfield-Mask: 0x01) */ + #define R_SYSRAM0_W_EC710TMC_ETMA_Pos (14UL) /*!< ETMA (Bit 14) */ + #define R_SYSRAM0_W_EC710TMC_ETMA_Msk (0xc000UL) /*!< ETMA (Bitfield-Mask: 0x03) */ +/* ======================================================= EC710TRC ======================================================== */ + #define R_SYSRAM0_W_EC710TRC_ECERDB_Pos (0UL) /*!< ECERDB (Bit 0) */ + #define R_SYSRAM0_W_EC710TRC_ECERDB_Msk (0x7fUL) /*!< ECERDB (Bitfield-Mask: 0x7f) */ + #define R_SYSRAM0_W_EC710TRC_ECECRD_Pos (8UL) /*!< ECECRD (Bit 8) */ + #define R_SYSRAM0_W_EC710TRC_ECECRD_Msk (0x7f00UL) /*!< ECECRD (Bitfield-Mask: 0x7f) */ + #define R_SYSRAM0_W_EC710TRC_ECHORD_Pos (16UL) /*!< ECHORD (Bit 16) */ + #define R_SYSRAM0_W_EC710TRC_ECHORD_Msk (0x7f0000UL) /*!< ECHORD (Bitfield-Mask: 0x7f) */ + #define R_SYSRAM0_W_EC710TRC_ECSYND_Pos (24UL) /*!< ECSYND (Bit 24) */ + #define R_SYSRAM0_W_EC710TRC_ECSYND_Msk (0x7f000000UL) /*!< ECSYND (Bitfield-Mask: 0x7f) */ +/* ======================================================= EC710TED ======================================================== */ + #define R_SYSRAM0_W_EC710TED_ECEDB_Pos (0UL) /*!< ECEDB (Bit 0) */ + #define R_SYSRAM0_W_EC710TED_ECEDB_Msk (0xffffffffUL) /*!< ECEDB (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= EC710EAD ======================================================== */ + #define R_SYSRAM0_W_EC710EAD_ECEAD_Pos (0UL) /*!< ECEAD (Bit 0) */ + #define R_SYSRAM0_W_EC710EAD_ECEAD_Msk (0x7fffUL) /*!< ECEAD (Bitfield-Mask: 0x7fff) */ + +/* =========================================================================================================================== */ +/* ================ RGN ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= STADD ========================================================= */ + #define R_MPU0_RGN_STADD_RDPR_Pos (0UL) /*!< RDPR (Bit 0) */ + #define R_MPU0_RGN_STADD_RDPR_Msk (0x1UL) /*!< RDPR (Bitfield-Mask: 0x01) */ + #define R_MPU0_RGN_STADD_WRPR_Pos (1UL) /*!< WRPR (Bit 1) */ + #define R_MPU0_RGN_STADD_WRPR_Msk (0x2UL) /*!< WRPR (Bitfield-Mask: 0x01) */ + #define R_MPU0_RGN_STADD_STADDR_Pos (10UL) /*!< STADDR (Bit 10) */ + #define R_MPU0_RGN_STADD_STADDR_Msk (0xfffffc00UL) /*!< STADDR (Bitfield-Mask: 0x3fffff) */ +/* ======================================================== ENDADD ========================================================= */ + #define R_MPU0_RGN_ENDADD_ENDADDR_Pos (10UL) /*!< ENDADDR (Bit 10) */ + #define R_MPU0_RGN_ENDADD_ENDADDR_Msk (0xfffffc00UL) /*!< ENDADDR (Bitfield-Mask: 0x3fffff) */ + +/* =========================================================================================================================== */ +/* ================ CH ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DSICR ========================================================= */ + #define R_DSMIF0_CH_DSICR_IOEL_Pos (0UL) /*!< IOEL (Bit 0) */ + #define R_DSMIF0_CH_DSICR_IOEL_Msk (0x1UL) /*!< IOEL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSICR_IOEH_Pos (1UL) /*!< IOEH (Bit 1) */ + #define R_DSMIF0_CH_DSICR_IOEH_Msk (0x2UL) /*!< IOEH (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSICR_ISE_Pos (2UL) /*!< ISE (Bit 2) */ + #define R_DSMIF0_CH_DSICR_ISE_Msk (0x4UL) /*!< ISE (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSICR_IUE_Pos (3UL) /*!< IUE (Bit 3) */ + #define R_DSMIF0_CH_DSICR_IUE_Msk (0x8UL) /*!< IUE (Bitfield-Mask: 0x01) */ +/* ======================================================== DSCMCCR ======================================================== */ + #define R_DSMIF0_CH_DSCMCCR_CKDIR_Pos (0UL) /*!< CKDIR (Bit 0) */ + #define R_DSMIF0_CH_DSCMCCR_CKDIR_Msk (0x1UL) /*!< CKDIR (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCMCCR_SEDGE_Pos (7UL) /*!< SEDGE (Bit 7) */ + #define R_DSMIF0_CH_DSCMCCR_SEDGE_Msk (0x80UL) /*!< SEDGE (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCMCCR_CKDIV_Pos (8UL) /*!< CKDIV (Bit 8) */ + #define R_DSMIF0_CH_DSCMCCR_CKDIV_Msk (0x3f00UL) /*!< CKDIV (Bitfield-Mask: 0x3f) */ +/* ======================================================== DSCMFCR ======================================================== */ + #define R_DSMIF0_CH_DSCMFCR_CMSINC_Pos (0UL) /*!< CMSINC (Bit 0) */ + #define R_DSMIF0_CH_DSCMFCR_CMSINC_Msk (0x3UL) /*!< CMSINC (Bitfield-Mask: 0x03) */ + #define R_DSMIF0_CH_DSCMFCR_CMDEC_Pos (8UL) /*!< CMDEC (Bit 8) */ + #define R_DSMIF0_CH_DSCMFCR_CMDEC_Msk (0xff00UL) /*!< CMDEC (Bitfield-Mask: 0xff) */ + #define R_DSMIF0_CH_DSCMFCR_CMSH_Pos (16UL) /*!< CMSH (Bit 16) */ + #define R_DSMIF0_CH_DSCMFCR_CMSH_Msk (0x1f0000UL) /*!< CMSH (Bitfield-Mask: 0x1f) */ +/* ======================================================= DSCMCTCR ======================================================== */ + #define R_DSMIF0_CH_DSCMCTCR_CTSELA_Pos (0UL) /*!< CTSELA (Bit 0) */ + #define R_DSMIF0_CH_DSCMCTCR_CTSELA_Msk (0x7UL) /*!< CTSELA (Bitfield-Mask: 0x07) */ + #define R_DSMIF0_CH_DSCMCTCR_CTSELB_Pos (8UL) /*!< CTSELB (Bit 8) */ + #define R_DSMIF0_CH_DSCMCTCR_CTSELB_Msk (0x700UL) /*!< CTSELB (Bitfield-Mask: 0x07) */ + #define R_DSMIF0_CH_DSCMCTCR_DITSEL_Pos (16UL) /*!< DITSEL (Bit 16) */ + #define R_DSMIF0_CH_DSCMCTCR_DITSEL_Msk (0x30000UL) /*!< DITSEL (Bitfield-Mask: 0x03) */ + #define R_DSMIF0_CH_DSCMCTCR_DEDGE_Pos (23UL) /*!< DEDGE (Bit 23) */ + #define R_DSMIF0_CH_DSCMCTCR_DEDGE_Msk (0x800000UL) /*!< DEDGE (Bitfield-Mask: 0x01) */ +/* ======================================================== DSEDCR ========================================================= */ + #define R_DSMIF0_CH_DSEDCR_SDE_Pos (0UL) /*!< SDE (Bit 0) */ + #define R_DSMIF0_CH_DSEDCR_SDE_Msk (0x1UL) /*!< SDE (Bitfield-Mask: 0x01) */ +/* ======================================================== DSOCFCR ======================================================== */ + #define R_DSMIF0_CH_DSOCFCR_OCSINC_Pos (0UL) /*!< OCSINC (Bit 0) */ + #define R_DSMIF0_CH_DSOCFCR_OCSINC_Msk (0x3UL) /*!< OCSINC (Bitfield-Mask: 0x03) */ + #define R_DSMIF0_CH_DSOCFCR_OCDEC_Pos (8UL) /*!< OCDEC (Bit 8) */ + #define R_DSMIF0_CH_DSOCFCR_OCDEC_Msk (0xff00UL) /*!< OCDEC (Bitfield-Mask: 0xff) */ + #define R_DSMIF0_CH_DSOCFCR_OCSH_Pos (16UL) /*!< OCSH (Bit 16) */ + #define R_DSMIF0_CH_DSOCFCR_OCSH_Msk (0x1f0000UL) /*!< OCSH (Bitfield-Mask: 0x1f) */ +/* ======================================================== DSOCLTR ======================================================== */ + #define R_DSMIF0_CH_DSOCLTR_OCMPTBL_Pos (0UL) /*!< OCMPTBL (Bit 0) */ + #define R_DSMIF0_CH_DSOCLTR_OCMPTBL_Msk (0xffffUL) /*!< OCMPTBL (Bitfield-Mask: 0xffff) */ +/* ======================================================== DSOCHTR ======================================================== */ + #define R_DSMIF0_CH_DSOCHTR_OCMPTBH_Pos (0UL) /*!< OCMPTBH (Bit 0) */ + #define R_DSMIF0_CH_DSOCHTR_OCMPTBH_Msk (0xffffUL) /*!< OCMPTBH (Bitfield-Mask: 0xffff) */ +/* ======================================================== DSSCTSR ======================================================== */ + #define R_DSMIF0_CH_DSSCTSR_SCNTL_Pos (0UL) /*!< SCNTL (Bit 0) */ + #define R_DSMIF0_CH_DSSCTSR_SCNTL_Msk (0x1fffUL) /*!< SCNTL (Bitfield-Mask: 0x1fff) */ + #define R_DSMIF0_CH_DSSCTSR_SCNTH_Pos (16UL) /*!< SCNTH (Bit 16) */ + #define R_DSMIF0_CH_DSSCTSR_SCNTH_Msk (0x1fff0000UL) /*!< SCNTH (Bitfield-Mask: 0x1fff) */ +/* ======================================================== DSODCR ========================================================= */ + #define R_DSMIF0_CH_DSODCR_ODEL_Pos (0UL) /*!< ODEL (Bit 0) */ + #define R_DSMIF0_CH_DSODCR_ODEL_Msk (0x1UL) /*!< ODEL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSODCR_ODEH_Pos (1UL) /*!< ODEH (Bit 1) */ + #define R_DSMIF0_CH_DSODCR_ODEH_Msk (0x2UL) /*!< ODEH (Bitfield-Mask: 0x01) */ +/* ======================================================= DSCSTRTR ======================================================== */ + #define R_DSMIF0_CH_DSCSTRTR_STRTRG_Pos (0UL) /*!< STRTRG (Bit 0) */ + #define R_DSMIF0_CH_DSCSTRTR_STRTRG_Msk (0x1UL) /*!< STRTRG (Bitfield-Mask: 0x01) */ +/* ======================================================= DSCSTPTR ======================================================== */ + #define R_DSMIF0_CH_DSCSTPTR_STPTRG_Pos (0UL) /*!< STPTRG (Bit 0) */ + #define R_DSMIF0_CH_DSCSTPTR_STPTRG_Msk (0x1UL) /*!< STPTRG (Bitfield-Mask: 0x01) */ +/* ========================================================= DSCDR ========================================================= */ + #define R_DSMIF0_CH_DSCDR_ADDR_Pos (0UL) /*!< ADDR (Bit 0) */ + #define R_DSMIF0_CH_DSCDR_ADDR_Msk (0xffffUL) /*!< ADDR (Bitfield-Mask: 0xffff) */ +/* ======================================================== DSCCDRA ======================================================== */ + #define R_DSMIF0_CH_DSCCDRA_CDRA_Pos (0UL) /*!< CDRA (Bit 0) */ + #define R_DSMIF0_CH_DSCCDRA_CDRA_Msk (0xffffUL) /*!< CDRA (Bitfield-Mask: 0xffff) */ +/* ======================================================== DSCCDRB ======================================================== */ + #define R_DSMIF0_CH_DSCCDRB_CDRB_Pos (0UL) /*!< CDRB (Bit 0) */ + #define R_DSMIF0_CH_DSCCDRB_CDRB_Msk (0xffffUL) /*!< CDRB (Bitfield-Mask: 0xffff) */ +/* ======================================================== DSOCDR ========================================================= */ + #define R_DSMIF0_CH_DSOCDR_ODR_Pos (0UL) /*!< ODR (Bit 0) */ + #define R_DSMIF0_CH_DSOCDR_ODR_Msk (0xffffUL) /*!< ODR (Bitfield-Mask: 0xffff) */ +/* ======================================================== DSCOCDR ======================================================== */ + #define R_DSMIF0_CH_DSCOCDR_CODR_Pos (0UL) /*!< CODR (Bit 0) */ + #define R_DSMIF0_CH_DSCOCDR_CODR_Msk (0xffffUL) /*!< CODR (Bitfield-Mask: 0xffff) */ +/* ========================================================= DSCSR ========================================================= */ + #define R_DSMIF0_CH_DSCSR_DUF_Pos (0UL) /*!< DUF (Bit 0) */ + #define R_DSMIF0_CH_DSCSR_DUF_Msk (0x1UL) /*!< DUF (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCSR_OCFL_Pos (1UL) /*!< OCFL (Bit 1) */ + #define R_DSMIF0_CH_DSCSR_OCFL_Msk (0x2UL) /*!< OCFL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCSR_OCFH_Pos (2UL) /*!< OCFH (Bit 2) */ + #define R_DSMIF0_CH_DSCSR_OCFH_Msk (0x4UL) /*!< OCFH (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCSR_SCF_Pos (3UL) /*!< SCF (Bit 3) */ + #define R_DSMIF0_CH_DSCSR_SCF_Msk (0x8UL) /*!< SCF (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCSR_CHSTATE_Pos (16UL) /*!< CHSTATE (Bit 16) */ + #define R_DSMIF0_CH_DSCSR_CHSTATE_Msk (0x10000UL) /*!< CHSTATE (Bitfield-Mask: 0x01) */ +/* ======================================================== DSCSCR ========================================================= */ + #define R_DSMIF0_CH_DSCSCR_CLRDUF_Pos (0UL) /*!< CLRDUF (Bit 0) */ + #define R_DSMIF0_CH_DSCSCR_CLRDUF_Msk (0x1UL) /*!< CLRDUF (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCSCR_CLROCFL_Pos (1UL) /*!< CLROCFL (Bit 1) */ + #define R_DSMIF0_CH_DSCSCR_CLROCFL_Msk (0x2UL) /*!< CLROCFL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCSCR_CLROCFH_Pos (2UL) /*!< CLROCFH (Bit 2) */ + #define R_DSMIF0_CH_DSCSCR_CLROCFH_Msk (0x4UL) /*!< CLROCFH (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_CH_DSCSCR_CLRSCF_Pos (3UL) /*!< CLRSCF (Bit 3) */ + #define R_DSMIF0_CH_DSCSCR_CLRSCF_Msk (0x8UL) /*!< CLRSCF (Bitfield-Mask: 0x01) */ + +/** @} */ /* End of group PosMask_clusters */ + +/* =========================================================================================================================== */ +/* ================ Pos/Mask Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup PosMask_peripherals + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ R_GPT0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= GTWP ========================================================== */ + #define R_GPT7_GTWP_WP_Pos (0UL) /*!< WP (Bit 0) */ + #define R_GPT7_GTWP_WP_Msk (0x1UL) /*!< WP (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTWP_STRWP_Pos (1UL) /*!< STRWP (Bit 1) */ + #define R_GPT7_GTWP_STRWP_Msk (0x2UL) /*!< STRWP (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTWP_STPWP_Pos (2UL) /*!< STPWP (Bit 2) */ + #define R_GPT7_GTWP_STPWP_Msk (0x4UL) /*!< STPWP (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTWP_CLRWP_Pos (3UL) /*!< CLRWP (Bit 3) */ + #define R_GPT7_GTWP_CLRWP_Msk (0x8UL) /*!< CLRWP (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTWP_CMNWP_Pos (4UL) /*!< CMNWP (Bit 4) */ + #define R_GPT7_GTWP_CMNWP_Msk (0x10UL) /*!< CMNWP (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTWP_PRKEY_Pos (8UL) /*!< PRKEY (Bit 8) */ + #define R_GPT7_GTWP_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ +/* ========================================================= GTSTR ========================================================= */ + #define R_GPT7_GTSTR_CSTRT0_Pos (0UL) /*!< CSTRT0 (Bit 0) */ + #define R_GPT7_GTSTR_CSTRT0_Msk (0x1UL) /*!< CSTRT0 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTR_CSTRT1_Pos (1UL) /*!< CSTRT1 (Bit 1) */ + #define R_GPT7_GTSTR_CSTRT1_Msk (0x2UL) /*!< CSTRT1 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTR_CSTRT2_Pos (2UL) /*!< CSTRT2 (Bit 2) */ + #define R_GPT7_GTSTR_CSTRT2_Msk (0x4UL) /*!< CSTRT2 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTR_CSTRT3_Pos (3UL) /*!< CSTRT3 (Bit 3) */ + #define R_GPT7_GTSTR_CSTRT3_Msk (0x8UL) /*!< CSTRT3 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTR_CSTRT4_Pos (4UL) /*!< CSTRT4 (Bit 4) */ + #define R_GPT7_GTSTR_CSTRT4_Msk (0x10UL) /*!< CSTRT4 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTR_CSTRT5_Pos (5UL) /*!< CSTRT5 (Bit 5) */ + #define R_GPT7_GTSTR_CSTRT5_Msk (0x20UL) /*!< CSTRT5 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTR_CSTRT6_Pos (6UL) /*!< CSTRT6 (Bit 6) */ + #define R_GPT7_GTSTR_CSTRT6_Msk (0x40UL) /*!< CSTRT6 (Bitfield-Mask: 0x01) */ +/* ========================================================= GTSTP ========================================================= */ + #define R_GPT7_GTSTP_CSTOP0_Pos (0UL) /*!< CSTOP0 (Bit 0) */ + #define R_GPT7_GTSTP_CSTOP0_Msk (0x1UL) /*!< CSTOP0 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTP_CSTOP1_Pos (1UL) /*!< CSTOP1 (Bit 1) */ + #define R_GPT7_GTSTP_CSTOP1_Msk (0x2UL) /*!< CSTOP1 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTP_CSTOP2_Pos (2UL) /*!< CSTOP2 (Bit 2) */ + #define R_GPT7_GTSTP_CSTOP2_Msk (0x4UL) /*!< CSTOP2 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTP_CSTOP3_Pos (3UL) /*!< CSTOP3 (Bit 3) */ + #define R_GPT7_GTSTP_CSTOP3_Msk (0x8UL) /*!< CSTOP3 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTP_CSTOP4_Pos (4UL) /*!< CSTOP4 (Bit 4) */ + #define R_GPT7_GTSTP_CSTOP4_Msk (0x10UL) /*!< CSTOP4 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTP_CSTOP5_Pos (5UL) /*!< CSTOP5 (Bit 5) */ + #define R_GPT7_GTSTP_CSTOP5_Msk (0x20UL) /*!< CSTOP5 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSTP_CSTOP6_Pos (6UL) /*!< CSTOP6 (Bit 6) */ + #define R_GPT7_GTSTP_CSTOP6_Msk (0x40UL) /*!< CSTOP6 (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCLR ========================================================= */ + #define R_GPT7_GTCLR_CCLR0_Pos (0UL) /*!< CCLR0 (Bit 0) */ + #define R_GPT7_GTCLR_CCLR0_Msk (0x1UL) /*!< CCLR0 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCLR_CCLR1_Pos (1UL) /*!< CCLR1 (Bit 1) */ + #define R_GPT7_GTCLR_CCLR1_Msk (0x2UL) /*!< CCLR1 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCLR_CCLR2_Pos (2UL) /*!< CCLR2 (Bit 2) */ + #define R_GPT7_GTCLR_CCLR2_Msk (0x4UL) /*!< CCLR2 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCLR_CCLR3_Pos (3UL) /*!< CCLR3 (Bit 3) */ + #define R_GPT7_GTCLR_CCLR3_Msk (0x8UL) /*!< CCLR3 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCLR_CCLR4_Pos (4UL) /*!< CCLR4 (Bit 4) */ + #define R_GPT7_GTCLR_CCLR4_Msk (0x10UL) /*!< CCLR4 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCLR_CCLR5_Pos (5UL) /*!< CCLR5 (Bit 5) */ + #define R_GPT7_GTCLR_CCLR5_Msk (0x20UL) /*!< CCLR5 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCLR_CCLR6_Pos (6UL) /*!< CCLR6 (Bit 6) */ + #define R_GPT7_GTCLR_CCLR6_Msk (0x40UL) /*!< CCLR6 (Bitfield-Mask: 0x01) */ +/* ========================================================= GTSSR ========================================================= */ + #define R_GPT7_GTSSR_SSGTRGAFR_Pos (0UL) /*!< SSGTRGAFR (Bit 0) */ + #define R_GPT7_GTSSR_SSGTRGAFR_Msk (0x3UL) /*!< SSGTRGAFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSGTRGBFR_Pos (2UL) /*!< SSGTRGBFR (Bit 2) */ + #define R_GPT7_GTSSR_SSGTRGBFR_Msk (0xcUL) /*!< SSGTRGBFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSGTRGCFR_Pos (4UL) /*!< SSGTRGCFR (Bit 4) */ + #define R_GPT7_GTSSR_SSGTRGCFR_Msk (0x30UL) /*!< SSGTRGCFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSGTRGDFR_Pos (6UL) /*!< SSGTRGDFR (Bit 6) */ + #define R_GPT7_GTSSR_SSGTRGDFR_Msk (0xc0UL) /*!< SSGTRGDFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSCARBHL_Pos (8UL) /*!< SSCARBHL (Bit 8) */ + #define R_GPT7_GTSSR_SSCARBHL_Msk (0x300UL) /*!< SSCARBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSCAFBHL_Pos (10UL) /*!< SSCAFBHL (Bit 10) */ + #define R_GPT7_GTSSR_SSCAFBHL_Msk (0xc00UL) /*!< SSCAFBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSCBRAHL_Pos (12UL) /*!< SSCBRAHL (Bit 12) */ + #define R_GPT7_GTSSR_SSCBRAHL_Msk (0x3000UL) /*!< SSCBRAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSCBFAHL_Pos (14UL) /*!< SSCBFAHL (Bit 14) */ + #define R_GPT7_GTSSR_SSCBFAHL_Msk (0xc000UL) /*!< SSCBFAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSSR_SSELCA_Pos (16UL) /*!< SSELCA (Bit 16) */ + #define R_GPT7_GTSSR_SSELCA_Msk (0x10000UL) /*!< SSELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_SSELCB_Pos (17UL) /*!< SSELCB (Bit 17) */ + #define R_GPT7_GTSSR_SSELCB_Msk (0x20000UL) /*!< SSELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_SSELCC_Pos (18UL) /*!< SSELCC (Bit 18) */ + #define R_GPT7_GTSSR_SSELCC_Msk (0x40000UL) /*!< SSELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_SSELCD_Pos (19UL) /*!< SSELCD (Bit 19) */ + #define R_GPT7_GTSSR_SSELCD_Msk (0x80000UL) /*!< SSELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_SSELCE_Pos (20UL) /*!< SSELCE (Bit 20) */ + #define R_GPT7_GTSSR_SSELCE_Msk (0x100000UL) /*!< SSELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_SSELCF_Pos (21UL) /*!< SSELCF (Bit 21) */ + #define R_GPT7_GTSSR_SSELCF_Msk (0x200000UL) /*!< SSELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_SSELCG_Pos (22UL) /*!< SSELCG (Bit 22) */ + #define R_GPT7_GTSSR_SSELCG_Msk (0x400000UL) /*!< SSELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_SSELCH_Pos (23UL) /*!< SSELCH (Bit 23) */ + #define R_GPT7_GTSSR_SSELCH_Msk (0x800000UL) /*!< SSELCH (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSSR_CSTRT_Pos (31UL) /*!< CSTRT (Bit 31) */ + #define R_GPT7_GTSSR_CSTRT_Msk (0x80000000UL) /*!< CSTRT (Bitfield-Mask: 0x01) */ +/* ========================================================= GTPSR ========================================================= */ + #define R_GPT7_GTPSR_PSGTRGAFR_Pos (0UL) /*!< PSGTRGAFR (Bit 0) */ + #define R_GPT7_GTPSR_PSGTRGAFR_Msk (0x3UL) /*!< PSGTRGAFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSGTRGBFR_Pos (2UL) /*!< PSGTRGBFR (Bit 2) */ + #define R_GPT7_GTPSR_PSGTRGBFR_Msk (0xcUL) /*!< PSGTRGBFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSGTRGCFR_Pos (4UL) /*!< PSGTRGCFR (Bit 4) */ + #define R_GPT7_GTPSR_PSGTRGCFR_Msk (0x30UL) /*!< PSGTRGCFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSGTRGDFR_Pos (6UL) /*!< PSGTRGDFR (Bit 6) */ + #define R_GPT7_GTPSR_PSGTRGDFR_Msk (0xc0UL) /*!< PSGTRGDFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSCARBHL_Pos (8UL) /*!< PSCARBHL (Bit 8) */ + #define R_GPT7_GTPSR_PSCARBHL_Msk (0x300UL) /*!< PSCARBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSCAFBHL_Pos (10UL) /*!< PSCAFBHL (Bit 10) */ + #define R_GPT7_GTPSR_PSCAFBHL_Msk (0xc00UL) /*!< PSCAFBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSCBRAHL_Pos (12UL) /*!< PSCBRAHL (Bit 12) */ + #define R_GPT7_GTPSR_PSCBRAHL_Msk (0x3000UL) /*!< PSCBRAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSCBFAHL_Pos (14UL) /*!< PSCBFAHL (Bit 14) */ + #define R_GPT7_GTPSR_PSCBFAHL_Msk (0xc000UL) /*!< PSCBFAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTPSR_PSELCA_Pos (16UL) /*!< PSELCA (Bit 16) */ + #define R_GPT7_GTPSR_PSELCA_Msk (0x10000UL) /*!< PSELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_PSELCB_Pos (17UL) /*!< PSELCB (Bit 17) */ + #define R_GPT7_GTPSR_PSELCB_Msk (0x20000UL) /*!< PSELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_PSELCC_Pos (18UL) /*!< PSELCC (Bit 18) */ + #define R_GPT7_GTPSR_PSELCC_Msk (0x40000UL) /*!< PSELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_PSELCD_Pos (19UL) /*!< PSELCD (Bit 19) */ + #define R_GPT7_GTPSR_PSELCD_Msk (0x80000UL) /*!< PSELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_PSELCE_Pos (20UL) /*!< PSELCE (Bit 20) */ + #define R_GPT7_GTPSR_PSELCE_Msk (0x100000UL) /*!< PSELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_PSELCF_Pos (21UL) /*!< PSELCF (Bit 21) */ + #define R_GPT7_GTPSR_PSELCF_Msk (0x200000UL) /*!< PSELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_PSELCG_Pos (22UL) /*!< PSELCG (Bit 22) */ + #define R_GPT7_GTPSR_PSELCG_Msk (0x400000UL) /*!< PSELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_PSELCH_Pos (23UL) /*!< PSELCH (Bit 23) */ + #define R_GPT7_GTPSR_PSELCH_Msk (0x800000UL) /*!< PSELCH (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTPSR_CSTOP_Pos (31UL) /*!< CSTOP (Bit 31) */ + #define R_GPT7_GTPSR_CSTOP_Msk (0x80000000UL) /*!< CSTOP (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCSR ========================================================= */ + #define R_GPT7_GTCSR_CSGTRGAFR_Pos (0UL) /*!< CSGTRGAFR (Bit 0) */ + #define R_GPT7_GTCSR_CSGTRGAFR_Msk (0x3UL) /*!< CSGTRGAFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSGTRGBFR_Pos (2UL) /*!< CSGTRGBFR (Bit 2) */ + #define R_GPT7_GTCSR_CSGTRGBFR_Msk (0xcUL) /*!< CSGTRGBFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSGTRGCFR_Pos (4UL) /*!< CSGTRGCFR (Bit 4) */ + #define R_GPT7_GTCSR_CSGTRGCFR_Msk (0x30UL) /*!< CSGTRGCFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSGTRGDFR_Pos (6UL) /*!< CSGTRGDFR (Bit 6) */ + #define R_GPT7_GTCSR_CSGTRGDFR_Msk (0xc0UL) /*!< CSGTRGDFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSCARBHL_Pos (8UL) /*!< CSCARBHL (Bit 8) */ + #define R_GPT7_GTCSR_CSCARBHL_Msk (0x300UL) /*!< CSCARBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSCAFBHL_Pos (10UL) /*!< CSCAFBHL (Bit 10) */ + #define R_GPT7_GTCSR_CSCAFBHL_Msk (0xc00UL) /*!< CSCAFBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSCBRAHL_Pos (12UL) /*!< CSCBRAHL (Bit 12) */ + #define R_GPT7_GTCSR_CSCBRAHL_Msk (0x3000UL) /*!< CSCBRAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSCBFAHL_Pos (14UL) /*!< CSCBFAHL (Bit 14) */ + #define R_GPT7_GTCSR_CSCBFAHL_Msk (0xc000UL) /*!< CSCBFAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTCSR_CSELCA_Pos (16UL) /*!< CSELCA (Bit 16) */ + #define R_GPT7_GTCSR_CSELCA_Msk (0x10000UL) /*!< CSELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CSELCB_Pos (17UL) /*!< CSELCB (Bit 17) */ + #define R_GPT7_GTCSR_CSELCB_Msk (0x20000UL) /*!< CSELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CSELCC_Pos (18UL) /*!< CSELCC (Bit 18) */ + #define R_GPT7_GTCSR_CSELCC_Msk (0x40000UL) /*!< CSELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CSELCD_Pos (19UL) /*!< CSELCD (Bit 19) */ + #define R_GPT7_GTCSR_CSELCD_Msk (0x80000UL) /*!< CSELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CSELCE_Pos (20UL) /*!< CSELCE (Bit 20) */ + #define R_GPT7_GTCSR_CSELCE_Msk (0x100000UL) /*!< CSELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CSELCF_Pos (21UL) /*!< CSELCF (Bit 21) */ + #define R_GPT7_GTCSR_CSELCF_Msk (0x200000UL) /*!< CSELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CSELCG_Pos (22UL) /*!< CSELCG (Bit 22) */ + #define R_GPT7_GTCSR_CSELCG_Msk (0x400000UL) /*!< CSELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CSELCH_Pos (23UL) /*!< CSELCH (Bit 23) */ + #define R_GPT7_GTCSR_CSELCH_Msk (0x800000UL) /*!< CSELCH (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCSR_CCLR_Pos (31UL) /*!< CCLR (Bit 31) */ + #define R_GPT7_GTCSR_CCLR_Msk (0x80000000UL) /*!< CCLR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTUPSR ========================================================= */ + #define R_GPT7_GTUPSR_USGTRGAFR_Pos (0UL) /*!< USGTRGAFR (Bit 0) */ + #define R_GPT7_GTUPSR_USGTRGAFR_Msk (0x3UL) /*!< USGTRGAFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USGTRGBFR_Pos (2UL) /*!< USGTRGBFR (Bit 2) */ + #define R_GPT7_GTUPSR_USGTRGBFR_Msk (0xcUL) /*!< USGTRGBFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USGTRGCFR_Pos (4UL) /*!< USGTRGCFR (Bit 4) */ + #define R_GPT7_GTUPSR_USGTRGCFR_Msk (0x30UL) /*!< USGTRGCFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USGTRGDFR_Pos (6UL) /*!< USGTRGDFR (Bit 6) */ + #define R_GPT7_GTUPSR_USGTRGDFR_Msk (0xc0UL) /*!< USGTRGDFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USCARBHL_Pos (8UL) /*!< USCARBHL (Bit 8) */ + #define R_GPT7_GTUPSR_USCARBHL_Msk (0x300UL) /*!< USCARBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USCAFBHL_Pos (10UL) /*!< USCAFBHL (Bit 10) */ + #define R_GPT7_GTUPSR_USCAFBHL_Msk (0xc00UL) /*!< USCAFBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USCBRAHL_Pos (12UL) /*!< USCBRAHL (Bit 12) */ + #define R_GPT7_GTUPSR_USCBRAHL_Msk (0x3000UL) /*!< USCBRAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USCBFAHL_Pos (14UL) /*!< USCBFAHL (Bit 14) */ + #define R_GPT7_GTUPSR_USCBFAHL_Msk (0xc000UL) /*!< USCBFAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUPSR_USELCA_Pos (16UL) /*!< USELCA (Bit 16) */ + #define R_GPT7_GTUPSR_USELCA_Msk (0x10000UL) /*!< USELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUPSR_USELCB_Pos (17UL) /*!< USELCB (Bit 17) */ + #define R_GPT7_GTUPSR_USELCB_Msk (0x20000UL) /*!< USELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUPSR_USELCC_Pos (18UL) /*!< USELCC (Bit 18) */ + #define R_GPT7_GTUPSR_USELCC_Msk (0x40000UL) /*!< USELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUPSR_USELCD_Pos (19UL) /*!< USELCD (Bit 19) */ + #define R_GPT7_GTUPSR_USELCD_Msk (0x80000UL) /*!< USELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUPSR_USELCE_Pos (20UL) /*!< USELCE (Bit 20) */ + #define R_GPT7_GTUPSR_USELCE_Msk (0x100000UL) /*!< USELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUPSR_USELCF_Pos (21UL) /*!< USELCF (Bit 21) */ + #define R_GPT7_GTUPSR_USELCF_Msk (0x200000UL) /*!< USELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUPSR_USELCG_Pos (22UL) /*!< USELCG (Bit 22) */ + #define R_GPT7_GTUPSR_USELCG_Msk (0x400000UL) /*!< USELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUPSR_USELCH_Pos (23UL) /*!< USELCH (Bit 23) */ + #define R_GPT7_GTUPSR_USELCH_Msk (0x800000UL) /*!< USELCH (Bitfield-Mask: 0x01) */ +/* ======================================================== GTDNSR ========================================================= */ + #define R_GPT7_GTDNSR_DSGTRGAFR_Pos (0UL) /*!< DSGTRGAFR (Bit 0) */ + #define R_GPT7_GTDNSR_DSGTRGAFR_Msk (0x3UL) /*!< DSGTRGAFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSGTRGBFR_Pos (2UL) /*!< DSGTRGBFR (Bit 2) */ + #define R_GPT7_GTDNSR_DSGTRGBFR_Msk (0xcUL) /*!< DSGTRGBFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSGTRGCFR_Pos (4UL) /*!< DSGTRGCFR (Bit 4) */ + #define R_GPT7_GTDNSR_DSGTRGCFR_Msk (0x30UL) /*!< DSGTRGCFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSGTRGDFR_Pos (6UL) /*!< DSGTRGDFR (Bit 6) */ + #define R_GPT7_GTDNSR_DSGTRGDFR_Msk (0xc0UL) /*!< DSGTRGDFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSCARBHL_Pos (8UL) /*!< DSCARBHL (Bit 8) */ + #define R_GPT7_GTDNSR_DSCARBHL_Msk (0x300UL) /*!< DSCARBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSCAFBHL_Pos (10UL) /*!< DSCAFBHL (Bit 10) */ + #define R_GPT7_GTDNSR_DSCAFBHL_Msk (0xc00UL) /*!< DSCAFBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSCBRAHL_Pos (12UL) /*!< DSCBRAHL (Bit 12) */ + #define R_GPT7_GTDNSR_DSCBRAHL_Msk (0x3000UL) /*!< DSCBRAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSCBFAHL_Pos (14UL) /*!< DSCBFAHL (Bit 14) */ + #define R_GPT7_GTDNSR_DSCBFAHL_Msk (0xc000UL) /*!< DSCBFAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTDNSR_DSELCA_Pos (16UL) /*!< DSELCA (Bit 16) */ + #define R_GPT7_GTDNSR_DSELCA_Msk (0x10000UL) /*!< DSELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDNSR_DSELCB_Pos (17UL) /*!< DSELCB (Bit 17) */ + #define R_GPT7_GTDNSR_DSELCB_Msk (0x20000UL) /*!< DSELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDNSR_DSELCC_Pos (18UL) /*!< DSELCC (Bit 18) */ + #define R_GPT7_GTDNSR_DSELCC_Msk (0x40000UL) /*!< DSELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDNSR_DSELCD_Pos (19UL) /*!< DSELCD (Bit 19) */ + #define R_GPT7_GTDNSR_DSELCD_Msk (0x80000UL) /*!< DSELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDNSR_DSELCE_Pos (20UL) /*!< DSELCE (Bit 20) */ + #define R_GPT7_GTDNSR_DSELCE_Msk (0x100000UL) /*!< DSELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDNSR_DSELCF_Pos (21UL) /*!< DSELCF (Bit 21) */ + #define R_GPT7_GTDNSR_DSELCF_Msk (0x200000UL) /*!< DSELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDNSR_DSELCG_Pos (22UL) /*!< DSELCG (Bit 22) */ + #define R_GPT7_GTDNSR_DSELCG_Msk (0x400000UL) /*!< DSELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDNSR_DSELCH_Pos (23UL) /*!< DSELCH (Bit 23) */ + #define R_GPT7_GTDNSR_DSELCH_Msk (0x800000UL) /*!< DSELCH (Bitfield-Mask: 0x01) */ +/* ======================================================== GTICASR ======================================================== */ + #define R_GPT7_GTICASR_ASGTRGAFR_Pos (0UL) /*!< ASGTRGAFR (Bit 0) */ + #define R_GPT7_GTICASR_ASGTRGAFR_Msk (0x3UL) /*!< ASGTRGAFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASGTRGBFR_Pos (2UL) /*!< ASGTRGBFR (Bit 2) */ + #define R_GPT7_GTICASR_ASGTRGBFR_Msk (0xcUL) /*!< ASGTRGBFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASGTRGCFR_Pos (4UL) /*!< ASGTRGCFR (Bit 4) */ + #define R_GPT7_GTICASR_ASGTRGCFR_Msk (0x30UL) /*!< ASGTRGCFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASGTRGDFR_Pos (6UL) /*!< ASGTRGDFR (Bit 6) */ + #define R_GPT7_GTICASR_ASGTRGDFR_Msk (0xc0UL) /*!< ASGTRGDFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASCARBHL_Pos (8UL) /*!< ASCARBHL (Bit 8) */ + #define R_GPT7_GTICASR_ASCARBHL_Msk (0x300UL) /*!< ASCARBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASCAFBHL_Pos (10UL) /*!< ASCAFBHL (Bit 10) */ + #define R_GPT7_GTICASR_ASCAFBHL_Msk (0xc00UL) /*!< ASCAFBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASCBRAHL_Pos (12UL) /*!< ASCBRAHL (Bit 12) */ + #define R_GPT7_GTICASR_ASCBRAHL_Msk (0x3000UL) /*!< ASCBRAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASCBFAHL_Pos (14UL) /*!< ASCBFAHL (Bit 14) */ + #define R_GPT7_GTICASR_ASCBFAHL_Msk (0xc000UL) /*!< ASCBFAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICASR_ASELCA_Pos (16UL) /*!< ASELCA (Bit 16) */ + #define R_GPT7_GTICASR_ASELCA_Msk (0x10000UL) /*!< ASELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICASR_ASELCB_Pos (17UL) /*!< ASELCB (Bit 17) */ + #define R_GPT7_GTICASR_ASELCB_Msk (0x20000UL) /*!< ASELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICASR_ASELCC_Pos (18UL) /*!< ASELCC (Bit 18) */ + #define R_GPT7_GTICASR_ASELCC_Msk (0x40000UL) /*!< ASELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICASR_ASELCD_Pos (19UL) /*!< ASELCD (Bit 19) */ + #define R_GPT7_GTICASR_ASELCD_Msk (0x80000UL) /*!< ASELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICASR_ASELCE_Pos (20UL) /*!< ASELCE (Bit 20) */ + #define R_GPT7_GTICASR_ASELCE_Msk (0x100000UL) /*!< ASELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICASR_ASELCF_Pos (21UL) /*!< ASELCF (Bit 21) */ + #define R_GPT7_GTICASR_ASELCF_Msk (0x200000UL) /*!< ASELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICASR_ASELCG_Pos (22UL) /*!< ASELCG (Bit 22) */ + #define R_GPT7_GTICASR_ASELCG_Msk (0x400000UL) /*!< ASELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICASR_ASELCH_Pos (23UL) /*!< ASELCH (Bit 23) */ + #define R_GPT7_GTICASR_ASELCH_Msk (0x800000UL) /*!< ASELCH (Bitfield-Mask: 0x01) */ +/* ======================================================== GTICBSR ======================================================== */ + #define R_GPT7_GTICBSR_BSGTRGAFR_Pos (0UL) /*!< BSGTRGAFR (Bit 0) */ + #define R_GPT7_GTICBSR_BSGTRGAFR_Msk (0x3UL) /*!< BSGTRGAFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSGTRGBFR_Pos (2UL) /*!< BSGTRGBFR (Bit 2) */ + #define R_GPT7_GTICBSR_BSGTRGBFR_Msk (0xcUL) /*!< BSGTRGBFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSGTRGCFR_Pos (4UL) /*!< BSGTRGCFR (Bit 4) */ + #define R_GPT7_GTICBSR_BSGTRGCFR_Msk (0x30UL) /*!< BSGTRGCFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSGTRGDFR_Pos (6UL) /*!< BSGTRGDFR (Bit 6) */ + #define R_GPT7_GTICBSR_BSGTRGDFR_Msk (0xc0UL) /*!< BSGTRGDFR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSCARBHL_Pos (8UL) /*!< BSCARBHL (Bit 8) */ + #define R_GPT7_GTICBSR_BSCARBHL_Msk (0x300UL) /*!< BSCARBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSCAFBHL_Pos (10UL) /*!< BSCAFBHL (Bit 10) */ + #define R_GPT7_GTICBSR_BSCAFBHL_Msk (0xc00UL) /*!< BSCAFBHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSCBRAHL_Pos (12UL) /*!< BSCBRAHL (Bit 12) */ + #define R_GPT7_GTICBSR_BSCBRAHL_Msk (0x3000UL) /*!< BSCBRAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSCBFAHL_Pos (14UL) /*!< BSCBFAHL (Bit 14) */ + #define R_GPT7_GTICBSR_BSCBFAHL_Msk (0xc000UL) /*!< BSCBFAHL (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTICBSR_BSELCA_Pos (16UL) /*!< BSELCA (Bit 16) */ + #define R_GPT7_GTICBSR_BSELCA_Msk (0x10000UL) /*!< BSELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICBSR_BSELCB_Pos (17UL) /*!< BSELCB (Bit 17) */ + #define R_GPT7_GTICBSR_BSELCB_Msk (0x20000UL) /*!< BSELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICBSR_BSELCC_Pos (18UL) /*!< BSELCC (Bit 18) */ + #define R_GPT7_GTICBSR_BSELCC_Msk (0x40000UL) /*!< BSELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICBSR_BSELCD_Pos (19UL) /*!< BSELCD (Bit 19) */ + #define R_GPT7_GTICBSR_BSELCD_Msk (0x80000UL) /*!< BSELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICBSR_BSELCE_Pos (20UL) /*!< BSELCE (Bit 20) */ + #define R_GPT7_GTICBSR_BSELCE_Msk (0x100000UL) /*!< BSELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICBSR_BSELCF_Pos (21UL) /*!< BSELCF (Bit 21) */ + #define R_GPT7_GTICBSR_BSELCF_Msk (0x200000UL) /*!< BSELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICBSR_BSELCG_Pos (22UL) /*!< BSELCG (Bit 22) */ + #define R_GPT7_GTICBSR_BSELCG_Msk (0x400000UL) /*!< BSELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTICBSR_BSELCH_Pos (23UL) /*!< BSELCH (Bit 23) */ + #define R_GPT7_GTICBSR_BSELCH_Msk (0x800000UL) /*!< BSELCH (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCR ========================================================== */ + #define R_GPT7_GTCR_CST_Pos (0UL) /*!< CST (Bit 0) */ + #define R_GPT7_GTCR_CST_Msk (0x1UL) /*!< CST (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCR_ICDS_Pos (8UL) /*!< ICDS (Bit 8) */ + #define R_GPT7_GTCR_ICDS_Msk (0x100UL) /*!< ICDS (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTCR_MD_Pos (16UL) /*!< MD (Bit 16) */ + #define R_GPT7_GTCR_MD_Msk (0x70000UL) /*!< MD (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTCR_TPCS_Pos (23UL) /*!< TPCS (Bit 23) */ + #define R_GPT7_GTCR_TPCS_Msk (0x7800000UL) /*!< TPCS (Bitfield-Mask: 0x0f) */ + #define R_GPT7_GTCR_SWMD_Pos (29UL) /*!< SWMD (Bit 29) */ + #define R_GPT7_GTCR_SWMD_Msk (0xe0000000UL) /*!< SWMD (Bitfield-Mask: 0x07) */ +/* ======================================================= GTUDDTYC ======================================================== */ + #define R_GPT7_GTUDDTYC_UD_Pos (0UL) /*!< UD (Bit 0) */ + #define R_GPT7_GTUDDTYC_UD_Msk (0x1UL) /*!< UD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUDDTYC_UDF_Pos (1UL) /*!< UDF (Bit 1) */ + #define R_GPT7_GTUDDTYC_UDF_Msk (0x2UL) /*!< UDF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUDDTYC_OADTY_Pos (16UL) /*!< OADTY (Bit 16) */ + #define R_GPT7_GTUDDTYC_OADTY_Msk (0x30000UL) /*!< OADTY (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUDDTYC_OADTYF_Pos (18UL) /*!< OADTYF (Bit 18) */ + #define R_GPT7_GTUDDTYC_OADTYF_Msk (0x40000UL) /*!< OADTYF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUDDTYC_OADTYR_Pos (19UL) /*!< OADTYR (Bit 19) */ + #define R_GPT7_GTUDDTYC_OADTYR_Msk (0x80000UL) /*!< OADTYR (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUDDTYC_OBDTY_Pos (24UL) /*!< OBDTY (Bit 24) */ + #define R_GPT7_GTUDDTYC_OBDTY_Msk (0x3000000UL) /*!< OBDTY (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTUDDTYC_OBDTYF_Pos (26UL) /*!< OBDTYF (Bit 26) */ + #define R_GPT7_GTUDDTYC_OBDTYF_Msk (0x4000000UL) /*!< OBDTYF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTUDDTYC_OBDTYR_Pos (27UL) /*!< OBDTYR (Bit 27) */ + #define R_GPT7_GTUDDTYC_OBDTYR_Msk (0x8000000UL) /*!< OBDTYR (Bitfield-Mask: 0x01) */ +/* ========================================================= GTIOR ========================================================= */ + #define R_GPT7_GTIOR_GTIOA_Pos (0UL) /*!< GTIOA (Bit 0) */ + #define R_GPT7_GTIOR_GTIOA_Msk (0x1fUL) /*!< GTIOA (Bitfield-Mask: 0x1f) */ + #define R_GPT7_GTIOR_OADFLT_Pos (6UL) /*!< OADFLT (Bit 6) */ + #define R_GPT7_GTIOR_OADFLT_Msk (0x40UL) /*!< OADFLT (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_OAHLD_Pos (7UL) /*!< OAHLD (Bit 7) */ + #define R_GPT7_GTIOR_OAHLD_Msk (0x80UL) /*!< OAHLD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_OAE_Pos (8UL) /*!< OAE (Bit 8) */ + #define R_GPT7_GTIOR_OAE_Msk (0x100UL) /*!< OAE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_OADF_Pos (9UL) /*!< OADF (Bit 9) */ + #define R_GPT7_GTIOR_OADF_Msk (0x600UL) /*!< OADF (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTIOR_NFAEN_Pos (13UL) /*!< NFAEN (Bit 13) */ + #define R_GPT7_GTIOR_NFAEN_Msk (0x2000UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_NFCSA_Pos (14UL) /*!< NFCSA (Bit 14) */ + #define R_GPT7_GTIOR_NFCSA_Msk (0xc000UL) /*!< NFCSA (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTIOR_GTIOB_Pos (16UL) /*!< GTIOB (Bit 16) */ + #define R_GPT7_GTIOR_GTIOB_Msk (0x1f0000UL) /*!< GTIOB (Bitfield-Mask: 0x1f) */ + #define R_GPT7_GTIOR_OBDFLT_Pos (22UL) /*!< OBDFLT (Bit 22) */ + #define R_GPT7_GTIOR_OBDFLT_Msk (0x400000UL) /*!< OBDFLT (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_OBHLD_Pos (23UL) /*!< OBHLD (Bit 23) */ + #define R_GPT7_GTIOR_OBHLD_Msk (0x800000UL) /*!< OBHLD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_OBE_Pos (24UL) /*!< OBE (Bit 24) */ + #define R_GPT7_GTIOR_OBE_Msk (0x1000000UL) /*!< OBE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_OBDF_Pos (25UL) /*!< OBDF (Bit 25) */ + #define R_GPT7_GTIOR_OBDF_Msk (0x6000000UL) /*!< OBDF (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTIOR_NFBEN_Pos (29UL) /*!< NFBEN (Bit 29) */ + #define R_GPT7_GTIOR_NFBEN_Msk (0x20000000UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTIOR_NFCSB_Pos (30UL) /*!< NFCSB (Bit 30) */ + #define R_GPT7_GTIOR_NFCSB_Msk (0xc0000000UL) /*!< NFCSB (Bitfield-Mask: 0x03) */ +/* ======================================================== GTINTAD ======================================================== */ + #define R_GPT7_GTINTAD_GTINTA_Pos (0UL) /*!< GTINTA (Bit 0) */ + #define R_GPT7_GTINTAD_GTINTA_Msk (0x1UL) /*!< GTINTA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GTINTB_Pos (1UL) /*!< GTINTB (Bit 1) */ + #define R_GPT7_GTINTAD_GTINTB_Msk (0x2UL) /*!< GTINTB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GTINTC_Pos (2UL) /*!< GTINTC (Bit 2) */ + #define R_GPT7_GTINTAD_GTINTC_Msk (0x4UL) /*!< GTINTC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GTINTD_Pos (3UL) /*!< GTINTD (Bit 3) */ + #define R_GPT7_GTINTAD_GTINTD_Msk (0x8UL) /*!< GTINTD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GTINTE_Pos (4UL) /*!< GTINTE (Bit 4) */ + #define R_GPT7_GTINTAD_GTINTE_Msk (0x10UL) /*!< GTINTE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GTINTF_Pos (5UL) /*!< GTINTF (Bit 5) */ + #define R_GPT7_GTINTAD_GTINTF_Msk (0x20UL) /*!< GTINTF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GTINTPR_Pos (6UL) /*!< GTINTPR (Bit 6) */ + #define R_GPT7_GTINTAD_GTINTPR_Msk (0xc0UL) /*!< GTINTPR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTINTAD_ADTRAUEN_Pos (16UL) /*!< ADTRAUEN (Bit 16) */ + #define R_GPT7_GTINTAD_ADTRAUEN_Msk (0x10000UL) /*!< ADTRAUEN (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_ADTRADEN_Pos (17UL) /*!< ADTRADEN (Bit 17) */ + #define R_GPT7_GTINTAD_ADTRADEN_Msk (0x20000UL) /*!< ADTRADEN (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_ADTRBUEN_Pos (18UL) /*!< ADTRBUEN (Bit 18) */ + #define R_GPT7_GTINTAD_ADTRBUEN_Msk (0x40000UL) /*!< ADTRBUEN (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_ADTRBDEN_Pos (19UL) /*!< ADTRBDEN (Bit 19) */ + #define R_GPT7_GTINTAD_ADTRBDEN_Msk (0x80000UL) /*!< ADTRBDEN (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GRP_Pos (24UL) /*!< GRP (Bit 24) */ + #define R_GPT7_GTINTAD_GRP_Msk (0x3000000UL) /*!< GRP (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTINTAD_GRPDTE_Pos (28UL) /*!< GRPDTE (Bit 28) */ + #define R_GPT7_GTINTAD_GRPDTE_Msk (0x10000000UL) /*!< GRPDTE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GRPABH_Pos (29UL) /*!< GRPABH (Bit 29) */ + #define R_GPT7_GTINTAD_GRPABH_Msk (0x20000000UL) /*!< GRPABH (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTINTAD_GRPABL_Pos (30UL) /*!< GRPABL (Bit 30) */ + #define R_GPT7_GTINTAD_GRPABL_Msk (0x40000000UL) /*!< GRPABL (Bitfield-Mask: 0x01) */ +/* ========================================================= GTST ========================================================== */ + #define R_GPT7_GTST_ITCNT_Pos (8UL) /*!< ITCNT (Bit 8) */ + #define R_GPT7_GTST_ITCNT_Msk (0x700UL) /*!< ITCNT (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTST_TUCF_Pos (15UL) /*!< TUCF (Bit 15) */ + #define R_GPT7_GTST_TUCF_Msk (0x8000UL) /*!< TUCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_ADTRAUF_Pos (16UL) /*!< ADTRAUF (Bit 16) */ + #define R_GPT7_GTST_ADTRAUF_Msk (0x10000UL) /*!< ADTRAUF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_ADTRADF_Pos (17UL) /*!< ADTRADF (Bit 17) */ + #define R_GPT7_GTST_ADTRADF_Msk (0x20000UL) /*!< ADTRADF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_ADTRBUF_Pos (18UL) /*!< ADTRBUF (Bit 18) */ + #define R_GPT7_GTST_ADTRBUF_Msk (0x40000UL) /*!< ADTRBUF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_ADTRBDF_Pos (19UL) /*!< ADTRBDF (Bit 19) */ + #define R_GPT7_GTST_ADTRBDF_Msk (0x80000UL) /*!< ADTRBDF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_ODF_Pos (24UL) /*!< ODF (Bit 24) */ + #define R_GPT7_GTST_ODF_Msk (0x1000000UL) /*!< ODF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_DTEF_Pos (28UL) /*!< DTEF (Bit 28) */ + #define R_GPT7_GTST_DTEF_Msk (0x10000000UL) /*!< DTEF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_OABHF_Pos (29UL) /*!< OABHF (Bit 29) */ + #define R_GPT7_GTST_OABHF_Msk (0x20000000UL) /*!< OABHF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTST_OABLF_Pos (30UL) /*!< OABLF (Bit 30) */ + #define R_GPT7_GTST_OABLF_Msk (0x40000000UL) /*!< OABLF (Bitfield-Mask: 0x01) */ +/* ========================================================= GTBER ========================================================= */ + #define R_GPT7_GTBER_BD0_Pos (0UL) /*!< BD0 (Bit 0) */ + #define R_GPT7_GTBER_BD0_Msk (0x1UL) /*!< BD0 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_BD1_Pos (1UL) /*!< BD1 (Bit 1) */ + #define R_GPT7_GTBER_BD1_Msk (0x2UL) /*!< BD1 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_BD2_Pos (2UL) /*!< BD2 (Bit 2) */ + #define R_GPT7_GTBER_BD2_Msk (0x4UL) /*!< BD2 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_BD3_Pos (3UL) /*!< BD3 (Bit 3) */ + #define R_GPT7_GTBER_BD3_Msk (0x8UL) /*!< BD3 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_DBRTECA_Pos (8UL) /*!< DBRTECA (Bit 8) */ + #define R_GPT7_GTBER_DBRTECA_Msk (0x100UL) /*!< DBRTECA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_DBRTECB_Pos (10UL) /*!< DBRTECB (Bit 10) */ + #define R_GPT7_GTBER_DBRTECB_Msk (0x400UL) /*!< DBRTECB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_CCRA_Pos (16UL) /*!< CCRA (Bit 16) */ + #define R_GPT7_GTBER_CCRA_Msk (0x30000UL) /*!< CCRA (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTBER_CCRB_Pos (18UL) /*!< CCRB (Bit 18) */ + #define R_GPT7_GTBER_CCRB_Msk (0xc0000UL) /*!< CCRB (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTBER_PR_Pos (20UL) /*!< PR (Bit 20) */ + #define R_GPT7_GTBER_PR_Msk (0x300000UL) /*!< PR (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTBER_CCRSWT_Pos (22UL) /*!< CCRSWT (Bit 22) */ + #define R_GPT7_GTBER_CCRSWT_Msk (0x400000UL) /*!< CCRSWT (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_ADTTA_Pos (24UL) /*!< ADTTA (Bit 24) */ + #define R_GPT7_GTBER_ADTTA_Msk (0x3000000UL) /*!< ADTTA (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTBER_ADTDA_Pos (26UL) /*!< ADTDA (Bit 26) */ + #define R_GPT7_GTBER_ADTDA_Msk (0x4000000UL) /*!< ADTDA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTBER_ADTTB_Pos (28UL) /*!< ADTTB (Bit 28) */ + #define R_GPT7_GTBER_ADTTB_Msk (0x30000000UL) /*!< ADTTB (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTBER_ADTDB_Pos (30UL) /*!< ADTDB (Bit 30) */ + #define R_GPT7_GTBER_ADTDB_Msk (0x40000000UL) /*!< ADTDB (Bitfield-Mask: 0x01) */ +/* ========================================================= GTITC ========================================================= */ + #define R_GPT7_GTITC_ITLA_Pos (0UL) /*!< ITLA (Bit 0) */ + #define R_GPT7_GTITC_ITLA_Msk (0x1UL) /*!< ITLA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTITC_ITLB_Pos (1UL) /*!< ITLB (Bit 1) */ + #define R_GPT7_GTITC_ITLB_Msk (0x2UL) /*!< ITLB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTITC_ITLC_Pos (2UL) /*!< ITLC (Bit 2) */ + #define R_GPT7_GTITC_ITLC_Msk (0x4UL) /*!< ITLC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTITC_ITLD_Pos (3UL) /*!< ITLD (Bit 3) */ + #define R_GPT7_GTITC_ITLD_Msk (0x8UL) /*!< ITLD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTITC_ITLE_Pos (4UL) /*!< ITLE (Bit 4) */ + #define R_GPT7_GTITC_ITLE_Msk (0x10UL) /*!< ITLE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTITC_ITLF_Pos (5UL) /*!< ITLF (Bit 5) */ + #define R_GPT7_GTITC_ITLF_Msk (0x20UL) /*!< ITLF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTITC_IVTC_Pos (6UL) /*!< IVTC (Bit 6) */ + #define R_GPT7_GTITC_IVTC_Msk (0xc0UL) /*!< IVTC (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTITC_IVTT_Pos (8UL) /*!< IVTT (Bit 8) */ + #define R_GPT7_GTITC_IVTT_Msk (0x700UL) /*!< IVTT (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTITC_ADTAL_Pos (12UL) /*!< ADTAL (Bit 12) */ + #define R_GPT7_GTITC_ADTAL_Msk (0x1000UL) /*!< ADTAL (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTITC_ADTBL_Pos (14UL) /*!< ADTBL (Bit 14) */ + #define R_GPT7_GTITC_ADTBL_Msk (0x4000UL) /*!< ADTBL (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCNT ========================================================= */ +/* ========================================================= GTCCR ========================================================= */ +/* ========================================================= GTPR ========================================================== */ +/* ========================================================= GTPBR ========================================================= */ +/* ======================================================== GTPDBR ========================================================= */ +/* ======================================================== GTADTRA ======================================================== */ +/* ======================================================= GTADTBRA ======================================================== */ +/* ======================================================= GTADTDBRA ======================================================= */ +/* ======================================================== GTADTRB ======================================================== */ +/* ======================================================= GTADTBRB ======================================================== */ +/* ======================================================= GTADTDBRB ======================================================= */ +/* ======================================================== GTDTCR ========================================================= */ + #define R_GPT7_GTDTCR_TDE_Pos (0UL) /*!< TDE (Bit 0) */ + #define R_GPT7_GTDTCR_TDE_Msk (0x1UL) /*!< TDE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDTCR_TDBUE_Pos (4UL) /*!< TDBUE (Bit 4) */ + #define R_GPT7_GTDTCR_TDBUE_Msk (0x10UL) /*!< TDBUE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDTCR_TDBDE_Pos (5UL) /*!< TDBDE (Bit 5) */ + #define R_GPT7_GTDTCR_TDBDE_Msk (0x20UL) /*!< TDBDE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTDTCR_TDFER_Pos (8UL) /*!< TDFER (Bit 8) */ + #define R_GPT7_GTDTCR_TDFER_Msk (0x100UL) /*!< TDFER (Bitfield-Mask: 0x01) */ +/* ========================================================= GTDVU ========================================================= */ +/* ========================================================= GTDVD ========================================================= */ +/* ========================================================= GTDBU ========================================================= */ +/* ========================================================= GTDBD ========================================================= */ +/* ========================================================= GTSOS ========================================================= */ + #define R_GPT7_GTSOS_SOS_Pos (0UL) /*!< SOS (Bit 0) */ + #define R_GPT7_GTSOS_SOS_Msk (0x3UL) /*!< SOS (Bitfield-Mask: 0x03) */ +/* ======================================================== GTSOTR ========================================================= */ + #define R_GPT7_GTSOTR_SOTR_Pos (0UL) /*!< SOTR (Bit 0) */ + #define R_GPT7_GTSOTR_SOTR_Msk (0x1UL) /*!< SOTR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTADSMR ======================================================== */ + #define R_GPT7_GTADSMR_ADSMS0_Pos (0UL) /*!< ADSMS0 (Bit 0) */ + #define R_GPT7_GTADSMR_ADSMS0_Msk (0x3UL) /*!< ADSMS0 (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTADSMR_ADSMEN0_Pos (8UL) /*!< ADSMEN0 (Bit 8) */ + #define R_GPT7_GTADSMR_ADSMEN0_Msk (0x100UL) /*!< ADSMEN0 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTADSMR_ADSMS1_Pos (16UL) /*!< ADSMS1 (Bit 16) */ + #define R_GPT7_GTADSMR_ADSMS1_Msk (0x30000UL) /*!< ADSMS1 (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTADSMR_ADSMEN1_Pos (24UL) /*!< ADSMEN1 (Bit 24) */ + #define R_GPT7_GTADSMR_ADSMEN1_Msk (0x1000000UL) /*!< ADSMEN1 (Bitfield-Mask: 0x01) */ +/* ======================================================== GTEITC ========================================================= */ + #define R_GPT7_GTEITC_EIVTC1_Pos (0UL) /*!< EIVTC1 (Bit 0) */ + #define R_GPT7_GTEITC_EIVTC1_Msk (0x3UL) /*!< EIVTC1 (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTEITC_EIVTT1_Pos (4UL) /*!< EIVTT1 (Bit 4) */ + #define R_GPT7_GTEITC_EIVTT1_Msk (0xf0UL) /*!< EIVTT1 (Bitfield-Mask: 0x0f) */ + #define R_GPT7_GTEITC_EITCNT1_Pos (12UL) /*!< EITCNT1 (Bit 12) */ + #define R_GPT7_GTEITC_EITCNT1_Msk (0xf000UL) /*!< EITCNT1 (Bitfield-Mask: 0x0f) */ + #define R_GPT7_GTEITC_EIVTC2_Pos (16UL) /*!< EIVTC2 (Bit 16) */ + #define R_GPT7_GTEITC_EIVTC2_Msk (0x30000UL) /*!< EIVTC2 (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTEITC_EIVTT2_Pos (20UL) /*!< EIVTT2 (Bit 20) */ + #define R_GPT7_GTEITC_EIVTT2_Msk (0xf00000UL) /*!< EIVTT2 (Bitfield-Mask: 0x0f) */ + #define R_GPT7_GTEITC_EITCNT2IV_Pos (24UL) /*!< EITCNT2IV (Bit 24) */ + #define R_GPT7_GTEITC_EITCNT2IV_Msk (0xf000000UL) /*!< EITCNT2IV (Bitfield-Mask: 0x0f) */ + #define R_GPT7_GTEITC_EITCNT2_Pos (28UL) /*!< EITCNT2 (Bit 28) */ + #define R_GPT7_GTEITC_EITCNT2_Msk (0xf0000000UL) /*!< EITCNT2 (Bitfield-Mask: 0x0f) */ +/* ======================================================= GTEITLI1 ======================================================== */ + #define R_GPT7_GTEITLI1_EITLA_Pos (0UL) /*!< EITLA (Bit 0) */ + #define R_GPT7_GTEITLI1_EITLA_Msk (0x7UL) /*!< EITLA (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI1_EITLB_Pos (4UL) /*!< EITLB (Bit 4) */ + #define R_GPT7_GTEITLI1_EITLB_Msk (0x70UL) /*!< EITLB (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI1_EITLC_Pos (8UL) /*!< EITLC (Bit 8) */ + #define R_GPT7_GTEITLI1_EITLC_Msk (0x700UL) /*!< EITLC (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI1_EITLD_Pos (12UL) /*!< EITLD (Bit 12) */ + #define R_GPT7_GTEITLI1_EITLD_Msk (0x7000UL) /*!< EITLD (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI1_EITLE_Pos (16UL) /*!< EITLE (Bit 16) */ + #define R_GPT7_GTEITLI1_EITLE_Msk (0x70000UL) /*!< EITLE (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI1_EITLF_Pos (20UL) /*!< EITLF (Bit 20) */ + #define R_GPT7_GTEITLI1_EITLF_Msk (0x700000UL) /*!< EITLF (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI1_EITLV_Pos (24UL) /*!< EITLV (Bit 24) */ + #define R_GPT7_GTEITLI1_EITLV_Msk (0x7000000UL) /*!< EITLV (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI1_EITLU_Pos (28UL) /*!< EITLU (Bit 28) */ + #define R_GPT7_GTEITLI1_EITLU_Msk (0x70000000UL) /*!< EITLU (Bitfield-Mask: 0x07) */ +/* ======================================================= GTEITLI2 ======================================================== */ + #define R_GPT7_GTEITLI2_EADTAL_Pos (0UL) /*!< EADTAL (Bit 0) */ + #define R_GPT7_GTEITLI2_EADTAL_Msk (0x7UL) /*!< EADTAL (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLI2_EADTBL_Pos (4UL) /*!< EADTBL (Bit 4) */ + #define R_GPT7_GTEITLI2_EADTBL_Msk (0x70UL) /*!< EADTBL (Bitfield-Mask: 0x07) */ +/* ======================================================== GTEITLB ======================================================== */ + #define R_GPT7_GTEITLB_EBTLCA_Pos (0UL) /*!< EBTLCA (Bit 0) */ + #define R_GPT7_GTEITLB_EBTLCA_Msk (0x7UL) /*!< EBTLCA (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLB_EBTLCB_Pos (4UL) /*!< EBTLCB (Bit 4) */ + #define R_GPT7_GTEITLB_EBTLCB_Msk (0x70UL) /*!< EBTLCB (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLB_EBTLPR_Pos (8UL) /*!< EBTLPR (Bit 8) */ + #define R_GPT7_GTEITLB_EBTLPR_Msk (0x700UL) /*!< EBTLPR (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLB_EBTLADA_Pos (16UL) /*!< EBTLADA (Bit 16) */ + #define R_GPT7_GTEITLB_EBTLADA_Msk (0x70000UL) /*!< EBTLADA (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLB_EBTLADB_Pos (20UL) /*!< EBTLADB (Bit 20) */ + #define R_GPT7_GTEITLB_EBTLADB_Msk (0x700000UL) /*!< EBTLADB (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLB_EBTLDVU_Pos (24UL) /*!< EBTLDVU (Bit 24) */ + #define R_GPT7_GTEITLB_EBTLDVU_Msk (0x7000000UL) /*!< EBTLDVU (Bitfield-Mask: 0x07) */ + #define R_GPT7_GTEITLB_EBTLDVD_Pos (28UL) /*!< EBTLDVD (Bit 28) */ + #define R_GPT7_GTEITLB_EBTLDVD_Msk (0x70000000UL) /*!< EBTLDVD (Bitfield-Mask: 0x07) */ +/* ======================================================== GTSECSR ======================================================== */ + #define R_GPT7_GTSECSR_SECSEL0_Pos (0UL) /*!< SECSEL0 (Bit 0) */ + #define R_GPT7_GTSECSR_SECSEL0_Msk (0x1UL) /*!< SECSEL0 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECSR_SECSEL1_Pos (1UL) /*!< SECSEL1 (Bit 1) */ + #define R_GPT7_GTSECSR_SECSEL1_Msk (0x2UL) /*!< SECSEL1 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECSR_SECSEL2_Pos (2UL) /*!< SECSEL2 (Bit 2) */ + #define R_GPT7_GTSECSR_SECSEL2_Msk (0x4UL) /*!< SECSEL2 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECSR_SECSEL3_Pos (3UL) /*!< SECSEL3 (Bit 3) */ + #define R_GPT7_GTSECSR_SECSEL3_Msk (0x8UL) /*!< SECSEL3 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECSR_SECSEL4_Pos (4UL) /*!< SECSEL4 (Bit 4) */ + #define R_GPT7_GTSECSR_SECSEL4_Msk (0x10UL) /*!< SECSEL4 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECSR_SECSEL5_Pos (5UL) /*!< SECSEL5 (Bit 5) */ + #define R_GPT7_GTSECSR_SECSEL5_Msk (0x20UL) /*!< SECSEL5 (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECSR_SECSEL6_Pos (6UL) /*!< SECSEL6 (Bit 6) */ + #define R_GPT7_GTSECSR_SECSEL6_Msk (0x40UL) /*!< SECSEL6 (Bitfield-Mask: 0x01) */ +/* ======================================================== GTSECR ========================================================= */ + #define R_GPT7_GTSECR_SBDCE_Pos (0UL) /*!< SBDCE (Bit 0) */ + #define R_GPT7_GTSECR_SBDCE_Msk (0x1UL) /*!< SBDCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECR_SBDPE_Pos (1UL) /*!< SBDPE (Bit 1) */ + #define R_GPT7_GTSECR_SBDPE_Msk (0x2UL) /*!< SBDPE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECR_SBDAE_Pos (2UL) /*!< SBDAE (Bit 2) */ + #define R_GPT7_GTSECR_SBDAE_Msk (0x4UL) /*!< SBDAE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECR_SBDDE_Pos (3UL) /*!< SBDDE (Bit 3) */ + #define R_GPT7_GTSECR_SBDDE_Msk (0x8UL) /*!< SBDDE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECR_SBDCD_Pos (8UL) /*!< SBDCD (Bit 8) */ + #define R_GPT7_GTSECR_SBDCD_Msk (0x100UL) /*!< SBDCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECR_SBDPD_Pos (9UL) /*!< SBDPD (Bit 9) */ + #define R_GPT7_GTSECR_SBDPD_Msk (0x200UL) /*!< SBDPD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECR_SBDAD_Pos (10UL) /*!< SBDAD (Bit 10) */ + #define R_GPT7_GTSECR_SBDAD_Msk (0x400UL) /*!< SBDAD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSECR_SBDDD_Pos (11UL) /*!< SBDDD (Bit 11) */ + #define R_GPT7_GTSECR_SBDDD_Msk (0x800UL) /*!< SBDDD (Bitfield-Mask: 0x01) */ +/* ======================================================== GTSWSR ========================================================= */ + #define R_GPT7_GTSWSR_WSGTRGA_Pos (0UL) /*!< WSGTRGA (Bit 0) */ + #define R_GPT7_GTSWSR_WSGTRGA_Msk (0x3UL) /*!< WSGTRGA (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSWSR_WSGTRGB_Pos (2UL) /*!< WSGTRGB (Bit 2) */ + #define R_GPT7_GTSWSR_WSGTRGB_Msk (0xcUL) /*!< WSGTRGB (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSWSR_WSGTRGC_Pos (4UL) /*!< WSGTRGC (Bit 4) */ + #define R_GPT7_GTSWSR_WSGTRGC_Msk (0x30UL) /*!< WSGTRGC (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSWSR_WSGTRGD_Pos (6UL) /*!< WSGTRGD (Bit 6) */ + #define R_GPT7_GTSWSR_WSGTRGD_Msk (0xc0UL) /*!< WSGTRGD (Bitfield-Mask: 0x03) */ + #define R_GPT7_GTSWSR_WSELCA_Pos (16UL) /*!< WSELCA (Bit 16) */ + #define R_GPT7_GTSWSR_WSELCA_Msk (0x10000UL) /*!< WSELCA (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSWSR_WSELCB_Pos (17UL) /*!< WSELCB (Bit 17) */ + #define R_GPT7_GTSWSR_WSELCB_Msk (0x20000UL) /*!< WSELCB (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSWSR_WSELCC_Pos (18UL) /*!< WSELCC (Bit 18) */ + #define R_GPT7_GTSWSR_WSELCC_Msk (0x40000UL) /*!< WSELCC (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSWSR_WSELCD_Pos (19UL) /*!< WSELCD (Bit 19) */ + #define R_GPT7_GTSWSR_WSELCD_Msk (0x80000UL) /*!< WSELCD (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSWSR_WSELCE_Pos (20UL) /*!< WSELCE (Bit 20) */ + #define R_GPT7_GTSWSR_WSELCE_Msk (0x100000UL) /*!< WSELCE (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSWSR_WSELCF_Pos (21UL) /*!< WSELCF (Bit 21) */ + #define R_GPT7_GTSWSR_WSELCF_Msk (0x200000UL) /*!< WSELCF (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSWSR_WSELCG_Pos (22UL) /*!< WSELCG (Bit 22) */ + #define R_GPT7_GTSWSR_WSELCG_Msk (0x400000UL) /*!< WSELCG (Bitfield-Mask: 0x01) */ + #define R_GPT7_GTSWSR_CSELCH_Pos (23UL) /*!< CSELCH (Bit 23) */ + #define R_GPT7_GTSWSR_CSELCH_Msk (0x800000UL) /*!< CSELCH (Bitfield-Mask: 0x01) */ +/* ======================================================== GTSWOS ========================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_SCI0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== RDR ========================================================== */ + #define R_SCI0_RDR_RDAT_Pos (0UL) /*!< RDAT (Bit 0) */ + #define R_SCI0_RDR_RDAT_Msk (0x1ffUL) /*!< RDAT (Bitfield-Mask: 0x1ff) */ + #define R_SCI0_RDR_MPB_Pos (9UL) /*!< MPB (Bit 9) */ + #define R_SCI0_RDR_MPB_Msk (0x200UL) /*!< MPB (Bitfield-Mask: 0x01) */ + #define R_SCI0_RDR_DR_Pos (10UL) /*!< DR (Bit 10) */ + #define R_SCI0_RDR_DR_Msk (0x400UL) /*!< DR (Bitfield-Mask: 0x01) */ + #define R_SCI0_RDR_FPER_Pos (11UL) /*!< FPER (Bit 11) */ + #define R_SCI0_RDR_FPER_Msk (0x800UL) /*!< FPER (Bitfield-Mask: 0x01) */ + #define R_SCI0_RDR_FFER_Pos (12UL) /*!< FFER (Bit 12) */ + #define R_SCI0_RDR_FFER_Msk (0x1000UL) /*!< FFER (Bitfield-Mask: 0x01) */ + #define R_SCI0_RDR_ORER_Pos (24UL) /*!< ORER (Bit 24) */ + #define R_SCI0_RDR_ORER_Msk (0x1000000UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_RDR_PER_Pos (27UL) /*!< PER (Bit 27) */ + #define R_SCI0_RDR_PER_Msk (0x8000000UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_RDR_FER_Pos (28UL) /*!< FER (Bit 28) */ + #define R_SCI0_RDR_FER_Msk (0x10000000UL) /*!< FER (Bitfield-Mask: 0x01) */ +/* ========================================================== TDR ========================================================== */ + #define R_SCI0_TDR_TDAT_Pos (0UL) /*!< TDAT (Bit 0) */ + #define R_SCI0_TDR_TDAT_Msk (0x1ffUL) /*!< TDAT (Bitfield-Mask: 0x1ff) */ + #define R_SCI0_TDR_MPBT_Pos (9UL) /*!< MPBT (Bit 9) */ + #define R_SCI0_TDR_MPBT_Msk (0x200UL) /*!< MPBT (Bitfield-Mask: 0x01) */ +/* ========================================================= CCR0 ========================================================== */ + #define R_SCI0_CCR0_RE_Pos (0UL) /*!< RE (Bit 0) */ + #define R_SCI0_CCR0_RE_Msk (0x1UL) /*!< RE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_TE_Pos (4UL) /*!< TE (Bit 4) */ + #define R_SCI0_CCR0_TE_Msk (0x10UL) /*!< TE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_MPIE_Pos (8UL) /*!< MPIE (Bit 8) */ + #define R_SCI0_CCR0_MPIE_Msk (0x100UL) /*!< MPIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_DCME_Pos (9UL) /*!< DCME (Bit 9) */ + #define R_SCI0_CCR0_DCME_Msk (0x200UL) /*!< DCME (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_IDSEL_Pos (10UL) /*!< IDSEL (Bit 10) */ + #define R_SCI0_CCR0_IDSEL_Msk (0x400UL) /*!< IDSEL (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_RIE_Pos (16UL) /*!< RIE (Bit 16) */ + #define R_SCI0_CCR0_RIE_Msk (0x10000UL) /*!< RIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_TIE_Pos (20UL) /*!< TIE (Bit 20) */ + #define R_SCI0_CCR0_TIE_Msk (0x100000UL) /*!< TIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_TEIE_Pos (21UL) /*!< TEIE (Bit 21) */ + #define R_SCI0_CCR0_TEIE_Msk (0x200000UL) /*!< TEIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR0_SSE_Pos (24UL) /*!< SSE (Bit 24) */ + #define R_SCI0_CCR0_SSE_Msk (0x1000000UL) /*!< SSE (Bitfield-Mask: 0x01) */ +/* ========================================================= CCR1 ========================================================== */ + #define R_SCI0_CCR1_CTSE_Pos (0UL) /*!< CTSE (Bit 0) */ + #define R_SCI0_CCR1_CTSE_Msk (0x1UL) /*!< CTSE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_CTSPEN_Pos (1UL) /*!< CTSPEN (Bit 1) */ + #define R_SCI0_CCR1_CTSPEN_Msk (0x2UL) /*!< CTSPEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_SPB2DT_Pos (4UL) /*!< SPB2DT (Bit 4) */ + #define R_SCI0_CCR1_SPB2DT_Msk (0x10UL) /*!< SPB2DT (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_SPB2IO_Pos (5UL) /*!< SPB2IO (Bit 5) */ + #define R_SCI0_CCR1_SPB2IO_Msk (0x20UL) /*!< SPB2IO (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_PE_Pos (8UL) /*!< PE (Bit 8) */ + #define R_SCI0_CCR1_PE_Msk (0x100UL) /*!< PE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_PM_Pos (9UL) /*!< PM (Bit 9) */ + #define R_SCI0_CCR1_PM_Msk (0x200UL) /*!< PM (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_TINV_Pos (12UL) /*!< TINV (Bit 12) */ + #define R_SCI0_CCR1_TINV_Msk (0x1000UL) /*!< TINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_RINV_Pos (13UL) /*!< RINV (Bit 13) */ + #define R_SCI0_CCR1_RINV_Msk (0x2000UL) /*!< RINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_SPLP_Pos (16UL) /*!< SPLP (Bit 16) */ + #define R_SCI0_CCR1_SPLP_Msk (0x10000UL) /*!< SPLP (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_SHARPS_Pos (20UL) /*!< SHARPS (Bit 20) */ + #define R_SCI0_CCR1_SHARPS_Msk (0x100000UL) /*!< SHARPS (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR1_NFCS_Pos (24UL) /*!< NFCS (Bit 24) */ + #define R_SCI0_CCR1_NFCS_Msk (0x7000000UL) /*!< NFCS (Bitfield-Mask: 0x07) */ + #define R_SCI0_CCR1_NFEN_Pos (28UL) /*!< NFEN (Bit 28) */ + #define R_SCI0_CCR1_NFEN_Msk (0x10000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ +/* ========================================================= CCR2 ========================================================== */ + #define R_SCI0_CCR2_BCP_Pos (0UL) /*!< BCP (Bit 0) */ + #define R_SCI0_CCR2_BCP_Msk (0x7UL) /*!< BCP (Bitfield-Mask: 0x07) */ + #define R_SCI0_CCR2_BGDM_Pos (4UL) /*!< BGDM (Bit 4) */ + #define R_SCI0_CCR2_BGDM_Msk (0x10UL) /*!< BGDM (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR2_ABCS_Pos (5UL) /*!< ABCS (Bit 5) */ + #define R_SCI0_CCR2_ABCS_Msk (0x20UL) /*!< ABCS (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR2_ABCSE_Pos (6UL) /*!< ABCSE (Bit 6) */ + #define R_SCI0_CCR2_ABCSE_Msk (0x40UL) /*!< ABCSE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR2_BRR_Pos (8UL) /*!< BRR (Bit 8) */ + #define R_SCI0_CCR2_BRR_Msk (0xff00UL) /*!< BRR (Bitfield-Mask: 0xff) */ + #define R_SCI0_CCR2_BRME_Pos (16UL) /*!< BRME (Bit 16) */ + #define R_SCI0_CCR2_BRME_Msk (0x10000UL) /*!< BRME (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR2_CKS_Pos (20UL) /*!< CKS (Bit 20) */ + #define R_SCI0_CCR2_CKS_Msk (0x300000UL) /*!< CKS (Bitfield-Mask: 0x03) */ + #define R_SCI0_CCR2_MDDR_Pos (24UL) /*!< MDDR (Bit 24) */ + #define R_SCI0_CCR2_MDDR_Msk (0xff000000UL) /*!< MDDR (Bitfield-Mask: 0xff) */ +/* ========================================================= CCR3 ========================================================== */ + #define R_SCI0_CCR3_CPHA_Pos (0UL) /*!< CPHA (Bit 0) */ + #define R_SCI0_CCR3_CPHA_Msk (0x1UL) /*!< CPHA (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_CPOL_Pos (1UL) /*!< CPOL (Bit 1) */ + #define R_SCI0_CCR3_CPOL_Msk (0x2UL) /*!< CPOL (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_BPEN_Pos (7UL) /*!< BPEN (Bit 7) */ + #define R_SCI0_CCR3_BPEN_Msk (0x80UL) /*!< BPEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_CHR_Pos (8UL) /*!< CHR (Bit 8) */ + #define R_SCI0_CCR3_CHR_Msk (0x300UL) /*!< CHR (Bitfield-Mask: 0x03) */ + #define R_SCI0_CCR3_LSBF_Pos (12UL) /*!< LSBF (Bit 12) */ + #define R_SCI0_CCR3_LSBF_Msk (0x1000UL) /*!< LSBF (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_SINV_Pos (13UL) /*!< SINV (Bit 13) */ + #define R_SCI0_CCR3_SINV_Msk (0x2000UL) /*!< SINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_STP_Pos (14UL) /*!< STP (Bit 14) */ + #define R_SCI0_CCR3_STP_Msk (0x4000UL) /*!< STP (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_RXDESEL_Pos (15UL) /*!< RXDESEL (Bit 15) */ + #define R_SCI0_CCR3_RXDESEL_Msk (0x8000UL) /*!< RXDESEL (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_MOD_Pos (16UL) /*!< MOD (Bit 16) */ + #define R_SCI0_CCR3_MOD_Msk (0x70000UL) /*!< MOD (Bitfield-Mask: 0x07) */ + #define R_SCI0_CCR3_MP_Pos (19UL) /*!< MP (Bit 19) */ + #define R_SCI0_CCR3_MP_Msk (0x80000UL) /*!< MP (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_FM_Pos (20UL) /*!< FM (Bit 20) */ + #define R_SCI0_CCR3_FM_Msk (0x100000UL) /*!< FM (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_DEN_Pos (21UL) /*!< DEN (Bit 21) */ + #define R_SCI0_CCR3_DEN_Msk (0x200000UL) /*!< DEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_CKE_Pos (24UL) /*!< CKE (Bit 24) */ + #define R_SCI0_CCR3_CKE_Msk (0x3000000UL) /*!< CKE (Bitfield-Mask: 0x03) */ + #define R_SCI0_CCR3_GM_Pos (28UL) /*!< GM (Bit 28) */ + #define R_SCI0_CCR3_GM_Msk (0x10000000UL) /*!< GM (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR3_BLK_Pos (29UL) /*!< BLK (Bit 29) */ + #define R_SCI0_CCR3_BLK_Msk (0x20000000UL) /*!< BLK (Bitfield-Mask: 0x01) */ +/* ========================================================= CCR4 ========================================================== */ + #define R_SCI0_CCR4_CMPD_Pos (0UL) /*!< CMPD (Bit 0) */ + #define R_SCI0_CCR4_CMPD_Msk (0x1ffUL) /*!< CMPD (Bitfield-Mask: 0x1ff) */ + #define R_SCI0_CCR4_ASEN_Pos (16UL) /*!< ASEN (Bit 16) */ + #define R_SCI0_CCR4_ASEN_Msk (0x10000UL) /*!< ASEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR4_ATEN_Pos (17UL) /*!< ATEN (Bit 17) */ + #define R_SCI0_CCR4_ATEN_Msk (0x20000UL) /*!< ATEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR4_AST_Pos (24UL) /*!< AST (Bit 24) */ + #define R_SCI0_CCR4_AST_Msk (0x7000000UL) /*!< AST (Bitfield-Mask: 0x07) */ + #define R_SCI0_CCR4_AJD_Pos (27UL) /*!< AJD (Bit 27) */ + #define R_SCI0_CCR4_AJD_Msk (0x8000000UL) /*!< AJD (Bitfield-Mask: 0x01) */ + #define R_SCI0_CCR4_ATT_Pos (28UL) /*!< ATT (Bit 28) */ + #define R_SCI0_CCR4_ATT_Msk (0x70000000UL) /*!< ATT (Bitfield-Mask: 0x07) */ + #define R_SCI0_CCR4_AET_Pos (31UL) /*!< AET (Bit 31) */ + #define R_SCI0_CCR4_AET_Msk (0x80000000UL) /*!< AET (Bitfield-Mask: 0x01) */ +/* ========================================================== ICR ========================================================== */ + #define R_SCI0_ICR_IICDL_Pos (0UL) /*!< IICDL (Bit 0) */ + #define R_SCI0_ICR_IICDL_Msk (0x1fUL) /*!< IICDL (Bitfield-Mask: 0x1f) */ + #define R_SCI0_ICR_IICINTM_Pos (8UL) /*!< IICINTM (Bit 8) */ + #define R_SCI0_ICR_IICINTM_Msk (0x100UL) /*!< IICINTM (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_IICCSC_Pos (9UL) /*!< IICCSC (Bit 9) */ + #define R_SCI0_ICR_IICCSC_Msk (0x200UL) /*!< IICCSC (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_IICACKT_Pos (13UL) /*!< IICACKT (Bit 13) */ + #define R_SCI0_ICR_IICACKT_Msk (0x2000UL) /*!< IICACKT (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_IICSTAREQ_Pos (16UL) /*!< IICSTAREQ (Bit 16) */ + #define R_SCI0_ICR_IICSTAREQ_Msk (0x10000UL) /*!< IICSTAREQ (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_IICRSTAREQ_Pos (17UL) /*!< IICRSTAREQ (Bit 17) */ + #define R_SCI0_ICR_IICRSTAREQ_Msk (0x20000UL) /*!< IICRSTAREQ (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_IICSTPREQ_Pos (18UL) /*!< IICSTPREQ (Bit 18) */ + #define R_SCI0_ICR_IICSTPREQ_Msk (0x40000UL) /*!< IICSTPREQ (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_IICSDAS_Pos (20UL) /*!< IICSDAS (Bit 20) */ + #define R_SCI0_ICR_IICSDAS_Msk (0x300000UL) /*!< IICSDAS (Bitfield-Mask: 0x03) */ + #define R_SCI0_ICR_IICSCLS_Pos (22UL) /*!< IICSCLS (Bit 22) */ + #define R_SCI0_ICR_IICSCLS_Msk (0xc00000UL) /*!< IICSCLS (Bitfield-Mask: 0x03) */ +/* ========================================================== FCR ========================================================== */ + #define R_SCI0_FCR_DRES_Pos (0UL) /*!< DRES (Bit 0) */ + #define R_SCI0_FCR_DRES_Msk (0x1UL) /*!< DRES (Bitfield-Mask: 0x01) */ + #define R_SCI0_FCR_TTRG_Pos (8UL) /*!< TTRG (Bit 8) */ + #define R_SCI0_FCR_TTRG_Msk (0x1f00UL) /*!< TTRG (Bitfield-Mask: 0x1f) */ + #define R_SCI0_FCR_TFRST_Pos (15UL) /*!< TFRST (Bit 15) */ + #define R_SCI0_FCR_TFRST_Msk (0x8000UL) /*!< TFRST (Bitfield-Mask: 0x01) */ + #define R_SCI0_FCR_RTRG_Pos (16UL) /*!< RTRG (Bit 16) */ + #define R_SCI0_FCR_RTRG_Msk (0x1f0000UL) /*!< RTRG (Bitfield-Mask: 0x1f) */ + #define R_SCI0_FCR_RFRST_Pos (23UL) /*!< RFRST (Bit 23) */ + #define R_SCI0_FCR_RFRST_Msk (0x800000UL) /*!< RFRST (Bitfield-Mask: 0x01) */ + #define R_SCI0_FCR_RSTRG_Pos (24UL) /*!< RSTRG (Bit 24) */ + #define R_SCI0_FCR_RSTRG_Msk (0x1f000000UL) /*!< RSTRG (Bitfield-Mask: 0x1f) */ +/* ========================================================== DCR ========================================================== */ + #define R_SCI0_DCR_DEPOL_Pos (0UL) /*!< DEPOL (Bit 0) */ + #define R_SCI0_DCR_DEPOL_Msk (0x1UL) /*!< DEPOL (Bitfield-Mask: 0x01) */ + #define R_SCI0_DCR_DEAST_Pos (8UL) /*!< DEAST (Bit 8) */ + #define R_SCI0_DCR_DEAST_Msk (0x1f00UL) /*!< DEAST (Bitfield-Mask: 0x1f) */ + #define R_SCI0_DCR_DENGT_Pos (16UL) /*!< DENGT (Bit 16) */ + #define R_SCI0_DCR_DENGT_Msk (0x1f0000UL) /*!< DENGT (Bitfield-Mask: 0x1f) */ +/* ========================================================== CSR ========================================================== */ + #define R_SCI0_CSR_ERS_Pos (4UL) /*!< ERS (Bit 4) */ + #define R_SCI0_CSR_ERS_Msk (0x10UL) /*!< ERS (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_RXDMON_Pos (15UL) /*!< RXDMON (Bit 15) */ + #define R_SCI0_CSR_RXDMON_Msk (0x8000UL) /*!< RXDMON (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_DCMF_Pos (16UL) /*!< DCMF (Bit 16) */ + #define R_SCI0_CSR_DCMF_Msk (0x10000UL) /*!< DCMF (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_DPER_Pos (17UL) /*!< DPER (Bit 17) */ + #define R_SCI0_CSR_DPER_Msk (0x20000UL) /*!< DPER (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_DFER_Pos (18UL) /*!< DFER (Bit 18) */ + #define R_SCI0_CSR_DFER_Msk (0x40000UL) /*!< DFER (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_ORER_Pos (24UL) /*!< ORER (Bit 24) */ + #define R_SCI0_CSR_ORER_Msk (0x1000000UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_MFF_Pos (26UL) /*!< MFF (Bit 26) */ + #define R_SCI0_CSR_MFF_Msk (0x4000000UL) /*!< MFF (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_PER_Pos (27UL) /*!< PER (Bit 27) */ + #define R_SCI0_CSR_PER_Msk (0x8000000UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_FER_Pos (28UL) /*!< FER (Bit 28) */ + #define R_SCI0_CSR_FER_Msk (0x10000000UL) /*!< FER (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_TDRE_Pos (29UL) /*!< TDRE (Bit 29) */ + #define R_SCI0_CSR_TDRE_Msk (0x20000000UL) /*!< TDRE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_TEND_Pos (30UL) /*!< TEND (Bit 30) */ + #define R_SCI0_CSR_TEND_Msk (0x40000000UL) /*!< TEND (Bitfield-Mask: 0x01) */ + #define R_SCI0_CSR_RDRF_Pos (31UL) /*!< RDRF (Bit 31) */ + #define R_SCI0_CSR_RDRF_Msk (0x80000000UL) /*!< RDRF (Bitfield-Mask: 0x01) */ +/* ========================================================== ISR ========================================================== */ + #define R_SCI0_ISR_IICACKR_Pos (0UL) /*!< IICACKR (Bit 0) */ + #define R_SCI0_ISR_IICACKR_Msk (0x1UL) /*!< IICACKR (Bitfield-Mask: 0x01) */ + #define R_SCI0_ISR_IICSTIF_Pos (3UL) /*!< IICSTIF (Bit 3) */ + #define R_SCI0_ISR_IICSTIF_Msk (0x8UL) /*!< IICSTIF (Bitfield-Mask: 0x01) */ +/* ========================================================= FRSR ========================================================== */ + #define R_SCI0_FRSR_DR_Pos (0UL) /*!< DR (Bit 0) */ + #define R_SCI0_FRSR_DR_Msk (0x1UL) /*!< DR (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRSR_R_Pos (8UL) /*!< R (Bit 8) */ + #define R_SCI0_FRSR_R_Msk (0x3f00UL) /*!< R (Bitfield-Mask: 0x3f) */ + #define R_SCI0_FRSR_PNUM_Pos (16UL) /*!< PNUM (Bit 16) */ + #define R_SCI0_FRSR_PNUM_Msk (0x3f0000UL) /*!< PNUM (Bitfield-Mask: 0x3f) */ + #define R_SCI0_FRSR_FNUM_Pos (24UL) /*!< FNUM (Bit 24) */ + #define R_SCI0_FRSR_FNUM_Msk (0x3f000000UL) /*!< FNUM (Bitfield-Mask: 0x3f) */ +/* ========================================================= FTSR ========================================================== */ + #define R_SCI0_FTSR_T_Pos (0UL) /*!< T (Bit 0) */ + #define R_SCI0_FTSR_T_Msk (0x3fUL) /*!< T (Bitfield-Mask: 0x3f) */ +/* ========================================================= CFCLR ========================================================= */ + #define R_SCI0_CFCLR_ERSC_Pos (4UL) /*!< ERSC (Bit 4) */ + #define R_SCI0_CFCLR_ERSC_Msk (0x10UL) /*!< ERSC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_DCMFC_Pos (16UL) /*!< DCMFC (Bit 16) */ + #define R_SCI0_CFCLR_DCMFC_Msk (0x10000UL) /*!< DCMFC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_DPERC_Pos (17UL) /*!< DPERC (Bit 17) */ + #define R_SCI0_CFCLR_DPERC_Msk (0x20000UL) /*!< DPERC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_DFERC_Pos (18UL) /*!< DFERC (Bit 18) */ + #define R_SCI0_CFCLR_DFERC_Msk (0x40000UL) /*!< DFERC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_ORERC_Pos (24UL) /*!< ORERC (Bit 24) */ + #define R_SCI0_CFCLR_ORERC_Msk (0x1000000UL) /*!< ORERC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_MFFC_Pos (26UL) /*!< MFFC (Bit 26) */ + #define R_SCI0_CFCLR_MFFC_Msk (0x4000000UL) /*!< MFFC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_PERC_Pos (27UL) /*!< PERC (Bit 27) */ + #define R_SCI0_CFCLR_PERC_Msk (0x8000000UL) /*!< PERC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_FERC_Pos (28UL) /*!< FERC (Bit 28) */ + #define R_SCI0_CFCLR_FERC_Msk (0x10000000UL) /*!< FERC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_TDREC_Pos (29UL) /*!< TDREC (Bit 29) */ + #define R_SCI0_CFCLR_TDREC_Msk (0x20000000UL) /*!< TDREC (Bitfield-Mask: 0x01) */ + #define R_SCI0_CFCLR_RDRFC_Pos (31UL) /*!< RDRFC (Bit 31) */ + #define R_SCI0_CFCLR_RDRFC_Msk (0x80000000UL) /*!< RDRFC (Bitfield-Mask: 0x01) */ +/* ======================================================== ICFCLR ========================================================= */ + #define R_SCI0_ICFCLR_IICSTIFC_Pos (3UL) /*!< IICSTIFC (Bit 3) */ + #define R_SCI0_ICFCLR_IICSTIFC_Msk (0x8UL) /*!< IICSTIFC (Bitfield-Mask: 0x01) */ +/* ========================================================= FFCLR ========================================================= */ + #define R_SCI0_FFCLR_DRC_Pos (0UL) /*!< DRC (Bit 0) */ + #define R_SCI0_FFCLR_DRC_Msk (0x1UL) /*!< DRC (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_SPI0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SPDR ========================================================== */ + #define R_SPI0_SPDR_SPD_Pos (0UL) /*!< SPD (Bit 0) */ + #define R_SPI0_SPDR_SPD_Msk (0xffffffffUL) /*!< SPD (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== SPDR_HA ======================================================== */ +/* ======================================================== SPDR_BY ======================================================== */ +/* ========================================================= SPCKD ========================================================= */ + #define R_SPI0_SPCKD_SCKDL_Pos (0UL) /*!< SCKDL (Bit 0) */ + #define R_SPI0_SPCKD_SCKDL_Msk (0x7UL) /*!< SCKDL (Bitfield-Mask: 0x07) */ +/* ========================================================= SSLND ========================================================= */ + #define R_SPI0_SSLND_SLNDL_Pos (0UL) /*!< SLNDL (Bit 0) */ + #define R_SPI0_SSLND_SLNDL_Msk (0x7UL) /*!< SLNDL (Bitfield-Mask: 0x07) */ +/* ========================================================= SPND ========================================================== */ + #define R_SPI0_SPND_SPNDL_Pos (0UL) /*!< SPNDL (Bit 0) */ + #define R_SPI0_SPND_SPNDL_Msk (0x7UL) /*!< SPNDL (Bitfield-Mask: 0x07) */ +/* ========================================================= MRCKD ========================================================= */ + #define R_SPI0_MRCKD_ARST_Pos (0UL) /*!< ARST (Bit 0) */ + #define R_SPI0_MRCKD_ARST_Msk (0x7UL) /*!< ARST (Bitfield-Mask: 0x07) */ +/* ========================================================= SPCR ========================================================== */ + #define R_SPI0_SPCR_SPE_Pos (0UL) /*!< SPE (Bit 0) */ + #define R_SPI0_SPCR_SPE_Msk (0x1UL) /*!< SPE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPSCKSEL_Pos (7UL) /*!< SPSCKSEL (Bit 7) */ + #define R_SPI0_SPCR_SPSCKSEL_Msk (0x80UL) /*!< SPSCKSEL (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPPE_Pos (8UL) /*!< SPPE (Bit 8) */ + #define R_SPI0_SPCR_SPPE_Msk (0x100UL) /*!< SPPE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPOE_Pos (9UL) /*!< SPOE (Bit 9) */ + #define R_SPI0_SPCR_SPOE_Msk (0x200UL) /*!< SPOE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_PTE_Pos (11UL) /*!< PTE (Bit 11) */ + #define R_SPI0_SPCR_PTE_Msk (0x800UL) /*!< PTE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SCKASE_Pos (12UL) /*!< SCKASE (Bit 12) */ + #define R_SPI0_SPCR_SCKASE_Msk (0x1000UL) /*!< SCKASE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_BFDS_Pos (13UL) /*!< BFDS (Bit 13) */ + #define R_SPI0_SPCR_BFDS_Msk (0x2000UL) /*!< BFDS (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_MODFEN_Pos (14UL) /*!< MODFEN (Bit 14) */ + #define R_SPI0_SPCR_MODFEN_Msk (0x4000UL) /*!< MODFEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPEIE_Pos (16UL) /*!< SPEIE (Bit 16) */ + #define R_SPI0_SPCR_SPEIE_Msk (0x10000UL) /*!< SPEIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPRIE_Pos (17UL) /*!< SPRIE (Bit 17) */ + #define R_SPI0_SPCR_SPRIE_Msk (0x20000UL) /*!< SPRIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPIIE_Pos (18UL) /*!< SPIIE (Bit 18) */ + #define R_SPI0_SPCR_SPIIE_Msk (0x40000UL) /*!< SPIIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPDRES_Pos (19UL) /*!< SPDRES (Bit 19) */ + #define R_SPI0_SPCR_SPDRES_Msk (0x80000UL) /*!< SPDRES (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPTIE_Pos (20UL) /*!< SPTIE (Bit 20) */ + #define R_SPI0_SPCR_SPTIE_Msk (0x100000UL) /*!< SPTIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_CENDIE_Pos (21UL) /*!< CENDIE (Bit 21) */ + #define R_SPI0_SPCR_CENDIE_Msk (0x200000UL) /*!< CENDIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPMS_Pos (24UL) /*!< SPMS (Bit 24) */ + #define R_SPI0_SPCR_SPMS_Msk (0x1000000UL) /*!< SPMS (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPFRF_Pos (25UL) /*!< SPFRF (Bit 25) */ + #define R_SPI0_SPCR_SPFRF_Msk (0x2000000UL) /*!< SPFRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_TXMD_Pos (28UL) /*!< TXMD (Bit 28) */ + #define R_SPI0_SPCR_TXMD_Msk (0x30000000UL) /*!< TXMD (Bitfield-Mask: 0x03) */ + #define R_SPI0_SPCR_MSTR_Pos (30UL) /*!< MSTR (Bit 30) */ + #define R_SPI0_SPCR_MSTR_Msk (0x40000000UL) /*!< MSTR (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_BPEN_Pos (31UL) /*!< BPEN (Bit 31) */ + #define R_SPI0_SPCR_BPEN_Msk (0x80000000UL) /*!< BPEN (Bitfield-Mask: 0x01) */ +/* ======================================================== SPCRRM ========================================================= */ + #define R_SPI0_SPCRRM_RMFM_Pos (0UL) /*!< RMFM (Bit 0) */ + #define R_SPI0_SPCRRM_RMFM_Msk (0x1fUL) /*!< RMFM (Bitfield-Mask: 0x1f) */ + #define R_SPI0_SPCRRM_RMEDTG_Pos (6UL) /*!< RMEDTG (Bit 6) */ + #define R_SPI0_SPCRRM_RMEDTG_Msk (0x40UL) /*!< RMEDTG (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCRRM_RMSTTG_Pos (7UL) /*!< RMSTTG (Bit 7) */ + #define R_SPI0_SPCRRM_RMSTTG_Msk (0x80UL) /*!< RMSTTG (Bitfield-Mask: 0x01) */ +/* ======================================================== SPDRCR ========================================================= */ + #define R_SPI0_SPDRCR_SPDRC_Pos (0UL) /*!< SPDRC (Bit 0) */ + #define R_SPI0_SPDRCR_SPDRC_Msk (0xffUL) /*!< SPDRC (Bitfield-Mask: 0xff) */ +/* ========================================================= SPPCR ========================================================= */ + #define R_SPI0_SPPCR_SPLP_Pos (0UL) /*!< SPLP (Bit 0) */ + #define R_SPI0_SPPCR_SPLP_Msk (0x1UL) /*!< SPLP (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPCR_SPLP2_Pos (1UL) /*!< SPLP2 (Bit 1) */ + #define R_SPI0_SPPCR_SPLP2_Msk (0x2UL) /*!< SPLP2 (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPCR_SPOM_Pos (2UL) /*!< SPOM (Bit 2) */ + #define R_SPI0_SPPCR_SPOM_Msk (0x4UL) /*!< SPOM (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPCR_MOIFV_Pos (4UL) /*!< MOIFV (Bit 4) */ + #define R_SPI0_SPPCR_MOIFV_Msk (0x10UL) /*!< MOIFV (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPCR_MOIFE_Pos (5UL) /*!< MOIFE (Bit 5) */ + #define R_SPI0_SPPCR_MOIFE_Msk (0x20UL) /*!< MOIFE (Bitfield-Mask: 0x01) */ +/* ========================================================= SPCR2 ========================================================= */ + #define R_SPI0_SPCR2_SPSCKDL_Pos (0UL) /*!< SPSCKDL (Bit 0) */ + #define R_SPI0_SPCR2_SPSCKDL_Msk (0x7UL) /*!< SPSCKDL (Bitfield-Mask: 0x07) */ +/* ========================================================= SSLP ========================================================== */ + #define R_SPI0_SSLP_SSL0P_Pos (0UL) /*!< SSL0P (Bit 0) */ + #define R_SPI0_SSLP_SSL0P_Msk (0x1UL) /*!< SSL0P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL1P_Pos (1UL) /*!< SSL1P (Bit 1) */ + #define R_SPI0_SSLP_SSL1P_Msk (0x2UL) /*!< SSL1P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL2P_Pos (2UL) /*!< SSL2P (Bit 2) */ + #define R_SPI0_SSLP_SSL2P_Msk (0x4UL) /*!< SSL2P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL3P_Pos (3UL) /*!< SSL3P (Bit 3) */ + #define R_SPI0_SSLP_SSL3P_Msk (0x8UL) /*!< SSL3P (Bitfield-Mask: 0x01) */ +/* ========================================================= SPBR ========================================================== */ + #define R_SPI0_SPBR_SPR_Pos (0UL) /*!< SPR (Bit 0) */ + #define R_SPI0_SPBR_SPR_Msk (0xffUL) /*!< SPR (Bitfield-Mask: 0xff) */ +/* ========================================================= SPSCR ========================================================= */ + #define R_SPI0_SPSCR_SPSLN_Pos (0UL) /*!< SPSLN (Bit 0) */ + #define R_SPI0_SPSCR_SPSLN_Msk (0x7UL) /*!< SPSLN (Bitfield-Mask: 0x07) */ +/* ========================================================= SPCMD ========================================================= */ + #define R_SPI0_SPCMD_CPHA_Pos (0UL) /*!< CPHA (Bit 0) */ + #define R_SPI0_SPCMD_CPHA_Msk (0x1UL) /*!< CPHA (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_CPOL_Pos (1UL) /*!< CPOL (Bit 1) */ + #define R_SPI0_SPCMD_CPOL_Msk (0x2UL) /*!< CPOL (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_BRDV_Pos (2UL) /*!< BRDV (Bit 2) */ + #define R_SPI0_SPCMD_BRDV_Msk (0xcUL) /*!< BRDV (Bitfield-Mask: 0x03) */ + #define R_SPI0_SPCMD_SSLKP_Pos (7UL) /*!< SSLKP (Bit 7) */ + #define R_SPI0_SPCMD_SSLKP_Msk (0x80UL) /*!< SSLKP (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_LSBF_Pos (12UL) /*!< LSBF (Bit 12) */ + #define R_SPI0_SPCMD_LSBF_Msk (0x1000UL) /*!< LSBF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SPNDEN_Pos (13UL) /*!< SPNDEN (Bit 13) */ + #define R_SPI0_SPCMD_SPNDEN_Msk (0x2000UL) /*!< SPNDEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SLNDEN_Pos (14UL) /*!< SLNDEN (Bit 14) */ + #define R_SPI0_SPCMD_SLNDEN_Msk (0x4000UL) /*!< SLNDEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SCKDEN_Pos (15UL) /*!< SCKDEN (Bit 15) */ + #define R_SPI0_SPCMD_SCKDEN_Msk (0x8000UL) /*!< SCKDEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SPB_Pos (16UL) /*!< SPB (Bit 16) */ + #define R_SPI0_SPCMD_SPB_Msk (0x1f0000UL) /*!< SPB (Bitfield-Mask: 0x1f) */ + #define R_SPI0_SPCMD_SSLA_Pos (24UL) /*!< SSLA (Bit 24) */ + #define R_SPI0_SPCMD_SSLA_Msk (0x3000000UL) /*!< SSLA (Bitfield-Mask: 0x03) */ +/* ========================================================= SPDCR ========================================================= */ + #define R_SPI0_SPDCR_BYSW_Pos (0UL) /*!< BYSW (Bit 0) */ + #define R_SPI0_SPDCR_BYSW_Msk (0x1UL) /*!< BYSW (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR_SLSEL_Pos (1UL) /*!< SLSEL (Bit 1) */ + #define R_SPI0_SPDCR_SLSEL_Msk (0x6UL) /*!< SLSEL (Bitfield-Mask: 0x03) */ + #define R_SPI0_SPDCR_SPRDTD_Pos (3UL) /*!< SPRDTD (Bit 3) */ + #define R_SPI0_SPDCR_SPRDTD_Msk (0x8UL) /*!< SPRDTD (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR_SINV_Pos (4UL) /*!< SINV (Bit 4) */ + #define R_SPI0_SPDCR_SINV_Msk (0x10UL) /*!< SINV (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR_SPFC_Pos (8UL) /*!< SPFC (Bit 8) */ + #define R_SPI0_SPDCR_SPFC_Msk (0x300UL) /*!< SPFC (Bitfield-Mask: 0x03) */ +/* ======================================================== SPDCR2 ========================================================= */ + #define R_SPI0_SPDCR2_RTRG_Pos (0UL) /*!< RTRG (Bit 0) */ + #define R_SPI0_SPDCR2_RTRG_Msk (0x3UL) /*!< RTRG (Bitfield-Mask: 0x03) */ + #define R_SPI0_SPDCR2_TTRG_Pos (8UL) /*!< TTRG (Bit 8) */ + #define R_SPI0_SPDCR2_TTRG_Msk (0x300UL) /*!< TTRG (Bitfield-Mask: 0x03) */ +/* ========================================================= SPSSR ========================================================= */ + #define R_SPI0_SPSSR_SPCP_Pos (0UL) /*!< SPCP (Bit 0) */ + #define R_SPI0_SPSSR_SPCP_Msk (0x7UL) /*!< SPCP (Bitfield-Mask: 0x07) */ + #define R_SPI0_SPSSR_SPECM_Pos (4UL) /*!< SPECM (Bit 4) */ + #define R_SPI0_SPSSR_SPECM_Msk (0x70UL) /*!< SPECM (Bitfield-Mask: 0x07) */ +/* ========================================================= SPSR ========================================================== */ + #define R_SPI0_SPSR_SPDRF_Pos (7UL) /*!< SPDRF (Bit 7) */ + #define R_SPI0_SPSR_SPDRF_Msk (0x80UL) /*!< SPDRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_OVRF_Pos (8UL) /*!< OVRF (Bit 8) */ + #define R_SPI0_SPSR_OVRF_Msk (0x100UL) /*!< OVRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_IDLNF_Pos (9UL) /*!< IDLNF (Bit 9) */ + #define R_SPI0_SPSR_IDLNF_Msk (0x200UL) /*!< IDLNF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_MODF_Pos (10UL) /*!< MODF (Bit 10) */ + #define R_SPI0_SPSR_MODF_Msk (0x400UL) /*!< MODF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_PERF_Pos (11UL) /*!< PERF (Bit 11) */ + #define R_SPI0_SPSR_PERF_Msk (0x800UL) /*!< PERF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_UDRF_Pos (12UL) /*!< UDRF (Bit 12) */ + #define R_SPI0_SPSR_UDRF_Msk (0x1000UL) /*!< UDRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_SPTEF_Pos (13UL) /*!< SPTEF (Bit 13) */ + #define R_SPI0_SPSR_SPTEF_Msk (0x2000UL) /*!< SPTEF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_CENDF_Pos (14UL) /*!< CENDF (Bit 14) */ + #define R_SPI0_SPSR_CENDF_Msk (0x4000UL) /*!< CENDF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_SPRF_Pos (15UL) /*!< SPRF (Bit 15) */ + #define R_SPI0_SPSR_SPRF_Msk (0x8000UL) /*!< SPRF (Bitfield-Mask: 0x01) */ +/* ======================================================== SPTFSR ========================================================= */ + #define R_SPI0_SPTFSR_TFDN_Pos (0UL) /*!< TFDN (Bit 0) */ + #define R_SPI0_SPTFSR_TFDN_Msk (0x7UL) /*!< TFDN (Bitfield-Mask: 0x07) */ +/* ======================================================== SPRFSR ========================================================= */ + #define R_SPI0_SPRFSR_RFDN_Pos (0UL) /*!< RFDN (Bit 0) */ + #define R_SPI0_SPRFSR_RFDN_Msk (0x7UL) /*!< RFDN (Bitfield-Mask: 0x07) */ +/* ========================================================= SPPSR ========================================================= */ + #define R_SPI0_SPPSR_SPEPS_Pos (0UL) /*!< SPEPS (Bit 0) */ + #define R_SPI0_SPPSR_SPEPS_Msk (0x1UL) /*!< SPEPS (Bitfield-Mask: 0x01) */ +/* ========================================================= SPSRC ========================================================= */ + #define R_SPI0_SPSRC_SPDRFC_Pos (7UL) /*!< SPDRFC (Bit 7) */ + #define R_SPI0_SPSRC_SPDRFC_Msk (0x80UL) /*!< SPDRFC (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSRC_OVRFC_Pos (8UL) /*!< OVRFC (Bit 8) */ + #define R_SPI0_SPSRC_OVRFC_Msk (0x100UL) /*!< OVRFC (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSRC_MODFC_Pos (10UL) /*!< MODFC (Bit 10) */ + #define R_SPI0_SPSRC_MODFC_Msk (0x400UL) /*!< MODFC (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSRC_PERFC_Pos (11UL) /*!< PERFC (Bit 11) */ + #define R_SPI0_SPSRC_PERFC_Msk (0x800UL) /*!< PERFC (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSRC_UDRFC_Pos (12UL) /*!< UDRFC (Bit 12) */ + #define R_SPI0_SPSRC_UDRFC_Msk (0x1000UL) /*!< UDRFC (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSRC_SPTEFC_Pos (13UL) /*!< SPTEFC (Bit 13) */ + #define R_SPI0_SPSRC_SPTEFC_Msk (0x2000UL) /*!< SPTEFC (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSRC_CENDFC_Pos (14UL) /*!< CENDFC (Bit 14) */ + #define R_SPI0_SPSRC_CENDFC_Msk (0x4000UL) /*!< CENDFC (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSRC_SPRFC_Pos (15UL) /*!< SPRFC (Bit 15) */ + #define R_SPI0_SPSRC_SPRFC_Msk (0x8000UL) /*!< SPRFC (Bitfield-Mask: 0x01) */ +/* ========================================================= SPFCR ========================================================= */ + #define R_SPI0_SPFCR_SPFRST_Pos (0UL) /*!< SPFRST (Bit 0) */ + #define R_SPI0_SPFCR_SPFRST_Msk (0x1UL) /*!< SPFRST (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_CRC0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CRCCR0 ========================================================= */ + #define R_CRC0_CRCCR0_GPS_Pos (0UL) /*!< GPS (Bit 0) */ + #define R_CRC0_CRCCR0_GPS_Msk (0x7UL) /*!< GPS (Bitfield-Mask: 0x07) */ + #define R_CRC0_CRCCR0_LMS_Pos (6UL) /*!< LMS (Bit 6) */ + #define R_CRC0_CRCCR0_LMS_Msk (0x40UL) /*!< LMS (Bitfield-Mask: 0x01) */ + #define R_CRC0_CRCCR0_DORCLR_Pos (7UL) /*!< DORCLR (Bit 7) */ + #define R_CRC0_CRCCR0_DORCLR_Msk (0x80UL) /*!< DORCLR (Bitfield-Mask: 0x01) */ +/* ======================================================== CRCDIR ========================================================= */ +/* ======================================================= CRCDIR_BY ======================================================= */ +/* ======================================================== CRCDOR ========================================================= */ +/* ======================================================= CRCDOR_HA ======================================================= */ +/* ======================================================= CRCDOR_BY ======================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_CANFD ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CFDGIPV ======================================================== */ + #define R_CANFD_CFDGIPV_IPV_Pos (0UL) /*!< IPV (Bit 0) */ + #define R_CANFD_CFDGIPV_IPV_Msk (0xffUL) /*!< IPV (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDGIPV_IPT_Pos (8UL) /*!< IPT (Bit 8) */ + #define R_CANFD_CFDGIPV_IPT_Msk (0x300UL) /*!< IPT (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDGIPV_PSI_Pos (16UL) /*!< PSI (Bit 16) */ + #define R_CANFD_CFDGIPV_PSI_Msk (0x3fff0000UL) /*!< PSI (Bitfield-Mask: 0x3fff) */ +/* ======================================================== CFDGCFG ======================================================== */ + #define R_CANFD_CFDGCFG_TPRI_Pos (0UL) /*!< TPRI (Bit 0) */ + #define R_CANFD_CFDGCFG_TPRI_Msk (0x1UL) /*!< TPRI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_DCE_Pos (1UL) /*!< DCE (Bit 1) */ + #define R_CANFD_CFDGCFG_DCE_Msk (0x2UL) /*!< DCE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_DRE_Pos (2UL) /*!< DRE (Bit 2) */ + #define R_CANFD_CFDGCFG_DRE_Msk (0x4UL) /*!< DRE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_MME_Pos (3UL) /*!< MME (Bit 3) */ + #define R_CANFD_CFDGCFG_MME_Msk (0x8UL) /*!< MME (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_DCS_Pos (4UL) /*!< DCS (Bit 4) */ + #define R_CANFD_CFDGCFG_DCS_Msk (0x10UL) /*!< DCS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_CMPOC_Pos (5UL) /*!< CMPOC (Bit 5) */ + #define R_CANFD_CFDGCFG_CMPOC_Msk (0x20UL) /*!< CMPOC (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_TSP_Pos (8UL) /*!< TSP (Bit 8) */ + #define R_CANFD_CFDGCFG_TSP_Msk (0xf00UL) /*!< TSP (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDGCFG_TSSS_Pos (12UL) /*!< TSSS (Bit 12) */ + #define R_CANFD_CFDGCFG_TSSS_Msk (0x1000UL) /*!< TSSS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_TSBTCS_Pos (13UL) /*!< TSBTCS (Bit 13) */ + #define R_CANFD_CFDGCFG_TSBTCS_Msk (0xe000UL) /*!< TSBTCS (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDGCFG_ITRCP_Pos (16UL) /*!< ITRCP (Bit 16) */ + #define R_CANFD_CFDGCFG_ITRCP_Msk (0xffff0000UL) /*!< ITRCP (Bitfield-Mask: 0xffff) */ +/* ======================================================== CFDGCTR ======================================================== */ + #define R_CANFD_CFDGCTR_GMDC_Pos (0UL) /*!< GMDC (Bit 0) */ + #define R_CANFD_CFDGCTR_GMDC_Msk (0x3UL) /*!< GMDC (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDGCTR_GSLPR_Pos (2UL) /*!< GSLPR (Bit 2) */ + #define R_CANFD_CFDGCTR_GSLPR_Msk (0x4UL) /*!< GSLPR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_DEIE_Pos (8UL) /*!< DEIE (Bit 8) */ + #define R_CANFD_CFDGCTR_DEIE_Msk (0x100UL) /*!< DEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_MEIE_Pos (9UL) /*!< MEIE (Bit 9) */ + #define R_CANFD_CFDGCTR_MEIE_Msk (0x200UL) /*!< MEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_THLEIE_Pos (10UL) /*!< THLEIE (Bit 10) */ + #define R_CANFD_CFDGCTR_THLEIE_Msk (0x400UL) /*!< THLEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_CMPOFIE_Pos (11UL) /*!< CMPOFIE (Bit 11) */ + #define R_CANFD_CFDGCTR_CMPOFIE_Msk (0x800UL) /*!< CMPOFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_QOWEIE_Pos (12UL) /*!< QOWEIE (Bit 12) */ + #define R_CANFD_CFDGCTR_QOWEIE_Msk (0x1000UL) /*!< QOWEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_QMEIE_Pos (14UL) /*!< QMEIE (Bit 14) */ + #define R_CANFD_CFDGCTR_QMEIE_Msk (0x4000UL) /*!< QMEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_MOWEIE_Pos (15UL) /*!< MOWEIE (Bit 15) */ + #define R_CANFD_CFDGCTR_MOWEIE_Msk (0x8000UL) /*!< MOWEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_TSRST_Pos (16UL) /*!< TSRST (Bit 16) */ + #define R_CANFD_CFDGCTR_TSRST_Msk (0x10000UL) /*!< TSRST (Bitfield-Mask: 0x01) */ +/* ======================================================== CFDGSTS ======================================================== */ + #define R_CANFD_CFDGSTS_GRSTSTS_Pos (0UL) /*!< GRSTSTS (Bit 0) */ + #define R_CANFD_CFDGSTS_GRSTSTS_Msk (0x1UL) /*!< GRSTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGSTS_GHLTSTS_Pos (1UL) /*!< GHLTSTS (Bit 1) */ + #define R_CANFD_CFDGSTS_GHLTSTS_Msk (0x2UL) /*!< GHLTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGSTS_GSLPSTS_Pos (2UL) /*!< GSLPSTS (Bit 2) */ + #define R_CANFD_CFDGSTS_GSLPSTS_Msk (0x4UL) /*!< GSLPSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGSTS_GRAMINIT_Pos (3UL) /*!< GRAMINIT (Bit 3) */ + #define R_CANFD_CFDGSTS_GRAMINIT_Msk (0x8UL) /*!< GRAMINIT (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDGERFL ======================================================== */ + #define R_CANFD_CFDGERFL_DEF_Pos (0UL) /*!< DEF (Bit 0) */ + #define R_CANFD_CFDGERFL_DEF_Msk (0x1UL) /*!< DEF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_MES_Pos (1UL) /*!< MES (Bit 1) */ + #define R_CANFD_CFDGERFL_MES_Msk (0x2UL) /*!< MES (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_THLES_Pos (2UL) /*!< THLES (Bit 2) */ + #define R_CANFD_CFDGERFL_THLES_Msk (0x4UL) /*!< THLES (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_CMPOF_Pos (3UL) /*!< CMPOF (Bit 3) */ + #define R_CANFD_CFDGERFL_CMPOF_Msk (0x8UL) /*!< CMPOF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_QOWES_Pos (4UL) /*!< QOWES (Bit 4) */ + #define R_CANFD_CFDGERFL_QOWES_Msk (0x10UL) /*!< QOWES (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_QMES_Pos (6UL) /*!< QMES (Bit 6) */ + #define R_CANFD_CFDGERFL_QMES_Msk (0x40UL) /*!< QMES (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_MOWES_Pos (7UL) /*!< MOWES (Bit 7) */ + #define R_CANFD_CFDGERFL_MOWES_Msk (0x80UL) /*!< MOWES (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_EEF0_Pos (16UL) /*!< EEF0 (Bit 16) */ + #define R_CANFD_CFDGERFL_EEF0_Msk (0x10000UL) /*!< EEF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_EEF1_Pos (17UL) /*!< EEF1 (Bit 17) */ + #define R_CANFD_CFDGERFL_EEF1_Msk (0x20000UL) /*!< EEF1 (Bitfield-Mask: 0x01) */ +/* ======================================================== CFDGTSC ======================================================== */ + #define R_CANFD_CFDGTSC_TS_Pos (0UL) /*!< TS (Bit 0) */ + #define R_CANFD_CFDGTSC_TS_Msk (0xffffUL) /*!< TS (Bitfield-Mask: 0xffff) */ +/* ====================================================== CFDGAFLECTR ====================================================== */ + #define R_CANFD_CFDGAFLECTR_AFLPN_Pos (0UL) /*!< AFLPN (Bit 0) */ + #define R_CANFD_CFDGAFLECTR_AFLPN_Msk (0xfUL) /*!< AFLPN (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDGAFLECTR_AFLDAE_Pos (8UL) /*!< AFLDAE (Bit 8) */ + #define R_CANFD_CFDGAFLECTR_AFLDAE_Msk (0x100UL) /*!< AFLDAE (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDGAFLCFG0 ====================================================== */ + #define R_CANFD_CFDGAFLCFG0_RNC1_Pos (0UL) /*!< RNC1 (Bit 0) */ + #define R_CANFD_CFDGAFLCFG0_RNC1_Msk (0x1ffUL) /*!< RNC1 (Bitfield-Mask: 0x1ff) */ + #define R_CANFD_CFDGAFLCFG0_RNC0_Pos (16UL) /*!< RNC0 (Bit 16) */ + #define R_CANFD_CFDGAFLCFG0_RNC0_Msk (0x1ff0000UL) /*!< RNC0 (Bitfield-Mask: 0x1ff) */ +/* ======================================================== CFDRMNB ======================================================== */ + #define R_CANFD_CFDRMNB_NRXMB_Pos (0UL) /*!< NRXMB (Bit 0) */ + #define R_CANFD_CFDRMNB_NRXMB_Msk (0xffUL) /*!< NRXMB (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRMNB_RMPLS_Pos (8UL) /*!< RMPLS (Bit 8) */ + #define R_CANFD_CFDRMNB_RMPLS_Msk (0x700UL) /*!< RMPLS (Bitfield-Mask: 0x07) */ +/* ======================================================= CFDRMND0 ======================================================== */ + #define R_CANFD_CFDRMND0_RMNS_Pos (0UL) /*!< RMNS (Bit 0) */ + #define R_CANFD_CFDRMND0_RMNS_Msk (0xffffffffUL) /*!< RMNS (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CFDRFCC ======================================================== */ + #define R_CANFD_CFDRFCC_RFE_Pos (0UL) /*!< RFE (Bit 0) */ + #define R_CANFD_CFDRFCC_RFE_Msk (0x1UL) /*!< RFE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFCC_RFIE_Pos (1UL) /*!< RFIE (Bit 1) */ + #define R_CANFD_CFDRFCC_RFIE_Msk (0x2UL) /*!< RFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFCC_RFPLS_Pos (4UL) /*!< RFPLS (Bit 4) */ + #define R_CANFD_CFDRFCC_RFPLS_Msk (0x70UL) /*!< RFPLS (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDRFCC_RFDC_Pos (8UL) /*!< RFDC (Bit 8) */ + #define R_CANFD_CFDRFCC_RFDC_Msk (0x700UL) /*!< RFDC (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDRFCC_RFIM_Pos (12UL) /*!< RFIM (Bit 12) */ + #define R_CANFD_CFDRFCC_RFIM_Msk (0x1000UL) /*!< RFIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFCC_RFIGCV_Pos (13UL) /*!< RFIGCV (Bit 13) */ + #define R_CANFD_CFDRFCC_RFIGCV_Msk (0xe000UL) /*!< RFIGCV (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDRFCC_RFFIE_Pos (16UL) /*!< RFFIE (Bit 16) */ + #define R_CANFD_CFDRFCC_RFFIE_Msk (0x10000UL) /*!< RFFIE (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDRFSTS ======================================================== */ + #define R_CANFD_CFDRFSTS_RFEMP_Pos (0UL) /*!< RFEMP (Bit 0) */ + #define R_CANFD_CFDRFSTS_RFEMP_Msk (0x1UL) /*!< RFEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFFLL_Pos (1UL) /*!< RFFLL (Bit 1) */ + #define R_CANFD_CFDRFSTS_RFFLL_Msk (0x2UL) /*!< RFFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFMLT_Pos (2UL) /*!< RFMLT (Bit 2) */ + #define R_CANFD_CFDRFSTS_RFMLT_Msk (0x4UL) /*!< RFMLT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFIF_Pos (3UL) /*!< RFIF (Bit 3) */ + #define R_CANFD_CFDRFSTS_RFIF_Msk (0x8UL) /*!< RFIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFMC_Pos (8UL) /*!< RFMC (Bit 8) */ + #define R_CANFD_CFDRFSTS_RFMC_Msk (0xff00UL) /*!< RFMC (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRFSTS_RFFIF_Pos (16UL) /*!< RFFIF (Bit 16) */ + #define R_CANFD_CFDRFSTS_RFFIF_Msk (0x10000UL) /*!< RFFIF (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDRFPCTR ======================================================= */ + #define R_CANFD_CFDRFPCTR_RFPC_Pos (0UL) /*!< RFPC (Bit 0) */ + #define R_CANFD_CFDRFPCTR_RFPC_Msk (0xffUL) /*!< RFPC (Bitfield-Mask: 0xff) */ +/* ======================================================== CFDCFCC ======================================================== */ + #define R_CANFD_CFDCFCC_CFE_Pos (0UL) /*!< CFE (Bit 0) */ + #define R_CANFD_CFDCFCC_CFE_Msk (0x1UL) /*!< CFE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFRXIE_Pos (1UL) /*!< CFRXIE (Bit 1) */ + #define R_CANFD_CFDCFCC_CFRXIE_Msk (0x2UL) /*!< CFRXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFTXIE_Pos (2UL) /*!< CFTXIE (Bit 2) */ + #define R_CANFD_CFDCFCC_CFTXIE_Msk (0x4UL) /*!< CFTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFPLS_Pos (4UL) /*!< CFPLS (Bit 4) */ + #define R_CANFD_CFDCFCC_CFPLS_Msk (0x70UL) /*!< CFPLS (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDCFCC_CFM_Pos (8UL) /*!< CFM (Bit 8) */ + #define R_CANFD_CFDCFCC_CFM_Msk (0x300UL) /*!< CFM (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDCFCC_CFITSS_Pos (10UL) /*!< CFITSS (Bit 10) */ + #define R_CANFD_CFDCFCC_CFITSS_Msk (0x400UL) /*!< CFITSS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFITR_Pos (11UL) /*!< CFITR (Bit 11) */ + #define R_CANFD_CFDCFCC_CFITR_Msk (0x800UL) /*!< CFITR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFIM_Pos (12UL) /*!< CFIM (Bit 12) */ + #define R_CANFD_CFDCFCC_CFIM_Msk (0x1000UL) /*!< CFIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFIGCV_Pos (13UL) /*!< CFIGCV (Bit 13) */ + #define R_CANFD_CFDCFCC_CFIGCV_Msk (0xe000UL) /*!< CFIGCV (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDCFCC_CFTML_Pos (16UL) /*!< CFTML (Bit 16) */ + #define R_CANFD_CFDCFCC_CFTML_Msk (0x1f0000UL) /*!< CFTML (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDCFCC_CFDC_Pos (21UL) /*!< CFDC (Bit 21) */ + #define R_CANFD_CFDCFCC_CFDC_Msk (0xe00000UL) /*!< CFDC (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDCFCC_CFITT_Pos (24UL) /*!< CFITT (Bit 24) */ + #define R_CANFD_CFDCFCC_CFITT_Msk (0xff000000UL) /*!< CFITT (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDCFCCE ======================================================== */ + #define R_CANFD_CFDCFCCE_CFFIE_Pos (0UL) /*!< CFFIE (Bit 0) */ + #define R_CANFD_CFDCFCCE_CFFIE_Msk (0x1UL) /*!< CFFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCCE_CFOFRXIE_Pos (1UL) /*!< CFOFRXIE (Bit 1) */ + #define R_CANFD_CFDCFCCE_CFOFRXIE_Msk (0x2UL) /*!< CFOFRXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCCE_CFOFTXIE_Pos (2UL) /*!< CFOFTXIE (Bit 2) */ + #define R_CANFD_CFDCFCCE_CFOFTXIE_Msk (0x4UL) /*!< CFOFTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCCE_CFMOWM_Pos (8UL) /*!< CFMOWM (Bit 8) */ + #define R_CANFD_CFDCFCCE_CFMOWM_Msk (0x100UL) /*!< CFMOWM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCCE_CFBME_Pos (16UL) /*!< CFBME (Bit 16) */ + #define R_CANFD_CFDCFCCE_CFBME_Msk (0x10000UL) /*!< CFBME (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDCFSTS ======================================================== */ + #define R_CANFD_CFDCFSTS_CFEMP_Pos (0UL) /*!< CFEMP (Bit 0) */ + #define R_CANFD_CFDCFSTS_CFEMP_Msk (0x1UL) /*!< CFEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFFLL_Pos (1UL) /*!< CFFLL (Bit 1) */ + #define R_CANFD_CFDCFSTS_CFFLL_Msk (0x2UL) /*!< CFFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFMLT_Pos (2UL) /*!< CFMLT (Bit 2) */ + #define R_CANFD_CFDCFSTS_CFMLT_Msk (0x4UL) /*!< CFMLT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFRXIF_Pos (3UL) /*!< CFRXIF (Bit 3) */ + #define R_CANFD_CFDCFSTS_CFRXIF_Msk (0x8UL) /*!< CFRXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFTXIF_Pos (4UL) /*!< CFTXIF (Bit 4) */ + #define R_CANFD_CFDCFSTS_CFTXIF_Msk (0x10UL) /*!< CFTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFMC_Pos (8UL) /*!< CFMC (Bit 8) */ + #define R_CANFD_CFDCFSTS_CFMC_Msk (0xff00UL) /*!< CFMC (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDCFSTS_CFFIF_Pos (16UL) /*!< CFFIF (Bit 16) */ + #define R_CANFD_CFDCFSTS_CFFIF_Msk (0x10000UL) /*!< CFFIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFOFRXIF_Pos (17UL) /*!< CFOFRXIF (Bit 17) */ + #define R_CANFD_CFDCFSTS_CFOFRXIF_Msk (0x20000UL) /*!< CFOFRXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFOFTXIF_Pos (18UL) /*!< CFOFTXIF (Bit 18) */ + #define R_CANFD_CFDCFSTS_CFOFTXIF_Msk (0x40000UL) /*!< CFOFTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFMOW_Pos (24UL) /*!< CFMOW (Bit 24) */ + #define R_CANFD_CFDCFSTS_CFMOW_Msk (0x1000000UL) /*!< CFMOW (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDCFPCTR ======================================================= */ + #define R_CANFD_CFDCFPCTR_CFPC_Pos (0UL) /*!< CFPC (Bit 0) */ + #define R_CANFD_CFDCFPCTR_CFPC_Msk (0xffUL) /*!< CFPC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDFESTS ======================================================== */ + #define R_CANFD_CFDFESTS_RFXEMP_Pos (0UL) /*!< RFXEMP (Bit 0) */ + #define R_CANFD_CFDFESTS_RFXEMP_Msk (0xffUL) /*!< RFXEMP (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDFESTS_CFXEMP_Pos (8UL) /*!< CFXEMP (Bit 8) */ + #define R_CANFD_CFDFESTS_CFXEMP_Msk (0x3f00UL) /*!< CFXEMP (Bitfield-Mask: 0x3f) */ +/* ======================================================= CFDFFSTS ======================================================== */ + #define R_CANFD_CFDFFSTS_RFXFLL_Pos (0UL) /*!< RFXFLL (Bit 0) */ + #define R_CANFD_CFDFFSTS_RFXFLL_Msk (0xffUL) /*!< RFXFLL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDFFSTS_CFXFLL_Pos (8UL) /*!< CFXFLL (Bit 8) */ + #define R_CANFD_CFDFFSTS_CFXFLL_Msk (0x3f00UL) /*!< CFXFLL (Bitfield-Mask: 0x3f) */ +/* ======================================================= CFDFMSTS ======================================================== */ + #define R_CANFD_CFDFMSTS_RFXMLT_Pos (0UL) /*!< RFXMLT (Bit 0) */ + #define R_CANFD_CFDFMSTS_RFXMLT_Msk (0xffUL) /*!< RFXMLT (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDFMSTS_CFXMLT_Pos (8UL) /*!< CFXMLT (Bit 8) */ + #define R_CANFD_CFDFMSTS_CFXMLT_Msk (0x3f00UL) /*!< CFXMLT (Bitfield-Mask: 0x3f) */ +/* ======================================================= CFDRFISTS ======================================================= */ + #define R_CANFD_CFDRFISTS_RFXIF_Pos (0UL) /*!< RFXIF (Bit 0) */ + #define R_CANFD_CFDRFISTS_RFXIF_Msk (0xffUL) /*!< RFXIF (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRFISTS_RFXFFLL_Pos (16UL) /*!< RFXFFLL (Bit 16) */ + #define R_CANFD_CFDRFISTS_RFXFFLL_Msk (0xff0000UL) /*!< RFXFFLL (Bitfield-Mask: 0xff) */ +/* ====================================================== CFDCFRISTS ======================================================= */ + #define R_CANFD_CFDCFRISTS_CFXRXIF_Pos (0UL) /*!< CFXRXIF (Bit 0) */ + #define R_CANFD_CFDCFRISTS_CFXRXIF_Msk (0x3fUL) /*!< CFXRXIF (Bitfield-Mask: 0x3f) */ +/* ====================================================== CFDCFTISTS ======================================================= */ + #define R_CANFD_CFDCFTISTS_CFXTXIF_Pos (0UL) /*!< CFXTXIF (Bit 0) */ + #define R_CANFD_CFDCFTISTS_CFXTXIF_Msk (0x3fUL) /*!< CFXTXIF (Bitfield-Mask: 0x3f) */ +/* ===================================================== CFDCFOFRISTS ====================================================== */ + #define R_CANFD_CFDCFOFRISTS_CFXOFRXIF_Pos (0UL) /*!< CFXOFRXIF (Bit 0) */ + #define R_CANFD_CFDCFOFRISTS_CFXOFRXIF_Msk (0x3fUL) /*!< CFXOFRXIF (Bitfield-Mask: 0x3f) */ +/* ===================================================== CFDCFOFTISTS ====================================================== */ + #define R_CANFD_CFDCFOFTISTS_CFXOFTXIF_Pos (0UL) /*!< CFXOFTXIF (Bit 0) */ + #define R_CANFD_CFDCFOFTISTS_CFXOFTXIF_Msk (0x3fUL) /*!< CFXOFTXIF (Bitfield-Mask: 0x3f) */ +/* ====================================================== CFDCFMOWSTS ====================================================== */ + #define R_CANFD_CFDCFMOWSTS_CFXMOW_Pos (0UL) /*!< CFXMOW (Bit 0) */ + #define R_CANFD_CFDCFMOWSTS_CFXMOW_Msk (0x3fUL) /*!< CFXMOW (Bitfield-Mask: 0x3f) */ +/* ======================================================= CFDFFFSTS ======================================================= */ + #define R_CANFD_CFDFFFSTS_RFXFFLL_Pos (0UL) /*!< RFXFFLL (Bit 0) */ + #define R_CANFD_CFDFFFSTS_RFXFFLL_Msk (0xffUL) /*!< RFXFFLL (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDFFFSTS_CFXFFLL_Pos (8UL) /*!< CFXFFLL (Bit 8) */ + #define R_CANFD_CFDFFFSTS_CFXFFLL_Msk (0x3f00UL) /*!< CFXFFLL (Bitfield-Mask: 0x3f) */ +/* ======================================================== CFDTMC ========================================================= */ + #define R_CANFD_CFDTMC_TMTR_Pos (0UL) /*!< TMTR (Bit 0) */ + #define R_CANFD_CFDTMC_TMTR_Msk (0x1UL) /*!< TMTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMC_TMTAR_Pos (1UL) /*!< TMTAR (Bit 1) */ + #define R_CANFD_CFDTMC_TMTAR_Msk (0x2UL) /*!< TMTAR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMC_TMOM_Pos (2UL) /*!< TMOM (Bit 2) */ + #define R_CANFD_CFDTMC_TMOM_Msk (0x4UL) /*!< TMOM (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDTMSTS ======================================================== */ + #define R_CANFD_CFDTMSTS_TMTSTS_Pos (0UL) /*!< TMTSTS (Bit 0) */ + #define R_CANFD_CFDTMSTS_TMTSTS_Msk (0x1UL) /*!< TMTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMSTS_TMTRF_Pos (1UL) /*!< TMTRF (Bit 1) */ + #define R_CANFD_CFDTMSTS_TMTRF_Msk (0x6UL) /*!< TMTRF (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDTMSTS_TMTRM_Pos (3UL) /*!< TMTRM (Bit 3) */ + #define R_CANFD_CFDTMSTS_TMTRM_Msk (0x8UL) /*!< TMTRM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMSTS_TMTARM_Pos (4UL) /*!< TMTARM (Bit 4) */ + #define R_CANFD_CFDTMSTS_TMTARM_Msk (0x10UL) /*!< TMTARM (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTMTRSTS ======================================================= */ + #define R_CANFD_CFDTMTRSTS_TMTRSTS_Pos (0UL) /*!< TMTRSTS (Bit 0) */ + #define R_CANFD_CFDTMTRSTS_TMTRSTS_Msk (0xffffUL) /*!< TMTRSTS (Bitfield-Mask: 0xffff) */ +/* ====================================================== CFDTMTARSTS ====================================================== */ + #define R_CANFD_CFDTMTARSTS_TMTARSTS_Pos (0UL) /*!< TMTARSTS (Bit 0) */ + #define R_CANFD_CFDTMTARSTS_TMTARSTS_Msk (0xffffUL) /*!< TMTARSTS (Bitfield-Mask: 0xffff) */ +/* ====================================================== CFDTMTCSTS ======================================================= */ + #define R_CANFD_CFDTMTCSTS_TMTCSTS_Pos (0UL) /*!< TMTCSTS (Bit 0) */ + #define R_CANFD_CFDTMTCSTS_TMTCSTS_Msk (0xffffUL) /*!< TMTCSTS (Bitfield-Mask: 0xffff) */ +/* ====================================================== CFDTMTASTS ======================================================= */ + #define R_CANFD_CFDTMTASTS_TMTASTS_Pos (0UL) /*!< TMTASTS (Bit 0) */ + #define R_CANFD_CFDTMTASTS_TMTASTS_Msk (0xffffUL) /*!< TMTASTS (Bitfield-Mask: 0xffff) */ +/* ======================================================= CFDTMIEC ======================================================== */ + #define R_CANFD_CFDTMIEC_TMIE_Pos (0UL) /*!< TMIE (Bit 0) */ + #define R_CANFD_CFDTMIEC_TMIE_Msk (0xffffUL) /*!< TMIE (Bitfield-Mask: 0xffff) */ +/* ======================================================= CFDTXQCC0 ======================================================= */ + #define R_CANFD_CFDTXQCC0_TXQE_Pos (0UL) /*!< TXQE (Bit 0) */ + #define R_CANFD_CFDTXQCC0_TXQE_Msk (0x1UL) /*!< TXQE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQGWE_Pos (1UL) /*!< TXQGWE (Bit 1) */ + #define R_CANFD_CFDTXQCC0_TXQGWE_Msk (0x2UL) /*!< TXQGWE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQOWE_Pos (2UL) /*!< TXQOWE (Bit 2) */ + #define R_CANFD_CFDTXQCC0_TXQOWE_Msk (0x4UL) /*!< TXQOWE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQTXIE_Pos (5UL) /*!< TXQTXIE (Bit 5) */ + #define R_CANFD_CFDTXQCC0_TXQTXIE_Msk (0x20UL) /*!< TXQTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQIM_Pos (7UL) /*!< TXQIM (Bit 7) */ + #define R_CANFD_CFDTXQCC0_TXQIM_Msk (0x80UL) /*!< TXQIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQDC_Pos (8UL) /*!< TXQDC (Bit 8) */ + #define R_CANFD_CFDTXQCC0_TXQDC_Msk (0x1f00UL) /*!< TXQDC (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDTXQCC0_TXQFIE_Pos (16UL) /*!< TXQFIE (Bit 16) */ + #define R_CANFD_CFDTXQCC0_TXQFIE_Msk (0x10000UL) /*!< TXQFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQOFRXIE_Pos (17UL) /*!< TXQOFRXIE (Bit 17) */ + #define R_CANFD_CFDTXQCC0_TXQOFRXIE_Msk (0x20000UL) /*!< TXQOFRXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQOFTXIE_Pos (18UL) /*!< TXQOFTXIE (Bit 18) */ + #define R_CANFD_CFDTXQCC0_TXQOFTXIE_Msk (0x40000UL) /*!< TXQOFTXIE (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQSTS0 ======================================================= */ + #define R_CANFD_CFDTXQSTS0_TXQEMP_Pos (0UL) /*!< TXQEMP (Bit 0) */ + #define R_CANFD_CFDTXQSTS0_TXQEMP_Msk (0x1UL) /*!< TXQEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQFLL_Pos (1UL) /*!< TXQFLL (Bit 1) */ + #define R_CANFD_CFDTXQSTS0_TXQFLL_Msk (0x2UL) /*!< TXQFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQTXIF_Pos (2UL) /*!< TXQTXIF (Bit 2) */ + #define R_CANFD_CFDTXQSTS0_TXQTXIF_Msk (0x4UL) /*!< TXQTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQMC_Pos (8UL) /*!< TXQMC (Bit 8) */ + #define R_CANFD_CFDTXQSTS0_TXQMC_Msk (0x3f00UL) /*!< TXQMC (Bitfield-Mask: 0x3f) */ + #define R_CANFD_CFDTXQSTS0_TXQFIF_Pos (16UL) /*!< TXQFIF (Bit 16) */ + #define R_CANFD_CFDTXQSTS0_TXQFIF_Msk (0x10000UL) /*!< TXQFIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQOFRXIF_Pos (17UL) /*!< TXQOFRXIF (Bit 17) */ + #define R_CANFD_CFDTXQSTS0_TXQOFRXIF_Msk (0x20000UL) /*!< TXQOFRXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQOFTXIF_Pos (18UL) /*!< TXQOFTXIF (Bit 18) */ + #define R_CANFD_CFDTXQSTS0_TXQOFTXIF_Msk (0x40000UL) /*!< TXQOFTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQMLT_Pos (19UL) /*!< TXQMLT (Bit 19) */ + #define R_CANFD_CFDTXQSTS0_TXQMLT_Msk (0x80000UL) /*!< TXQMLT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQMOW_Pos (20UL) /*!< TXQMOW (Bit 20) */ + #define R_CANFD_CFDTXQSTS0_TXQMOW_Msk (0x100000UL) /*!< TXQMOW (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQPCTR0 ====================================================== */ + #define R_CANFD_CFDTXQPCTR0_TXQPC_Pos (0UL) /*!< TXQPC (Bit 0) */ + #define R_CANFD_CFDTXQPCTR0_TXQPC_Msk (0xffUL) /*!< TXQPC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDTXQCC1 ======================================================= */ + #define R_CANFD_CFDTXQCC1_TXQE_Pos (0UL) /*!< TXQE (Bit 0) */ + #define R_CANFD_CFDTXQCC1_TXQE_Msk (0x1UL) /*!< TXQE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC1_TXQGWE_Pos (1UL) /*!< TXQGWE (Bit 1) */ + #define R_CANFD_CFDTXQCC1_TXQGWE_Msk (0x2UL) /*!< TXQGWE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC1_TXQOWE_Pos (2UL) /*!< TXQOWE (Bit 2) */ + #define R_CANFD_CFDTXQCC1_TXQOWE_Msk (0x4UL) /*!< TXQOWE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC1_TXQTXIE_Pos (5UL) /*!< TXQTXIE (Bit 5) */ + #define R_CANFD_CFDTXQCC1_TXQTXIE_Msk (0x20UL) /*!< TXQTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC1_TXQIM_Pos (7UL) /*!< TXQIM (Bit 7) */ + #define R_CANFD_CFDTXQCC1_TXQIM_Msk (0x80UL) /*!< TXQIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC1_TXQDC_Pos (8UL) /*!< TXQDC (Bit 8) */ + #define R_CANFD_CFDTXQCC1_TXQDC_Msk (0x1f00UL) /*!< TXQDC (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDTXQCC1_TXQFIE_Pos (16UL) /*!< TXQFIE (Bit 16) */ + #define R_CANFD_CFDTXQCC1_TXQFIE_Msk (0x10000UL) /*!< TXQFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC1_TXQOFRXIE_Pos (17UL) /*!< TXQOFRXIE (Bit 17) */ + #define R_CANFD_CFDTXQCC1_TXQOFRXIE_Msk (0x20000UL) /*!< TXQOFRXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC1_TXQOFTXIE_Pos (18UL) /*!< TXQOFTXIE (Bit 18) */ + #define R_CANFD_CFDTXQCC1_TXQOFTXIE_Msk (0x40000UL) /*!< TXQOFTXIE (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQSTS1 ======================================================= */ + #define R_CANFD_CFDTXQSTS1_TXQEMP_Pos (0UL) /*!< TXQEMP (Bit 0) */ + #define R_CANFD_CFDTXQSTS1_TXQEMP_Msk (0x1UL) /*!< TXQEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS1_TXQFLL_Pos (1UL) /*!< TXQFLL (Bit 1) */ + #define R_CANFD_CFDTXQSTS1_TXQFLL_Msk (0x2UL) /*!< TXQFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS1_TXQTXIF_Pos (2UL) /*!< TXQTXIF (Bit 2) */ + #define R_CANFD_CFDTXQSTS1_TXQTXIF_Msk (0x4UL) /*!< TXQTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS1_TXQMC_Pos (8UL) /*!< TXQMC (Bit 8) */ + #define R_CANFD_CFDTXQSTS1_TXQMC_Msk (0x3f00UL) /*!< TXQMC (Bitfield-Mask: 0x3f) */ + #define R_CANFD_CFDTXQSTS1_TXQFIF_Pos (16UL) /*!< TXQFIF (Bit 16) */ + #define R_CANFD_CFDTXQSTS1_TXQFIF_Msk (0x10000UL) /*!< TXQFIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS1_TXQOFRXIF_Pos (17UL) /*!< TXQOFRXIF (Bit 17) */ + #define R_CANFD_CFDTXQSTS1_TXQOFRXIF_Msk (0x20000UL) /*!< TXQOFRXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS1_TXQOFTXIF_Pos (18UL) /*!< TXQOFTXIF (Bit 18) */ + #define R_CANFD_CFDTXQSTS1_TXQOFTXIF_Msk (0x40000UL) /*!< TXQOFTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS1_TXQMLT_Pos (19UL) /*!< TXQMLT (Bit 19) */ + #define R_CANFD_CFDTXQSTS1_TXQMLT_Msk (0x80000UL) /*!< TXQMLT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS1_TXQMOW_Pos (20UL) /*!< TXQMOW (Bit 20) */ + #define R_CANFD_CFDTXQSTS1_TXQMOW_Msk (0x100000UL) /*!< TXQMOW (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQPCTR1 ====================================================== */ + #define R_CANFD_CFDTXQPCTR1_TXQPC_Pos (0UL) /*!< TXQPC (Bit 0) */ + #define R_CANFD_CFDTXQPCTR1_TXQPC_Msk (0xffUL) /*!< TXQPC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDTXQCC2 ======================================================= */ + #define R_CANFD_CFDTXQCC2_TXQE_Pos (0UL) /*!< TXQE (Bit 0) */ + #define R_CANFD_CFDTXQCC2_TXQE_Msk (0x1UL) /*!< TXQE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC2_TXQGWE_Pos (1UL) /*!< TXQGWE (Bit 1) */ + #define R_CANFD_CFDTXQCC2_TXQGWE_Msk (0x2UL) /*!< TXQGWE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC2_TXQOWE_Pos (2UL) /*!< TXQOWE (Bit 2) */ + #define R_CANFD_CFDTXQCC2_TXQOWE_Msk (0x4UL) /*!< TXQOWE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC2_TXQTXIE_Pos (5UL) /*!< TXQTXIE (Bit 5) */ + #define R_CANFD_CFDTXQCC2_TXQTXIE_Msk (0x20UL) /*!< TXQTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC2_TXQIM_Pos (7UL) /*!< TXQIM (Bit 7) */ + #define R_CANFD_CFDTXQCC2_TXQIM_Msk (0x80UL) /*!< TXQIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC2_TXQDC_Pos (8UL) /*!< TXQDC (Bit 8) */ + #define R_CANFD_CFDTXQCC2_TXQDC_Msk (0x1f00UL) /*!< TXQDC (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDTXQCC2_TXQFIE_Pos (16UL) /*!< TXQFIE (Bit 16) */ + #define R_CANFD_CFDTXQCC2_TXQFIE_Msk (0x10000UL) /*!< TXQFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC2_TXQOFRXIE_Pos (17UL) /*!< TXQOFRXIE (Bit 17) */ + #define R_CANFD_CFDTXQCC2_TXQOFRXIE_Msk (0x20000UL) /*!< TXQOFRXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC2_TXQOFTXIE_Pos (18UL) /*!< TXQOFTXIE (Bit 18) */ + #define R_CANFD_CFDTXQCC2_TXQOFTXIE_Msk (0x40000UL) /*!< TXQOFTXIE (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQSTS2 ======================================================= */ + #define R_CANFD_CFDTXQSTS2_TXQEMP_Pos (0UL) /*!< TXQEMP (Bit 0) */ + #define R_CANFD_CFDTXQSTS2_TXQEMP_Msk (0x1UL) /*!< TXQEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS2_TXQFLL_Pos (1UL) /*!< TXQFLL (Bit 1) */ + #define R_CANFD_CFDTXQSTS2_TXQFLL_Msk (0x2UL) /*!< TXQFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS2_TXQTXIF_Pos (2UL) /*!< TXQTXIF (Bit 2) */ + #define R_CANFD_CFDTXQSTS2_TXQTXIF_Msk (0x4UL) /*!< TXQTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS2_TXQMC_Pos (8UL) /*!< TXQMC (Bit 8) */ + #define R_CANFD_CFDTXQSTS2_TXQMC_Msk (0x3f00UL) /*!< TXQMC (Bitfield-Mask: 0x3f) */ + #define R_CANFD_CFDTXQSTS2_TXQFIF_Pos (16UL) /*!< TXQFIF (Bit 16) */ + #define R_CANFD_CFDTXQSTS2_TXQFIF_Msk (0x10000UL) /*!< TXQFIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS2_TXQOFRXIF_Pos (17UL) /*!< TXQOFRXIF (Bit 17) */ + #define R_CANFD_CFDTXQSTS2_TXQOFRXIF_Msk (0x20000UL) /*!< TXQOFRXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS2_TXQOFTXIF_Pos (18UL) /*!< TXQOFTXIF (Bit 18) */ + #define R_CANFD_CFDTXQSTS2_TXQOFTXIF_Msk (0x40000UL) /*!< TXQOFTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS2_TXQMLT_Pos (19UL) /*!< TXQMLT (Bit 19) */ + #define R_CANFD_CFDTXQSTS2_TXQMLT_Msk (0x80000UL) /*!< TXQMLT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS2_TXQMOW_Pos (20UL) /*!< TXQMOW (Bit 20) */ + #define R_CANFD_CFDTXQSTS2_TXQMOW_Msk (0x100000UL) /*!< TXQMOW (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQPCTR2 ====================================================== */ + #define R_CANFD_CFDTXQPCTR2_TXQPC_Pos (0UL) /*!< TXQPC (Bit 0) */ + #define R_CANFD_CFDTXQPCTR2_TXQPC_Msk (0xffUL) /*!< TXQPC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDTXQCC3 ======================================================= */ + #define R_CANFD_CFDTXQCC3_TXQE_Pos (0UL) /*!< TXQE (Bit 0) */ + #define R_CANFD_CFDTXQCC3_TXQE_Msk (0x1UL) /*!< TXQE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC3_TXQOWE_Pos (2UL) /*!< TXQOWE (Bit 2) */ + #define R_CANFD_CFDTXQCC3_TXQOWE_Msk (0x4UL) /*!< TXQOWE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC3_TXQTXIE_Pos (5UL) /*!< TXQTXIE (Bit 5) */ + #define R_CANFD_CFDTXQCC3_TXQTXIE_Msk (0x20UL) /*!< TXQTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC3_TXQIM_Pos (7UL) /*!< TXQIM (Bit 7) */ + #define R_CANFD_CFDTXQCC3_TXQIM_Msk (0x80UL) /*!< TXQIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC3_TXQDC_Pos (8UL) /*!< TXQDC (Bit 8) */ + #define R_CANFD_CFDTXQCC3_TXQDC_Msk (0x1f00UL) /*!< TXQDC (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDTXQCC3_TXQOFTXIE_Pos (18UL) /*!< TXQOFTXIE (Bit 18) */ + #define R_CANFD_CFDTXQCC3_TXQOFTXIE_Msk (0x40000UL) /*!< TXQOFTXIE (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQSTS3 ======================================================= */ + #define R_CANFD_CFDTXQSTS3_TXQEMP_Pos (0UL) /*!< TXQEMP (Bit 0) */ + #define R_CANFD_CFDTXQSTS3_TXQEMP_Msk (0x1UL) /*!< TXQEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS3_TXQFLL_Pos (1UL) /*!< TXQFLL (Bit 1) */ + #define R_CANFD_CFDTXQSTS3_TXQFLL_Msk (0x2UL) /*!< TXQFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS3_TXQTXIF_Pos (2UL) /*!< TXQTXIF (Bit 2) */ + #define R_CANFD_CFDTXQSTS3_TXQTXIF_Msk (0x4UL) /*!< TXQTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS3_TXQMC_Pos (8UL) /*!< TXQMC (Bit 8) */ + #define R_CANFD_CFDTXQSTS3_TXQMC_Msk (0x3f00UL) /*!< TXQMC (Bitfield-Mask: 0x3f) */ + #define R_CANFD_CFDTXQSTS3_TXQOFTXIF_Pos (18UL) /*!< TXQOFTXIF (Bit 18) */ + #define R_CANFD_CFDTXQSTS3_TXQOFTXIF_Msk (0x40000UL) /*!< TXQOFTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS3_TXQMOW_Pos (20UL) /*!< TXQMOW (Bit 20) */ + #define R_CANFD_CFDTXQSTS3_TXQMOW_Msk (0x100000UL) /*!< TXQMOW (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTXQPCTR3 ====================================================== */ + #define R_CANFD_CFDTXQPCTR3_TXQPC_Pos (0UL) /*!< TXQPC (Bit 0) */ + #define R_CANFD_CFDTXQPCTR3_TXQPC_Msk (0xffUL) /*!< TXQPC (Bitfield-Mask: 0xff) */ +/* ====================================================== CFDTXQESTS ======================================================= */ + #define R_CANFD_CFDTXQESTS_TXQxEMP_Pos (0UL) /*!< TXQxEMP (Bit 0) */ + #define R_CANFD_CFDTXQESTS_TXQxEMP_Msk (0xffUL) /*!< TXQxEMP (Bitfield-Mask: 0xff) */ +/* ====================================================== CFDTXQFISTS ====================================================== */ + #define R_CANFD_CFDTXQFISTS_TXQ0FULL_Pos (0UL) /*!< TXQ0FULL (Bit 0) */ + #define R_CANFD_CFDTXQFISTS_TXQ0FULL_Msk (0x7UL) /*!< TXQ0FULL (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDTXQFISTS_TXQ1FULL_Pos (4UL) /*!< TXQ1FULL (Bit 4) */ + #define R_CANFD_CFDTXQFISTS_TXQ1FULL_Msk (0x70UL) /*!< TXQ1FULL (Bitfield-Mask: 0x07) */ +/* ====================================================== CFDTXQMSTS ======================================================= */ + #define R_CANFD_CFDTXQMSTS_TXQ0ML_Pos (0UL) /*!< TXQ0ML (Bit 0) */ + #define R_CANFD_CFDTXQMSTS_TXQ0ML_Msk (0x7UL) /*!< TXQ0ML (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDTXQMSTS_TXQ1ML_Pos (4UL) /*!< TXQ1ML (Bit 4) */ + #define R_CANFD_CFDTXQMSTS_TXQ1ML_Msk (0x70UL) /*!< TXQ1ML (Bitfield-Mask: 0x07) */ +/* ====================================================== CFDTXQISTS ======================================================= */ + #define R_CANFD_CFDTXQISTS_TXQ0ISF_Pos (0UL) /*!< TXQ0ISF (Bit 0) */ + #define R_CANFD_CFDTXQISTS_TXQ0ISF_Msk (0xfUL) /*!< TXQ0ISF (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDTXQISTS_TXQ1ISF_Pos (4UL) /*!< TXQ1ISF (Bit 4) */ + #define R_CANFD_CFDTXQISTS_TXQ1ISF_Msk (0xf0UL) /*!< TXQ1ISF (Bitfield-Mask: 0x0f) */ +/* ===================================================== CFDTXQOFTISTS ===================================================== */ + #define R_CANFD_CFDTXQOFTISTS_TXQ0OFTISF_Pos (0UL) /*!< TXQ0OFTISF (Bit 0) */ + #define R_CANFD_CFDTXQOFTISTS_TXQ0OFTISF_Msk (0xfUL) /*!< TXQ0OFTISF (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDTXQOFTISTS_TXQ1OFTISF_Pos (4UL) /*!< TXQ1OFTISF (Bit 4) */ + #define R_CANFD_CFDTXQOFTISTS_TXQ1OFTISF_Msk (0xf0UL) /*!< TXQ1OFTISF (Bitfield-Mask: 0x0f) */ +/* ===================================================== CFDTXQOFRISTS ===================================================== */ + #define R_CANFD_CFDTXQOFRISTS_TXQ0OFRISF_Pos (0UL) /*!< TXQ0OFRISF (Bit 0) */ + #define R_CANFD_CFDTXQOFRISTS_TXQ0OFRISF_Msk (0x7UL) /*!< TXQ0OFRISF (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDTXQOFRISTS_TXQ1OFRISF_Pos (4UL) /*!< TXQ1OFRISF (Bit 4) */ + #define R_CANFD_CFDTXQOFRISTS_TXQ1OFRISF_Msk (0x70UL) /*!< TXQ1OFRISF (Bitfield-Mask: 0x07) */ +/* ====================================================== CFDTXQFSTS ======================================================= */ + #define R_CANFD_CFDTXQFSTS_TXQ0FSF_Pos (0UL) /*!< TXQ0FSF (Bit 0) */ + #define R_CANFD_CFDTXQFSTS_TXQ0FSF_Msk (0xfUL) /*!< TXQ0FSF (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDTXQFSTS_TXQ1FSF_Pos (4UL) /*!< TXQ1FSF (Bit 4) */ + #define R_CANFD_CFDTXQFSTS_TXQ1FSF_Msk (0xf0UL) /*!< TXQ1FSF (Bitfield-Mask: 0x0f) */ +/* ======================================================= CFDTHLCC ======================================================== */ + #define R_CANFD_CFDTHLCC_THLE_Pos (0UL) /*!< THLE (Bit 0) */ + #define R_CANFD_CFDTHLCC_THLE_Msk (0x1UL) /*!< THLE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLCC_THLIE_Pos (8UL) /*!< THLIE (Bit 8) */ + #define R_CANFD_CFDTHLCC_THLIE_Msk (0x100UL) /*!< THLIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLCC_THLIM_Pos (9UL) /*!< THLIM (Bit 9) */ + #define R_CANFD_CFDTHLCC_THLIM_Msk (0x200UL) /*!< THLIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLCC_THLDTE_Pos (10UL) /*!< THLDTE (Bit 10) */ + #define R_CANFD_CFDTHLCC_THLDTE_Msk (0x400UL) /*!< THLDTE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLCC_THLDGE_Pos (11UL) /*!< THLDGE (Bit 11) */ + #define R_CANFD_CFDTHLCC_THLDGE_Msk (0x800UL) /*!< THLDGE (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDTHLSTS ======================================================= */ + #define R_CANFD_CFDTHLSTS_THLEMP_Pos (0UL) /*!< THLEMP (Bit 0) */ + #define R_CANFD_CFDTHLSTS_THLEMP_Msk (0x1UL) /*!< THLEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLFLL_Pos (1UL) /*!< THLFLL (Bit 1) */ + #define R_CANFD_CFDTHLSTS_THLFLL_Msk (0x2UL) /*!< THLFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLELT_Pos (2UL) /*!< THLELT (Bit 2) */ + #define R_CANFD_CFDTHLSTS_THLELT_Msk (0x4UL) /*!< THLELT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLIF_Pos (3UL) /*!< THLIF (Bit 3) */ + #define R_CANFD_CFDTHLSTS_THLIF_Msk (0x8UL) /*!< THLIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLMC_Pos (8UL) /*!< THLMC (Bit 8) */ + #define R_CANFD_CFDTHLSTS_THLMC_Msk (0x3f00UL) /*!< THLMC (Bitfield-Mask: 0x3f) */ +/* ====================================================== CFDTHLPCTR ======================================================= */ + #define R_CANFD_CFDTHLPCTR_THLPC_Pos (0UL) /*!< THLPC (Bit 0) */ + #define R_CANFD_CFDTHLPCTR_THLPC_Msk (0xffUL) /*!< THLPC (Bitfield-Mask: 0xff) */ +/* ===================================================== CFDGTINTSTS0 ====================================================== */ + #define R_CANFD_CFDGTINTSTS0_TSIF0_Pos (0UL) /*!< TSIF0 (Bit 0) */ + #define R_CANFD_CFDGTINTSTS0_TSIF0_Msk (0x1UL) /*!< TSIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TAIF0_Pos (1UL) /*!< TAIF0 (Bit 1) */ + #define R_CANFD_CFDGTINTSTS0_TAIF0_Msk (0x2UL) /*!< TAIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TQIF0_Pos (2UL) /*!< TQIF0 (Bit 2) */ + #define R_CANFD_CFDGTINTSTS0_TQIF0_Msk (0x4UL) /*!< TQIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_CFTIF0_Pos (3UL) /*!< CFTIF0 (Bit 3) */ + #define R_CANFD_CFDGTINTSTS0_CFTIF0_Msk (0x8UL) /*!< CFTIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_THIF0_Pos (4UL) /*!< THIF0 (Bit 4) */ + #define R_CANFD_CFDGTINTSTS0_THIF0_Msk (0x10UL) /*!< THIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TQOFIF0_Pos (5UL) /*!< TQOFIF0 (Bit 5) */ + #define R_CANFD_CFDGTINTSTS0_TQOFIF0_Msk (0x20UL) /*!< TQOFIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_CFOTIF0_Pos (6UL) /*!< CFOTIF0 (Bit 6) */ + #define R_CANFD_CFDGTINTSTS0_CFOTIF0_Msk (0x40UL) /*!< CFOTIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TSIF1_Pos (8UL) /*!< TSIF1 (Bit 8) */ + #define R_CANFD_CFDGTINTSTS0_TSIF1_Msk (0x100UL) /*!< TSIF1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TAIF1_Pos (9UL) /*!< TAIF1 (Bit 9) */ + #define R_CANFD_CFDGTINTSTS0_TAIF1_Msk (0x200UL) /*!< TAIF1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TQIF1_Pos (10UL) /*!< TQIF1 (Bit 10) */ + #define R_CANFD_CFDGTINTSTS0_TQIF1_Msk (0x400UL) /*!< TQIF1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_CFTIF1_Pos (11UL) /*!< CFTIF1 (Bit 11) */ + #define R_CANFD_CFDGTINTSTS0_CFTIF1_Msk (0x800UL) /*!< CFTIF1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_THIF1_Pos (12UL) /*!< THIF1 (Bit 12) */ + #define R_CANFD_CFDGTINTSTS0_THIF1_Msk (0x1000UL) /*!< THIF1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TQOFIF1_Pos (13UL) /*!< TQOFIF1 (Bit 13) */ + #define R_CANFD_CFDGTINTSTS0_TQOFIF1_Msk (0x2000UL) /*!< TQOFIF1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_CFOTIF1_Pos (14UL) /*!< CFOTIF1 (Bit 14) */ + #define R_CANFD_CFDGTINTSTS0_CFOTIF1_Msk (0x4000UL) /*!< CFOTIF1 (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDGTSTCFG ======================================================= */ + #define R_CANFD_CFDGTSTCFG_C0ICBCE_Pos (0UL) /*!< C0ICBCE (Bit 0) */ + #define R_CANFD_CFDGTSTCFG_C0ICBCE_Msk (0x1UL) /*!< C0ICBCE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTSTCFG_C1ICBCE_Pos (1UL) /*!< C1ICBCE (Bit 1) */ + #define R_CANFD_CFDGTSTCFG_C1ICBCE_Msk (0x2UL) /*!< C1ICBCE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTSTCFG_RTMPS_Pos (16UL) /*!< RTMPS (Bit 16) */ + #define R_CANFD_CFDGTSTCFG_RTMPS_Msk (0x3ff0000UL) /*!< RTMPS (Bitfield-Mask: 0x3ff) */ +/* ====================================================== CFDGTSTCTR ======================================================= */ + #define R_CANFD_CFDGTSTCTR_ICBCTME_Pos (0UL) /*!< ICBCTME (Bit 0) */ + #define R_CANFD_CFDGTSTCTR_ICBCTME_Msk (0x1UL) /*!< ICBCTME (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTSTCTR_RTME_Pos (2UL) /*!< RTME (Bit 2) */ + #define R_CANFD_CFDGTSTCTR_RTME_Msk (0x4UL) /*!< RTME (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDGFDCFG ======================================================= */ + #define R_CANFD_CFDGFDCFG_RPED_Pos (0UL) /*!< RPED (Bit 0) */ + #define R_CANFD_CFDGFDCFG_RPED_Msk (0x1UL) /*!< RPED (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGFDCFG_TSCCFG_Pos (8UL) /*!< TSCCFG (Bit 8) */ + #define R_CANFD_CFDGFDCFG_TSCCFG_Msk (0x300UL) /*!< TSCCFG (Bitfield-Mask: 0x03) */ +/* ======================================================= CFDGLOCKK ======================================================= */ + #define R_CANFD_CFDGLOCKK_LOCK_Pos (0UL) /*!< LOCK (Bit 0) */ + #define R_CANFD_CFDGLOCKK_LOCK_Msk (0xffffUL) /*!< LOCK (Bitfield-Mask: 0xffff) */ +/* ======================================================= CFDCDTCT ======================================================== */ + #define R_CANFD_CFDCDTCT_RFDMAE0_Pos (0UL) /*!< RFDMAE0 (Bit 0) */ + #define R_CANFD_CFDCDTCT_RFDMAE0_Msk (0x1UL) /*!< RFDMAE0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE1_Pos (1UL) /*!< RFDMAE1 (Bit 1) */ + #define R_CANFD_CFDCDTCT_RFDMAE1_Msk (0x2UL) /*!< RFDMAE1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE2_Pos (2UL) /*!< RFDMAE2 (Bit 2) */ + #define R_CANFD_CFDCDTCT_RFDMAE2_Msk (0x4UL) /*!< RFDMAE2 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE3_Pos (3UL) /*!< RFDMAE3 (Bit 3) */ + #define R_CANFD_CFDCDTCT_RFDMAE3_Msk (0x8UL) /*!< RFDMAE3 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE4_Pos (4UL) /*!< RFDMAE4 (Bit 4) */ + #define R_CANFD_CFDCDTCT_RFDMAE4_Msk (0x10UL) /*!< RFDMAE4 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE5_Pos (5UL) /*!< RFDMAE5 (Bit 5) */ + #define R_CANFD_CFDCDTCT_RFDMAE5_Msk (0x20UL) /*!< RFDMAE5 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE6_Pos (6UL) /*!< RFDMAE6 (Bit 6) */ + #define R_CANFD_CFDCDTCT_RFDMAE6_Msk (0x40UL) /*!< RFDMAE6 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE7_Pos (7UL) /*!< RFDMAE7 (Bit 7) */ + #define R_CANFD_CFDCDTCT_RFDMAE7_Msk (0x80UL) /*!< RFDMAE7 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_CFDMAE0_Pos (8UL) /*!< CFDMAE0 (Bit 8) */ + #define R_CANFD_CFDCDTCT_CFDMAE0_Msk (0x100UL) /*!< CFDMAE0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_CFDMAE1_Pos (9UL) /*!< CFDMAE1 (Bit 9) */ + #define R_CANFD_CFDCDTCT_CFDMAE1_Msk (0x200UL) /*!< CFDMAE1 (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDCDTSTS ======================================================= */ + #define R_CANFD_CFDCDTSTS_RFDMASTS0_Pos (0UL) /*!< RFDMASTS0 (Bit 0) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS0_Msk (0x1UL) /*!< RFDMASTS0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS1_Pos (1UL) /*!< RFDMASTS1 (Bit 1) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS1_Msk (0x2UL) /*!< RFDMASTS1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS2_Pos (2UL) /*!< RFDMASTS2 (Bit 2) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS2_Msk (0x4UL) /*!< RFDMASTS2 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS3_Pos (3UL) /*!< RFDMASTS3 (Bit 3) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS3_Msk (0x8UL) /*!< RFDMASTS3 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS4_Pos (4UL) /*!< RFDMASTS4 (Bit 4) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS4_Msk (0x10UL) /*!< RFDMASTS4 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS5_Pos (5UL) /*!< RFDMASTS5 (Bit 5) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS5_Msk (0x20UL) /*!< RFDMASTS5 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS6_Pos (6UL) /*!< RFDMASTS6 (Bit 6) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS6_Msk (0x40UL) /*!< RFDMASTS6 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS7_Pos (7UL) /*!< RFDMASTS7 (Bit 7) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS7_Msk (0x80UL) /*!< RFDMASTS7 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_CFDMASTS0_Pos (8UL) /*!< CFDMASTS0 (Bit 8) */ + #define R_CANFD_CFDCDTSTS_CFDMASTS0_Msk (0x100UL) /*!< CFDMASTS0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_CFDMASTS1_Pos (9UL) /*!< CFDMASTS1 (Bit 9) */ + #define R_CANFD_CFDCDTSTS_CFDMASTS1_Msk (0x200UL) /*!< CFDMASTS1 (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDCDTTCT ======================================================= */ + #define R_CANFD_CFDCDTTCT_TQ0DMAE0_Pos (0UL) /*!< TQ0DMAE0 (Bit 0) */ + #define R_CANFD_CFDCDTTCT_TQ0DMAE0_Msk (0x1UL) /*!< TQ0DMAE0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTCT_TQ0DMAE1_Pos (1UL) /*!< TQ0DMAE1 (Bit 1) */ + #define R_CANFD_CFDCDTTCT_TQ0DMAE1_Msk (0x2UL) /*!< TQ0DMAE1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTCT_TQ3DMAE0_Pos (8UL) /*!< TQ3DMAE0 (Bit 8) */ + #define R_CANFD_CFDCDTTCT_TQ3DMAE0_Msk (0x100UL) /*!< TQ3DMAE0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTCT_TQ3DMAE1_Pos (9UL) /*!< TQ3DMAE1 (Bit 9) */ + #define R_CANFD_CFDCDTTCT_TQ3DMAE1_Msk (0x200UL) /*!< TQ3DMAE1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTCT_CFDMAE0_Pos (16UL) /*!< CFDMAE0 (Bit 16) */ + #define R_CANFD_CFDCDTTCT_CFDMAE0_Msk (0x10000UL) /*!< CFDMAE0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTCT_CFDMAE1_Pos (17UL) /*!< CFDMAE1 (Bit 17) */ + #define R_CANFD_CFDCDTTCT_CFDMAE1_Msk (0x20000UL) /*!< CFDMAE1 (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDCDTTSTS ======================================================= */ + #define R_CANFD_CFDCDTTSTS_TQ0DMASTS0_Pos (0UL) /*!< TQ0DMASTS0 (Bit 0) */ + #define R_CANFD_CFDCDTTSTS_TQ0DMASTS0_Msk (0x1UL) /*!< TQ0DMASTS0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTSTS_TQ0DMASTS1_Pos (1UL) /*!< TQ0DMASTS1 (Bit 1) */ + #define R_CANFD_CFDCDTTSTS_TQ0DMASTS1_Msk (0x2UL) /*!< TQ0DMASTS1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTSTS_TQ3DMASTS0_Pos (8UL) /*!< TQ3DMASTS0 (Bit 8) */ + #define R_CANFD_CFDCDTTSTS_TQ3DMASTS0_Msk (0x100UL) /*!< TQ3DMASTS0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTSTS_TQ3DMASTS1_Pos (9UL) /*!< TQ3DMASTS1 (Bit 9) */ + #define R_CANFD_CFDCDTTSTS_TQ3DMASTS1_Msk (0x200UL) /*!< TQ3DMASTS1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTSTS_CFDMASTS0_Pos (16UL) /*!< CFDMASTS0 (Bit 16) */ + #define R_CANFD_CFDCDTTSTS_CFDMASTS0_Msk (0x10000UL) /*!< CFDMASTS0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTTSTS_CFDMASTS1_Pos (17UL) /*!< CFDMASTS1 (Bit 17) */ + #define R_CANFD_CFDCDTTSTS_CFDMASTS1_Msk (0x20000UL) /*!< CFDMASTS1 (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDGRINTSTS ====================================================== */ + #define R_CANFD_CFDGRINTSTS_QFIF_Pos (0UL) /*!< QFIF (Bit 0) */ + #define R_CANFD_CFDGRINTSTS_QFIF_Msk (0x7UL) /*!< QFIF (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDGRINTSTS_BQFIF_Pos (4UL) /*!< BQFIF (Bit 4) */ + #define R_CANFD_CFDGRINTSTS_BQFIF_Msk (0x30UL) /*!< BQFIF (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDGRINTSTS_QOFRIF_Pos (8UL) /*!< QOFRIF (Bit 8) */ + #define R_CANFD_CFDGRINTSTS_QOFRIF_Msk (0x700UL) /*!< QOFRIF (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDGRINTSTS_BQOFRIF_Pos (12UL) /*!< BQOFRIF (Bit 12) */ + #define R_CANFD_CFDGRINTSTS_BQOFRIF_Msk (0x3000UL) /*!< BQOFRIF (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDGRINTSTS_CFRIF_Pos (16UL) /*!< CFRIF (Bit 16) */ + #define R_CANFD_CFDGRINTSTS_CFRIF_Msk (0x70000UL) /*!< CFRIF (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDGRINTSTS_CFRFIF_Pos (24UL) /*!< CFRFIF (Bit 24) */ + #define R_CANFD_CFDGRINTSTS_CFRFIF_Msk (0x7000000UL) /*!< CFRFIF (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDGRINTSTS_CFOFRIF_Pos (28UL) /*!< CFOFRIF (Bit 28) */ + #define R_CANFD_CFDGRINTSTS_CFOFRIF_Msk (0x70000000UL) /*!< CFOFRIF (Bitfield-Mask: 0x07) */ +/* ======================================================= CFDGRSTC ======================================================== */ + #define R_CANFD_CFDGRSTC_SRST_Pos (0UL) /*!< SRST (Bit 0) */ + #define R_CANFD_CFDGRSTC_SRST_Msk (0x1UL) /*!< SRST (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGRSTC_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_CANFD_CFDGRSTC_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDGFCMC ======================================================== */ + #define R_CANFD_CFDGFCMC_FLXC0_Pos (0UL) /*!< FLXC0 (Bit 0) */ + #define R_CANFD_CFDGFCMC_FLXC0_Msk (0x1UL) /*!< FLXC0 (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDGFTBAC ======================================================= */ + #define R_CANFD_CFDGFTBAC_FLXMB0_Pos (0UL) /*!< FLXMB0 (Bit 0) */ + #define R_CANFD_CFDGFTBAC_FLXMB0_Msk (0xfUL) /*!< FLXMB0 (Bitfield-Mask: 0x0f) */ +/* ======================================================= CFDRPGACC ======================================================= */ + #define R_CANFD_CFDRPGACC_RDTA_Pos (0UL) /*!< RDTA (Bit 0) */ + #define R_CANFD_CFDRPGACC_RDTA_Msk (0xffffffffUL) /*!< RDTA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ R_CMT ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_CMTW0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CMWSTR ========================================================= */ + #define R_CMTW0_CMWSTR_STR_Pos (0UL) /*!< STR (Bit 0) */ + #define R_CMTW0_CMWSTR_STR_Msk (0x1UL) /*!< STR (Bitfield-Mask: 0x01) */ +/* ========================================================= CMWCR ========================================================= */ + #define R_CMTW0_CMWCR_CKS_Pos (0UL) /*!< CKS (Bit 0) */ + #define R_CMTW0_CMWCR_CKS_Msk (0x3UL) /*!< CKS (Bitfield-Mask: 0x03) */ + #define R_CMTW0_CMWCR_CMWIE_Pos (3UL) /*!< CMWIE (Bit 3) */ + #define R_CMTW0_CMWCR_CMWIE_Msk (0x8UL) /*!< CMWIE (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWCR_IC0IE_Pos (4UL) /*!< IC0IE (Bit 4) */ + #define R_CMTW0_CMWCR_IC0IE_Msk (0x10UL) /*!< IC0IE (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWCR_IC1IE_Pos (5UL) /*!< IC1IE (Bit 5) */ + #define R_CMTW0_CMWCR_IC1IE_Msk (0x20UL) /*!< IC1IE (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWCR_OC0IE_Pos (6UL) /*!< OC0IE (Bit 6) */ + #define R_CMTW0_CMWCR_OC0IE_Msk (0x40UL) /*!< OC0IE (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWCR_OC1IE_Pos (7UL) /*!< OC1IE (Bit 7) */ + #define R_CMTW0_CMWCR_OC1IE_Msk (0x80UL) /*!< OC1IE (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWCR_CMS_Pos (9UL) /*!< CMS (Bit 9) */ + #define R_CMTW0_CMWCR_CMS_Msk (0x200UL) /*!< CMS (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWCR_CCLR_Pos (13UL) /*!< CCLR (Bit 13) */ + #define R_CMTW0_CMWCR_CCLR_Msk (0xe000UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ======================================================== CMWIOR ========================================================= */ + #define R_CMTW0_CMWIOR_IC0_Pos (0UL) /*!< IC0 (Bit 0) */ + #define R_CMTW0_CMWIOR_IC0_Msk (0x3UL) /*!< IC0 (Bitfield-Mask: 0x03) */ + #define R_CMTW0_CMWIOR_IC1_Pos (2UL) /*!< IC1 (Bit 2) */ + #define R_CMTW0_CMWIOR_IC1_Msk (0xcUL) /*!< IC1 (Bitfield-Mask: 0x03) */ + #define R_CMTW0_CMWIOR_IC0E_Pos (4UL) /*!< IC0E (Bit 4) */ + #define R_CMTW0_CMWIOR_IC0E_Msk (0x10UL) /*!< IC0E (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWIOR_IC1E_Pos (5UL) /*!< IC1E (Bit 5) */ + #define R_CMTW0_CMWIOR_IC1E_Msk (0x20UL) /*!< IC1E (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWIOR_OC0_Pos (8UL) /*!< OC0 (Bit 8) */ + #define R_CMTW0_CMWIOR_OC0_Msk (0x300UL) /*!< OC0 (Bitfield-Mask: 0x03) */ + #define R_CMTW0_CMWIOR_OC1_Pos (10UL) /*!< OC1 (Bit 10) */ + #define R_CMTW0_CMWIOR_OC1_Msk (0xc00UL) /*!< OC1 (Bitfield-Mask: 0x03) */ + #define R_CMTW0_CMWIOR_OC0E_Pos (12UL) /*!< OC0E (Bit 12) */ + #define R_CMTW0_CMWIOR_OC0E_Msk (0x1000UL) /*!< OC0E (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWIOR_OC1E_Pos (13UL) /*!< OC1E (Bit 13) */ + #define R_CMTW0_CMWIOR_OC1E_Msk (0x2000UL) /*!< OC1E (Bitfield-Mask: 0x01) */ + #define R_CMTW0_CMWIOR_CMWE_Pos (15UL) /*!< CMWE (Bit 15) */ + #define R_CMTW0_CMWIOR_CMWE_Msk (0x8000UL) /*!< CMWE (Bitfield-Mask: 0x01) */ +/* ======================================================== CMWCNT ========================================================= */ +/* ======================================================== CMWCOR ========================================================= */ +/* ======================================================== CMWICR0 ======================================================== */ +/* ======================================================== CMWICR1 ======================================================== */ +/* ======================================================== CMWOCR0 ======================================================== */ +/* ======================================================== CMWOCR1 ======================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_WDT0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= WDTRR ========================================================= */ +/* ========================================================= WDTCR ========================================================= */ + #define R_WDT0_WDTCR_TOPS_Pos (0UL) /*!< TOPS (Bit 0) */ + #define R_WDT0_WDTCR_TOPS_Msk (0x3UL) /*!< TOPS (Bitfield-Mask: 0x03) */ + #define R_WDT0_WDTCR_CKS_Pos (4UL) /*!< CKS (Bit 4) */ + #define R_WDT0_WDTCR_CKS_Msk (0xf0UL) /*!< CKS (Bitfield-Mask: 0x0f) */ + #define R_WDT0_WDTCR_RPES_Pos (8UL) /*!< RPES (Bit 8) */ + #define R_WDT0_WDTCR_RPES_Msk (0x300UL) /*!< RPES (Bitfield-Mask: 0x03) */ + #define R_WDT0_WDTCR_RPSS_Pos (12UL) /*!< RPSS (Bit 12) */ + #define R_WDT0_WDTCR_RPSS_Msk (0x3000UL) /*!< RPSS (Bitfield-Mask: 0x03) */ +/* ========================================================= WDTSR ========================================================= */ + #define R_WDT0_WDTSR_CNTVAL_Pos (0UL) /*!< CNTVAL (Bit 0) */ + #define R_WDT0_WDTSR_CNTVAL_Msk (0x3fffUL) /*!< CNTVAL (Bitfield-Mask: 0x3fff) */ + #define R_WDT0_WDTSR_UNDFF_Pos (14UL) /*!< UNDFF (Bit 14) */ + #define R_WDT0_WDTSR_UNDFF_Msk (0x4000UL) /*!< UNDFF (Bitfield-Mask: 0x01) */ + #define R_WDT0_WDTSR_REFEF_Pos (15UL) /*!< REFEF (Bit 15) */ + #define R_WDT0_WDTSR_REFEF_Msk (0x8000UL) /*!< REFEF (Bitfield-Mask: 0x01) */ +/* ======================================================== WDTRCR ========================================================= */ + #define R_WDT0_WDTRCR_RSTIRQS_Pos (7UL) /*!< RSTIRQS (Bit 7) */ + #define R_WDT0_WDTRCR_RSTIRQS_Msk (0x80UL) /*!< RSTIRQS (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_IIC0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ICCR1 ========================================================= */ + #define R_IIC0_ICCR1_SDAI_Pos (0UL) /*!< SDAI (Bit 0) */ + #define R_IIC0_ICCR1_SDAI_Msk (0x1UL) /*!< SDAI (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SCLI_Pos (1UL) /*!< SCLI (Bit 1) */ + #define R_IIC0_ICCR1_SCLI_Msk (0x2UL) /*!< SCLI (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SDAO_Pos (2UL) /*!< SDAO (Bit 2) */ + #define R_IIC0_ICCR1_SDAO_Msk (0x4UL) /*!< SDAO (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SCLO_Pos (3UL) /*!< SCLO (Bit 3) */ + #define R_IIC0_ICCR1_SCLO_Msk (0x8UL) /*!< SCLO (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SOWP_Pos (4UL) /*!< SOWP (Bit 4) */ + #define R_IIC0_ICCR1_SOWP_Msk (0x10UL) /*!< SOWP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_CLO_Pos (5UL) /*!< CLO (Bit 5) */ + #define R_IIC0_ICCR1_CLO_Msk (0x20UL) /*!< CLO (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_IICRST_Pos (6UL) /*!< IICRST (Bit 6) */ + #define R_IIC0_ICCR1_IICRST_Msk (0x40UL) /*!< IICRST (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_ICE_Pos (7UL) /*!< ICE (Bit 7) */ + #define R_IIC0_ICCR1_ICE_Msk (0x80UL) /*!< ICE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICCR2 ========================================================= */ + #define R_IIC0_ICCR2_ST_Pos (1UL) /*!< ST (Bit 1) */ + #define R_IIC0_ICCR2_ST_Msk (0x2UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_RS_Pos (2UL) /*!< RS (Bit 2) */ + #define R_IIC0_ICCR2_RS_Msk (0x4UL) /*!< RS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_SP_Pos (3UL) /*!< SP (Bit 3) */ + #define R_IIC0_ICCR2_SP_Msk (0x8UL) /*!< SP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_TRS_Pos (5UL) /*!< TRS (Bit 5) */ + #define R_IIC0_ICCR2_TRS_Msk (0x20UL) /*!< TRS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_MST_Pos (6UL) /*!< MST (Bit 6) */ + #define R_IIC0_ICCR2_MST_Msk (0x40UL) /*!< MST (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_BBSY_Pos (7UL) /*!< BBSY (Bit 7) */ + #define R_IIC0_ICCR2_BBSY_Msk (0x80UL) /*!< BBSY (Bitfield-Mask: 0x01) */ +/* ========================================================= ICMR1 ========================================================= */ + #define R_IIC0_ICMR1_BC_Pos (0UL) /*!< BC (Bit 0) */ + #define R_IIC0_ICMR1_BC_Msk (0x7UL) /*!< BC (Bitfield-Mask: 0x07) */ + #define R_IIC0_ICMR1_BCWP_Pos (3UL) /*!< BCWP (Bit 3) */ + #define R_IIC0_ICMR1_BCWP_Msk (0x8UL) /*!< BCWP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR1_CKS_Pos (4UL) /*!< CKS (Bit 4) */ + #define R_IIC0_ICMR1_CKS_Msk (0x70UL) /*!< CKS (Bitfield-Mask: 0x07) */ + #define R_IIC0_ICMR1_MTWP_Pos (7UL) /*!< MTWP (Bit 7) */ + #define R_IIC0_ICMR1_MTWP_Msk (0x80UL) /*!< MTWP (Bitfield-Mask: 0x01) */ +/* ========================================================= ICMR2 ========================================================= */ + #define R_IIC0_ICMR2_TMOS_Pos (0UL) /*!< TMOS (Bit 0) */ + #define R_IIC0_ICMR2_TMOS_Msk (0x1UL) /*!< TMOS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR2_TMOL_Pos (1UL) /*!< TMOL (Bit 1) */ + #define R_IIC0_ICMR2_TMOL_Msk (0x2UL) /*!< TMOL (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR2_TMOH_Pos (2UL) /*!< TMOH (Bit 2) */ + #define R_IIC0_ICMR2_TMOH_Msk (0x4UL) /*!< TMOH (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR2_SDDL_Pos (4UL) /*!< SDDL (Bit 4) */ + #define R_IIC0_ICMR2_SDDL_Msk (0x70UL) /*!< SDDL (Bitfield-Mask: 0x07) */ + #define R_IIC0_ICMR2_DLCS_Pos (7UL) /*!< DLCS (Bit 7) */ + #define R_IIC0_ICMR2_DLCS_Msk (0x80UL) /*!< DLCS (Bitfield-Mask: 0x01) */ +/* ========================================================= ICMR3 ========================================================= */ + #define R_IIC0_ICMR3_NF_Pos (0UL) /*!< NF (Bit 0) */ + #define R_IIC0_ICMR3_NF_Msk (0x3UL) /*!< NF (Bitfield-Mask: 0x03) */ + #define R_IIC0_ICMR3_ACKBR_Pos (2UL) /*!< ACKBR (Bit 2) */ + #define R_IIC0_ICMR3_ACKBR_Msk (0x4UL) /*!< ACKBR (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_ACKBT_Pos (3UL) /*!< ACKBT (Bit 3) */ + #define R_IIC0_ICMR3_ACKBT_Msk (0x8UL) /*!< ACKBT (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_ACKWP_Pos (4UL) /*!< ACKWP (Bit 4) */ + #define R_IIC0_ICMR3_ACKWP_Msk (0x10UL) /*!< ACKWP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_RDRFS_Pos (5UL) /*!< RDRFS (Bit 5) */ + #define R_IIC0_ICMR3_RDRFS_Msk (0x20UL) /*!< RDRFS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_WAIT_Pos (6UL) /*!< WAIT (Bit 6) */ + #define R_IIC0_ICMR3_WAIT_Msk (0x40UL) /*!< WAIT (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_SMBS_Pos (7UL) /*!< SMBS (Bit 7) */ + #define R_IIC0_ICMR3_SMBS_Msk (0x80UL) /*!< SMBS (Bitfield-Mask: 0x01) */ +/* ========================================================= ICFER ========================================================= */ + #define R_IIC0_ICFER_TMOE_Pos (0UL) /*!< TMOE (Bit 0) */ + #define R_IIC0_ICFER_TMOE_Msk (0x1UL) /*!< TMOE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_MALE_Pos (1UL) /*!< MALE (Bit 1) */ + #define R_IIC0_ICFER_MALE_Msk (0x2UL) /*!< MALE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_NALE_Pos (2UL) /*!< NALE (Bit 2) */ + #define R_IIC0_ICFER_NALE_Msk (0x4UL) /*!< NALE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_SALE_Pos (3UL) /*!< SALE (Bit 3) */ + #define R_IIC0_ICFER_SALE_Msk (0x8UL) /*!< SALE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_NACKE_Pos (4UL) /*!< NACKE (Bit 4) */ + #define R_IIC0_ICFER_NACKE_Msk (0x10UL) /*!< NACKE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_NFE_Pos (5UL) /*!< NFE (Bit 5) */ + #define R_IIC0_ICFER_NFE_Msk (0x20UL) /*!< NFE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_SCLE_Pos (6UL) /*!< SCLE (Bit 6) */ + #define R_IIC0_ICFER_SCLE_Msk (0x40UL) /*!< SCLE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSER ========================================================= */ + #define R_IIC0_ICSER_SAR0E_Pos (0UL) /*!< SAR0E (Bit 0) */ + #define R_IIC0_ICSER_SAR0E_Msk (0x1UL) /*!< SAR0E (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_SAR1E_Pos (1UL) /*!< SAR1E (Bit 1) */ + #define R_IIC0_ICSER_SAR1E_Msk (0x2UL) /*!< SAR1E (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_SAR2E_Pos (2UL) /*!< SAR2E (Bit 2) */ + #define R_IIC0_ICSER_SAR2E_Msk (0x4UL) /*!< SAR2E (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_GCAE_Pos (3UL) /*!< GCAE (Bit 3) */ + #define R_IIC0_ICSER_GCAE_Msk (0x8UL) /*!< GCAE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_DIDE_Pos (5UL) /*!< DIDE (Bit 5) */ + #define R_IIC0_ICSER_DIDE_Msk (0x20UL) /*!< DIDE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_HOAE_Pos (7UL) /*!< HOAE (Bit 7) */ + #define R_IIC0_ICSER_HOAE_Msk (0x80UL) /*!< HOAE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICIER ========================================================= */ + #define R_IIC0_ICIER_TMOIE_Pos (0UL) /*!< TMOIE (Bit 0) */ + #define R_IIC0_ICIER_TMOIE_Msk (0x1UL) /*!< TMOIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_ALIE_Pos (1UL) /*!< ALIE (Bit 1) */ + #define R_IIC0_ICIER_ALIE_Msk (0x2UL) /*!< ALIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_STIE_Pos (2UL) /*!< STIE (Bit 2) */ + #define R_IIC0_ICIER_STIE_Msk (0x4UL) /*!< STIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_SPIE_Pos (3UL) /*!< SPIE (Bit 3) */ + #define R_IIC0_ICIER_SPIE_Msk (0x8UL) /*!< SPIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_NAKIE_Pos (4UL) /*!< NAKIE (Bit 4) */ + #define R_IIC0_ICIER_NAKIE_Msk (0x10UL) /*!< NAKIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_RIE_Pos (5UL) /*!< RIE (Bit 5) */ + #define R_IIC0_ICIER_RIE_Msk (0x20UL) /*!< RIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_TEIE_Pos (6UL) /*!< TEIE (Bit 6) */ + #define R_IIC0_ICIER_TEIE_Msk (0x40UL) /*!< TEIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_TIE_Pos (7UL) /*!< TIE (Bit 7) */ + #define R_IIC0_ICIER_TIE_Msk (0x80UL) /*!< TIE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR1 ========================================================= */ + #define R_IIC0_ICSR1_AAS0_Pos (0UL) /*!< AAS0 (Bit 0) */ + #define R_IIC0_ICSR1_AAS0_Msk (0x1UL) /*!< AAS0 (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_AAS1_Pos (1UL) /*!< AAS1 (Bit 1) */ + #define R_IIC0_ICSR1_AAS1_Msk (0x2UL) /*!< AAS1 (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_AAS2_Pos (2UL) /*!< AAS2 (Bit 2) */ + #define R_IIC0_ICSR1_AAS2_Msk (0x4UL) /*!< AAS2 (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_GCA_Pos (3UL) /*!< GCA (Bit 3) */ + #define R_IIC0_ICSR1_GCA_Msk (0x8UL) /*!< GCA (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_DID_Pos (5UL) /*!< DID (Bit 5) */ + #define R_IIC0_ICSR1_DID_Msk (0x20UL) /*!< DID (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_HOA_Pos (7UL) /*!< HOA (Bit 7) */ + #define R_IIC0_ICSR1_HOA_Msk (0x80UL) /*!< HOA (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR2 ========================================================= */ + #define R_IIC0_ICSR2_TMOF_Pos (0UL) /*!< TMOF (Bit 0) */ + #define R_IIC0_ICSR2_TMOF_Msk (0x1UL) /*!< TMOF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_AL_Pos (1UL) /*!< AL (Bit 1) */ + #define R_IIC0_ICSR2_AL_Msk (0x2UL) /*!< AL (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_START_Pos (2UL) /*!< START (Bit 2) */ + #define R_IIC0_ICSR2_START_Msk (0x4UL) /*!< START (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_STOP_Pos (3UL) /*!< STOP (Bit 3) */ + #define R_IIC0_ICSR2_STOP_Msk (0x8UL) /*!< STOP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_NACKF_Pos (4UL) /*!< NACKF (Bit 4) */ + #define R_IIC0_ICSR2_NACKF_Msk (0x10UL) /*!< NACKF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_RDRF_Pos (5UL) /*!< RDRF (Bit 5) */ + #define R_IIC0_ICSR2_RDRF_Msk (0x20UL) /*!< RDRF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_TEND_Pos (6UL) /*!< TEND (Bit 6) */ + #define R_IIC0_ICSR2_TEND_Msk (0x40UL) /*!< TEND (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_TDRE_Pos (7UL) /*!< TDRE (Bit 7) */ + #define R_IIC0_ICSR2_TDRE_Msk (0x80UL) /*!< TDRE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICBRL ========================================================= */ + #define R_IIC0_ICBRL_BRL_Pos (0UL) /*!< BRL (Bit 0) */ + #define R_IIC0_ICBRL_BRL_Msk (0x1fUL) /*!< BRL (Bitfield-Mask: 0x1f) */ +/* ========================================================= ICBRH ========================================================= */ + #define R_IIC0_ICBRH_BRH_Pos (0UL) /*!< BRH (Bit 0) */ + #define R_IIC0_ICBRH_BRH_Msk (0x1fUL) /*!< BRH (Bitfield-Mask: 0x1f) */ +/* ========================================================= ICDRT ========================================================= */ +/* ========================================================= ICDRR ========================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_DOC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DOCR ========================================================== */ + #define R_DOC_DOCR_OMS_Pos (0UL) /*!< OMS (Bit 0) */ + #define R_DOC_DOCR_OMS_Msk (0x3UL) /*!< OMS (Bitfield-Mask: 0x03) */ + #define R_DOC_DOCR_DCSEL_Pos (2UL) /*!< DCSEL (Bit 2) */ + #define R_DOC_DOCR_DCSEL_Msk (0x4UL) /*!< DCSEL (Bitfield-Mask: 0x01) */ + #define R_DOC_DOCR_DOPCIE_Pos (4UL) /*!< DOPCIE (Bit 4) */ + #define R_DOC_DOCR_DOPCIE_Msk (0x10UL) /*!< DOPCIE (Bitfield-Mask: 0x01) */ + #define R_DOC_DOCR_DOPCF_Pos (5UL) /*!< DOPCF (Bit 5) */ + #define R_DOC_DOCR_DOPCF_Msk (0x20UL) /*!< DOPCF (Bitfield-Mask: 0x01) */ + #define R_DOC_DOCR_DOPCFCL_Pos (6UL) /*!< DOPCFCL (Bit 6) */ + #define R_DOC_DOCR_DOPCFCL_Msk (0x40UL) /*!< DOPCFCL (Bitfield-Mask: 0x01) */ +/* ========================================================= DODIR ========================================================= */ +/* ========================================================= DODSR ========================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_ADC121 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ADCSR ========================================================= */ + #define R_ADC121_ADCSR_DBLANS_Pos (0UL) /*!< DBLANS (Bit 0) */ + #define R_ADC121_ADCSR_DBLANS_Msk (0x1fUL) /*!< DBLANS (Bitfield-Mask: 0x1f) */ + #define R_ADC121_ADCSR_GBADIE_Pos (6UL) /*!< GBADIE (Bit 6) */ + #define R_ADC121_ADCSR_GBADIE_Msk (0x40UL) /*!< GBADIE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCSR_DBLE_Pos (7UL) /*!< DBLE (Bit 7) */ + #define R_ADC121_ADCSR_DBLE_Msk (0x80UL) /*!< DBLE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCSR_EXTRG_Pos (8UL) /*!< EXTRG (Bit 8) */ + #define R_ADC121_ADCSR_EXTRG_Msk (0x100UL) /*!< EXTRG (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCSR_TRGE_Pos (9UL) /*!< TRGE (Bit 9) */ + #define R_ADC121_ADCSR_TRGE_Msk (0x200UL) /*!< TRGE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCSR_ADIE_Pos (12UL) /*!< ADIE (Bit 12) */ + #define R_ADC121_ADCSR_ADIE_Msk (0x1000UL) /*!< ADIE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCSR_ADCS_Pos (13UL) /*!< ADCS (Bit 13) */ + #define R_ADC121_ADCSR_ADCS_Msk (0x6000UL) /*!< ADCS (Bitfield-Mask: 0x03) */ + #define R_ADC121_ADCSR_ADST_Pos (15UL) /*!< ADST (Bit 15) */ + #define R_ADC121_ADCSR_ADST_Msk (0x8000UL) /*!< ADST (Bitfield-Mask: 0x01) */ +/* ======================================================== ADANSA0 ======================================================== */ + #define R_ADC121_ADANSA0_ANSA0_Pos (0UL) /*!< ANSA0 (Bit 0) */ + #define R_ADC121_ADANSA0_ANSA0_Msk (0xffUL) /*!< ANSA0 (Bitfield-Mask: 0xff) */ +/* ======================================================== ADADS0 ========================================================= */ + #define R_ADC121_ADADS0_ADS0_Pos (0UL) /*!< ADS0 (Bit 0) */ + #define R_ADC121_ADADS0_ADS0_Msk (0xffUL) /*!< ADS0 (Bitfield-Mask: 0xff) */ +/* ========================================================= ADADC ========================================================= */ + #define R_ADC121_ADADC_ADC_Pos (0UL) /*!< ADC (Bit 0) */ + #define R_ADC121_ADADC_ADC_Msk (0x7UL) /*!< ADC (Bitfield-Mask: 0x07) */ + #define R_ADC121_ADADC_AVEE_Pos (7UL) /*!< AVEE (Bit 7) */ + #define R_ADC121_ADADC_AVEE_Msk (0x80UL) /*!< AVEE (Bitfield-Mask: 0x01) */ +/* ========================================================= ADCER ========================================================= */ + #define R_ADC121_ADCER_ADPRC_Pos (1UL) /*!< ADPRC (Bit 1) */ + #define R_ADC121_ADCER_ADPRC_Msk (0x6UL) /*!< ADPRC (Bitfield-Mask: 0x03) */ + #define R_ADC121_ADCER_ACE_Pos (5UL) /*!< ACE (Bit 5) */ + #define R_ADC121_ADCER_ACE_Msk (0x20UL) /*!< ACE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCER_ADRFMT_Pos (15UL) /*!< ADRFMT (Bit 15) */ + #define R_ADC121_ADCER_ADRFMT_Msk (0x8000UL) /*!< ADRFMT (Bitfield-Mask: 0x01) */ +/* ======================================================== ADSTRGR ======================================================== */ + #define R_ADC121_ADSTRGR_TRSB_Pos (0UL) /*!< TRSB (Bit 0) */ + #define R_ADC121_ADSTRGR_TRSB_Msk (0x3fUL) /*!< TRSB (Bitfield-Mask: 0x3f) */ + #define R_ADC121_ADSTRGR_TRSA_Pos (8UL) /*!< TRSA (Bit 8) */ + #define R_ADC121_ADSTRGR_TRSA_Msk (0x3f00UL) /*!< TRSA (Bitfield-Mask: 0x3f) */ +/* ======================================================== ADANSB0 ======================================================== */ + #define R_ADC121_ADANSB0_ANSB0_Pos (0UL) /*!< ANSB0 (Bit 0) */ + #define R_ADC121_ADANSB0_ANSB0_Msk (0xffUL) /*!< ANSB0 (Bitfield-Mask: 0xff) */ +/* ======================================================== ADDBLDR ======================================================== */ + #define R_ADC121_ADDBLDR_DBLDR_Pos (0UL) /*!< DBLDR (Bit 0) */ + #define R_ADC121_ADDBLDR_DBLDR_Msk (0xffffUL) /*!< DBLDR (Bitfield-Mask: 0xffff) */ +/* ========================================================= ADDR ========================================================== */ + #define R_ADC121_ADDR_DR_Pos (0UL) /*!< DR (Bit 0) */ + #define R_ADC121_ADDR_DR_Msk (0xffffUL) /*!< DR (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADSHCR ========================================================= */ + #define R_ADC121_ADSHCR_SSTSH_Pos (0UL) /*!< SSTSH (Bit 0) */ + #define R_ADC121_ADSHCR_SSTSH_Msk (0xffUL) /*!< SSTSH (Bitfield-Mask: 0xff) */ + #define R_ADC121_ADSHCR_SHANS_Pos (8UL) /*!< SHANS (Bit 8) */ + #define R_ADC121_ADSHCR_SHANS_Msk (0x700UL) /*!< SHANS (Bitfield-Mask: 0x07) */ +/* ======================================================== ADELCCR ======================================================== */ + #define R_ADC121_ADELCCR_ELCC_Pos (0UL) /*!< ELCC (Bit 0) */ + #define R_ADC121_ADELCCR_ELCC_Msk (0x3UL) /*!< ELCC (Bitfield-Mask: 0x03) */ + #define R_ADC121_ADELCCR_GCELC_Pos (2UL) /*!< GCELC (Bit 2) */ + #define R_ADC121_ADELCCR_GCELC_Msk (0x4UL) /*!< GCELC (Bitfield-Mask: 0x01) */ +/* ======================================================== ADGSPCR ======================================================== */ + #define R_ADC121_ADGSPCR_PGS_Pos (0UL) /*!< PGS (Bit 0) */ + #define R_ADC121_ADGSPCR_PGS_Msk (0x1UL) /*!< PGS (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADGSPCR_GBRSCN_Pos (1UL) /*!< GBRSCN (Bit 1) */ + #define R_ADC121_ADGSPCR_GBRSCN_Msk (0x2UL) /*!< GBRSCN (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADGSPCR_LGRRS_Pos (14UL) /*!< LGRRS (Bit 14) */ + #define R_ADC121_ADGSPCR_LGRRS_Msk (0x4000UL) /*!< LGRRS (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADGSPCR_GBRP_Pos (15UL) /*!< GBRP (Bit 15) */ + #define R_ADC121_ADGSPCR_GBRP_Msk (0x8000UL) /*!< GBRP (Bitfield-Mask: 0x01) */ +/* ======================================================= ADDBLDRA ======================================================== */ + #define R_ADC121_ADDBLDRA_DBLDRA_Pos (0UL) /*!< DBLDRA (Bit 0) */ + #define R_ADC121_ADDBLDRA_DBLDRA_Msk (0xffffUL) /*!< DBLDRA (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADDBLDRB ======================================================== */ + #define R_ADC121_ADDBLDRB_DBLDRB_Pos (0UL) /*!< DBLDRB (Bit 0) */ + #define R_ADC121_ADDBLDRB_DBLDRB_Msk (0xffffUL) /*!< DBLDRB (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADWINMON ======================================================== */ + #define R_ADC121_ADWINMON_MONCOMB_Pos (0UL) /*!< MONCOMB (Bit 0) */ + #define R_ADC121_ADWINMON_MONCOMB_Msk (0x1UL) /*!< MONCOMB (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADWINMON_MONCMPA_Pos (4UL) /*!< MONCMPA (Bit 4) */ + #define R_ADC121_ADWINMON_MONCMPA_Msk (0x10UL) /*!< MONCMPA (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADWINMON_MONCMPB_Pos (5UL) /*!< MONCMPB (Bit 5) */ + #define R_ADC121_ADWINMON_MONCMPB_Msk (0x20UL) /*!< MONCMPB (Bitfield-Mask: 0x01) */ +/* ======================================================== ADCMPCR ======================================================== */ + #define R_ADC121_ADCMPCR_CMPAB_Pos (0UL) /*!< CMPAB (Bit 0) */ + #define R_ADC121_ADCMPCR_CMPAB_Msk (0x3UL) /*!< CMPAB (Bitfield-Mask: 0x03) */ + #define R_ADC121_ADCMPCR_CMPBE_Pos (9UL) /*!< CMPBE (Bit 9) */ + #define R_ADC121_ADCMPCR_CMPBE_Msk (0x200UL) /*!< CMPBE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCMPCR_CMPAE_Pos (11UL) /*!< CMPAE (Bit 11) */ + #define R_ADC121_ADCMPCR_CMPAE_Msk (0x800UL) /*!< CMPAE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCMPCR_CMPBIE_Pos (13UL) /*!< CMPBIE (Bit 13) */ + #define R_ADC121_ADCMPCR_CMPBIE_Msk (0x2000UL) /*!< CMPBIE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCMPCR_WCMPE_Pos (14UL) /*!< WCMPE (Bit 14) */ + #define R_ADC121_ADCMPCR_WCMPE_Msk (0x4000UL) /*!< WCMPE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADCMPCR_CMPAIE_Pos (15UL) /*!< CMPAIE (Bit 15) */ + #define R_ADC121_ADCMPCR_CMPAIE_Msk (0x8000UL) /*!< CMPAIE (Bitfield-Mask: 0x01) */ +/* ====================================================== ADCMPANSR0 ======================================================= */ + #define R_ADC121_ADCMPANSR0_CMPCHA0_Pos (0UL) /*!< CMPCHA0 (Bit 0) */ + #define R_ADC121_ADCMPANSR0_CMPCHA0_Msk (0xffUL) /*!< CMPCHA0 (Bitfield-Mask: 0xff) */ +/* ======================================================= ADCMPLR0 ======================================================== */ + #define R_ADC121_ADCMPLR0_CMPLCHA0_Pos (0UL) /*!< CMPLCHA0 (Bit 0) */ + #define R_ADC121_ADCMPLR0_CMPLCHA0_Msk (0xffUL) /*!< CMPLCHA0 (Bitfield-Mask: 0xff) */ +/* ======================================================= ADCMPDR0 ======================================================== */ + #define R_ADC121_ADCMPDR0_CMPLLA_Pos (0UL) /*!< CMPLLA (Bit 0) */ + #define R_ADC121_ADCMPDR0_CMPLLA_Msk (0xffffUL) /*!< CMPLLA (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADCMPDR1 ======================================================== */ + #define R_ADC121_ADCMPDR1_CMPULA_Pos (0UL) /*!< CMPULA (Bit 0) */ + #define R_ADC121_ADCMPDR1_CMPULA_Msk (0xffffUL) /*!< CMPULA (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADCMPSR0 ======================================================== */ + #define R_ADC121_ADCMPSR0_CMPSTCHA0_Pos (0UL) /*!< CMPSTCHA0 (Bit 0) */ + #define R_ADC121_ADCMPSR0_CMPSTCHA0_Msk (0xffUL) /*!< CMPSTCHA0 (Bitfield-Mask: 0xff) */ +/* ======================================================= ADCMPBNSR ======================================================= */ + #define R_ADC121_ADCMPBNSR_CMPCHB_Pos (0UL) /*!< CMPCHB (Bit 0) */ + #define R_ADC121_ADCMPBNSR_CMPCHB_Msk (0x3fUL) /*!< CMPCHB (Bitfield-Mask: 0x3f) */ + #define R_ADC121_ADCMPBNSR_CMPLB_Pos (7UL) /*!< CMPLB (Bit 7) */ + #define R_ADC121_ADCMPBNSR_CMPLB_Msk (0x80UL) /*!< CMPLB (Bitfield-Mask: 0x01) */ +/* ======================================================= ADWINLLB ======================================================== */ + #define R_ADC121_ADWINLLB_CMPLLB_Pos (0UL) /*!< CMPLLB (Bit 0) */ + #define R_ADC121_ADWINLLB_CMPLLB_Msk (0xffffUL) /*!< CMPLLB (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADWINULB ======================================================== */ + #define R_ADC121_ADWINULB_CMPULB_Pos (0UL) /*!< CMPULB (Bit 0) */ + #define R_ADC121_ADWINULB_CMPULB_Msk (0xffffUL) /*!< CMPULB (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADCMPBSR ======================================================== */ + #define R_ADC121_ADCMPBSR_CMPSTB_Pos (0UL) /*!< CMPSTB (Bit 0) */ + #define R_ADC121_ADCMPBSR_CMPSTB_Msk (0x1UL) /*!< CMPSTB (Bitfield-Mask: 0x01) */ +/* ======================================================== ADANSC0 ======================================================== */ + #define R_ADC121_ADANSC0_ANSC0_Pos (0UL) /*!< ANSC0 (Bit 0) */ + #define R_ADC121_ADANSC0_ANSC0_Msk (0xffUL) /*!< ANSC0 (Bitfield-Mask: 0xff) */ +/* ======================================================= ADGCTRGR ======================================================== */ + #define R_ADC121_ADGCTRGR_TRSC_Pos (0UL) /*!< TRSC (Bit 0) */ + #define R_ADC121_ADGCTRGR_TRSC_Msk (0x3fUL) /*!< TRSC (Bitfield-Mask: 0x3f) */ + #define R_ADC121_ADGCTRGR_GCADIE_Pos (6UL) /*!< GCADIE (Bit 6) */ + #define R_ADC121_ADGCTRGR_GCADIE_Msk (0x40UL) /*!< GCADIE (Bitfield-Mask: 0x01) */ + #define R_ADC121_ADGCTRGR_GRCE_Pos (7UL) /*!< GRCE (Bit 7) */ + #define R_ADC121_ADGCTRGR_GRCE_Msk (0x80UL) /*!< GRCE (Bitfield-Mask: 0x01) */ +/* ======================================================== ADSSTR ========================================================= */ + #define R_ADC121_ADSSTR_SST_Pos (0UL) /*!< SST (Bit 0) */ + #define R_ADC121_ADSSTR_SST_Msk (0xffUL) /*!< SST (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ R_TSU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= TSUSM ========================================================= */ + #define R_TSU_TSUSM_TSEN_Pos (0UL) /*!< TSEN (Bit 0) */ + #define R_TSU_TSUSM_TSEN_Msk (0x1UL) /*!< TSEN (Bitfield-Mask: 0x01) */ + #define R_TSU_TSUSM_ADCEN_Pos (1UL) /*!< ADCEN (Bit 1) */ + #define R_TSU_TSUSM_ADCEN_Msk (0x2UL) /*!< ADCEN (Bitfield-Mask: 0x01) */ +/* ========================================================= TSUST ========================================================= */ + #define R_TSU_TSUST_START_Pos (0UL) /*!< START (Bit 0) */ + #define R_TSU_TSUST_START_Msk (0x1UL) /*!< START (Bitfield-Mask: 0x01) */ +/* ======================================================== TSUSCS ========================================================= */ + #define R_TSU_TSUSCS_CKDIV_Pos (3UL) /*!< CKDIV (Bit 3) */ + #define R_TSU_TSUSCS_CKDIV_Msk (0x8UL) /*!< CKDIV (Bitfield-Mask: 0x01) */ +/* ======================================================== TSUSAD ========================================================= */ + #define R_TSU_TSUSAD_DOUT_Pos (0UL) /*!< DOUT (Bit 0) */ + #define R_TSU_TSUSAD_DOUT_Msk (0xfffUL) /*!< DOUT (Bitfield-Mask: 0xfff) */ +/* ========================================================= TSUSS ========================================================= */ + #define R_TSU_TSUSS_CONV_Pos (0UL) /*!< CONV (Bit 0) */ + #define R_TSU_TSUSS_CONV_Msk (0x1UL) /*!< CONV (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_POEG1 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== POEG1GA ======================================================== */ + #define R_POEG1_POEG1GA_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG1_POEG1GA_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG1_POEG1GA_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG1_POEG1GA_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG1_POEG1GA_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG1_POEG1GA_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG1_POEG1GA_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG1_POEG1GA_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG1_POEG1GA_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG1_POEG1GA_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG1_POEG1GA_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GA_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG1_POEG1GA_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG1GB ======================================================== */ + #define R_POEG1_POEG1GB_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG1_POEG1GB_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG1_POEG1GB_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG1_POEG1GB_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG1_POEG1GB_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG1_POEG1GB_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG1_POEG1GB_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG1_POEG1GB_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG1_POEG1GB_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG1_POEG1GB_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG1_POEG1GB_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GB_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG1_POEG1GB_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG1GC ======================================================== */ + #define R_POEG1_POEG1GC_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG1_POEG1GC_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG1_POEG1GC_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG1_POEG1GC_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG1_POEG1GC_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG1_POEG1GC_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG1_POEG1GC_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG1_POEG1GC_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG1_POEG1GC_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG1_POEG1GC_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG1_POEG1GC_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GC_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG1_POEG1GC_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG1GD ======================================================== */ + #define R_POEG1_POEG1GD_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG1_POEG1GD_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG1_POEG1GD_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG1_POEG1GD_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG1_POEG1GD_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG1_POEG1GD_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG1_POEG1GD_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG1_POEG1GD_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG1_POEG1GD_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG1_POEG1GD_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG1_POEG1GD_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG1_POEG1GD_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG1_POEG1GD_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_DMAC0 ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_ICU_NS ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= NS_SWINT ======================================================== */ + #define R_ICU_NS_NS_SWINT_IC0_Pos (0UL) /*!< IC0 (Bit 0) */ + #define R_ICU_NS_NS_SWINT_IC0_Msk (0x1UL) /*!< IC0 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_SWINT_IC1_Pos (1UL) /*!< IC1 (Bit 1) */ + #define R_ICU_NS_NS_SWINT_IC1_Msk (0x2UL) /*!< IC1 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_SWINT_IC2_Pos (2UL) /*!< IC2 (Bit 2) */ + #define R_ICU_NS_NS_SWINT_IC2_Msk (0x4UL) /*!< IC2 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_SWINT_IC3_Pos (3UL) /*!< IC3 (Bit 3) */ + #define R_ICU_NS_NS_SWINT_IC3_Msk (0x8UL) /*!< IC3 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_SWINT_IC4_Pos (4UL) /*!< IC4 (Bit 4) */ + #define R_ICU_NS_NS_SWINT_IC4_Msk (0x10UL) /*!< IC4 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_SWINT_IC5_Pos (5UL) /*!< IC5 (Bit 5) */ + #define R_ICU_NS_NS_SWINT_IC5_Msk (0x20UL) /*!< IC5 (Bitfield-Mask: 0x01) */ +/* =================================================== NS_PORTNF_FLTSEL ==================================================== */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT0_Pos (0UL) /*!< FLT0 (Bit 0) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT0_Msk (0x1UL) /*!< FLT0 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT1_Pos (1UL) /*!< FLT1 (Bit 1) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT1_Msk (0x2UL) /*!< FLT1 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT2_Pos (2UL) /*!< FLT2 (Bit 2) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT2_Msk (0x4UL) /*!< FLT2 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT3_Pos (3UL) /*!< FLT3 (Bit 3) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT3_Msk (0x8UL) /*!< FLT3 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT4_Pos (4UL) /*!< FLT4 (Bit 4) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT4_Msk (0x10UL) /*!< FLT4 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT5_Pos (5UL) /*!< FLT5 (Bit 5) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT5_Msk (0x20UL) /*!< FLT5 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT6_Pos (6UL) /*!< FLT6 (Bit 6) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT6_Msk (0x40UL) /*!< FLT6 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT7_Pos (7UL) /*!< FLT7 (Bit 7) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT7_Msk (0x80UL) /*!< FLT7 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT8_Pos (8UL) /*!< FLT8 (Bit 8) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT8_Msk (0x100UL) /*!< FLT8 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT9_Pos (9UL) /*!< FLT9 (Bit 9) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT9_Msk (0x200UL) /*!< FLT9 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT10_Pos (10UL) /*!< FLT10 (Bit 10) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT10_Msk (0x400UL) /*!< FLT10 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT11_Pos (11UL) /*!< FLT11 (Bit 11) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT11_Msk (0x800UL) /*!< FLT11 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT12_Pos (12UL) /*!< FLT12 (Bit 12) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT12_Msk (0x1000UL) /*!< FLT12 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT13_Pos (13UL) /*!< FLT13 (Bit 13) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLT13_Msk (0x2000UL) /*!< FLT13 (Bitfield-Mask: 0x01) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLTDRQ_Pos (14UL) /*!< FLTDRQ (Bit 14) */ + #define R_ICU_NS_NS_PORTNF_FLTSEL_FLTDRQ_Msk (0x4000UL) /*!< FLTDRQ (Bitfield-Mask: 0x01) */ +/* =================================================== NS_PORTNF_CLKSEL ==================================================== */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL0_Pos (0UL) /*!< CKSEL0 (Bit 0) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL0_Msk (0x3UL) /*!< CKSEL0 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL1_Pos (2UL) /*!< CKSEL1 (Bit 2) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL1_Msk (0xcUL) /*!< CKSEL1 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL2_Pos (4UL) /*!< CKSEL2 (Bit 4) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL2_Msk (0x30UL) /*!< CKSEL2 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL3_Pos (6UL) /*!< CKSEL3 (Bit 6) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL3_Msk (0xc0UL) /*!< CKSEL3 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL4_Pos (8UL) /*!< CKSEL4 (Bit 8) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL4_Msk (0x300UL) /*!< CKSEL4 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL5_Pos (10UL) /*!< CKSEL5 (Bit 10) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL5_Msk (0xc00UL) /*!< CKSEL5 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL6_Pos (12UL) /*!< CKSEL6 (Bit 12) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL6_Msk (0x3000UL) /*!< CKSEL6 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL7_Pos (14UL) /*!< CKSEL7 (Bit 14) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL7_Msk (0xc000UL) /*!< CKSEL7 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL8_Pos (16UL) /*!< CKSEL8 (Bit 16) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL8_Msk (0x30000UL) /*!< CKSEL8 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL9_Pos (18UL) /*!< CKSEL9 (Bit 18) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL9_Msk (0xc0000UL) /*!< CKSEL9 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL10_Pos (20UL) /*!< CKSEL10 (Bit 20) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL10_Msk (0x300000UL) /*!< CKSEL10 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL11_Pos (22UL) /*!< CKSEL11 (Bit 22) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL11_Msk (0xc00000UL) /*!< CKSEL11 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL12_Pos (24UL) /*!< CKSEL12 (Bit 24) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL12_Msk (0x3000000UL) /*!< CKSEL12 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL13_Pos (26UL) /*!< CKSEL13 (Bit 26) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSEL13_Msk (0xc000000UL) /*!< CKSEL13 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSELDREQ_Pos (28UL) /*!< CKSELDREQ (Bit 28) */ + #define R_ICU_NS_NS_PORTNF_CLKSEL_CKSELDREQ_Msk (0x30000000UL) /*!< CKSELDREQ (Bitfield-Mask: 0x03) */ +/* ===================================================== NS_PORTNF_MD ====================================================== */ + #define R_ICU_NS_NS_PORTNF_MD_MD0_Pos (0UL) /*!< MD0 (Bit 0) */ + #define R_ICU_NS_NS_PORTNF_MD_MD0_Msk (0x3UL) /*!< MD0 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD1_Pos (2UL) /*!< MD1 (Bit 2) */ + #define R_ICU_NS_NS_PORTNF_MD_MD1_Msk (0xcUL) /*!< MD1 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD2_Pos (4UL) /*!< MD2 (Bit 4) */ + #define R_ICU_NS_NS_PORTNF_MD_MD2_Msk (0x30UL) /*!< MD2 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD3_Pos (6UL) /*!< MD3 (Bit 6) */ + #define R_ICU_NS_NS_PORTNF_MD_MD3_Msk (0xc0UL) /*!< MD3 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD4_Pos (8UL) /*!< MD4 (Bit 8) */ + #define R_ICU_NS_NS_PORTNF_MD_MD4_Msk (0x300UL) /*!< MD4 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD5_Pos (10UL) /*!< MD5 (Bit 10) */ + #define R_ICU_NS_NS_PORTNF_MD_MD5_Msk (0xc00UL) /*!< MD5 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD6_Pos (12UL) /*!< MD6 (Bit 12) */ + #define R_ICU_NS_NS_PORTNF_MD_MD6_Msk (0x3000UL) /*!< MD6 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD7_Pos (14UL) /*!< MD7 (Bit 14) */ + #define R_ICU_NS_NS_PORTNF_MD_MD7_Msk (0xc000UL) /*!< MD7 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD8_Pos (16UL) /*!< MD8 (Bit 16) */ + #define R_ICU_NS_NS_PORTNF_MD_MD8_Msk (0x30000UL) /*!< MD8 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD9_Pos (18UL) /*!< MD9 (Bit 18) */ + #define R_ICU_NS_NS_PORTNF_MD_MD9_Msk (0xc0000UL) /*!< MD9 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD10_Pos (20UL) /*!< MD10 (Bit 20) */ + #define R_ICU_NS_NS_PORTNF_MD_MD10_Msk (0x300000UL) /*!< MD10 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD11_Pos (22UL) /*!< MD11 (Bit 22) */ + #define R_ICU_NS_NS_PORTNF_MD_MD11_Msk (0xc00000UL) /*!< MD11 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD12_Pos (24UL) /*!< MD12 (Bit 24) */ + #define R_ICU_NS_NS_PORTNF_MD_MD12_Msk (0x3000000UL) /*!< MD12 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MD13_Pos (26UL) /*!< MD13 (Bit 26) */ + #define R_ICU_NS_NS_PORTNF_MD_MD13_Msk (0xc000000UL) /*!< MD13 (Bitfield-Mask: 0x03) */ + #define R_ICU_NS_NS_PORTNF_MD_MDDRQ_Pos (28UL) /*!< MDDRQ (Bit 28) */ + #define R_ICU_NS_NS_PORTNF_MD_MDDRQ_Msk (0x30000000UL) /*!< MDDRQ (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_ELC ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= ELC_SSEL ======================================================== */ + #define R_ELC_ELC_SSEL_ELC_SEL0_Pos (0UL) /*!< ELC_SEL0 (Bit 0) */ + #define R_ELC_ELC_SSEL_ELC_SEL0_Msk (0x3ffUL) /*!< ELC_SEL0 (Bitfield-Mask: 0x3ff) */ + #define R_ELC_ELC_SSEL_ELC_SEL1_Pos (10UL) /*!< ELC_SEL1 (Bit 10) */ + #define R_ELC_ELC_SSEL_ELC_SEL1_Msk (0xffc00UL) /*!< ELC_SEL1 (Bitfield-Mask: 0x3ff) */ + #define R_ELC_ELC_SSEL_ELC_SEL2_Pos (20UL) /*!< ELC_SEL2 (Bit 20) */ + #define R_ELC_ELC_SSEL_ELC_SEL2_Msk (0x3ff00000UL) /*!< ELC_SEL2 (Bitfield-Mask: 0x3ff) */ + +/* =========================================================================================================================== */ +/* ================ R_DMA ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== DMAC0_RSSEL ====================================================== */ + #define R_DMA_DMAC0_RSSEL_REQ_SELA_Pos (0UL) /*!< REQ_SELA (Bit 0) */ + #define R_DMA_DMAC0_RSSEL_REQ_SELA_Msk (0x1ffUL) /*!< REQ_SELA (Bitfield-Mask: 0x1ff) */ + #define R_DMA_DMAC0_RSSEL_REQ_SELB_Pos (10UL) /*!< REQ_SELB (Bit 10) */ + #define R_DMA_DMAC0_RSSEL_REQ_SELB_Msk (0x7fc00UL) /*!< REQ_SELB (Bitfield-Mask: 0x1ff) */ + #define R_DMA_DMAC0_RSSEL_REQ_SELC_Pos (20UL) /*!< REQ_SELC (Bit 20) */ + #define R_DMA_DMAC0_RSSEL_REQ_SELC_Msk (0x1ff00000UL) /*!< REQ_SELC (Bitfield-Mask: 0x1ff) */ +/* ====================================================== DMAC1_RSSEL ====================================================== */ + #define R_DMA_DMAC1_RSSEL_REQ_SELA_Pos (0UL) /*!< REQ_SELA (Bit 0) */ + #define R_DMA_DMAC1_RSSEL_REQ_SELA_Msk (0x1ffUL) /*!< REQ_SELA (Bitfield-Mask: 0x1ff) */ + #define R_DMA_DMAC1_RSSEL_REQ_SELB_Pos (10UL) /*!< REQ_SELB (Bit 10) */ + #define R_DMA_DMAC1_RSSEL_REQ_SELB_Msk (0x7fc00UL) /*!< REQ_SELB (Bitfield-Mask: 0x1ff) */ + #define R_DMA_DMAC1_RSSEL_REQ_SELC_Pos (20UL) /*!< REQ_SELC (Bit 20) */ + #define R_DMA_DMAC1_RSSEL_REQ_SELC_Msk (0x1ff00000UL) /*!< REQ_SELC (Bitfield-Mask: 0x1ff) */ + +/* =========================================================================================================================== */ +/* ================ R_PORT_COMMON ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== P =========================================================== */ + #define R_PORT_NSR_P_POUT_0_Pos (0UL) /*!< POUT_0 (Bit 0) */ + #define R_PORT_NSR_P_POUT_0_Msk (0x1UL) /*!< POUT_0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_P_POUT_1_Pos (1UL) /*!< POUT_1 (Bit 1) */ + #define R_PORT_NSR_P_POUT_1_Msk (0x2UL) /*!< POUT_1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_P_POUT_2_Pos (2UL) /*!< POUT_2 (Bit 2) */ + #define R_PORT_NSR_P_POUT_2_Msk (0x4UL) /*!< POUT_2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_P_POUT_3_Pos (3UL) /*!< POUT_3 (Bit 3) */ + #define R_PORT_NSR_P_POUT_3_Msk (0x8UL) /*!< POUT_3 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_P_POUT_4_Pos (4UL) /*!< POUT_4 (Bit 4) */ + #define R_PORT_NSR_P_POUT_4_Msk (0x10UL) /*!< POUT_4 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_P_POUT_5_Pos (5UL) /*!< POUT_5 (Bit 5) */ + #define R_PORT_NSR_P_POUT_5_Msk (0x20UL) /*!< POUT_5 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_P_POUT_6_Pos (6UL) /*!< POUT_6 (Bit 6) */ + #define R_PORT_NSR_P_POUT_6_Msk (0x40UL) /*!< POUT_6 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_P_POUT_7_Pos (7UL) /*!< POUT_7 (Bit 7) */ + #define R_PORT_NSR_P_POUT_7_Msk (0x80UL) /*!< POUT_7 (Bitfield-Mask: 0x01) */ +/* ========================================================== PM =========================================================== */ + #define R_PORT_NSR_PM_PM0_Pos (0UL) /*!< PM0 (Bit 0) */ + #define R_PORT_NSR_PM_PM0_Msk (0x3UL) /*!< PM0 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_PM_PM1_Pos (2UL) /*!< PM1 (Bit 2) */ + #define R_PORT_NSR_PM_PM1_Msk (0xcUL) /*!< PM1 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_PM_PM2_Pos (4UL) /*!< PM2 (Bit 4) */ + #define R_PORT_NSR_PM_PM2_Msk (0x30UL) /*!< PM2 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_PM_PM3_Pos (6UL) /*!< PM3 (Bit 6) */ + #define R_PORT_NSR_PM_PM3_Msk (0xc0UL) /*!< PM3 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_PM_PM4_Pos (8UL) /*!< PM4 (Bit 8) */ + #define R_PORT_NSR_PM_PM4_Msk (0x300UL) /*!< PM4 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_PM_PM5_Pos (10UL) /*!< PM5 (Bit 10) */ + #define R_PORT_NSR_PM_PM5_Msk (0xc00UL) /*!< PM5 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_PM_PM6_Pos (12UL) /*!< PM6 (Bit 12) */ + #define R_PORT_NSR_PM_PM6_Msk (0x3000UL) /*!< PM6 (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_PM_PM7_Pos (14UL) /*!< PM7 (Bit 14) */ + #define R_PORT_NSR_PM_PM7_Msk (0xc000UL) /*!< PM7 (Bitfield-Mask: 0x03) */ +/* ========================================================== PMC ========================================================== */ + #define R_PORT_NSR_PMC_PMC0_Pos (0UL) /*!< PMC0 (Bit 0) */ + #define R_PORT_NSR_PMC_PMC0_Msk (0x1UL) /*!< PMC0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PMC_PMC1_Pos (1UL) /*!< PMC1 (Bit 1) */ + #define R_PORT_NSR_PMC_PMC1_Msk (0x2UL) /*!< PMC1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PMC_PMC2_Pos (2UL) /*!< PMC2 (Bit 2) */ + #define R_PORT_NSR_PMC_PMC2_Msk (0x4UL) /*!< PMC2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PMC_PMC3_Pos (3UL) /*!< PMC3 (Bit 3) */ + #define R_PORT_NSR_PMC_PMC3_Msk (0x8UL) /*!< PMC3 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PMC_PMC4_Pos (4UL) /*!< PMC4 (Bit 4) */ + #define R_PORT_NSR_PMC_PMC4_Msk (0x10UL) /*!< PMC4 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PMC_PMC5_Pos (5UL) /*!< PMC5 (Bit 5) */ + #define R_PORT_NSR_PMC_PMC5_Msk (0x20UL) /*!< PMC5 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PMC_PMC6_Pos (6UL) /*!< PMC6 (Bit 6) */ + #define R_PORT_NSR_PMC_PMC6_Msk (0x40UL) /*!< PMC6 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PMC_PMC7_Pos (7UL) /*!< PMC7 (Bit 7) */ + #define R_PORT_NSR_PMC_PMC7_Msk (0x80UL) /*!< PMC7 (Bitfield-Mask: 0x01) */ +/* ========================================================== PFC ========================================================== */ + #define R_PORT_NSR_PFC_PFC0_Pos (0UL) /*!< PFC0 (Bit 0) */ + #define R_PORT_NSR_PFC_PFC0_Msk (0xfUL) /*!< PFC0 (Bitfield-Mask: 0x0f) */ + #define R_PORT_NSR_PFC_PFC1_Pos (4UL) /*!< PFC1 (Bit 4) */ + #define R_PORT_NSR_PFC_PFC1_Msk (0xf0UL) /*!< PFC1 (Bitfield-Mask: 0x0f) */ + #define R_PORT_NSR_PFC_PFC2_Pos (8UL) /*!< PFC2 (Bit 8) */ + #define R_PORT_NSR_PFC_PFC2_Msk (0xf00UL) /*!< PFC2 (Bitfield-Mask: 0x0f) */ + #define R_PORT_NSR_PFC_PFC3_Pos (12UL) /*!< PFC3 (Bit 12) */ + #define R_PORT_NSR_PFC_PFC3_Msk (0xf000UL) /*!< PFC3 (Bitfield-Mask: 0x0f) */ + #define R_PORT_NSR_PFC_PFC4_Pos (16UL) /*!< PFC4 (Bit 16) */ + #define R_PORT_NSR_PFC_PFC4_Msk (0xf0000UL) /*!< PFC4 (Bitfield-Mask: 0x0f) */ + #define R_PORT_NSR_PFC_PFC5_Pos (20UL) /*!< PFC5 (Bit 20) */ + #define R_PORT_NSR_PFC_PFC5_Msk (0xf00000UL) /*!< PFC5 (Bitfield-Mask: 0x0f) */ + #define R_PORT_NSR_PFC_PFC6_Pos (24UL) /*!< PFC6 (Bit 24) */ + #define R_PORT_NSR_PFC_PFC6_Msk (0xf000000UL) /*!< PFC6 (Bitfield-Mask: 0x0f) */ + #define R_PORT_NSR_PFC_PFC7_Pos (28UL) /*!< PFC7 (Bit 28) */ + #define R_PORT_NSR_PFC_PFC7_Msk (0xf0000000UL) /*!< PFC7 (Bitfield-Mask: 0x0f) */ +/* ========================================================== PIN ========================================================== */ + #define R_PORT_NSR_PIN_PIN0_Pos (0UL) /*!< PIN0 (Bit 0) */ + #define R_PORT_NSR_PIN_PIN0_Msk (0x1UL) /*!< PIN0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PIN_PIN1_Pos (1UL) /*!< PIN1 (Bit 1) */ + #define R_PORT_NSR_PIN_PIN1_Msk (0x2UL) /*!< PIN1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PIN_PIN2_Pos (2UL) /*!< PIN2 (Bit 2) */ + #define R_PORT_NSR_PIN_PIN2_Msk (0x4UL) /*!< PIN2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PIN_PIN3_Pos (3UL) /*!< PIN3 (Bit 3) */ + #define R_PORT_NSR_PIN_PIN3_Msk (0x8UL) /*!< PIN3 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PIN_PIN4_Pos (4UL) /*!< PIN4 (Bit 4) */ + #define R_PORT_NSR_PIN_PIN4_Msk (0x10UL) /*!< PIN4 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PIN_PIN5_Pos (5UL) /*!< PIN5 (Bit 5) */ + #define R_PORT_NSR_PIN_PIN5_Msk (0x20UL) /*!< PIN5 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PIN_PIN6_Pos (6UL) /*!< PIN6 (Bit 6) */ + #define R_PORT_NSR_PIN_PIN6_Msk (0x40UL) /*!< PIN6 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_PIN_PIN7_Pos (7UL) /*!< PIN7 (Bit 7) */ + #define R_PORT_NSR_PIN_PIN7_Msk (0x80UL) /*!< PIN7 (Bitfield-Mask: 0x01) */ +/* ======================================================== ELC_PGR ======================================================== */ + #define R_PORT_NSR_ELC_PGR_PG0_Pos (0UL) /*!< PG0 (Bit 0) */ + #define R_PORT_NSR_ELC_PGR_PG0_Msk (0x1UL) /*!< PG0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGR_PG1_Pos (1UL) /*!< PG1 (Bit 1) */ + #define R_PORT_NSR_ELC_PGR_PG1_Msk (0x2UL) /*!< PG1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGR_PG2_Pos (2UL) /*!< PG2 (Bit 2) */ + #define R_PORT_NSR_ELC_PGR_PG2_Msk (0x4UL) /*!< PG2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGR_PG3_Pos (3UL) /*!< PG3 (Bit 3) */ + #define R_PORT_NSR_ELC_PGR_PG3_Msk (0x8UL) /*!< PG3 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGR_PG4_Pos (4UL) /*!< PG4 (Bit 4) */ + #define R_PORT_NSR_ELC_PGR_PG4_Msk (0x10UL) /*!< PG4 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGR_PG5_Pos (5UL) /*!< PG5 (Bit 5) */ + #define R_PORT_NSR_ELC_PGR_PG5_Msk (0x20UL) /*!< PG5 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGR_PG6_Pos (6UL) /*!< PG6 (Bit 6) */ + #define R_PORT_NSR_ELC_PGR_PG6_Msk (0x40UL) /*!< PG6 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGR_PG7_Pos (7UL) /*!< PG7 (Bit 7) */ + #define R_PORT_NSR_ELC_PGR_PG7_Msk (0x80UL) /*!< PG7 (Bitfield-Mask: 0x01) */ +/* ======================================================== ELC_PGC ======================================================== */ + #define R_PORT_NSR_ELC_PGC_PGCI_Pos (0UL) /*!< PGCI (Bit 0) */ + #define R_PORT_NSR_ELC_PGC_PGCI_Msk (0x3UL) /*!< PGCI (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_ELC_PGC_PGCOVE_Pos (2UL) /*!< PGCOVE (Bit 2) */ + #define R_PORT_NSR_ELC_PGC_PGCOVE_Msk (0x4UL) /*!< PGCOVE (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_PGC_PGCO_Pos (4UL) /*!< PGCO (Bit 4) */ + #define R_PORT_NSR_ELC_PGC_PGCO_Msk (0x70UL) /*!< PGCO (Bitfield-Mask: 0x07) */ +/* ======================================================== ELC_PEL ======================================================== */ + #define R_PORT_NSR_ELC_PEL_PSB_Pos (0UL) /*!< PSB (Bit 0) */ + #define R_PORT_NSR_ELC_PEL_PSB_Msk (0x7UL) /*!< PSB (Bitfield-Mask: 0x07) */ + #define R_PORT_NSR_ELC_PEL_PSP_Pos (3UL) /*!< PSP (Bit 3) */ + #define R_PORT_NSR_ELC_PEL_PSP_Msk (0x18UL) /*!< PSP (Bitfield-Mask: 0x03) */ + #define R_PORT_NSR_ELC_PEL_PSM_Pos (5UL) /*!< PSM (Bit 5) */ + #define R_PORT_NSR_ELC_PEL_PSM_Msk (0x60UL) /*!< PSM (Bitfield-Mask: 0x03) */ +/* ======================================================= ELC_DPTC ======================================================== */ + #define R_PORT_NSR_ELC_DPTC_PTC0_Pos (0UL) /*!< PTC0 (Bit 0) */ + #define R_PORT_NSR_ELC_DPTC_PTC0_Msk (0x1UL) /*!< PTC0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_DPTC_PTC1_Pos (1UL) /*!< PTC1 (Bit 1) */ + #define R_PORT_NSR_ELC_DPTC_PTC1_Msk (0x2UL) /*!< PTC1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_DPTC_PTC2_Pos (2UL) /*!< PTC2 (Bit 2) */ + #define R_PORT_NSR_ELC_DPTC_PTC2_Msk (0x4UL) /*!< PTC2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_DPTC_PTC3_Pos (3UL) /*!< PTC3 (Bit 3) */ + #define R_PORT_NSR_ELC_DPTC_PTC3_Msk (0x8UL) /*!< PTC3 (Bitfield-Mask: 0x01) */ +/* ======================================================= ELC_ELSR2 ======================================================= */ + #define R_PORT_NSR_ELC_ELSR2_PEG1_Pos (2UL) /*!< PEG1 (Bit 2) */ + #define R_PORT_NSR_ELC_ELSR2_PEG1_Msk (0x4UL) /*!< PEG1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_ELSR2_PEG2_Pos (3UL) /*!< PEG2 (Bit 3) */ + #define R_PORT_NSR_ELC_ELSR2_PEG2_Msk (0x8UL) /*!< PEG2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_ELSR2_PES0_Pos (4UL) /*!< PES0 (Bit 4) */ + #define R_PORT_NSR_ELC_ELSR2_PES0_Msk (0x10UL) /*!< PES0 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_ELSR2_PES1_Pos (5UL) /*!< PES1 (Bit 5) */ + #define R_PORT_NSR_ELC_ELSR2_PES1_Msk (0x20UL) /*!< PES1 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_ELSR2_PES2_Pos (6UL) /*!< PES2 (Bit 6) */ + #define R_PORT_NSR_ELC_ELSR2_PES2_Msk (0x40UL) /*!< PES2 (Bitfield-Mask: 0x01) */ + #define R_PORT_NSR_ELC_ELSR2_PES3_Pos (7UL) /*!< PES3 (Bit 7) */ + #define R_PORT_NSR_ELC_ELSR2_PES3_Msk (0x80UL) /*!< PES3 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_GMAC ================ */ +/* =========================================================================================================================== */ + +/* =================================================== MAC_Configuration =================================================== */ + #define R_GMAC_MAC_Configuration_PRELEN_Pos (0UL) /*!< PRELEN (Bit 0) */ + #define R_GMAC_MAC_Configuration_PRELEN_Msk (0x3UL) /*!< PRELEN (Bitfield-Mask: 0x03) */ + #define R_GMAC_MAC_Configuration_RE_Pos (2UL) /*!< RE (Bit 2) */ + #define R_GMAC_MAC_Configuration_RE_Msk (0x4UL) /*!< RE (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_TE_Pos (3UL) /*!< TE (Bit 3) */ + #define R_GMAC_MAC_Configuration_TE_Msk (0x8UL) /*!< TE (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_DC_Pos (4UL) /*!< DC (Bit 4) */ + #define R_GMAC_MAC_Configuration_DC_Msk (0x10UL) /*!< DC (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_BL_Pos (5UL) /*!< BL (Bit 5) */ + #define R_GMAC_MAC_Configuration_BL_Msk (0x60UL) /*!< BL (Bitfield-Mask: 0x03) */ + #define R_GMAC_MAC_Configuration_ACS_Pos (7UL) /*!< ACS (Bit 7) */ + #define R_GMAC_MAC_Configuration_ACS_Msk (0x80UL) /*!< ACS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_DR_Pos (9UL) /*!< DR (Bit 9) */ + #define R_GMAC_MAC_Configuration_DR_Msk (0x200UL) /*!< DR (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_IPC_Pos (10UL) /*!< IPC (Bit 10) */ + #define R_GMAC_MAC_Configuration_IPC_Msk (0x400UL) /*!< IPC (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_DM_Pos (11UL) /*!< DM (Bit 11) */ + #define R_GMAC_MAC_Configuration_DM_Msk (0x800UL) /*!< DM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_LM_Pos (12UL) /*!< LM (Bit 12) */ + #define R_GMAC_MAC_Configuration_LM_Msk (0x1000UL) /*!< LM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_DO_Pos (13UL) /*!< DO (Bit 13) */ + #define R_GMAC_MAC_Configuration_DO_Msk (0x2000UL) /*!< DO (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_FES_Pos (14UL) /*!< FES (Bit 14) */ + #define R_GMAC_MAC_Configuration_FES_Msk (0x4000UL) /*!< FES (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_PS_Pos (15UL) /*!< PS (Bit 15) */ + #define R_GMAC_MAC_Configuration_PS_Msk (0x8000UL) /*!< PS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_DCRS_Pos (16UL) /*!< DCRS (Bit 16) */ + #define R_GMAC_MAC_Configuration_DCRS_Msk (0x10000UL) /*!< DCRS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_IFG_Pos (17UL) /*!< IFG (Bit 17) */ + #define R_GMAC_MAC_Configuration_IFG_Msk (0xe0000UL) /*!< IFG (Bitfield-Mask: 0x07) */ + #define R_GMAC_MAC_Configuration_JE_Pos (20UL) /*!< JE (Bit 20) */ + #define R_GMAC_MAC_Configuration_JE_Msk (0x100000UL) /*!< JE (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_BE_Pos (21UL) /*!< BE (Bit 21) */ + #define R_GMAC_MAC_Configuration_BE_Msk (0x200000UL) /*!< BE (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_JD_Pos (22UL) /*!< JD (Bit 22) */ + #define R_GMAC_MAC_Configuration_JD_Msk (0x400000UL) /*!< JD (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_WD_Pos (23UL) /*!< WD (Bit 23) */ + #define R_GMAC_MAC_Configuration_WD_Msk (0x800000UL) /*!< WD (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_CST_Pos (25UL) /*!< CST (Bit 25) */ + #define R_GMAC_MAC_Configuration_CST_Msk (0x2000000UL) /*!< CST (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Configuration_TWOKPE_Pos (27UL) /*!< TWOKPE (Bit 27) */ + #define R_GMAC_MAC_Configuration_TWOKPE_Msk (0x8000000UL) /*!< TWOKPE (Bitfield-Mask: 0x01) */ +/* =================================================== MAC_Frame_Filter ==================================================== */ + #define R_GMAC_MAC_Frame_Filter_PR_Pos (0UL) /*!< PR (Bit 0) */ + #define R_GMAC_MAC_Frame_Filter_PR_Msk (0x1UL) /*!< PR (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_HUC_Pos (1UL) /*!< HUC (Bit 1) */ + #define R_GMAC_MAC_Frame_Filter_HUC_Msk (0x2UL) /*!< HUC (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_HMC_Pos (2UL) /*!< HMC (Bit 2) */ + #define R_GMAC_MAC_Frame_Filter_HMC_Msk (0x4UL) /*!< HMC (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_DAIF_Pos (3UL) /*!< DAIF (Bit 3) */ + #define R_GMAC_MAC_Frame_Filter_DAIF_Msk (0x8UL) /*!< DAIF (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_PM_Pos (4UL) /*!< PM (Bit 4) */ + #define R_GMAC_MAC_Frame_Filter_PM_Msk (0x10UL) /*!< PM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_DBF_Pos (5UL) /*!< DBF (Bit 5) */ + #define R_GMAC_MAC_Frame_Filter_DBF_Msk (0x20UL) /*!< DBF (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_PCF_Pos (6UL) /*!< PCF (Bit 6) */ + #define R_GMAC_MAC_Frame_Filter_PCF_Msk (0xc0UL) /*!< PCF (Bitfield-Mask: 0x03) */ + #define R_GMAC_MAC_Frame_Filter_SAIF_Pos (8UL) /*!< SAIF (Bit 8) */ + #define R_GMAC_MAC_Frame_Filter_SAIF_Msk (0x100UL) /*!< SAIF (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_SAF_Pos (9UL) /*!< SAF (Bit 9) */ + #define R_GMAC_MAC_Frame_Filter_SAF_Msk (0x200UL) /*!< SAF (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_HPF_Pos (10UL) /*!< HPF (Bit 10) */ + #define R_GMAC_MAC_Frame_Filter_HPF_Msk (0x400UL) /*!< HPF (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_VTFE_Pos (16UL) /*!< VTFE (Bit 16) */ + #define R_GMAC_MAC_Frame_Filter_VTFE_Msk (0x10000UL) /*!< VTFE (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAC_Frame_Filter_RA_Pos (31UL) /*!< RA (Bit 31) */ + #define R_GMAC_MAC_Frame_Filter_RA_Msk (0x80000000UL) /*!< RA (Bitfield-Mask: 0x01) */ +/* ===================================================== GMII_Address ====================================================== */ + #define R_GMAC_GMII_Address_GB_Pos (0UL) /*!< GB (Bit 0) */ + #define R_GMAC_GMII_Address_GB_Msk (0x1UL) /*!< GB (Bitfield-Mask: 0x01) */ + #define R_GMAC_GMII_Address_GW_Pos (1UL) /*!< GW (Bit 1) */ + #define R_GMAC_GMII_Address_GW_Msk (0x2UL) /*!< GW (Bitfield-Mask: 0x01) */ + #define R_GMAC_GMII_Address_CR_Pos (2UL) /*!< CR (Bit 2) */ + #define R_GMAC_GMII_Address_CR_Msk (0x3cUL) /*!< CR (Bitfield-Mask: 0x0f) */ + #define R_GMAC_GMII_Address_GR_Pos (6UL) /*!< GR (Bit 6) */ + #define R_GMAC_GMII_Address_GR_Msk (0x7c0UL) /*!< GR (Bitfield-Mask: 0x1f) */ + #define R_GMAC_GMII_Address_PA_Pos (11UL) /*!< PA (Bit 11) */ + #define R_GMAC_GMII_Address_PA_Msk (0xf800UL) /*!< PA (Bitfield-Mask: 0x1f) */ +/* ======================================================= GMII_Data ======================================================= */ + #define R_GMAC_GMII_Data_GD_Pos (0UL) /*!< GD (Bit 0) */ + #define R_GMAC_GMII_Data_GD_Msk (0xffffUL) /*!< GD (Bitfield-Mask: 0xffff) */ +/* ===================================================== Flow_Control ====================================================== */ + #define R_GMAC_Flow_Control_FCA_BPA_Pos (0UL) /*!< FCA_BPA (Bit 0) */ + #define R_GMAC_Flow_Control_FCA_BPA_Msk (0x1UL) /*!< FCA_BPA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Flow_Control_TFE_Pos (1UL) /*!< TFE (Bit 1) */ + #define R_GMAC_Flow_Control_TFE_Msk (0x2UL) /*!< TFE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Flow_Control_RFE_Pos (2UL) /*!< RFE (Bit 2) */ + #define R_GMAC_Flow_Control_RFE_Msk (0x4UL) /*!< RFE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Flow_Control_UP_Pos (3UL) /*!< UP (Bit 3) */ + #define R_GMAC_Flow_Control_UP_Msk (0x8UL) /*!< UP (Bitfield-Mask: 0x01) */ + #define R_GMAC_Flow_Control_PLT_Pos (4UL) /*!< PLT (Bit 4) */ + #define R_GMAC_Flow_Control_PLT_Msk (0x30UL) /*!< PLT (Bitfield-Mask: 0x03) */ + #define R_GMAC_Flow_Control_DZPQ_Pos (7UL) /*!< DZPQ (Bit 7) */ + #define R_GMAC_Flow_Control_DZPQ_Msk (0x80UL) /*!< DZPQ (Bitfield-Mask: 0x01) */ + #define R_GMAC_Flow_Control_PT_Pos (16UL) /*!< PT (Bit 16) */ + #define R_GMAC_Flow_Control_PT_Msk (0xffff0000UL) /*!< PT (Bitfield-Mask: 0xffff) */ +/* ======================================================= VLAN_Tag ======================================================== */ + #define R_GMAC_VLAN_Tag_VL_Pos (0UL) /*!< VL (Bit 0) */ + #define R_GMAC_VLAN_Tag_VL_Msk (0xffffUL) /*!< VL (Bitfield-Mask: 0xffff) */ + #define R_GMAC_VLAN_Tag_ETV_Pos (16UL) /*!< ETV (Bit 16) */ + #define R_GMAC_VLAN_Tag_ETV_Msk (0x10000UL) /*!< ETV (Bitfield-Mask: 0x01) */ + #define R_GMAC_VLAN_Tag_VTIM_Pos (17UL) /*!< VTIM (Bit 17) */ + #define R_GMAC_VLAN_Tag_VTIM_Msk (0x20000UL) /*!< VTIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_VLAN_Tag_ESVL_Pos (18UL) /*!< ESVL (Bit 18) */ + #define R_GMAC_VLAN_Tag_ESVL_Msk (0x40000UL) /*!< ESVL (Bitfield-Mask: 0x01) */ + #define R_GMAC_VLAN_Tag_VTHM_Pos (19UL) /*!< VTHM (Bit 19) */ + #define R_GMAC_VLAN_Tag_VTHM_Msk (0x80000UL) /*!< VTHM (Bitfield-Mask: 0x01) */ +/* ======================================================== Version ======================================================== */ + #define R_GMAC_Version_VER_Pos (0UL) /*!< VER (Bit 0) */ + #define R_GMAC_Version_VER_Msk (0xffffUL) /*!< VER (Bitfield-Mask: 0xffff) */ +/* ========================================================= Debug ========================================================= */ + #define R_GMAC_Debug_RPESTS_Pos (0UL) /*!< RPESTS (Bit 0) */ + #define R_GMAC_Debug_RPESTS_Msk (0x1UL) /*!< RPESTS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Debug_RFCFCSTS_Pos (1UL) /*!< RFCFCSTS (Bit 1) */ + #define R_GMAC_Debug_RFCFCSTS_Msk (0x6UL) /*!< RFCFCSTS (Bitfield-Mask: 0x03) */ + #define R_GMAC_Debug_RWCSTS_Pos (4UL) /*!< RWCSTS (Bit 4) */ + #define R_GMAC_Debug_RWCSTS_Msk (0x10UL) /*!< RWCSTS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Debug_RRCSTS_Pos (5UL) /*!< RRCSTS (Bit 5) */ + #define R_GMAC_Debug_RRCSTS_Msk (0x60UL) /*!< RRCSTS (Bitfield-Mask: 0x03) */ + #define R_GMAC_Debug_RXFSTS_Pos (8UL) /*!< RXFSTS (Bit 8) */ + #define R_GMAC_Debug_RXFSTS_Msk (0x300UL) /*!< RXFSTS (Bitfield-Mask: 0x03) */ + #define R_GMAC_Debug_TPESTS_Pos (16UL) /*!< TPESTS (Bit 16) */ + #define R_GMAC_Debug_TPESTS_Msk (0x10000UL) /*!< TPESTS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Debug_TFCSTS_Pos (17UL) /*!< TFCSTS (Bit 17) */ + #define R_GMAC_Debug_TFCSTS_Msk (0x60000UL) /*!< TFCSTS (Bitfield-Mask: 0x03) */ + #define R_GMAC_Debug_TXPAUSED_Pos (19UL) /*!< TXPAUSED (Bit 19) */ + #define R_GMAC_Debug_TXPAUSED_Msk (0x80000UL) /*!< TXPAUSED (Bitfield-Mask: 0x01) */ + #define R_GMAC_Debug_TRCSTS_Pos (20UL) /*!< TRCSTS (Bit 20) */ + #define R_GMAC_Debug_TRCSTS_Msk (0x300000UL) /*!< TRCSTS (Bitfield-Mask: 0x03) */ + #define R_GMAC_Debug_TWCSTS_Pos (22UL) /*!< TWCSTS (Bit 22) */ + #define R_GMAC_Debug_TWCSTS_Msk (0x400000UL) /*!< TWCSTS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Debug_TXFSTS_Pos (24UL) /*!< TXFSTS (Bit 24) */ + #define R_GMAC_Debug_TXFSTS_Msk (0x1000000UL) /*!< TXFSTS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Debug_TXSTSFSTS_Pos (25UL) /*!< TXSTSFSTS (Bit 25) */ + #define R_GMAC_Debug_TXSTSFSTS_Msk (0x2000000UL) /*!< TXSTSFSTS (Bitfield-Mask: 0x01) */ +/* ============================================== Remote_Wake_Up_Frame_Filter ============================================== */ + #define R_GMAC_Remote_Wake_Up_Frame_Filter_WKUPFRMFTR_Pos (0UL) /*!< WKUPFRMFTR (Bit 0) */ + #define R_GMAC_Remote_Wake_Up_Frame_Filter_WKUPFRMFTR_Msk (0xffffffffUL) /*!< WKUPFRMFTR (Bitfield-Mask: 0xffffffff) */ +/* ================================================== PMT_Control_Status =================================================== */ + #define R_GMAC_PMT_Control_Status_PWRDWN_Pos (0UL) /*!< PWRDWN (Bit 0) */ + #define R_GMAC_PMT_Control_Status_PWRDWN_Msk (0x1UL) /*!< PWRDWN (Bitfield-Mask: 0x01) */ + #define R_GMAC_PMT_Control_Status_MGKPKTEN_Pos (1UL) /*!< MGKPKTEN (Bit 1) */ + #define R_GMAC_PMT_Control_Status_MGKPKTEN_Msk (0x2UL) /*!< MGKPKTEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_PMT_Control_Status_RWKPKTEN_Pos (2UL) /*!< RWKPKTEN (Bit 2) */ + #define R_GMAC_PMT_Control_Status_RWKPKTEN_Msk (0x4UL) /*!< RWKPKTEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_PMT_Control_Status_MGKPRCVD_Pos (5UL) /*!< MGKPRCVD (Bit 5) */ + #define R_GMAC_PMT_Control_Status_MGKPRCVD_Msk (0x20UL) /*!< MGKPRCVD (Bitfield-Mask: 0x01) */ + #define R_GMAC_PMT_Control_Status_RWKPRCVD_Pos (6UL) /*!< RWKPRCVD (Bit 6) */ + #define R_GMAC_PMT_Control_Status_RWKPRCVD_Msk (0x40UL) /*!< RWKPRCVD (Bitfield-Mask: 0x01) */ + #define R_GMAC_PMT_Control_Status_GLBLUCAST_Pos (9UL) /*!< GLBLUCAST (Bit 9) */ + #define R_GMAC_PMT_Control_Status_GLBLUCAST_Msk (0x200UL) /*!< GLBLUCAST (Bitfield-Mask: 0x01) */ + #define R_GMAC_PMT_Control_Status_RWKPTR_Pos (24UL) /*!< RWKPTR (Bit 24) */ + #define R_GMAC_PMT_Control_Status_RWKPTR_Msk (0x7000000UL) /*!< RWKPTR (Bitfield-Mask: 0x07) */ + #define R_GMAC_PMT_Control_Status_RWKFILTRST_Pos (31UL) /*!< RWKFILTRST (Bit 31) */ + #define R_GMAC_PMT_Control_Status_RWKFILTRST_Msk (0x80000000UL) /*!< RWKFILTRST (Bitfield-Mask: 0x01) */ +/* ================================================== LPI_Control_Status =================================================== */ + #define R_GMAC_LPI_Control_Status_TLPIEN_Pos (0UL) /*!< TLPIEN (Bit 0) */ + #define R_GMAC_LPI_Control_Status_TLPIEN_Msk (0x1UL) /*!< TLPIEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_TLPIEX_Pos (1UL) /*!< TLPIEX (Bit 1) */ + #define R_GMAC_LPI_Control_Status_TLPIEX_Msk (0x2UL) /*!< TLPIEX (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_RLPIEN_Pos (2UL) /*!< RLPIEN (Bit 2) */ + #define R_GMAC_LPI_Control_Status_RLPIEN_Msk (0x4UL) /*!< RLPIEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_RLPIEX_Pos (3UL) /*!< RLPIEX (Bit 3) */ + #define R_GMAC_LPI_Control_Status_RLPIEX_Msk (0x8UL) /*!< RLPIEX (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_TLPIST_Pos (8UL) /*!< TLPIST (Bit 8) */ + #define R_GMAC_LPI_Control_Status_TLPIST_Msk (0x100UL) /*!< TLPIST (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_RLPIST_Pos (9UL) /*!< RLPIST (Bit 9) */ + #define R_GMAC_LPI_Control_Status_RLPIST_Msk (0x200UL) /*!< RLPIST (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_LPIEN_Pos (16UL) /*!< LPIEN (Bit 16) */ + #define R_GMAC_LPI_Control_Status_LPIEN_Msk (0x10000UL) /*!< LPIEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_PLS_Pos (17UL) /*!< PLS (Bit 17) */ + #define R_GMAC_LPI_Control_Status_PLS_Msk (0x20000UL) /*!< PLS (Bitfield-Mask: 0x01) */ + #define R_GMAC_LPI_Control_Status_LPITXA_Pos (19UL) /*!< LPITXA (Bit 19) */ + #define R_GMAC_LPI_Control_Status_LPITXA_Msk (0x80000UL) /*!< LPITXA (Bitfield-Mask: 0x01) */ +/* ================================================== LPI_Timers_Control =================================================== */ + #define R_GMAC_LPI_Timers_Control_TWT_Pos (0UL) /*!< TWT (Bit 0) */ + #define R_GMAC_LPI_Timers_Control_TWT_Msk (0xffffUL) /*!< TWT (Bitfield-Mask: 0xffff) */ + #define R_GMAC_LPI_Timers_Control_LST_Pos (16UL) /*!< LST (Bit 16) */ + #define R_GMAC_LPI_Timers_Control_LST_Msk (0x3ff0000UL) /*!< LST (Bitfield-Mask: 0x3ff) */ +/* =================================================== Interrupt_Status ==================================================== */ + #define R_GMAC_Interrupt_Status_PMTIS_Pos (3UL) /*!< PMTIS (Bit 3) */ + #define R_GMAC_Interrupt_Status_PMTIS_Msk (0x8UL) /*!< PMTIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Status_MMCIS_Pos (4UL) /*!< MMCIS (Bit 4) */ + #define R_GMAC_Interrupt_Status_MMCIS_Msk (0x10UL) /*!< MMCIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Status_MMCRXIS_Pos (5UL) /*!< MMCRXIS (Bit 5) */ + #define R_GMAC_Interrupt_Status_MMCRXIS_Msk (0x20UL) /*!< MMCRXIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Status_MMCTXIS_Pos (6UL) /*!< MMCTXIS (Bit 6) */ + #define R_GMAC_Interrupt_Status_MMCTXIS_Msk (0x40UL) /*!< MMCTXIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Status_MMCRXIPIS_Pos (7UL) /*!< MMCRXIPIS (Bit 7) */ + #define R_GMAC_Interrupt_Status_MMCRXIPIS_Msk (0x80UL) /*!< MMCRXIPIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Status_TSIS_Pos (9UL) /*!< TSIS (Bit 9) */ + #define R_GMAC_Interrupt_Status_TSIS_Msk (0x200UL) /*!< TSIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Status_LPIIS_Pos (10UL) /*!< LPIIS (Bit 10) */ + #define R_GMAC_Interrupt_Status_LPIIS_Msk (0x400UL) /*!< LPIIS (Bitfield-Mask: 0x01) */ +/* ==================================================== Interrupt_Mask ===================================================== */ + #define R_GMAC_Interrupt_Mask_PMTIM_Pos (3UL) /*!< PMTIM (Bit 3) */ + #define R_GMAC_Interrupt_Mask_PMTIM_Msk (0x8UL) /*!< PMTIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Mask_TSIM_Pos (9UL) /*!< TSIM (Bit 9) */ + #define R_GMAC_Interrupt_Mask_TSIM_Msk (0x200UL) /*!< TSIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Mask_LPIIM_Pos (10UL) /*!< LPIIM (Bit 10) */ + #define R_GMAC_Interrupt_Mask_LPIIM_Msk (0x400UL) /*!< LPIIM (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR0_H ========================================================= */ + #define R_GMAC_MAR0_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR0_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR0_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR0_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR0_L ========================================================= */ + #define R_GMAC_MAR0_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR0_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR1_H ========================================================= */ + #define R_GMAC_MAR1_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR1_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR1_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR1_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR1_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR1_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR1_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR1_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR2_H ========================================================= */ + #define R_GMAC_MAR2_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR2_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR2_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR2_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR2_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR2_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR2_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR2_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR3_H ========================================================= */ + #define R_GMAC_MAR3_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR3_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR3_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR3_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR3_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR3_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR3_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR3_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR4_H ========================================================= */ + #define R_GMAC_MAR4_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR4_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR4_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR4_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR4_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR4_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR4_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR4_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR5_H ========================================================= */ + #define R_GMAC_MAR5_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR5_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR5_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR5_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR5_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR5_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR5_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR5_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR6_H ========================================================= */ + #define R_GMAC_MAR6_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR6_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR6_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR6_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR6_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR6_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR6_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR6_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR7_H ========================================================= */ + #define R_GMAC_MAR7_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR7_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR7_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR7_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR7_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR7_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR7_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR7_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR8_H ========================================================= */ + #define R_GMAC_MAR8_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR8_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR8_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR8_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR8_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR8_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR8_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR8_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR9_H ========================================================= */ + #define R_GMAC_MAR9_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR9_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR9_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR9_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR9_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR9_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR9_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR9_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR10_H ======================================================== */ + #define R_GMAC_MAR10_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR10_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR10_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR10_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR10_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR10_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR10_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR10_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR11_H ======================================================== */ + #define R_GMAC_MAR11_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR11_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR11_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR11_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR11_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR11_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR11_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR11_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR12_H ======================================================== */ + #define R_GMAC_MAR12_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR12_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR12_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR12_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR12_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR12_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR12_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR12_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR13_H ======================================================== */ + #define R_GMAC_MAR13_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR13_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR13_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR13_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR13_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR13_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR13_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR13_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR14_H ======================================================== */ + #define R_GMAC_MAR14_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR14_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR14_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR14_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR14_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR14_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR14_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR14_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR15_H ======================================================== */ + #define R_GMAC_MAR15_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR15_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR15_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR15_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR15_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR15_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR15_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR15_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR1_L ========================================================= */ + #define R_GMAC_MAR1_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR1_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR2_L ========================================================= */ + #define R_GMAC_MAR2_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR2_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR3_L ========================================================= */ + #define R_GMAC_MAR3_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR3_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR4_L ========================================================= */ + #define R_GMAC_MAR4_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR4_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR5_L ========================================================= */ + #define R_GMAC_MAR5_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR5_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR6_L ========================================================= */ + #define R_GMAC_MAR6_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR6_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR7_L ========================================================= */ + #define R_GMAC_MAR7_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR7_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR8_L ========================================================= */ + #define R_GMAC_MAR8_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR8_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR9_L ========================================================= */ + #define R_GMAC_MAR9_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR9_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR10_L ======================================================== */ + #define R_GMAC_MAR10_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR10_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR11_L ======================================================== */ + #define R_GMAC_MAR11_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR11_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR12_L ======================================================== */ + #define R_GMAC_MAR12_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR12_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR13_L ======================================================== */ + #define R_GMAC_MAR13_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR13_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR14_L ======================================================== */ + #define R_GMAC_MAR14_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR14_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR15_L ======================================================== */ + #define R_GMAC_MAR15_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR15_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== WDog_Timeout ====================================================== */ + #define R_GMAC_WDog_Timeout_WTO_Pos (0UL) /*!< WTO (Bit 0) */ + #define R_GMAC_WDog_Timeout_WTO_Msk (0x3fffUL) /*!< WTO (Bitfield-Mask: 0x3fff) */ + #define R_GMAC_WDog_Timeout_PWE_Pos (16UL) /*!< PWE (Bit 16) */ + #define R_GMAC_WDog_Timeout_PWE_Msk (0x10000UL) /*!< PWE (Bitfield-Mask: 0x01) */ +/* ====================================================== MMC_Control ====================================================== */ + #define R_GMAC_MMC_Control_CNTRST_Pos (0UL) /*!< CNTRST (Bit 0) */ + #define R_GMAC_MMC_Control_CNTRST_Msk (0x1UL) /*!< CNTRST (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Control_CNTSTOPRO_Pos (1UL) /*!< CNTSTOPRO (Bit 1) */ + #define R_GMAC_MMC_Control_CNTSTOPRO_Msk (0x2UL) /*!< CNTSTOPRO (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Control_RSTONRD_Pos (2UL) /*!< RSTONRD (Bit 2) */ + #define R_GMAC_MMC_Control_RSTONRD_Msk (0x4UL) /*!< RSTONRD (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Control_CNTFREEZ_Pos (3UL) /*!< CNTFREEZ (Bit 3) */ + #define R_GMAC_MMC_Control_CNTFREEZ_Msk (0x8UL) /*!< CNTFREEZ (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Control_CNTPRST_Pos (4UL) /*!< CNTPRST (Bit 4) */ + #define R_GMAC_MMC_Control_CNTPRST_Msk (0x10UL) /*!< CNTPRST (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Control_CNTPRSTLVL_Pos (5UL) /*!< CNTPRSTLVL (Bit 5) */ + #define R_GMAC_MMC_Control_CNTPRSTLVL_Msk (0x20UL) /*!< CNTPRSTLVL (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Control_UCDBC_Pos (8UL) /*!< UCDBC (Bit 8) */ + #define R_GMAC_MMC_Control_UCDBC_Msk (0x100UL) /*!< UCDBC (Bitfield-Mask: 0x01) */ +/* ================================================= MMC_Receive_Interrupt ================================================= */ + #define R_GMAC_MMC_Receive_Interrupt_RXGBFRMIS_Pos (0UL) /*!< RXGBFRMIS (Bit 0) */ + #define R_GMAC_MMC_Receive_Interrupt_RXGBFRMIS_Msk (0x1UL) /*!< RXGBFRMIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXGBOCTIS_Pos (1UL) /*!< RXGBOCTIS (Bit 1) */ + #define R_GMAC_MMC_Receive_Interrupt_RXGBOCTIS_Msk (0x2UL) /*!< RXGBOCTIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXGOCTIS_Pos (2UL) /*!< RXGOCTIS (Bit 2) */ + #define R_GMAC_MMC_Receive_Interrupt_RXGOCTIS_Msk (0x4UL) /*!< RXGOCTIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXBCGFIS_Pos (3UL) /*!< RXBCGFIS (Bit 3) */ + #define R_GMAC_MMC_Receive_Interrupt_RXBCGFIS_Msk (0x8UL) /*!< RXBCGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXMCGFIS_Pos (4UL) /*!< RXMCGFIS (Bit 4) */ + #define R_GMAC_MMC_Receive_Interrupt_RXMCGFIS_Msk (0x10UL) /*!< RXMCGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXCRCERFIS_Pos (5UL) /*!< RXCRCERFIS (Bit 5) */ + #define R_GMAC_MMC_Receive_Interrupt_RXCRCERFIS_Msk (0x20UL) /*!< RXCRCERFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXALGNERFIS_Pos (6UL) /*!< RXALGNERFIS (Bit 6) */ + #define R_GMAC_MMC_Receive_Interrupt_RXALGNERFIS_Msk (0x40UL) /*!< RXALGNERFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXRUNTFIS_Pos (7UL) /*!< RXRUNTFIS (Bit 7) */ + #define R_GMAC_MMC_Receive_Interrupt_RXRUNTFIS_Msk (0x80UL) /*!< RXRUNTFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXJABERFIS_Pos (8UL) /*!< RXJABERFIS (Bit 8) */ + #define R_GMAC_MMC_Receive_Interrupt_RXJABERFIS_Msk (0x100UL) /*!< RXJABERFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXUSIZEGFIS_Pos (9UL) /*!< RXUSIZEGFIS (Bit 9) */ + #define R_GMAC_MMC_Receive_Interrupt_RXUSIZEGFIS_Msk (0x200UL) /*!< RXUSIZEGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXOSIZEGFIS_Pos (10UL) /*!< RXOSIZEGFIS (Bit 10) */ + #define R_GMAC_MMC_Receive_Interrupt_RXOSIZEGFIS_Msk (0x400UL) /*!< RXOSIZEGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RX64OCTGBFIS_Pos (11UL) /*!< RX64OCTGBFIS (Bit 11) */ + #define R_GMAC_MMC_Receive_Interrupt_RX64OCTGBFIS_Msk (0x800UL) /*!< RX64OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RX65T127OCTGBFIS_Pos (12UL) /*!< RX65T127OCTGBFIS (Bit 12) */ + #define R_GMAC_MMC_Receive_Interrupt_RX65T127OCTGBFIS_Msk (0x1000UL) /*!< RX65T127OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RX128T255OCTGBFIS_Pos (13UL) /*!< RX128T255OCTGBFIS (Bit 13) */ + #define R_GMAC_MMC_Receive_Interrupt_RX128T255OCTGBFIS_Msk (0x2000UL) /*!< RX128T255OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RX256T511OCTGBFIS_Pos (14UL) /*!< RX256T511OCTGBFIS (Bit 14) */ + #define R_GMAC_MMC_Receive_Interrupt_RX256T511OCTGBFIS_Msk (0x4000UL) /*!< RX256T511OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RX512T1023OCTGBFIS_Pos (15UL) /*!< RX512T1023OCTGBFIS (Bit 15) */ + #define R_GMAC_MMC_Receive_Interrupt_RX512T1023OCTGBFIS_Msk (0x8000UL) /*!< RX512T1023OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RX1024TMAXOCTGBFIS_Pos (16UL) /*!< RX1024TMAXOCTGBFIS (Bit 16) */ + #define R_GMAC_MMC_Receive_Interrupt_RX1024TMAXOCTGBFIS_Msk (0x10000UL) /*!< RX1024TMAXOCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXUCGFIS_Pos (17UL) /*!< RXUCGFIS (Bit 17) */ + #define R_GMAC_MMC_Receive_Interrupt_RXUCGFIS_Msk (0x20000UL) /*!< RXUCGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXLENERFIS_Pos (18UL) /*!< RXLENERFIS (Bit 18) */ + #define R_GMAC_MMC_Receive_Interrupt_RXLENERFIS_Msk (0x40000UL) /*!< RXLENERFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXORANGEFIS_Pos (19UL) /*!< RXORANGEFIS (Bit 19) */ + #define R_GMAC_MMC_Receive_Interrupt_RXORANGEFIS_Msk (0x80000UL) /*!< RXORANGEFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXPAUSFIS_Pos (20UL) /*!< RXPAUSFIS (Bit 20) */ + #define R_GMAC_MMC_Receive_Interrupt_RXPAUSFIS_Msk (0x100000UL) /*!< RXPAUSFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXFOVFIS_Pos (21UL) /*!< RXFOVFIS (Bit 21) */ + #define R_GMAC_MMC_Receive_Interrupt_RXFOVFIS_Msk (0x200000UL) /*!< RXFOVFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXVLANGBFIS_Pos (22UL) /*!< RXVLANGBFIS (Bit 22) */ + #define R_GMAC_MMC_Receive_Interrupt_RXVLANGBFIS_Msk (0x400000UL) /*!< RXVLANGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXWDOGFIS_Pos (23UL) /*!< RXWDOGFIS (Bit 23) */ + #define R_GMAC_MMC_Receive_Interrupt_RXWDOGFIS_Msk (0x800000UL) /*!< RXWDOGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXRCVERRFIS_Pos (24UL) /*!< RXRCVERRFIS (Bit 24) */ + #define R_GMAC_MMC_Receive_Interrupt_RXRCVERRFIS_Msk (0x1000000UL) /*!< RXRCVERRFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_RXCTRLFIS_Pos (25UL) /*!< RXCTRLFIS (Bit 25) */ + #define R_GMAC_MMC_Receive_Interrupt_RXCTRLFIS_Msk (0x2000000UL) /*!< RXCTRLFIS (Bitfield-Mask: 0x01) */ +/* ================================================ MMC_Transmit_Interrupt ================================================= */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGBOCTIS_Pos (0UL) /*!< TXGBOCTIS (Bit 0) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGBOCTIS_Msk (0x1UL) /*!< TXGBOCTIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGBFRMIS_Pos (1UL) /*!< TXGBFRMIS (Bit 1) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGBFRMIS_Msk (0x2UL) /*!< TXGBFRMIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXBCGFIS_Pos (2UL) /*!< TXBCGFIS (Bit 2) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXBCGFIS_Msk (0x4UL) /*!< TXBCGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXMCGFIS_Pos (3UL) /*!< TXMCGFIS (Bit 3) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXMCGFIS_Msk (0x8UL) /*!< TXMCGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX64OCTGBFIS_Pos (4UL) /*!< TX64OCTGBFIS (Bit 4) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX64OCTGBFIS_Msk (0x10UL) /*!< TX64OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX65T127OCTGBFIS_Pos (5UL) /*!< TX65T127OCTGBFIS (Bit 5) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX65T127OCTGBFIS_Msk (0x20UL) /*!< TX65T127OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX128T255OCTGBFIS_Pos (6UL) /*!< TX128T255OCTGBFIS (Bit 6) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX128T255OCTGBFIS_Msk (0x40UL) /*!< TX128T255OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX256T511OCTGBFIS_Pos (7UL) /*!< TX256T511OCTGBFIS (Bit 7) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX256T511OCTGBFIS_Msk (0x80UL) /*!< TX256T511OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX512T1023OCTGBFIS_Pos (8UL) /*!< TX512T1023OCTGBFIS (Bit 8) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX512T1023OCTGBFIS_Msk (0x100UL) /*!< TX512T1023OCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX1024TMAXOCTGBFIS_Pos (9UL) /*!< TX1024TMAXOCTGBFIS (Bit 9) */ + #define R_GMAC_MMC_Transmit_Interrupt_TX1024TMAXOCTGBFIS_Msk (0x200UL) /*!< TX1024TMAXOCTGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXUCGBFIS_Pos (10UL) /*!< TXUCGBFIS (Bit 10) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXUCGBFIS_Msk (0x400UL) /*!< TXUCGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXMCGBFIS_Pos (11UL) /*!< TXMCGBFIS (Bit 11) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXMCGBFIS_Msk (0x800UL) /*!< TXMCGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXBCGBFIS_Pos (12UL) /*!< TXBCGBFIS (Bit 12) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXBCGBFIS_Msk (0x1000UL) /*!< TXBCGBFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXUFLOWERFIS_Pos (13UL) /*!< TXUFLOWERFIS (Bit 13) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXUFLOWERFIS_Msk (0x2000UL) /*!< TXUFLOWERFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXSCOLGFIS_Pos (14UL) /*!< TXSCOLGFIS (Bit 14) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXSCOLGFIS_Msk (0x4000UL) /*!< TXSCOLGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXMCOLGFIS_Pos (15UL) /*!< TXMCOLGFIS (Bit 15) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXMCOLGFIS_Msk (0x8000UL) /*!< TXMCOLGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXDEFFIS_Pos (16UL) /*!< TXDEFFIS (Bit 16) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXDEFFIS_Msk (0x10000UL) /*!< TXDEFFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXLATCOLFIS_Pos (17UL) /*!< TXLATCOLFIS (Bit 17) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXLATCOLFIS_Msk (0x20000UL) /*!< TXLATCOLFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXEXCOLFIS_Pos (18UL) /*!< TXEXCOLFIS (Bit 18) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXEXCOLFIS_Msk (0x40000UL) /*!< TXEXCOLFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXCARERFIS_Pos (19UL) /*!< TXCARERFIS (Bit 19) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXCARERFIS_Msk (0x80000UL) /*!< TXCARERFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGOCTIS_Pos (20UL) /*!< TXGOCTIS (Bit 20) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGOCTIS_Msk (0x100000UL) /*!< TXGOCTIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGFRMIS_Pos (21UL) /*!< TXGFRMIS (Bit 21) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXGFRMIS_Msk (0x200000UL) /*!< TXGFRMIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXEXDEFFIS_Pos (22UL) /*!< TXEXDEFFIS (Bit 22) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXEXDEFFIS_Msk (0x400000UL) /*!< TXEXDEFFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXPAUSFIS_Pos (23UL) /*!< TXPAUSFIS (Bit 23) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXPAUSFIS_Msk (0x800000UL) /*!< TXPAUSFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXVLANGFIS_Pos (24UL) /*!< TXVLANGFIS (Bit 24) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXVLANGFIS_Msk (0x1000000UL) /*!< TXVLANGFIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXOSIZEGFIS_Pos (25UL) /*!< TXOSIZEGFIS (Bit 25) */ + #define R_GMAC_MMC_Transmit_Interrupt_TXOSIZEGFIS_Msk (0x2000000UL) /*!< TXOSIZEGFIS (Bitfield-Mask: 0x01) */ +/* ============================================== MMC_Receive_Interrupt_Mask =============================================== */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXGBFRMIM_Pos (0UL) /*!< RXGBFRMIM (Bit 0) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXGBFRMIM_Msk (0x1UL) /*!< RXGBFRMIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXGBOCTIM_Pos (1UL) /*!< RXGBOCTIM (Bit 1) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXGBOCTIM_Msk (0x2UL) /*!< RXGBOCTIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXGOCTIM_Pos (2UL) /*!< RXGOCTIM (Bit 2) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXGOCTIM_Msk (0x4UL) /*!< RXGOCTIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXBCGFIM_Pos (3UL) /*!< RXBCGFIM (Bit 3) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXBCGFIM_Msk (0x8UL) /*!< RXBCGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXMCGFIM_Pos (4UL) /*!< RXMCGFIM (Bit 4) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXMCGFIM_Msk (0x10UL) /*!< RXMCGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXCRCERFIM_Pos (5UL) /*!< RXCRCERFIM (Bit 5) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXCRCERFIM_Msk (0x20UL) /*!< RXCRCERFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXALGNERFIM_Pos (6UL) /*!< RXALGNERFIM (Bit 6) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXALGNERFIM_Msk (0x40UL) /*!< RXALGNERFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXRUNTFIM_Pos (7UL) /*!< RXRUNTFIM (Bit 7) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXRUNTFIM_Msk (0x80UL) /*!< RXRUNTFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXJABERFIM_Pos (8UL) /*!< RXJABERFIM (Bit 8) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXJABERFIM_Msk (0x100UL) /*!< RXJABERFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXUSIZEGFIM_Pos (9UL) /*!< RXUSIZEGFIM (Bit 9) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXUSIZEGFIM_Msk (0x200UL) /*!< RXUSIZEGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXOSIZEGFIM_Pos (10UL) /*!< RXOSIZEGFIM (Bit 10) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXOSIZEGFIM_Msk (0x400UL) /*!< RXOSIZEGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX64OCTGBFIM_Pos (11UL) /*!< RX64OCTGBFIM (Bit 11) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX64OCTGBFIM_Msk (0x800UL) /*!< RX64OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX65T127OCTGBFIM_Pos (12UL) /*!< RX65T127OCTGBFIM (Bit 12) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX65T127OCTGBFIM_Msk (0x1000UL) /*!< RX65T127OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX128T255OCTGBFIM_Pos (13UL) /*!< RX128T255OCTGBFIM (Bit 13) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX128T255OCTGBFIM_Msk (0x2000UL) /*!< RX128T255OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX256T511OCTGBFIM_Pos (14UL) /*!< RX256T511OCTGBFIM (Bit 14) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX256T511OCTGBFIM_Msk (0x4000UL) /*!< RX256T511OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX512T1023OCTGBFIM_Pos (15UL) /*!< RX512T1023OCTGBFIM (Bit 15) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX512T1023OCTGBFIM_Msk (0x8000UL) /*!< RX512T1023OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX1024TMAXOCTGBFIM_Pos (16UL) /*!< RX1024TMAXOCTGBFIM (Bit 16) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RX1024TMAXOCTGBFIM_Msk (0x10000UL) /*!< RX1024TMAXOCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXUCGFIM_Pos (17UL) /*!< RXUCGFIM (Bit 17) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXUCGFIM_Msk (0x20000UL) /*!< RXUCGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXLENERFIM_Pos (18UL) /*!< RXLENERFIM (Bit 18) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXLENERFIM_Msk (0x40000UL) /*!< RXLENERFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXORANGEFIM_Pos (19UL) /*!< RXORANGEFIM (Bit 19) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXORANGEFIM_Msk (0x80000UL) /*!< RXORANGEFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXPAUSFIM_Pos (20UL) /*!< RXPAUSFIM (Bit 20) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXPAUSFIM_Msk (0x100000UL) /*!< RXPAUSFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXFOVFIM_Pos (21UL) /*!< RXFOVFIM (Bit 21) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXFOVFIM_Msk (0x200000UL) /*!< RXFOVFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXVLANGBFIM_Pos (22UL) /*!< RXVLANGBFIM (Bit 22) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXVLANGBFIM_Msk (0x400000UL) /*!< RXVLANGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXWDOGFIM_Pos (23UL) /*!< RXWDOGFIM (Bit 23) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXWDOGFIM_Msk (0x800000UL) /*!< RXWDOGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXRCVERRFIM_Pos (24UL) /*!< RXRCVERRFIM (Bit 24) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXRCVERRFIM_Msk (0x1000000UL) /*!< RXRCVERRFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXCTRLFIM_Pos (25UL) /*!< RXCTRLFIM (Bit 25) */ + #define R_GMAC_MMC_Receive_Interrupt_Mask_RXCTRLFIM_Msk (0x2000000UL) /*!< RXCTRLFIM (Bitfield-Mask: 0x01) */ +/* ============================================== MMC_Transmit_Interrupt_Mask ============================================== */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGBOCTIM_Pos (0UL) /*!< TXGBOCTIM (Bit 0) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGBOCTIM_Msk (0x1UL) /*!< TXGBOCTIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGBFRMIM_Pos (1UL) /*!< TXGBFRMIM (Bit 1) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGBFRMIM_Msk (0x2UL) /*!< TXGBFRMIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXBCGFIM_Pos (2UL) /*!< TXBCGFIM (Bit 2) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXBCGFIM_Msk (0x4UL) /*!< TXBCGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXMCGFIM_Pos (3UL) /*!< TXMCGFIM (Bit 3) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXMCGFIM_Msk (0x8UL) /*!< TXMCGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX64OCTGBFIM_Pos (4UL) /*!< TX64OCTGBFIM (Bit 4) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX64OCTGBFIM_Msk (0x10UL) /*!< TX64OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX65T127OCTGBFIM_Pos (5UL) /*!< TX65T127OCTGBFIM (Bit 5) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX65T127OCTGBFIM_Msk (0x20UL) /*!< TX65T127OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX128T255OCTGBFIM_Pos (6UL) /*!< TX128T255OCTGBFIM (Bit 6) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX128T255OCTGBFIM_Msk (0x40UL) /*!< TX128T255OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX256T511OCTGBFIM_Pos (7UL) /*!< TX256T511OCTGBFIM (Bit 7) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX256T511OCTGBFIM_Msk (0x80UL) /*!< TX256T511OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX512T1023OCTGBFIM_Pos (8UL) /*!< TX512T1023OCTGBFIM (Bit 8) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX512T1023OCTGBFIM_Msk (0x100UL) /*!< TX512T1023OCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX1024TMAXOCTGBFIM_Pos (9UL) /*!< TX1024TMAXOCTGBFIM (Bit 9) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TX1024TMAXOCTGBFIM_Msk (0x200UL) /*!< TX1024TMAXOCTGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXUCGBFIM_Pos (10UL) /*!< TXUCGBFIM (Bit 10) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXUCGBFIM_Msk (0x400UL) /*!< TXUCGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXMCGBFIM_Pos (11UL) /*!< TXMCGBFIM (Bit 11) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXMCGBFIM_Msk (0x800UL) /*!< TXMCGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXBCGBFIM_Pos (12UL) /*!< TXBCGBFIM (Bit 12) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXBCGBFIM_Msk (0x1000UL) /*!< TXBCGBFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXUFLOWERFIM_Pos (13UL) /*!< TXUFLOWERFIM (Bit 13) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXUFLOWERFIM_Msk (0x2000UL) /*!< TXUFLOWERFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXSCOLGFIM_Pos (14UL) /*!< TXSCOLGFIM (Bit 14) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXSCOLGFIM_Msk (0x4000UL) /*!< TXSCOLGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXMCOLGFIM_Pos (15UL) /*!< TXMCOLGFIM (Bit 15) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXMCOLGFIM_Msk (0x8000UL) /*!< TXMCOLGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXDEFFIM_Pos (16UL) /*!< TXDEFFIM (Bit 16) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXDEFFIM_Msk (0x10000UL) /*!< TXDEFFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXLATCOLFIM_Pos (17UL) /*!< TXLATCOLFIM (Bit 17) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXLATCOLFIM_Msk (0x20000UL) /*!< TXLATCOLFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXEXCOLFIM_Pos (18UL) /*!< TXEXCOLFIM (Bit 18) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXEXCOLFIM_Msk (0x40000UL) /*!< TXEXCOLFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXCARERFIM_Pos (19UL) /*!< TXCARERFIM (Bit 19) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXCARERFIM_Msk (0x80000UL) /*!< TXCARERFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGOCTIM_Pos (20UL) /*!< TXGOCTIM (Bit 20) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGOCTIM_Msk (0x100000UL) /*!< TXGOCTIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGFRMIM_Pos (21UL) /*!< TXGFRMIM (Bit 21) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXGFRMIM_Msk (0x200000UL) /*!< TXGFRMIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXEXDEFFIM_Pos (22UL) /*!< TXEXDEFFIM (Bit 22) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXEXDEFFIM_Msk (0x400000UL) /*!< TXEXDEFFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXPAUSFIM_Pos (23UL) /*!< TXPAUSFIM (Bit 23) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXPAUSFIM_Msk (0x800000UL) /*!< TXPAUSFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXVLANGFIM_Pos (24UL) /*!< TXVLANGFIM (Bit 24) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXVLANGFIM_Msk (0x1000000UL) /*!< TXVLANGFIM (Bitfield-Mask: 0x01) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXOSIZEGFIM_Pos (25UL) /*!< TXOSIZEGFIM (Bit 25) */ + #define R_GMAC_MMC_Transmit_Interrupt_Mask_TXOSIZEGFIM_Msk (0x2000000UL) /*!< TXOSIZEGFIM (Bitfield-Mask: 0x01) */ +/* ================================================ Tx_Octet_Count_Good_Bad ================================================ */ + #define R_GMAC_Tx_Octet_Count_Good_Bad_TXOCTGB_Pos (0UL) /*!< TXOCTGB (Bit 0) */ + #define R_GMAC_Tx_Octet_Count_Good_Bad_TXOCTGB_Msk (0xffffffffUL) /*!< TXOCTGB (Bitfield-Mask: 0xffffffff) */ +/* ================================================ Tx_Frame_Count_Good_Bad ================================================ */ + #define R_GMAC_Tx_Frame_Count_Good_Bad_TXFRMGB_Pos (0UL) /*!< TXFRMGB (Bit 0) */ + #define R_GMAC_Tx_Frame_Count_Good_Bad_TXFRMGB_Msk (0xffffffffUL) /*!< TXFRMGB (Bitfield-Mask: 0xffffffff) */ +/* =============================================== Tx_Broadcast_Frames_Good ================================================ */ + #define R_GMAC_Tx_Broadcast_Frames_Good_TXBCASTG_Pos (0UL) /*!< TXBCASTG (Bit 0) */ + #define R_GMAC_Tx_Broadcast_Frames_Good_TXBCASTG_Msk (0xffffffffUL) /*!< TXBCASTG (Bitfield-Mask: 0xffffffff) */ +/* =============================================== Tx_Multicast_Frames_Good ================================================ */ + #define R_GMAC_Tx_Multicast_Frames_Good_TXMCASTG_Pos (0UL) /*!< TXMCASTG (Bit 0) */ + #define R_GMAC_Tx_Multicast_Frames_Good_TXMCASTG_Msk (0xffffffffUL) /*!< TXMCASTG (Bitfield-Mask: 0xffffffff) */ +/* ============================================== Tx_64Octets_Frames_Good_Bad ============================================== */ + #define R_GMAC_Tx_64Octets_Frames_Good_Bad_TX64OCTGB_Pos (0UL) /*!< TX64OCTGB (Bit 0) */ + #define R_GMAC_Tx_64Octets_Frames_Good_Bad_TX64OCTGB_Msk (0xffffffffUL) /*!< TX64OCTGB (Bitfield-Mask: 0xffffffff) */ +/* =========================================== Tx_65To127Octets_Frames_Good_Bad ============================================ */ + #define R_GMAC_Tx_65To127Octets_Frames_Good_Bad_TX65_127OCTGB_Pos (0UL) /*!< TX65_127OCTGB (Bit 0) */ + #define R_GMAC_Tx_65To127Octets_Frames_Good_Bad_TX65_127OCTGB_Msk (0xffffffffUL) /*!< TX65_127OCTGB (Bitfield-Mask: 0xffffffff) */ +/* =========================================== Tx_128To255Octets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Tx_128To255Octets_Frames_Good_Bad_TX128_255OCTGB_Pos (0UL) /*!< TX128_255OCTGB (Bit 0) */ + #define R_GMAC_Tx_128To255Octets_Frames_Good_Bad_TX128_255OCTGB_Msk (0xffffffffUL) /*!< TX128_255OCTGB (Bitfield-Mask: 0xffffffff) */ +/* =========================================== Tx_256To511Octets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Tx_256To511Octets_Frames_Good_Bad_TX256_511OCTGB_Pos (0UL) /*!< TX256_511OCTGB (Bit 0) */ + #define R_GMAC_Tx_256To511Octets_Frames_Good_Bad_TX256_511OCTGB_Msk (0xffffffffUL) /*!< TX256_511OCTGB (Bitfield-Mask: 0xffffffff) */ +/* ========================================== Tx_512To1023Octets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Tx_512To1023Octets_Frames_Good_Bad_TX512_1023OCTGB_Pos (0UL) /*!< TX512_1023OCTGB (Bit 0) */ + #define R_GMAC_Tx_512To1023Octets_Frames_Good_Bad_TX512_1023OCTGB_Msk (0xffffffffUL) /*!< TX512_1023OCTGB (Bitfield-Mask: 0xffffffff) */ +/* ========================================== Tx_1024ToMaxOctets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Tx_1024ToMaxOctets_Frames_Good_Bad_TX1024_MAXOCTGB_Pos (0UL) /*!< TX1024_MAXOCTGB (Bit 0) */ + #define R_GMAC_Tx_1024ToMaxOctets_Frames_Good_Bad_TX1024_MAXOCTGB_Msk (0xffffffffUL) /*!< TX1024_MAXOCTGB (Bitfield-Mask: 0xffffffff) */ +/* ============================================== Tx_Unicast_Frames_Good_Bad =============================================== */ + #define R_GMAC_Tx_Unicast_Frames_Good_Bad_TXUCASTGB_Pos (0UL) /*!< TXUCASTGB (Bit 0) */ + #define R_GMAC_Tx_Unicast_Frames_Good_Bad_TXUCASTGB_Msk (0xffffffffUL) /*!< TXUCASTGB (Bitfield-Mask: 0xffffffff) */ +/* ============================================= Tx_Multicast_Frames_Good_Bad ============================================== */ + #define R_GMAC_Tx_Multicast_Frames_Good_Bad_TXMCASTGB_Pos (0UL) /*!< TXMCASTGB (Bit 0) */ + #define R_GMAC_Tx_Multicast_Frames_Good_Bad_TXMCASTGB_Msk (0xffffffffUL) /*!< TXMCASTGB (Bitfield-Mask: 0xffffffff) */ +/* ============================================= Tx_Broadcast_Frames_Good_Bad ============================================== */ + #define R_GMAC_Tx_Broadcast_Frames_Good_Bad_TXBCASTGB_Pos (0UL) /*!< TXBCASTGB (Bit 0) */ + #define R_GMAC_Tx_Broadcast_Frames_Good_Bad_TXBCASTGB_Msk (0xffffffffUL) /*!< TXBCASTGB (Bitfield-Mask: 0xffffffff) */ +/* =============================================== Tx_Underflow_Error_Frames =============================================== */ + #define R_GMAC_Tx_Underflow_Error_Frames_TXUNDRFLW_Pos (0UL) /*!< TXUNDRFLW (Bit 0) */ + #define R_GMAC_Tx_Underflow_Error_Frames_TXUNDRFLW_Msk (0xffffUL) /*!< TXUNDRFLW (Bitfield-Mask: 0xffff) */ +/* ============================================ Tx_Single_Collision_Good_Frames ============================================ */ + #define R_GMAC_Tx_Single_Collision_Good_Frames_TXSNGLCOLG_Pos (0UL) /*!< TXSNGLCOLG (Bit 0) */ + #define R_GMAC_Tx_Single_Collision_Good_Frames_TXSNGLCOLG_Msk (0xffffUL) /*!< TXSNGLCOLG (Bitfield-Mask: 0xffff) */ +/* =========================================== Tx_Multiple_Collision_Good_Frames =========================================== */ + #define R_GMAC_Tx_Multiple_Collision_Good_Frames_TXMULTCOLG_Pos (0UL) /*!< TXMULTCOLG (Bit 0) */ + #define R_GMAC_Tx_Multiple_Collision_Good_Frames_TXMULTCOLG_Msk (0xffffUL) /*!< TXMULTCOLG (Bitfield-Mask: 0xffff) */ +/* ================================================== Tx_Deferred_Frames =================================================== */ + #define R_GMAC_Tx_Deferred_Frames_TXDEFRD_Pos (0UL) /*!< TXDEFRD (Bit 0) */ + #define R_GMAC_Tx_Deferred_Frames_TXDEFRD_Msk (0xffffUL) /*!< TXDEFRD (Bitfield-Mask: 0xffff) */ +/* =============================================== Tx_Late_Collision_Frames ================================================ */ + #define R_GMAC_Tx_Late_Collision_Frames_TXLATECOL_Pos (0UL) /*!< TXLATECOL (Bit 0) */ + #define R_GMAC_Tx_Late_Collision_Frames_TXLATECOL_Msk (0xffffUL) /*!< TXLATECOL (Bitfield-Mask: 0xffff) */ +/* ============================================= Tx_Excessive_Collision_Frames ============================================= */ + #define R_GMAC_Tx_Excessive_Collision_Frames_TXEXSCOL_Pos (0UL) /*!< TXEXSCOL (Bit 0) */ + #define R_GMAC_Tx_Excessive_Collision_Frames_TXEXSCOL_Msk (0xffffUL) /*!< TXEXSCOL (Bitfield-Mask: 0xffff) */ +/* ================================================ Tx_Carrier_Error_Frames ================================================ */ + #define R_GMAC_Tx_Carrier_Error_Frames_TXCARR_Pos (0UL) /*!< TXCARR (Bit 0) */ + #define R_GMAC_Tx_Carrier_Error_Frames_TXCARR_Msk (0xffffUL) /*!< TXCARR (Bitfield-Mask: 0xffff) */ +/* ================================================== Tx_Octet_Count_Good ================================================== */ + #define R_GMAC_Tx_Octet_Count_Good_TXOCTG_Pos (0UL) /*!< TXOCTG (Bit 0) */ + #define R_GMAC_Tx_Octet_Count_Good_TXOCTG_Msk (0xffffffffUL) /*!< TXOCTG (Bitfield-Mask: 0xffffffff) */ +/* ================================================== Tx_Frame_Count_Good ================================================== */ + #define R_GMAC_Tx_Frame_Count_Good_TXFRMG_Pos (0UL) /*!< TXFRMG (Bit 0) */ + #define R_GMAC_Tx_Frame_Count_Good_TXFRMG_Msk (0xffffffffUL) /*!< TXFRMG (Bitfield-Mask: 0xffffffff) */ +/* ============================================== Tx_Excessive_Deferral_Error ============================================== */ + #define R_GMAC_Tx_Excessive_Deferral_Error_TXEXSDEF_Pos (0UL) /*!< TXEXSDEF (Bit 0) */ + #define R_GMAC_Tx_Excessive_Deferral_Error_TXEXSDEF_Msk (0xffffUL) /*!< TXEXSDEF (Bitfield-Mask: 0xffff) */ +/* ==================================================== Tx_Pause_Frames ==================================================== */ + #define R_GMAC_Tx_Pause_Frames_TXPAUSE_Pos (0UL) /*!< TXPAUSE (Bit 0) */ + #define R_GMAC_Tx_Pause_Frames_TXPAUSE_Msk (0xffffUL) /*!< TXPAUSE (Bitfield-Mask: 0xffff) */ +/* ================================================== Tx_VLAN_Frames_Good ================================================== */ + #define R_GMAC_Tx_VLAN_Frames_Good_TXVLANG_Pos (0UL) /*!< TXVLANG (Bit 0) */ + #define R_GMAC_Tx_VLAN_Frames_Good_TXVLANG_Msk (0xffffffffUL) /*!< TXVLANG (Bitfield-Mask: 0xffffffff) */ +/* ================================================= Tx_OSize_Frames_Good ================================================== */ + #define R_GMAC_Tx_OSize_Frames_Good_TXOSIZG_Pos (0UL) /*!< TXOSIZG (Bit 0) */ + #define R_GMAC_Tx_OSize_Frames_Good_TXOSIZG_Msk (0xffffUL) /*!< TXOSIZG (Bitfield-Mask: 0xffff) */ +/* =============================================== Rx_Frames_Count_Good_Bad ================================================ */ + #define R_GMAC_Rx_Frames_Count_Good_Bad_RXFRMGB_Pos (0UL) /*!< RXFRMGB (Bit 0) */ + #define R_GMAC_Rx_Frames_Count_Good_Bad_RXFRMGB_Msk (0xffffffffUL) /*!< RXFRMGB (Bitfield-Mask: 0xffffffff) */ +/* ================================================ Rx_Octet_Count_Good_Bad ================================================ */ + #define R_GMAC_Rx_Octet_Count_Good_Bad_RXOCTGB_Pos (0UL) /*!< RXOCTGB (Bit 0) */ + #define R_GMAC_Rx_Octet_Count_Good_Bad_RXOCTGB_Msk (0xffffffffUL) /*!< RXOCTGB (Bitfield-Mask: 0xffffffff) */ +/* ================================================== Rx_Octet_Count_Good ================================================== */ + #define R_GMAC_Rx_Octet_Count_Good_RXOCTG_Pos (0UL) /*!< RXOCTG (Bit 0) */ + #define R_GMAC_Rx_Octet_Count_Good_RXOCTG_Msk (0xffffffffUL) /*!< RXOCTG (Bitfield-Mask: 0xffffffff) */ +/* =============================================== Rx_Broadcast_Frames_Good ================================================ */ + #define R_GMAC_Rx_Broadcast_Frames_Good_RXBCASTG_Pos (0UL) /*!< RXBCASTG (Bit 0) */ + #define R_GMAC_Rx_Broadcast_Frames_Good_RXBCASTG_Msk (0xffffffffUL) /*!< RXBCASTG (Bitfield-Mask: 0xffffffff) */ +/* =============================================== Rx_Multicast_Frames_Good ================================================ */ + #define R_GMAC_Rx_Multicast_Frames_Good_RXMCASTG_Pos (0UL) /*!< RXMCASTG (Bit 0) */ + #define R_GMAC_Rx_Multicast_Frames_Good_RXMCASTG_Msk (0xffffffffUL) /*!< RXMCASTG (Bitfield-Mask: 0xffffffff) */ +/* ================================================== Rx_CRC_Error_Frames ================================================== */ + #define R_GMAC_Rx_CRC_Error_Frames_RXCRCERR_Pos (0UL) /*!< RXCRCERR (Bit 0) */ + #define R_GMAC_Rx_CRC_Error_Frames_RXCRCERR_Msk (0xffffUL) /*!< RXCRCERR (Bitfield-Mask: 0xffff) */ +/* =============================================== Rx_Alignment_Error_Frames =============================================== */ + #define R_GMAC_Rx_Alignment_Error_Frames_RXALGNERR_Pos (0UL) /*!< RXALGNERR (Bit 0) */ + #define R_GMAC_Rx_Alignment_Error_Frames_RXALGNERR_Msk (0xffffUL) /*!< RXALGNERR (Bitfield-Mask: 0xffff) */ +/* ================================================= Rx_Runt_Error_Frames ================================================== */ + #define R_GMAC_Rx_Runt_Error_Frames_RXRUNTERR_Pos (0UL) /*!< RXRUNTERR (Bit 0) */ + #define R_GMAC_Rx_Runt_Error_Frames_RXRUNTERR_Msk (0xffffUL) /*!< RXRUNTERR (Bitfield-Mask: 0xffff) */ +/* ================================================ Rx_Jabber_Error_Frames ================================================= */ + #define R_GMAC_Rx_Jabber_Error_Frames_RXJABERR_Pos (0UL) /*!< RXJABERR (Bit 0) */ + #define R_GMAC_Rx_Jabber_Error_Frames_RXJABERR_Msk (0xffffUL) /*!< RXJABERR (Bitfield-Mask: 0xffff) */ +/* =============================================== Rx_Undersize_Frames_Good ================================================ */ + #define R_GMAC_Rx_Undersize_Frames_Good_RXUNDERSZG_Pos (0UL) /*!< RXUNDERSZG (Bit 0) */ + #define R_GMAC_Rx_Undersize_Frames_Good_RXUNDERSZG_Msk (0xffffUL) /*!< RXUNDERSZG (Bitfield-Mask: 0xffff) */ +/* ================================================ Rx_Oversize_Frames_Good ================================================ */ + #define R_GMAC_Rx_Oversize_Frames_Good_RXOVERSZG_Pos (0UL) /*!< RXOVERSZG (Bit 0) */ + #define R_GMAC_Rx_Oversize_Frames_Good_RXOVERSZG_Msk (0xffffUL) /*!< RXOVERSZG (Bitfield-Mask: 0xffff) */ +/* ============================================== Rx_64Octets_Frames_Good_Bad ============================================== */ + #define R_GMAC_Rx_64Octets_Frames_Good_Bad_RX64OCTGB_Pos (0UL) /*!< RX64OCTGB (Bit 0) */ + #define R_GMAC_Rx_64Octets_Frames_Good_Bad_RX64OCTGB_Msk (0xffffffffUL) /*!< RX64OCTGB (Bitfield-Mask: 0xffffffff) */ +/* =========================================== Rx_65To127Octets_Frames_Good_Bad ============================================ */ + #define R_GMAC_Rx_65To127Octets_Frames_Good_Bad_RX65_127OCTGB_Pos (0UL) /*!< RX65_127OCTGB (Bit 0) */ + #define R_GMAC_Rx_65To127Octets_Frames_Good_Bad_RX65_127OCTGB_Msk (0xffffffffUL) /*!< RX65_127OCTGB (Bitfield-Mask: 0xffffffff) */ +/* =========================================== Rx_128To255Octets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Rx_128To255Octets_Frames_Good_Bad_RX128_255OCTGB_Pos (0UL) /*!< RX128_255OCTGB (Bit 0) */ + #define R_GMAC_Rx_128To255Octets_Frames_Good_Bad_RX128_255OCTGB_Msk (0xffffffffUL) /*!< RX128_255OCTGB (Bitfield-Mask: 0xffffffff) */ +/* =========================================== Rx_256To511Octets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Rx_256To511Octets_Frames_Good_Bad_RX256_511OCTGB_Pos (0UL) /*!< RX256_511OCTGB (Bit 0) */ + #define R_GMAC_Rx_256To511Octets_Frames_Good_Bad_RX256_511OCTGB_Msk (0xffffffffUL) /*!< RX256_511OCTGB (Bitfield-Mask: 0xffffffff) */ +/* ========================================== Rx_512To1023Octets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Rx_512To1023Octets_Frames_Good_Bad_RX512_1023OCTGB_Pos (0UL) /*!< RX512_1023OCTGB (Bit 0) */ + #define R_GMAC_Rx_512To1023Octets_Frames_Good_Bad_RX512_1023OCTGB_Msk (0xffffffffUL) /*!< RX512_1023OCTGB (Bitfield-Mask: 0xffffffff) */ +/* ========================================== Rx_1024ToMaxOctets_Frames_Good_Bad =========================================== */ + #define R_GMAC_Rx_1024ToMaxOctets_Frames_Good_Bad_RX1024_MAXOCTGB_Pos (0UL) /*!< RX1024_MAXOCTGB (Bit 0) */ + #define R_GMAC_Rx_1024ToMaxOctets_Frames_Good_Bad_RX1024_MAXOCTGB_Msk (0xffffffffUL) /*!< RX1024_MAXOCTGB (Bitfield-Mask: 0xffffffff) */ +/* ================================================ Rx_Unicast_Frames_Good ================================================= */ + #define R_GMAC_Rx_Unicast_Frames_Good_RXUCASTG_Pos (0UL) /*!< RXUCASTG (Bit 0) */ + #define R_GMAC_Rx_Unicast_Frames_Good_RXUCASTG_Msk (0xffffffffUL) /*!< RXUCASTG (Bitfield-Mask: 0xffffffff) */ +/* ================================================ Rx_Length_Error_Frames ================================================= */ + #define R_GMAC_Rx_Length_Error_Frames_RXLENERR_Pos (0UL) /*!< RXLENERR (Bit 0) */ + #define R_GMAC_Rx_Length_Error_Frames_RXLENERR_Msk (0xffffUL) /*!< RXLENERR (Bitfield-Mask: 0xffff) */ +/* ============================================== Rx_Out_Of_Range_Type_Frames ============================================== */ + #define R_GMAC_Rx_Out_Of_Range_Type_Frames_RXOUTOFRNG_Pos (0UL) /*!< RXOUTOFRNG (Bit 0) */ + #define R_GMAC_Rx_Out_Of_Range_Type_Frames_RXOUTOFRNG_Msk (0xffffUL) /*!< RXOUTOFRNG (Bitfield-Mask: 0xffff) */ +/* ==================================================== Rx_Pause_Frames ==================================================== */ + #define R_GMAC_Rx_Pause_Frames_RXPAUSEFRM_Pos (0UL) /*!< RXPAUSEFRM (Bit 0) */ + #define R_GMAC_Rx_Pause_Frames_RXPAUSEFRM_Msk (0xffffUL) /*!< RXPAUSEFRM (Bitfield-Mask: 0xffff) */ +/* ================================================ Rx_FIFO_Overflow_Frames ================================================ */ + #define R_GMAC_Rx_FIFO_Overflow_Frames_RXFIFOOVFL_Pos (0UL) /*!< RXFIFOOVFL (Bit 0) */ + #define R_GMAC_Rx_FIFO_Overflow_Frames_RXFIFOOVFL_Msk (0xffffUL) /*!< RXFIFOOVFL (Bitfield-Mask: 0xffff) */ +/* ================================================ Rx_VLAN_Frames_Good_Bad ================================================ */ + #define R_GMAC_Rx_VLAN_Frames_Good_Bad_RXVLANFRGB_Pos (0UL) /*!< RXVLANFRGB (Bit 0) */ + #define R_GMAC_Rx_VLAN_Frames_Good_Bad_RXVLANFRGB_Msk (0xffffffffUL) /*!< RXVLANFRGB (Bitfield-Mask: 0xffffffff) */ +/* =============================================== Rx_Watchdog_Error_Frames ================================================ */ + #define R_GMAC_Rx_Watchdog_Error_Frames_RXWDGERR_Pos (0UL) /*!< RXWDGERR (Bit 0) */ + #define R_GMAC_Rx_Watchdog_Error_Frames_RXWDGERR_Msk (0xffffUL) /*!< RXWDGERR (Bitfield-Mask: 0xffff) */ +/* ================================================ Rx_Receive_Error_Frames ================================================ */ + #define R_GMAC_Rx_Receive_Error_Frames_RXRCVERR_Pos (0UL) /*!< RXRCVERR (Bit 0) */ + #define R_GMAC_Rx_Receive_Error_Frames_RXRCVERR_Msk (0xffffUL) /*!< RXRCVERR (Bitfield-Mask: 0xffff) */ +/* ================================================ Rx_Control_Frames_Good ================================================= */ + #define R_GMAC_Rx_Control_Frames_Good_RXCTRLG_Pos (0UL) /*!< RXCTRLG (Bit 0) */ + #define R_GMAC_Rx_Control_Frames_Good_RXCTRLG_Msk (0xffffffffUL) /*!< RXCTRLG (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== GMACTRGSEL ======================================================= */ + #define R_GMAC_GMACTRGSEL_TRGSEL_Pos (0UL) /*!< TRGSEL (Bit 0) */ + #define R_GMAC_GMACTRGSEL_TRGSEL_Msk (0x3UL) /*!< TRGSEL (Bitfield-Mask: 0x03) */ +/* ==================================================== HASH_TABLE_REG ===================================================== */ + #define R_GMAC_HASH_TABLE_REG_HT_Pos (0UL) /*!< HT (Bit 0) */ + #define R_GMAC_HASH_TABLE_REG_HT_Msk (0xffffffffUL) /*!< HT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== VLAN_Hash_Table_Reg ================================================== */ + #define R_GMAC_VLAN_Hash_Table_Reg_VLHT_Pos (0UL) /*!< VLHT (Bit 0) */ + #define R_GMAC_VLAN_Hash_Table_Reg_VLHT_Msk (0xffffUL) /*!< VLHT (Bitfield-Mask: 0xffff) */ +/* =================================================== Timestamp_Control =================================================== */ + #define R_GMAC_Timestamp_Control_TSENA_Pos (0UL) /*!< TSENA (Bit 0) */ + #define R_GMAC_Timestamp_Control_TSENA_Msk (0x1UL) /*!< TSENA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSENALL_Pos (8UL) /*!< TSENALL (Bit 8) */ + #define R_GMAC_Timestamp_Control_TSENALL_Msk (0x100UL) /*!< TSENALL (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSCTRLSSR_Pos (9UL) /*!< TSCTRLSSR (Bit 9) */ + #define R_GMAC_Timestamp_Control_TSCTRLSSR_Msk (0x200UL) /*!< TSCTRLSSR (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSVER2ENA_Pos (10UL) /*!< TSVER2ENA (Bit 10) */ + #define R_GMAC_Timestamp_Control_TSVER2ENA_Msk (0x400UL) /*!< TSVER2ENA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSIPENA_Pos (11UL) /*!< TSIPENA (Bit 11) */ + #define R_GMAC_Timestamp_Control_TSIPENA_Msk (0x800UL) /*!< TSIPENA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSIPV6ENA_Pos (12UL) /*!< TSIPV6ENA (Bit 12) */ + #define R_GMAC_Timestamp_Control_TSIPV6ENA_Msk (0x1000UL) /*!< TSIPV6ENA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSIPV4ENA_Pos (13UL) /*!< TSIPV4ENA (Bit 13) */ + #define R_GMAC_Timestamp_Control_TSIPV4ENA_Msk (0x2000UL) /*!< TSIPV4ENA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSEVNTENA_Pos (14UL) /*!< TSEVNTENA (Bit 14) */ + #define R_GMAC_Timestamp_Control_TSEVNTENA_Msk (0x4000UL) /*!< TSEVNTENA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_TSMSTRENA_Pos (15UL) /*!< TSMSTRENA (Bit 15) */ + #define R_GMAC_Timestamp_Control_TSMSTRENA_Msk (0x8000UL) /*!< TSMSTRENA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_SNAPTYPSEL_Pos (16UL) /*!< SNAPTYPSEL (Bit 16) */ + #define R_GMAC_Timestamp_Control_SNAPTYPSEL_Msk (0x30000UL) /*!< SNAPTYPSEL (Bitfield-Mask: 0x03) */ + #define R_GMAC_Timestamp_Control_TSENMACADDR_Pos (18UL) /*!< TSENMACADDR (Bit 18) */ + #define R_GMAC_Timestamp_Control_TSENMACADDR_Msk (0x40000UL) /*!< TSENMACADDR (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_ATSFC_Pos (24UL) /*!< ATSFC (Bit 24) */ + #define R_GMAC_Timestamp_Control_ATSFC_Msk (0x1000000UL) /*!< ATSFC (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_ATSEN0_Pos (25UL) /*!< ATSEN0 (Bit 25) */ + #define R_GMAC_Timestamp_Control_ATSEN0_Msk (0x2000000UL) /*!< ATSEN0 (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Control_ATSEN1_Pos (26UL) /*!< ATSEN1 (Bit 26) */ + #define R_GMAC_Timestamp_Control_ATSEN1_Msk (0x4000000UL) /*!< ATSEN1 (Bitfield-Mask: 0x01) */ +/* =================================================== Timestamp_Status ==================================================== */ + #define R_GMAC_Timestamp_Status_AUXTSTRIG_Pos (2UL) /*!< AUXTSTRIG (Bit 2) */ + #define R_GMAC_Timestamp_Status_AUXTSTRIG_Msk (0x4UL) /*!< AUXTSTRIG (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Status_ATSSTN_Pos (16UL) /*!< ATSSTN (Bit 16) */ + #define R_GMAC_Timestamp_Status_ATSSTN_Msk (0xf0000UL) /*!< ATSSTN (Bitfield-Mask: 0x0f) */ + #define R_GMAC_Timestamp_Status_ATSSTM_Pos (24UL) /*!< ATSSTM (Bit 24) */ + #define R_GMAC_Timestamp_Status_ATSSTM_Msk (0x1000000UL) /*!< ATSSTM (Bitfield-Mask: 0x01) */ + #define R_GMAC_Timestamp_Status_ATSNS_Pos (25UL) /*!< ATSNS (Bit 25) */ + #define R_GMAC_Timestamp_Status_ATSNS_Msk (0x3e000000UL) /*!< ATSNS (Bitfield-Mask: 0x1f) */ +/* ============================================ Auxiliary_Timestamp_Nanoseconds ============================================ */ + #define R_GMAC_Auxiliary_Timestamp_Nanoseconds_AUXTSLO_Pos (0UL) /*!< AUXTSLO (Bit 0) */ + #define R_GMAC_Auxiliary_Timestamp_Nanoseconds_AUXTSLO_Msk (0x7fffffffUL) /*!< AUXTSLO (Bitfield-Mask: 0x7fffffff) */ +/* ============================================== Auxiliary_Timestamp_Seconds ============================================== */ + #define R_GMAC_Auxiliary_Timestamp_Seconds_AUXTSHI_Pos (0UL) /*!< AUXTSHI (Bit 0) */ + #define R_GMAC_Auxiliary_Timestamp_Seconds_AUXTSHI_Msk (0xffffffffUL) /*!< AUXTSHI (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR16_H ======================================================== */ + #define R_GMAC_MAR16_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR16_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR16_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR16_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR16_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR16_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR16_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR16_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR16_L ======================================================== */ + #define R_GMAC_MAR16_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR16_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MAR17_H ======================================================== */ + #define R_GMAC_MAR17_H_ADDRHI_Pos (0UL) /*!< ADDRHI (Bit 0) */ + #define R_GMAC_MAR17_H_ADDRHI_Msk (0xffffUL) /*!< ADDRHI (Bitfield-Mask: 0xffff) */ + #define R_GMAC_MAR17_H_MBC_Pos (24UL) /*!< MBC (Bit 24) */ + #define R_GMAC_MAR17_H_MBC_Msk (0x3f000000UL) /*!< MBC (Bitfield-Mask: 0x3f) */ + #define R_GMAC_MAR17_H_SA_Pos (30UL) /*!< SA (Bit 30) */ + #define R_GMAC_MAR17_H_SA_Msk (0x40000000UL) /*!< SA (Bitfield-Mask: 0x01) */ + #define R_GMAC_MAR17_H_AE_Pos (31UL) /*!< AE (Bit 31) */ + #define R_GMAC_MAR17_H_AE_Msk (0x80000000UL) /*!< AE (Bitfield-Mask: 0x01) */ +/* ======================================================== MAR17_L ======================================================== */ + #define R_GMAC_MAR17_L_ADDRLO_Pos (0UL) /*!< ADDRLO (Bit 0) */ + #define R_GMAC_MAR17_L_ADDRLO_Msk (0xffffffffUL) /*!< ADDRLO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= Bus_Mode ======================================================== */ + #define R_GMAC_Bus_Mode_SWR_Pos (0UL) /*!< SWR (Bit 0) */ + #define R_GMAC_Bus_Mode_SWR_Msk (0x1UL) /*!< SWR (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_DA_Pos (1UL) /*!< DA (Bit 1) */ + #define R_GMAC_Bus_Mode_DA_Msk (0x2UL) /*!< DA (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_DSL_Pos (2UL) /*!< DSL (Bit 2) */ + #define R_GMAC_Bus_Mode_DSL_Msk (0x7cUL) /*!< DSL (Bitfield-Mask: 0x1f) */ + #define R_GMAC_Bus_Mode_ATDS_Pos (7UL) /*!< ATDS (Bit 7) */ + #define R_GMAC_Bus_Mode_ATDS_Msk (0x80UL) /*!< ATDS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_PBL_Pos (8UL) /*!< PBL (Bit 8) */ + #define R_GMAC_Bus_Mode_PBL_Msk (0x3f00UL) /*!< PBL (Bitfield-Mask: 0x3f) */ + #define R_GMAC_Bus_Mode_PR_Pos (14UL) /*!< PR (Bit 14) */ + #define R_GMAC_Bus_Mode_PR_Msk (0xc000UL) /*!< PR (Bitfield-Mask: 0x03) */ + #define R_GMAC_Bus_Mode_FB_Pos (16UL) /*!< FB (Bit 16) */ + #define R_GMAC_Bus_Mode_FB_Msk (0x10000UL) /*!< FB (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_RPBL_Pos (17UL) /*!< RPBL (Bit 17) */ + #define R_GMAC_Bus_Mode_RPBL_Msk (0x7e0000UL) /*!< RPBL (Bitfield-Mask: 0x3f) */ + #define R_GMAC_Bus_Mode_USP_Pos (23UL) /*!< USP (Bit 23) */ + #define R_GMAC_Bus_Mode_USP_Msk (0x800000UL) /*!< USP (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_PBLx8_Pos (24UL) /*!< PBLx8 (Bit 24) */ + #define R_GMAC_Bus_Mode_PBLx8_Msk (0x1000000UL) /*!< PBLx8 (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_AAL_Pos (25UL) /*!< AAL (Bit 25) */ + #define R_GMAC_Bus_Mode_AAL_Msk (0x2000000UL) /*!< AAL (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_MB_Pos (26UL) /*!< MB (Bit 26) */ + #define R_GMAC_Bus_Mode_MB_Msk (0x4000000UL) /*!< MB (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_TXPR_Pos (27UL) /*!< TXPR (Bit 27) */ + #define R_GMAC_Bus_Mode_TXPR_Msk (0x8000000UL) /*!< TXPR (Bitfield-Mask: 0x01) */ + #define R_GMAC_Bus_Mode_PRWG_Pos (28UL) /*!< PRWG (Bit 28) */ + #define R_GMAC_Bus_Mode_PRWG_Msk (0x30000000UL) /*!< PRWG (Bitfield-Mask: 0x03) */ + #define R_GMAC_Bus_Mode_RIB_Pos (31UL) /*!< RIB (Bit 31) */ + #define R_GMAC_Bus_Mode_RIB_Msk (0x80000000UL) /*!< RIB (Bitfield-Mask: 0x01) */ +/* ================================================= Transmit_Poll_Demand ================================================== */ + #define R_GMAC_Transmit_Poll_Demand_TPD_Pos (0UL) /*!< TPD (Bit 0) */ + #define R_GMAC_Transmit_Poll_Demand_TPD_Msk (0xffffffffUL) /*!< TPD (Bitfield-Mask: 0xffffffff) */ +/* ================================================== Receive_Poll_Demand ================================================== */ + #define R_GMAC_Receive_Poll_Demand_RPD_Pos (0UL) /*!< RPD (Bit 0) */ + #define R_GMAC_Receive_Poll_Demand_RPD_Msk (0xffffffffUL) /*!< RPD (Bitfield-Mask: 0xffffffff) */ +/* ============================================ Receive_Descriptor_List_Address ============================================ */ + #define R_GMAC_Receive_Descriptor_List_Address_RDESLA_32bit_Pos (2UL) /*!< RDESLA_32bit (Bit 2) */ + #define R_GMAC_Receive_Descriptor_List_Address_RDESLA_32bit_Msk (0xfffffffcUL) /*!< RDESLA_32bit (Bitfield-Mask: 0x3fffffff) */ +/* =========================================== Transmit_Descriptor_List_Address ============================================ */ + #define R_GMAC_Transmit_Descriptor_List_Address_TDESLA_32bit_Pos (2UL) /*!< TDESLA_32bit (Bit 2) */ + #define R_GMAC_Transmit_Descriptor_List_Address_TDESLA_32bit_Msk (0xfffffffcUL) /*!< TDESLA_32bit (Bitfield-Mask: 0x3fffffff) */ +/* ======================================================== Status ========================================================= */ + #define R_GMAC_Status_TI_Pos (0UL) /*!< TI (Bit 0) */ + #define R_GMAC_Status_TI_Msk (0x1UL) /*!< TI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_TPS_Pos (1UL) /*!< TPS (Bit 1) */ + #define R_GMAC_Status_TPS_Msk (0x2UL) /*!< TPS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_TU_Pos (2UL) /*!< TU (Bit 2) */ + #define R_GMAC_Status_TU_Msk (0x4UL) /*!< TU (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_TJT_Pos (3UL) /*!< TJT (Bit 3) */ + #define R_GMAC_Status_TJT_Msk (0x8UL) /*!< TJT (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_OVF_Pos (4UL) /*!< OVF (Bit 4) */ + #define R_GMAC_Status_OVF_Msk (0x10UL) /*!< OVF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_UNF_Pos (5UL) /*!< UNF (Bit 5) */ + #define R_GMAC_Status_UNF_Msk (0x20UL) /*!< UNF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_RI_Pos (6UL) /*!< RI (Bit 6) */ + #define R_GMAC_Status_RI_Msk (0x40UL) /*!< RI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_RU_Pos (7UL) /*!< RU (Bit 7) */ + #define R_GMAC_Status_RU_Msk (0x80UL) /*!< RU (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_RPS_Pos (8UL) /*!< RPS (Bit 8) */ + #define R_GMAC_Status_RPS_Msk (0x100UL) /*!< RPS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_RWT_Pos (9UL) /*!< RWT (Bit 9) */ + #define R_GMAC_Status_RWT_Msk (0x200UL) /*!< RWT (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_ETI_Pos (10UL) /*!< ETI (Bit 10) */ + #define R_GMAC_Status_ETI_Msk (0x400UL) /*!< ETI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_FBI_Pos (13UL) /*!< FBI (Bit 13) */ + #define R_GMAC_Status_FBI_Msk (0x2000UL) /*!< FBI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_ERI_Pos (14UL) /*!< ERI (Bit 14) */ + #define R_GMAC_Status_ERI_Msk (0x4000UL) /*!< ERI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_AIS_Pos (15UL) /*!< AIS (Bit 15) */ + #define R_GMAC_Status_AIS_Msk (0x8000UL) /*!< AIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_NIS_Pos (16UL) /*!< NIS (Bit 16) */ + #define R_GMAC_Status_NIS_Msk (0x10000UL) /*!< NIS (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_RS_Pos (17UL) /*!< RS (Bit 17) */ + #define R_GMAC_Status_RS_Msk (0xe0000UL) /*!< RS (Bitfield-Mask: 0x07) */ + #define R_GMAC_Status_TS_Pos (20UL) /*!< TS (Bit 20) */ + #define R_GMAC_Status_TS_Msk (0x700000UL) /*!< TS (Bitfield-Mask: 0x07) */ + #define R_GMAC_Status_EB_Pos (23UL) /*!< EB (Bit 23) */ + #define R_GMAC_Status_EB_Msk (0x3800000UL) /*!< EB (Bitfield-Mask: 0x07) */ + #define R_GMAC_Status_GMI_Pos (27UL) /*!< GMI (Bit 27) */ + #define R_GMAC_Status_GMI_Msk (0x8000000UL) /*!< GMI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_GPI_Pos (28UL) /*!< GPI (Bit 28) */ + #define R_GMAC_Status_GPI_Msk (0x10000000UL) /*!< GPI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_TTI_Pos (29UL) /*!< TTI (Bit 29) */ + #define R_GMAC_Status_TTI_Msk (0x20000000UL) /*!< TTI (Bitfield-Mask: 0x01) */ + #define R_GMAC_Status_GLPII_Pos (30UL) /*!< GLPII (Bit 30) */ + #define R_GMAC_Status_GLPII_Msk (0x40000000UL) /*!< GLPII (Bitfield-Mask: 0x01) */ +/* ==================================================== Operation_Mode ===================================================== */ + #define R_GMAC_Operation_Mode_SR_Pos (1UL) /*!< SR (Bit 1) */ + #define R_GMAC_Operation_Mode_SR_Msk (0x2UL) /*!< SR (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_OSF_Pos (2UL) /*!< OSF (Bit 2) */ + #define R_GMAC_Operation_Mode_OSF_Msk (0x4UL) /*!< OSF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_RTC_Pos (3UL) /*!< RTC (Bit 3) */ + #define R_GMAC_Operation_Mode_RTC_Msk (0x18UL) /*!< RTC (Bitfield-Mask: 0x03) */ + #define R_GMAC_Operation_Mode_DGF_Pos (5UL) /*!< DGF (Bit 5) */ + #define R_GMAC_Operation_Mode_DGF_Msk (0x20UL) /*!< DGF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_FUF_Pos (6UL) /*!< FUF (Bit 6) */ + #define R_GMAC_Operation_Mode_FUF_Msk (0x40UL) /*!< FUF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_FEF_Pos (7UL) /*!< FEF (Bit 7) */ + #define R_GMAC_Operation_Mode_FEF_Msk (0x80UL) /*!< FEF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_EFC_Pos (8UL) /*!< EFC (Bit 8) */ + #define R_GMAC_Operation_Mode_EFC_Msk (0x100UL) /*!< EFC (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_RFA_Pos (9UL) /*!< RFA (Bit 9) */ + #define R_GMAC_Operation_Mode_RFA_Msk (0x600UL) /*!< RFA (Bitfield-Mask: 0x03) */ + #define R_GMAC_Operation_Mode_RFD_Pos (11UL) /*!< RFD (Bit 11) */ + #define R_GMAC_Operation_Mode_RFD_Msk (0x1800UL) /*!< RFD (Bitfield-Mask: 0x03) */ + #define R_GMAC_Operation_Mode_ST_Pos (13UL) /*!< ST (Bit 13) */ + #define R_GMAC_Operation_Mode_ST_Msk (0x2000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_TTC_Pos (14UL) /*!< TTC (Bit 14) */ + #define R_GMAC_Operation_Mode_TTC_Msk (0x1c000UL) /*!< TTC (Bitfield-Mask: 0x07) */ + #define R_GMAC_Operation_Mode_FTF_Pos (20UL) /*!< FTF (Bit 20) */ + #define R_GMAC_Operation_Mode_FTF_Msk (0x100000UL) /*!< FTF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_TSF_Pos (21UL) /*!< TSF (Bit 21) */ + #define R_GMAC_Operation_Mode_TSF_Msk (0x200000UL) /*!< TSF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_RSF_Pos (25UL) /*!< RSF (Bit 25) */ + #define R_GMAC_Operation_Mode_RSF_Msk (0x2000000UL) /*!< RSF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Operation_Mode_DT_Pos (26UL) /*!< DT (Bit 26) */ + #define R_GMAC_Operation_Mode_DT_Msk (0x4000000UL) /*!< DT (Bitfield-Mask: 0x01) */ +/* =================================================== Interrupt_Enable ==================================================== */ + #define R_GMAC_Interrupt_Enable_TIE_Pos (0UL) /*!< TIE (Bit 0) */ + #define R_GMAC_Interrupt_Enable_TIE_Msk (0x1UL) /*!< TIE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_TSE_Pos (1UL) /*!< TSE (Bit 1) */ + #define R_GMAC_Interrupt_Enable_TSE_Msk (0x2UL) /*!< TSE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_TUE_Pos (2UL) /*!< TUE (Bit 2) */ + #define R_GMAC_Interrupt_Enable_TUE_Msk (0x4UL) /*!< TUE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_TJE_Pos (3UL) /*!< TJE (Bit 3) */ + #define R_GMAC_Interrupt_Enable_TJE_Msk (0x8UL) /*!< TJE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_OVE_Pos (4UL) /*!< OVE (Bit 4) */ + #define R_GMAC_Interrupt_Enable_OVE_Msk (0x10UL) /*!< OVE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_UNE_Pos (5UL) /*!< UNE (Bit 5) */ + #define R_GMAC_Interrupt_Enable_UNE_Msk (0x20UL) /*!< UNE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_RIE_Pos (6UL) /*!< RIE (Bit 6) */ + #define R_GMAC_Interrupt_Enable_RIE_Msk (0x40UL) /*!< RIE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_RUE_Pos (7UL) /*!< RUE (Bit 7) */ + #define R_GMAC_Interrupt_Enable_RUE_Msk (0x80UL) /*!< RUE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_RSE_Pos (8UL) /*!< RSE (Bit 8) */ + #define R_GMAC_Interrupt_Enable_RSE_Msk (0x100UL) /*!< RSE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_RWE_Pos (9UL) /*!< RWE (Bit 9) */ + #define R_GMAC_Interrupt_Enable_RWE_Msk (0x200UL) /*!< RWE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_ETE_Pos (10UL) /*!< ETE (Bit 10) */ + #define R_GMAC_Interrupt_Enable_ETE_Msk (0x400UL) /*!< ETE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_FBE_Pos (13UL) /*!< FBE (Bit 13) */ + #define R_GMAC_Interrupt_Enable_FBE_Msk (0x2000UL) /*!< FBE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_ERE_Pos (14UL) /*!< ERE (Bit 14) */ + #define R_GMAC_Interrupt_Enable_ERE_Msk (0x4000UL) /*!< ERE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_AIE_Pos (15UL) /*!< AIE (Bit 15) */ + #define R_GMAC_Interrupt_Enable_AIE_Msk (0x8000UL) /*!< AIE (Bitfield-Mask: 0x01) */ + #define R_GMAC_Interrupt_Enable_NIE_Pos (16UL) /*!< NIE (Bit 16) */ + #define R_GMAC_Interrupt_Enable_NIE_Msk (0x10000UL) /*!< NIE (Bitfield-Mask: 0x01) */ +/* ======================================= Missed_Frame_And_Buffer_Overflow_Counter ======================================== */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_MISFRMCNT_Pos (0UL) /*!< MISFRMCNT (Bit 0) */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_MISFRMCNT_Msk (0xffffUL) /*!< MISFRMCNT (Bitfield-Mask: 0xffff) */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_MISCNTOVF_Pos (16UL) /*!< MISCNTOVF (Bit 16) */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_MISCNTOVF_Msk (0x10000UL) /*!< MISCNTOVF (Bitfield-Mask: 0x01) */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_OVFFRMCNT_Pos (17UL) /*!< OVFFRMCNT (Bit 17) */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_OVFFRMCNT_Msk (0xffe0000UL) /*!< OVFFRMCNT (Bitfield-Mask: 0x7ff) */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_OVFCNTOVF_Pos (28UL) /*!< OVFCNTOVF (Bit 28) */ + #define R_GMAC_Missed_Frame_And_Buffer_Overflow_Counter_OVFCNTOVF_Msk (0x10000000UL) /*!< OVFCNTOVF (Bitfield-Mask: 0x01) */ +/* =========================================== Receive_Interrupt_Watchdog_Timer ============================================ */ + #define R_GMAC_Receive_Interrupt_Watchdog_Timer_RIWT_Pos (0UL) /*!< RIWT (Bit 0) */ + #define R_GMAC_Receive_Interrupt_Watchdog_Timer_RIWT_Msk (0xffUL) /*!< RIWT (Bitfield-Mask: 0xff) */ +/* ===================================================== AXI_Bus_Mode ====================================================== */ + #define R_GMAC_AXI_Bus_Mode_UNDEF_Pos (0UL) /*!< UNDEF (Bit 0) */ + #define R_GMAC_AXI_Bus_Mode_UNDEF_Msk (0x1UL) /*!< UNDEF (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Bus_Mode_BLEN4_Pos (1UL) /*!< BLEN4 (Bit 1) */ + #define R_GMAC_AXI_Bus_Mode_BLEN4_Msk (0x2UL) /*!< BLEN4 (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Bus_Mode_BLEN8_Pos (2UL) /*!< BLEN8 (Bit 2) */ + #define R_GMAC_AXI_Bus_Mode_BLEN8_Msk (0x4UL) /*!< BLEN8 (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Bus_Mode_BLEN16_Pos (3UL) /*!< BLEN16 (Bit 3) */ + #define R_GMAC_AXI_Bus_Mode_BLEN16_Msk (0x8UL) /*!< BLEN16 (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Bus_Mode_AXI_AAL_Pos (12UL) /*!< AXI_AAL (Bit 12) */ + #define R_GMAC_AXI_Bus_Mode_AXI_AAL_Msk (0x1000UL) /*!< AXI_AAL (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Bus_Mode_ONEKBBE_Pos (13UL) /*!< ONEKBBE (Bit 13) */ + #define R_GMAC_AXI_Bus_Mode_ONEKBBE_Msk (0x2000UL) /*!< ONEKBBE (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Bus_Mode_RD_OSR_LMT_Pos (16UL) /*!< RD_OSR_LMT (Bit 16) */ + #define R_GMAC_AXI_Bus_Mode_RD_OSR_LMT_Msk (0x30000UL) /*!< RD_OSR_LMT (Bitfield-Mask: 0x03) */ + #define R_GMAC_AXI_Bus_Mode_WR_OSR_LMT_Pos (20UL) /*!< WR_OSR_LMT (Bit 20) */ + #define R_GMAC_AXI_Bus_Mode_WR_OSR_LMT_Msk (0x300000UL) /*!< WR_OSR_LMT (Bitfield-Mask: 0x03) */ + #define R_GMAC_AXI_Bus_Mode_LPI_XIT_FRM_Pos (30UL) /*!< LPI_XIT_FRM (Bit 30) */ + #define R_GMAC_AXI_Bus_Mode_LPI_XIT_FRM_Msk (0x40000000UL) /*!< LPI_XIT_FRM (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Bus_Mode_EN_LPI_Pos (31UL) /*!< EN_LPI (Bit 31) */ + #define R_GMAC_AXI_Bus_Mode_EN_LPI_Msk (0x80000000UL) /*!< EN_LPI (Bitfield-Mask: 0x01) */ +/* ====================================================== AXI_Status ======================================================= */ + #define R_GMAC_AXI_Status_AXWHSTS_Pos (0UL) /*!< AXWHSTS (Bit 0) */ + #define R_GMAC_AXI_Status_AXWHSTS_Msk (0x1UL) /*!< AXWHSTS (Bitfield-Mask: 0x01) */ + #define R_GMAC_AXI_Status_AXIRDSTS_Pos (1UL) /*!< AXIRDSTS (Bit 1) */ + #define R_GMAC_AXI_Status_AXIRDSTS_Msk (0x2UL) /*!< AXIRDSTS (Bitfield-Mask: 0x01) */ +/* =========================================== Current_Host_Transmit_Descriptor ============================================ */ + #define R_GMAC_Current_Host_Transmit_Descriptor_CURTDESAPTR_Pos (0UL) /*!< CURTDESAPTR (Bit 0) */ + #define R_GMAC_Current_Host_Transmit_Descriptor_CURTDESAPTR_Msk (0xffffffffUL) /*!< CURTDESAPTR (Bitfield-Mask: 0xffffffff) */ +/* ============================================ Current_Host_Receive_Descriptor ============================================ */ + #define R_GMAC_Current_Host_Receive_Descriptor_CURRDESAPTR_Pos (0UL) /*!< CURRDESAPTR (Bit 0) */ + #define R_GMAC_Current_Host_Receive_Descriptor_CURRDESAPTR_Msk (0xffffffffUL) /*!< CURRDESAPTR (Bitfield-Mask: 0xffffffff) */ +/* ========================================= Current_Host_Transmit_Buffer_Address ========================================== */ + #define R_GMAC_Current_Host_Transmit_Buffer_Address_CURTBUFAPTR_Pos (0UL) /*!< CURTBUFAPTR (Bit 0) */ + #define R_GMAC_Current_Host_Transmit_Buffer_Address_CURTBUFAPTR_Msk (0xffffffffUL) /*!< CURTBUFAPTR (Bitfield-Mask: 0xffffffff) */ +/* ========================================== Current_Host_Receive_Buffer_Address ========================================== */ + #define R_GMAC_Current_Host_Receive_Buffer_Address_CURRBUFAPTR_Pos (0UL) /*!< CURRBUFAPTR (Bit 0) */ + #define R_GMAC_Current_Host_Receive_Buffer_Address_CURRBUFAPTR_Msk (0xffffffffUL) /*!< CURRBUFAPTR (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== HW_Feature ======================================================= */ + #define R_GMAC_HW_Feature_MIISEL_Pos (0UL) /*!< MIISEL (Bit 0) */ + #define R_GMAC_HW_Feature_MIISEL_Msk (0x1UL) /*!< MIISEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_GMIISEL_Pos (1UL) /*!< GMIISEL (Bit 1) */ + #define R_GMAC_HW_Feature_GMIISEL_Msk (0x2UL) /*!< GMIISEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_HDSEL_Pos (2UL) /*!< HDSEL (Bit 2) */ + #define R_GMAC_HW_Feature_HDSEL_Msk (0x4UL) /*!< HDSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_EXTHASHEN_Pos (3UL) /*!< EXTHASHEN (Bit 3) */ + #define R_GMAC_HW_Feature_EXTHASHEN_Msk (0x8UL) /*!< EXTHASHEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_HASHSEL_Pos (4UL) /*!< HASHSEL (Bit 4) */ + #define R_GMAC_HW_Feature_HASHSEL_Msk (0x10UL) /*!< HASHSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_ADDMACADRSEL_Pos (5UL) /*!< ADDMACADRSEL (Bit 5) */ + #define R_GMAC_HW_Feature_ADDMACADRSEL_Msk (0x20UL) /*!< ADDMACADRSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_L3L4FLTREN_Pos (7UL) /*!< L3L4FLTREN (Bit 7) */ + #define R_GMAC_HW_Feature_L3L4FLTREN_Msk (0x80UL) /*!< L3L4FLTREN (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_SMASEL_Pos (8UL) /*!< SMASEL (Bit 8) */ + #define R_GMAC_HW_Feature_SMASEL_Msk (0x100UL) /*!< SMASEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_RWKSEL_Pos (9UL) /*!< RWKSEL (Bit 9) */ + #define R_GMAC_HW_Feature_RWKSEL_Msk (0x200UL) /*!< RWKSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_MGKSEL_Pos (10UL) /*!< MGKSEL (Bit 10) */ + #define R_GMAC_HW_Feature_MGKSEL_Msk (0x400UL) /*!< MGKSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_MMCSEL_Pos (11UL) /*!< MMCSEL (Bit 11) */ + #define R_GMAC_HW_Feature_MMCSEL_Msk (0x800UL) /*!< MMCSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_TSVER1SEL_Pos (12UL) /*!< TSVER1SEL (Bit 12) */ + #define R_GMAC_HW_Feature_TSVER1SEL_Msk (0x1000UL) /*!< TSVER1SEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_TSVER2SEL_Pos (13UL) /*!< TSVER2SEL (Bit 13) */ + #define R_GMAC_HW_Feature_TSVER2SEL_Msk (0x2000UL) /*!< TSVER2SEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_EEESEL_Pos (14UL) /*!< EEESEL (Bit 14) */ + #define R_GMAC_HW_Feature_EEESEL_Msk (0x4000UL) /*!< EEESEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_AVSEL_Pos (15UL) /*!< AVSEL (Bit 15) */ + #define R_GMAC_HW_Feature_AVSEL_Msk (0x8000UL) /*!< AVSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_TXCOESEL_Pos (16UL) /*!< TXCOESEL (Bit 16) */ + #define R_GMAC_HW_Feature_TXCOESEL_Msk (0x10000UL) /*!< TXCOESEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_RXTYP1COE_Pos (17UL) /*!< RXTYP1COE (Bit 17) */ + #define R_GMAC_HW_Feature_RXTYP1COE_Msk (0x20000UL) /*!< RXTYP1COE (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_RXTYP2COE_Pos (18UL) /*!< RXTYP2COE (Bit 18) */ + #define R_GMAC_HW_Feature_RXTYP2COE_Msk (0x40000UL) /*!< RXTYP2COE (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_RXFIFOSIZE_Pos (19UL) /*!< RXFIFOSIZE (Bit 19) */ + #define R_GMAC_HW_Feature_RXFIFOSIZE_Msk (0x80000UL) /*!< RXFIFOSIZE (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_RXCHCNT_Pos (20UL) /*!< RXCHCNT (Bit 20) */ + #define R_GMAC_HW_Feature_RXCHCNT_Msk (0x300000UL) /*!< RXCHCNT (Bitfield-Mask: 0x03) */ + #define R_GMAC_HW_Feature_TXCHCNT_Pos (22UL) /*!< TXCHCNT (Bit 22) */ + #define R_GMAC_HW_Feature_TXCHCNT_Msk (0xc00000UL) /*!< TXCHCNT (Bitfield-Mask: 0x03) */ + #define R_GMAC_HW_Feature_ENHDESSEL_Pos (24UL) /*!< ENHDESSEL (Bit 24) */ + #define R_GMAC_HW_Feature_ENHDESSEL_Msk (0x1000000UL) /*!< ENHDESSEL (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_INTTSEN_Pos (25UL) /*!< INTTSEN (Bit 25) */ + #define R_GMAC_HW_Feature_INTTSEN_Msk (0x2000000UL) /*!< INTTSEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_FLEXIPPSEN_Pos (26UL) /*!< FLEXIPPSEN (Bit 26) */ + #define R_GMAC_HW_Feature_FLEXIPPSEN_Msk (0x4000000UL) /*!< FLEXIPPSEN (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_SAVLANINS_Pos (27UL) /*!< SAVLANINS (Bit 27) */ + #define R_GMAC_HW_Feature_SAVLANINS_Msk (0x8000000UL) /*!< SAVLANINS (Bitfield-Mask: 0x01) */ + #define R_GMAC_HW_Feature_ACTPHYIF_Pos (28UL) /*!< ACTPHYIF (Bit 28) */ + #define R_GMAC_HW_Feature_ACTPHYIF_Msk (0x70000000UL) /*!< ACTPHYIF (Bitfield-Mask: 0x07) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHSS ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PRCMD ========================================================= */ +/* ======================================================== MODCTRL ======================================================== */ + #define R_ETHSS_MODCTRL_SW_MODE_Pos (0UL) /*!< SW_MODE (Bit 0) */ + #define R_ETHSS_MODCTRL_SW_MODE_Msk (0x7UL) /*!< SW_MODE (Bitfield-Mask: 0x07) */ +/* ======================================================= PTPMCTRL ======================================================== */ + #define R_ETHSS_PTPMCTRL_PTP_MODE_Pos (0UL) /*!< PTP_MODE (Bit 0) */ + #define R_ETHSS_PTPMCTRL_PTP_MODE_Msk (0x1UL) /*!< PTP_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSS_PTPMCTRL_PTP_PLS_RSTn_Pos (16UL) /*!< PTP_PLS_RSTn (Bit 16) */ + #define R_ETHSS_PTPMCTRL_PTP_PLS_RSTn_Msk (0x10000UL) /*!< PTP_PLS_RSTn (Bitfield-Mask: 0x01) */ +/* ======================================================== PHYLNK ========================================================= */ + #define R_ETHSS_PHYLNK_SWLINK_Pos (0UL) /*!< SWLINK (Bit 0) */ + #define R_ETHSS_PHYLNK_SWLINK_Msk (0x7UL) /*!< SWLINK (Bitfield-Mask: 0x07) */ + #define R_ETHSS_PHYLNK_CATLNK_Pos (4UL) /*!< CATLNK (Bit 4) */ + #define R_ETHSS_PHYLNK_CATLNK_Msk (0x70UL) /*!< CATLNK (Bitfield-Mask: 0x07) */ +/* ======================================================= CONVCTRL ======================================================== */ + #define R_ETHSS_CONVCTRL_CONV_MODE_Pos (0UL) /*!< CONV_MODE (Bit 0) */ + #define R_ETHSS_CONVCTRL_CONV_MODE_Msk (0x1fUL) /*!< CONV_MODE (Bitfield-Mask: 0x1f) */ + #define R_ETHSS_CONVCTRL_FULLD_Pos (8UL) /*!< FULLD (Bit 8) */ + #define R_ETHSS_CONVCTRL_FULLD_Msk (0x100UL) /*!< FULLD (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CONVCTRL_RMII_RX_ER_EN_Pos (9UL) /*!< RMII_RX_ER_EN (Bit 9) */ + #define R_ETHSS_CONVCTRL_RMII_RX_ER_EN_Msk (0x200UL) /*!< RMII_RX_ER_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CONVCTRL_RMII_CRS_MODE_Pos (10UL) /*!< RMII_CRS_MODE (Bit 10) */ + #define R_ETHSS_CONVCTRL_RMII_CRS_MODE_Msk (0x400UL) /*!< RMII_CRS_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CONVCTRL_RGMII_LINK_Pos (12UL) /*!< RGMII_LINK (Bit 12) */ + #define R_ETHSS_CONVCTRL_RGMII_LINK_Msk (0x1000UL) /*!< RGMII_LINK (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CONVCTRL_RGMII_DUPLEX_Pos (13UL) /*!< RGMII_DUPLEX (Bit 13) */ + #define R_ETHSS_CONVCTRL_RGMII_DUPLEX_Msk (0x2000UL) /*!< RGMII_DUPLEX (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CONVCTRL_RGMII_SPEED_Pos (14UL) /*!< RGMII_SPEED (Bit 14) */ + #define R_ETHSS_CONVCTRL_RGMII_SPEED_Msk (0xc000UL) /*!< RGMII_SPEED (Bitfield-Mask: 0x03) */ +/* ======================================================== CONVRST ======================================================== */ + #define R_ETHSS_CONVRST_PHYIR_Pos (0UL) /*!< PHYIR (Bit 0) */ + #define R_ETHSS_CONVRST_PHYIR_Msk (0x7UL) /*!< PHYIR (Bitfield-Mask: 0x07) */ +/* ======================================================== SWCTRL ========================================================= */ + #define R_ETHSS_SWCTRL_SET10_Pos (0UL) /*!< SET10 (Bit 0) */ + #define R_ETHSS_SWCTRL_SET10_Msk (0x7UL) /*!< SET10 (Bitfield-Mask: 0x07) */ + #define R_ETHSS_SWCTRL_SET1000_Pos (4UL) /*!< SET1000 (Bit 4) */ + #define R_ETHSS_SWCTRL_SET1000_Msk (0x70UL) /*!< SET1000 (Bitfield-Mask: 0x07) */ + #define R_ETHSS_SWCTRL_STRAP_SX_ENB_Pos (16UL) /*!< STRAP_SX_ENB (Bit 16) */ + #define R_ETHSS_SWCTRL_STRAP_SX_ENB_Msk (0x10000UL) /*!< STRAP_SX_ENB (Bitfield-Mask: 0x01) */ + #define R_ETHSS_SWCTRL_STRAP_HUB_ENB_Pos (17UL) /*!< STRAP_HUB_ENB (Bit 17) */ + #define R_ETHSS_SWCTRL_STRAP_HUB_ENB_Msk (0x20000UL) /*!< STRAP_HUB_ENB (Bitfield-Mask: 0x01) */ +/* ======================================================== SWDUPC ========================================================= */ + #define R_ETHSS_SWDUPC_PHY_DUPLEX_Pos (0UL) /*!< PHY_DUPLEX (Bit 0) */ + #define R_ETHSS_SWDUPC_PHY_DUPLEX_Msk (0x7UL) /*!< PHY_DUPLEX (Bitfield-Mask: 0x07) */ +/* ========================================================= CDCR ========================================================== */ + #define R_ETHSS_CDCR_RXDLYEN_Pos (0UL) /*!< RXDLYEN (Bit 0) */ + #define R_ETHSS_CDCR_RXDLYEN_Msk (0x1UL) /*!< RXDLYEN (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CDCR_TXDLYEN_Pos (1UL) /*!< TXDLYEN (Bit 1) */ + #define R_ETHSS_CDCR_TXDLYEN_Msk (0x2UL) /*!< TXDLYEN (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CDCR_OSCCLKEN_Pos (2UL) /*!< OSCCLKEN (Bit 2) */ + #define R_ETHSS_CDCR_OSCCLKEN_Msk (0x4UL) /*!< OSCCLKEN (Bitfield-Mask: 0x01) */ + #define R_ETHSS_CDCR_CLKINEN_Pos (3UL) /*!< CLKINEN (Bit 3) */ + #define R_ETHSS_CDCR_CLKINEN_Msk (0x8UL) /*!< CLKINEN (Bitfield-Mask: 0x01) */ +/* ======================================================== RXFCNT ========================================================= */ + #define R_ETHSS_RXFCNT_RXFCNT_Pos (0UL) /*!< RXFCNT (Bit 0) */ + #define R_ETHSS_RXFCNT_RXFCNT_Msk (0xffffUL) /*!< RXFCNT (Bitfield-Mask: 0xffff) */ +/* ======================================================== TXFCNT ========================================================= */ + #define R_ETHSS_TXFCNT_TXFCNT_Pos (0UL) /*!< TXFCNT (Bit 0) */ + #define R_ETHSS_TXFCNT_TXFCNT_Msk (0xffffUL) /*!< TXFCNT (Bitfield-Mask: 0xffff) */ +/* ======================================================= RXTAPSEL ======================================================== */ + #define R_ETHSS_RXTAPSEL_RXTAPSEL_Pos (0UL) /*!< RXTAPSEL (Bit 0) */ + #define R_ETHSS_RXTAPSEL_RXTAPSEL_Msk (0x7fUL) /*!< RXTAPSEL (Bitfield-Mask: 0x7f) */ +/* ======================================================= TXTAPSEL ======================================================== */ + #define R_ETHSS_TXTAPSEL_TXTAPSEL_Pos (0UL) /*!< TXTAPSEL (Bit 0) */ + #define R_ETHSS_TXTAPSEL_TXTAPSEL_Msk (0x7fUL) /*!< TXTAPSEL (Bitfield-Mask: 0x7f) */ +/* ======================================================== MIIMCR ========================================================= */ + #define R_ETHSS_MIIMCR_MIIM2MEN_Pos (0UL) /*!< MIIM2MEN (Bit 0) */ + #define R_ETHSS_MIIMCR_MIIM2MEN_Msk (0x1UL) /*!< MIIM2MEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_ESC_INI ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== ECATOFFADR ======================================================= */ + #define R_ESC_INI_ECATOFFADR_OADD_Pos (0UL) /*!< OADD (Bit 0) */ + #define R_ESC_INI_ECATOFFADR_OADD_Msk (0x1fUL) /*!< OADD (Bitfield-Mask: 0x1f) */ +/* ======================================================= ECATOPMOD ======================================================= */ + #define R_ESC_INI_ECATOPMOD_EEPROMSIZE_Pos (0UL) /*!< EEPROMSIZE (Bit 0) */ + #define R_ESC_INI_ECATOPMOD_EEPROMSIZE_Msk (0x1UL) /*!< EEPROMSIZE (Bitfield-Mask: 0x01) */ +/* ======================================================= ECATDBGC ======================================================== */ + #define R_ESC_INI_ECATDBGC_TXSFT0_Pos (0UL) /*!< TXSFT0 (Bit 0) */ + #define R_ESC_INI_ECATDBGC_TXSFT0_Msk (0x3UL) /*!< TXSFT0 (Bitfield-Mask: 0x03) */ + #define R_ESC_INI_ECATDBGC_TXSFT1_Pos (2UL) /*!< TXSFT1 (Bit 2) */ + #define R_ESC_INI_ECATDBGC_TXSFT1_Msk (0xcUL) /*!< TXSFT1 (Bitfield-Mask: 0x03) */ + #define R_ESC_INI_ECATDBGC_TXSFT2_Pos (4UL) /*!< TXSFT2 (Bit 4) */ + #define R_ESC_INI_ECATDBGC_TXSFT2_Msk (0x30UL) /*!< TXSFT2 (Bitfield-Mask: 0x03) */ +/* ====================================================== ECATTRGSEL ======================================================= */ + #define R_ESC_INI_ECATTRGSEL_TRGSEL0_Pos (0UL) /*!< TRGSEL0 (Bit 0) */ + #define R_ESC_INI_ECATTRGSEL_TRGSEL0_Msk (0x1UL) /*!< TRGSEL0 (Bitfield-Mask: 0x01) */ + #define R_ESC_INI_ECATTRGSEL_TRGSEL1_Pos (1UL) /*!< TRGSEL1 (Bit 1) */ + #define R_ESC_INI_ECATTRGSEL_TRGSEL1_Msk (0x2UL) /*!< TRGSEL1 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHSW_PTP ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== SWPTPOUTSEL ====================================================== */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL0_Pos (0UL) /*!< IOSEL0 (Bit 0) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL0_Msk (0x1UL) /*!< IOSEL0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL1_Pos (1UL) /*!< IOSEL1 (Bit 1) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL1_Msk (0x2UL) /*!< IOSEL1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL2_Pos (2UL) /*!< IOSEL2 (Bit 2) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL2_Msk (0x4UL) /*!< IOSEL2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL3_Pos (3UL) /*!< IOSEL3 (Bit 3) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_IOSEL3_Msk (0x8UL) /*!< IOSEL3 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL0_Pos (4UL) /*!< EVTSEL0 (Bit 4) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL0_Msk (0x10UL) /*!< EVTSEL0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL1_Pos (5UL) /*!< EVTSEL1 (Bit 5) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL1_Msk (0x20UL) /*!< EVTSEL1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL2_Pos (6UL) /*!< EVTSEL2 (Bit 6) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL2_Msk (0x40UL) /*!< EVTSEL2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL3_Pos (7UL) /*!< EVTSEL3 (Bit 7) */ + #define R_ETHSW_PTP_SWPTPOUTSEL_EVTSEL3_Msk (0x80UL) /*!< EVTSEL3 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_ETHSW ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= REVISION ======================================================== */ + #define R_ETHSW_REVISION_REV_Pos (0UL) /*!< REV (Bit 0) */ + #define R_ETHSW_REVISION_REV_Msk (0xffffffffUL) /*!< REV (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== SCRATCH ======================================================== */ + #define R_ETHSW_SCRATCH_SCRATCH_Pos (0UL) /*!< SCRATCH (Bit 0) */ + #define R_ETHSW_SCRATCH_SCRATCH_Msk (0xffffffffUL) /*!< SCRATCH (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= PORT_ENA ======================================================== */ + #define R_ETHSW_PORT_ENA_TXENA_Pos (0UL) /*!< TXENA (Bit 0) */ + #define R_ETHSW_PORT_ENA_TXENA_Msk (0xfUL) /*!< TXENA (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_PORT_ENA_RXENA_Pos (16UL) /*!< RXENA (Bit 16) */ + #define R_ETHSW_PORT_ENA_RXENA_Msk (0xf0000UL) /*!< RXENA (Bitfield-Mask: 0x0f) */ +/* ================================================== UCAST_DEFAULT_MASK0 ================================================== */ + #define R_ETHSW_UCAST_DEFAULT_MASK0_UCASTDM_Pos (0UL) /*!< UCASTDM (Bit 0) */ + #define R_ETHSW_UCAST_DEFAULT_MASK0_UCASTDM_Msk (0xfUL) /*!< UCASTDM (Bitfield-Mask: 0x0f) */ +/* ====================================================== VLAN_VERIFY ====================================================== */ + #define R_ETHSW_VLAN_VERIFY_VLANVERI_Pos (0UL) /*!< VLANVERI (Bit 0) */ + #define R_ETHSW_VLAN_VERIFY_VLANVERI_Msk (0xfUL) /*!< VLANVERI (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_VLAN_VERIFY_VLANDISC_Pos (16UL) /*!< VLANDISC (Bit 16) */ + #define R_ETHSW_VLAN_VERIFY_VLANDISC_Msk (0xf0000UL) /*!< VLANDISC (Bitfield-Mask: 0x0f) */ +/* ================================================== BCAST_DEFAULT_MASK0 ================================================== */ + #define R_ETHSW_BCAST_DEFAULT_MASK0_BCASTDM_Pos (0UL) /*!< BCASTDM (Bit 0) */ + #define R_ETHSW_BCAST_DEFAULT_MASK0_BCASTDM_Msk (0xfUL) /*!< BCASTDM (Bitfield-Mask: 0x0f) */ +/* ================================================== MCAST_DEFAULT_MASK0 ================================================== */ + #define R_ETHSW_MCAST_DEFAULT_MASK0_MCASTDM_Pos (0UL) /*!< MCASTDM (Bit 0) */ + #define R_ETHSW_MCAST_DEFAULT_MASK0_MCASTDM_Msk (0xfUL) /*!< MCASTDM (Bitfield-Mask: 0x0f) */ +/* =================================================== INPUT_LEARN_BLOCK =================================================== */ + #define R_ETHSW_INPUT_LEARN_BLOCK_BLOCKEN_Pos (0UL) /*!< BLOCKEN (Bit 0) */ + #define R_ETHSW_INPUT_LEARN_BLOCK_BLOCKEN_Msk (0xfUL) /*!< BLOCKEN (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_INPUT_LEARN_BLOCK_LEARNDIS_Pos (16UL) /*!< LEARNDIS (Bit 16) */ + #define R_ETHSW_INPUT_LEARN_BLOCK_LEARNDIS_Msk (0xf0000UL) /*!< LEARNDIS (Bitfield-Mask: 0x0f) */ +/* ====================================================== MGMT_CONFIG ====================================================== */ + #define R_ETHSW_MGMT_CONFIG_PORT_Pos (0UL) /*!< PORT (Bit 0) */ + #define R_ETHSW_MGMT_CONFIG_PORT_Msk (0xfUL) /*!< PORT (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MGMT_CONFIG_MSG_TRANS_Pos (5UL) /*!< MSG_TRANS (Bit 5) */ + #define R_ETHSW_MGMT_CONFIG_MSG_TRANS_Msk (0x20UL) /*!< MSG_TRANS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_CONFIG_ENABLE_Pos (6UL) /*!< ENABLE (Bit 6) */ + #define R_ETHSW_MGMT_CONFIG_ENABLE_Msk (0x40UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_CONFIG_DISCARD_Pos (7UL) /*!< DISCARD (Bit 7) */ + #define R_ETHSW_MGMT_CONFIG_DISCARD_Msk (0x80UL) /*!< DISCARD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_CONFIG_MGMT_EN_Pos (8UL) /*!< MGMT_EN (Bit 8) */ + #define R_ETHSW_MGMT_CONFIG_MGMT_EN_Msk (0x100UL) /*!< MGMT_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_CONFIG_MGMT_DISC_Pos (9UL) /*!< MGMT_DISC (Bit 9) */ + #define R_ETHSW_MGMT_CONFIG_MGMT_DISC_Msk (0x200UL) /*!< MGMT_DISC (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_CONFIG_PRIORITY_Pos (13UL) /*!< PRIORITY (Bit 13) */ + #define R_ETHSW_MGMT_CONFIG_PRIORITY_Msk (0xe000UL) /*!< PRIORITY (Bitfield-Mask: 0x07) */ + #define R_ETHSW_MGMT_CONFIG_PORTMASK_Pos (16UL) /*!< PORTMASK (Bit 16) */ + #define R_ETHSW_MGMT_CONFIG_PORTMASK_Msk (0xf0000UL) /*!< PORTMASK (Bitfield-Mask: 0x0f) */ +/* ====================================================== MODE_CONFIG ====================================================== */ + #define R_ETHSW_MODE_CONFIG_CUT_THRU_EN_Pos (8UL) /*!< CUT_THRU_EN (Bit 8) */ + #define R_ETHSW_MODE_CONFIG_CUT_THRU_EN_Msk (0xf00UL) /*!< CUT_THRU_EN (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MODE_CONFIG_STATSRESET_Pos (31UL) /*!< STATSRESET (Bit 31) */ + #define R_ETHSW_MODE_CONFIG_STATSRESET_Msk (0x80000000UL) /*!< STATSRESET (Bitfield-Mask: 0x01) */ +/* ===================================================== VLAN_IN_MODE ====================================================== */ + #define R_ETHSW_VLAN_IN_MODE_P0VLANINMD_Pos (0UL) /*!< P0VLANINMD (Bit 0) */ + #define R_ETHSW_VLAN_IN_MODE_P0VLANINMD_Msk (0x3UL) /*!< P0VLANINMD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_VLAN_IN_MODE_P1VLANINMD_Pos (2UL) /*!< P1VLANINMD (Bit 2) */ + #define R_ETHSW_VLAN_IN_MODE_P1VLANINMD_Msk (0xcUL) /*!< P1VLANINMD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_VLAN_IN_MODE_P2VLANINMD_Pos (4UL) /*!< P2VLANINMD (Bit 4) */ + #define R_ETHSW_VLAN_IN_MODE_P2VLANINMD_Msk (0x30UL) /*!< P2VLANINMD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_VLAN_IN_MODE_P3VLANINMD_Pos (6UL) /*!< P3VLANINMD (Bit 6) */ + #define R_ETHSW_VLAN_IN_MODE_P3VLANINMD_Msk (0xc0UL) /*!< P3VLANINMD (Bitfield-Mask: 0x03) */ +/* ===================================================== VLAN_OUT_MODE ===================================================== */ + #define R_ETHSW_VLAN_OUT_MODE_P0VLANOUTMD_Pos (0UL) /*!< P0VLANOUTMD (Bit 0) */ + #define R_ETHSW_VLAN_OUT_MODE_P0VLANOUTMD_Msk (0x3UL) /*!< P0VLANOUTMD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_VLAN_OUT_MODE_P1VLANOUTMD_Pos (2UL) /*!< P1VLANOUTMD (Bit 2) */ + #define R_ETHSW_VLAN_OUT_MODE_P1VLANOUTMD_Msk (0xcUL) /*!< P1VLANOUTMD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_VLAN_OUT_MODE_P2VLANOUTMD_Pos (4UL) /*!< P2VLANOUTMD (Bit 4) */ + #define R_ETHSW_VLAN_OUT_MODE_P2VLANOUTMD_Msk (0x30UL) /*!< P2VLANOUTMD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_VLAN_OUT_MODE_P3VLANOUTMD_Pos (6UL) /*!< P3VLANOUTMD (Bit 6) */ + #define R_ETHSW_VLAN_OUT_MODE_P3VLANOUTMD_Msk (0xc0UL) /*!< P3VLANOUTMD (Bitfield-Mask: 0x03) */ +/* =================================================== VLAN_IN_MODE_ENA ==================================================== */ + #define R_ETHSW_VLAN_IN_MODE_ENA_VLANINMDEN_Pos (0UL) /*!< VLANINMDEN (Bit 0) */ + #define R_ETHSW_VLAN_IN_MODE_ENA_VLANINMDEN_Msk (0xfUL) /*!< VLANINMDEN (Bitfield-Mask: 0x0f) */ +/* ====================================================== VLAN_TAG_ID ====================================================== */ + #define R_ETHSW_VLAN_TAG_ID_VLANTAGID_Pos (0UL) /*!< VLANTAGID (Bit 0) */ + #define R_ETHSW_VLAN_TAG_ID_VLANTAGID_Msk (0xffffUL) /*!< VLANTAGID (Bitfield-Mask: 0xffff) */ +/* =================================================== BCAST_STORM_LIMIT =================================================== */ + #define R_ETHSW_BCAST_STORM_LIMIT_TMOUT_Pos (0UL) /*!< TMOUT (Bit 0) */ + #define R_ETHSW_BCAST_STORM_LIMIT_TMOUT_Msk (0xffffUL) /*!< TMOUT (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_BCAST_STORM_LIMIT_BCASTLIMIT_Pos (16UL) /*!< BCASTLIMIT (Bit 16) */ + #define R_ETHSW_BCAST_STORM_LIMIT_BCASTLIMIT_Msk (0xffff0000UL) /*!< BCASTLIMIT (Bitfield-Mask: 0xffff) */ +/* =================================================== MCAST_STORM_LIMIT =================================================== */ + #define R_ETHSW_MCAST_STORM_LIMIT_MCASTLIMIT_Pos (16UL) /*!< MCASTLIMIT (Bit 16) */ + #define R_ETHSW_MCAST_STORM_LIMIT_MCASTLIMIT_Msk (0xffff0000UL) /*!< MCASTLIMIT (Bitfield-Mask: 0xffff) */ +/* ==================================================== MIRROR_CONTROL ===================================================== */ + #define R_ETHSW_MIRROR_CONTROL_PORT_Pos (0UL) /*!< PORT (Bit 0) */ + #define R_ETHSW_MIRROR_CONTROL_PORT_Msk (0x3UL) /*!< PORT (Bitfield-Mask: 0x03) */ + #define R_ETHSW_MIRROR_CONTROL_MIRROR_EN_Pos (4UL) /*!< MIRROR_EN (Bit 4) */ + #define R_ETHSW_MIRROR_CONTROL_MIRROR_EN_Msk (0x10UL) /*!< MIRROR_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MIRROR_CONTROL_ING_MAP_EN_Pos (5UL) /*!< ING_MAP_EN (Bit 5) */ + #define R_ETHSW_MIRROR_CONTROL_ING_MAP_EN_Msk (0x20UL) /*!< ING_MAP_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MIRROR_CONTROL_EG_MAP_EN_Pos (6UL) /*!< EG_MAP_EN (Bit 6) */ + #define R_ETHSW_MIRROR_CONTROL_EG_MAP_EN_Msk (0x40UL) /*!< EG_MAP_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MIRROR_CONTROL_ING_SA_MATCH_Pos (7UL) /*!< ING_SA_MATCH (Bit 7) */ + #define R_ETHSW_MIRROR_CONTROL_ING_SA_MATCH_Msk (0x80UL) /*!< ING_SA_MATCH (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MIRROR_CONTROL_ING_DA_MATCH_Pos (8UL) /*!< ING_DA_MATCH (Bit 8) */ + #define R_ETHSW_MIRROR_CONTROL_ING_DA_MATCH_Msk (0x100UL) /*!< ING_DA_MATCH (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MIRROR_CONTROL_EG_SA_MATCH_Pos (9UL) /*!< EG_SA_MATCH (Bit 9) */ + #define R_ETHSW_MIRROR_CONTROL_EG_SA_MATCH_Msk (0x200UL) /*!< EG_SA_MATCH (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MIRROR_CONTROL_EG_DA_MATCH_Pos (10UL) /*!< EG_DA_MATCH (Bit 10) */ + #define R_ETHSW_MIRROR_CONTROL_EG_DA_MATCH_Msk (0x400UL) /*!< EG_DA_MATCH (Bitfield-Mask: 0x01) */ +/* ===================================================== MIRROR_EG_MAP ===================================================== */ + #define R_ETHSW_MIRROR_EG_MAP_EMAP_Pos (0UL) /*!< EMAP (Bit 0) */ + #define R_ETHSW_MIRROR_EG_MAP_EMAP_Msk (0xfUL) /*!< EMAP (Bitfield-Mask: 0x0f) */ +/* ==================================================== MIRROR_ING_MAP ===================================================== */ + #define R_ETHSW_MIRROR_ING_MAP_IMAP_Pos (0UL) /*!< IMAP (Bit 0) */ + #define R_ETHSW_MIRROR_ING_MAP_IMAP_Msk (0xfUL) /*!< IMAP (Bitfield-Mask: 0x0f) */ +/* ===================================================== MIRROR_ISRC_0 ===================================================== */ + #define R_ETHSW_MIRROR_ISRC_0_ISRC_Pos (0UL) /*!< ISRC (Bit 0) */ + #define R_ETHSW_MIRROR_ISRC_0_ISRC_Msk (0xffffffffUL) /*!< ISRC (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== MIRROR_ISRC_1 ===================================================== */ + #define R_ETHSW_MIRROR_ISRC_1_ISRC_Pos (0UL) /*!< ISRC (Bit 0) */ + #define R_ETHSW_MIRROR_ISRC_1_ISRC_Msk (0xffffUL) /*!< ISRC (Bitfield-Mask: 0xffff) */ +/* ===================================================== MIRROR_IDST_0 ===================================================== */ + #define R_ETHSW_MIRROR_IDST_0_IDST_Pos (0UL) /*!< IDST (Bit 0) */ + #define R_ETHSW_MIRROR_IDST_0_IDST_Msk (0xffffffffUL) /*!< IDST (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== MIRROR_IDST_1 ===================================================== */ + #define R_ETHSW_MIRROR_IDST_1_IDST_Pos (0UL) /*!< IDST (Bit 0) */ + #define R_ETHSW_MIRROR_IDST_1_IDST_Msk (0xffffUL) /*!< IDST (Bitfield-Mask: 0xffff) */ +/* ===================================================== MIRROR_ESRC_0 ===================================================== */ + #define R_ETHSW_MIRROR_ESRC_0_ESRC_Pos (0UL) /*!< ESRC (Bit 0) */ + #define R_ETHSW_MIRROR_ESRC_0_ESRC_Msk (0xffffffffUL) /*!< ESRC (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== MIRROR_ESRC_1 ===================================================== */ + #define R_ETHSW_MIRROR_ESRC_1_ESRC_Pos (0UL) /*!< ESRC (Bit 0) */ + #define R_ETHSW_MIRROR_ESRC_1_ESRC_Msk (0xffffUL) /*!< ESRC (Bitfield-Mask: 0xffff) */ +/* ===================================================== MIRROR_EDST_0 ===================================================== */ + #define R_ETHSW_MIRROR_EDST_0_EDST_Pos (0UL) /*!< EDST (Bit 0) */ + #define R_ETHSW_MIRROR_EDST_0_EDST_Msk (0xffffffffUL) /*!< EDST (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== MIRROR_EDST_1 ===================================================== */ + #define R_ETHSW_MIRROR_EDST_1_EDST_Pos (0UL) /*!< EDST (Bit 0) */ + #define R_ETHSW_MIRROR_EDST_1_EDST_Msk (0xffffUL) /*!< EDST (Bitfield-Mask: 0xffff) */ +/* ====================================================== MIRROR_CNT ======================================================= */ + #define R_ETHSW_MIRROR_CNT_CNT_Pos (0UL) /*!< CNT (Bit 0) */ + #define R_ETHSW_MIRROR_CNT_CNT_Msk (0xffUL) /*!< CNT (Bitfield-Mask: 0xff) */ +/* ================================================== UCAST_DEFAULT_MASK1 ================================================== */ + #define R_ETHSW_UCAST_DEFAULT_MASK1_UCASTDM1_Pos (0UL) /*!< UCASTDM1 (Bit 0) */ + #define R_ETHSW_UCAST_DEFAULT_MASK1_UCASTDM1_Msk (0xfUL) /*!< UCASTDM1 (Bitfield-Mask: 0x0f) */ +/* ================================================== BCAST_DEFAULT_MASK1 ================================================== */ + #define R_ETHSW_BCAST_DEFAULT_MASK1_BCASTDM1_Pos (0UL) /*!< BCASTDM1 (Bit 0) */ + #define R_ETHSW_BCAST_DEFAULT_MASK1_BCASTDM1_Msk (0xfUL) /*!< BCASTDM1 (Bitfield-Mask: 0x0f) */ +/* ================================================== MCAST_DEFAULT_MASK1 ================================================== */ + #define R_ETHSW_MCAST_DEFAULT_MASK1_MCASTDM1_Pos (0UL) /*!< MCASTDM1 (Bit 0) */ + #define R_ETHSW_MCAST_DEFAULT_MASK1_MCASTDM1_Msk (0xfUL) /*!< MCASTDM1 (Bitfield-Mask: 0x0f) */ +/* ================================================== PORT_XCAST_MASK_SEL ================================================== */ + #define R_ETHSW_PORT_XCAST_MASK_SEL_MSEL_Pos (0UL) /*!< MSEL (Bit 0) */ + #define R_ETHSW_PORT_XCAST_MASK_SEL_MSEL_Msk (0xfUL) /*!< MSEL (Bitfield-Mask: 0x0f) */ +/* =================================================== QMGR_ST_MINCELLS ==================================================== */ + #define R_ETHSW_QMGR_ST_MINCELLS_STMINCELLS_Pos (0UL) /*!< STMINCELLS (Bit 0) */ + #define R_ETHSW_QMGR_ST_MINCELLS_STMINCELLS_Msk (0x7ffUL) /*!< STMINCELLS (Bitfield-Mask: 0x7ff) */ +/* ===================================================== QMGR_RED_MIN4 ===================================================== */ + #define R_ETHSW_QMGR_RED_MIN4_CFGRED_MINTH4_Pos (0UL) /*!< CFGRED_MINTH4 (Bit 0) */ + #define R_ETHSW_QMGR_RED_MIN4_CFGRED_MINTH4_Msk (0xffffffffUL) /*!< CFGRED_MINTH4 (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== QMGR_RED_MAX4 ===================================================== */ + #define R_ETHSW_QMGR_RED_MAX4_CFGRED_MAXTH4_Pos (0UL) /*!< CFGRED_MAXTH4 (Bit 0) */ + #define R_ETHSW_QMGR_RED_MAX4_CFGRED_MAXTH4_Msk (0xffffffffUL) /*!< CFGRED_MAXTH4 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== QMGR_RED_CONFIG ==================================================== */ + #define R_ETHSW_QMGR_RED_CONFIG_QUEUE_RED_EN_Pos (0UL) /*!< QUEUE_RED_EN (Bit 0) */ + #define R_ETHSW_QMGR_RED_CONFIG_QUEUE_RED_EN_Msk (0xfUL) /*!< QUEUE_RED_EN (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_QMGR_RED_CONFIG_GACTIVITY_EN_Pos (8UL) /*!< GACTIVITY_EN (Bit 8) */ + #define R_ETHSW_QMGR_RED_CONFIG_GACTIVITY_EN_Msk (0x100UL) /*!< GACTIVITY_EN (Bitfield-Mask: 0x01) */ +/* ====================================================== IMC_STATUS ======================================================= */ + #define R_ETHSW_IMC_STATUS_CELLS_AVAILABLE_Pos (0UL) /*!< CELLS_AVAILABLE (Bit 0) */ + #define R_ETHSW_IMC_STATUS_CELLS_AVAILABLE_Msk (0xffffffUL) /*!< CELLS_AVAILABLE (Bitfield-Mask: 0xffffff) */ + #define R_ETHSW_IMC_STATUS_CF_ERR_Pos (24UL) /*!< CF_ERR (Bit 24) */ + #define R_ETHSW_IMC_STATUS_CF_ERR_Msk (0x1000000UL) /*!< CF_ERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IMC_STATUS_DE_ERR_Pos (25UL) /*!< DE_ERR (Bit 25) */ + #define R_ETHSW_IMC_STATUS_DE_ERR_Msk (0x2000000UL) /*!< DE_ERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IMC_STATUS_DE_INIT_Pos (26UL) /*!< DE_INIT (Bit 26) */ + #define R_ETHSW_IMC_STATUS_DE_INIT_Msk (0x4000000UL) /*!< DE_INIT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IMC_STATUS_MEM_FULL_Pos (27UL) /*!< MEM_FULL (Bit 27) */ + #define R_ETHSW_IMC_STATUS_MEM_FULL_Msk (0x8000000UL) /*!< MEM_FULL (Bitfield-Mask: 0x01) */ +/* ===================================================== IMC_ERR_FULL ====================================================== */ + #define R_ETHSW_IMC_ERR_FULL_IPC_ERR_FULL_Pos (0UL) /*!< IPC_ERR_FULL (Bit 0) */ + #define R_ETHSW_IMC_ERR_FULL_IPC_ERR_FULL_Msk (0xfUL) /*!< IPC_ERR_FULL (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_ERR_FULL_IPC_ERR_TRUNC_Pos (16UL) /*!< IPC_ERR_TRUNC (Bit 16) */ + #define R_ETHSW_IMC_ERR_FULL_IPC_ERR_TRUNC_Msk (0xf0000UL) /*!< IPC_ERR_TRUNC (Bitfield-Mask: 0x0f) */ +/* ===================================================== IMC_ERR_IFACE ===================================================== */ + #define R_ETHSW_IMC_ERR_IFACE_IPC_ERR_IFACE_Pos (0UL) /*!< IPC_ERR_IFACE (Bit 0) */ + #define R_ETHSW_IMC_ERR_IFACE_IPC_ERR_IFACE_Msk (0xfUL) /*!< IPC_ERR_IFACE (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_ERR_IFACE_WBUF_OVF_Pos (16UL) /*!< WBUF_OVF (Bit 16) */ + #define R_ETHSW_IMC_ERR_IFACE_WBUF_OVF_Msk (0xf0000UL) /*!< WBUF_OVF (Bitfield-Mask: 0x0f) */ +/* ==================================================== IMC_ERR_QOFLOW ===================================================== */ + #define R_ETHSW_IMC_ERR_QOFLOW_OP_ERR_Pos (0UL) /*!< OP_ERR (Bit 0) */ + #define R_ETHSW_IMC_ERR_QOFLOW_OP_ERR_Msk (0xfUL) /*!< OP_ERR (Bitfield-Mask: 0x0f) */ +/* ====================================================== IMC_CONFIG ======================================================= */ + #define R_ETHSW_IMC_CONFIG_WFQ_EN_Pos (0UL) /*!< WFQ_EN (Bit 0) */ + #define R_ETHSW_IMC_CONFIG_WFQ_EN_Msk (0x1UL) /*!< WFQ_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IMC_CONFIG_RSV_ENA_Pos (1UL) /*!< RSV_ENA (Bit 1) */ + #define R_ETHSW_IMC_CONFIG_RSV_ENA_Msk (0x2UL) /*!< RSV_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IMC_CONFIG_SPEED_HIPRI_THR_Pos (2UL) /*!< SPEED_HIPRI_THR (Bit 2) */ + #define R_ETHSW_IMC_CONFIG_SPEED_HIPRI_THR_Msk (0x1cUL) /*!< SPEED_HIPRI_THR (Bitfield-Mask: 0x07) */ + #define R_ETHSW_IMC_CONFIG_CTFL_EMPTY_MD_Pos (5UL) /*!< CTFL_EMPTY_MD (Bit 5) */ + #define R_ETHSW_IMC_CONFIG_CTFL_EMPTY_MD_Msk (0x20UL) /*!< CTFL_EMPTY_MD (Bitfield-Mask: 0x01) */ +/* ===================================================== IMC_ERR_ALLOC ===================================================== */ + #define R_ETHSW_IMC_ERR_ALLOC_DISC_FULL_Pos (0UL) /*!< DISC_FULL (Bit 0) */ + #define R_ETHSW_IMC_ERR_ALLOC_DISC_FULL_Msk (0xfUL) /*!< DISC_FULL (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_ERR_ALLOC_DISC_LATE_Pos (16UL) /*!< DISC_LATE (Bit 16) */ + #define R_ETHSW_IMC_ERR_ALLOC_DISC_LATE_Msk (0xf0000UL) /*!< DISC_LATE (Bitfield-Mask: 0x0f) */ +/* ======================================================= GPARSER0 ======================================================== */ + #define R_ETHSW_GPARSER0_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER0_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER0_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER0_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER0_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER0_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER0_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER0_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER0_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER0_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER0_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER0_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER0_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER0_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER0_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER0_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER0_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER0_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER0_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER0_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER0_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER0_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================= GPARSER1 ======================================================== */ + #define R_ETHSW_GPARSER1_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER1_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER1_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER1_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER1_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER1_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER1_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER1_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER1_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER1_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER1_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER1_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER1_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER1_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER1_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER1_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER1_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER1_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER1_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER1_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER1_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER1_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================= GPARSER2 ======================================================== */ + #define R_ETHSW_GPARSER2_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER2_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER2_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER2_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER2_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER2_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER2_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER2_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER2_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER2_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER2_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER2_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER2_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER2_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER2_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER2_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER2_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER2_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER2_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER2_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER2_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER2_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================= GPARSER3 ======================================================== */ + #define R_ETHSW_GPARSER3_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER3_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER3_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER3_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER3_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER3_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER3_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER3_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER3_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER3_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER3_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER3_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER3_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER3_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER3_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER3_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER3_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER3_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER3_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER3_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER3_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER3_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================== GARITH0 ======================================================== */ + #define R_ETHSW_GARITH0_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH0_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH0_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH0_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH0_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH0_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH0_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH0_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH0_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH0_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH0_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH0_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH0_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH0_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH0_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH0_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ======================================================== GARITH1 ======================================================== */ + #define R_ETHSW_GARITH1_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH1_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH1_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH1_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH1_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH1_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH1_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH1_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH1_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH1_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH1_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH1_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH1_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH1_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH1_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH1_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ======================================================== GARITH2 ======================================================== */ + #define R_ETHSW_GARITH2_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH2_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH2_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH2_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH2_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH2_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH2_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH2_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH2_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH2_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH2_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH2_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH2_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH2_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH2_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH2_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ======================================================== GARITH3 ======================================================== */ + #define R_ETHSW_GARITH3_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH3_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH3_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH3_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH3_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH3_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH3_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH3_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH3_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH3_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH3_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH3_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH3_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH3_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH3_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH3_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ======================================================= GPARSER4 ======================================================== */ + #define R_ETHSW_GPARSER4_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER4_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER4_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER4_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER4_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER4_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER4_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER4_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER4_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER4_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER4_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER4_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER4_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER4_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER4_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER4_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER4_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER4_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER4_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER4_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER4_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER4_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================= GPARSER5 ======================================================== */ + #define R_ETHSW_GPARSER5_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER5_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER5_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER5_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER5_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER5_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER5_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER5_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER5_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER5_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER5_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER5_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER5_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER5_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER5_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER5_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER5_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER5_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER5_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER5_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER5_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER5_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================= GPARSER6 ======================================================== */ + #define R_ETHSW_GPARSER6_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER6_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER6_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER6_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER6_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER6_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER6_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER6_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER6_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER6_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER6_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER6_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER6_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER6_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER6_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER6_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER6_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER6_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER6_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER6_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER6_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER6_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================= GPARSER7 ======================================================== */ + #define R_ETHSW_GPARSER7_MASK_VAL2_Pos (0UL) /*!< MASK_VAL2 (Bit 0) */ + #define R_ETHSW_GPARSER7_MASK_VAL2_Msk (0xffUL) /*!< MASK_VAL2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER7_COMPARE_VAL_Pos (8UL) /*!< COMPARE_VAL (Bit 8) */ + #define R_ETHSW_GPARSER7_COMPARE_VAL_Msk (0xff00UL) /*!< COMPARE_VAL (Bitfield-Mask: 0xff) */ + #define R_ETHSW_GPARSER7_OFFSET_Pos (16UL) /*!< OFFSET (Bit 16) */ + #define R_ETHSW_GPARSER7_OFFSET_Msk (0x3f0000UL) /*!< OFFSET (Bitfield-Mask: 0x3f) */ + #define R_ETHSW_GPARSER7_OFFSET_DA_Pos (23UL) /*!< OFFSET_DA (Bit 23) */ + #define R_ETHSW_GPARSER7_OFFSET_DA_Msk (0x800000UL) /*!< OFFSET_DA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER7_VALID_Pos (24UL) /*!< VALID (Bit 24) */ + #define R_ETHSW_GPARSER7_VALID_Msk (0x1000000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER7_SKIPVLAN_Pos (25UL) /*!< SKIPVLAN (Bit 25) */ + #define R_ETHSW_GPARSER7_SKIPVLAN_Msk (0x2000000UL) /*!< SKIPVLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER7_IPDATA_Pos (26UL) /*!< IPDATA (Bit 26) */ + #define R_ETHSW_GPARSER7_IPDATA_Msk (0x4000000UL) /*!< IPDATA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER7_IPPROTOCOL_Pos (27UL) /*!< IPPROTOCOL (Bit 27) */ + #define R_ETHSW_GPARSER7_IPPROTOCOL_Msk (0x8000000UL) /*!< IPPROTOCOL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER7_CMP16_Pos (28UL) /*!< CMP16 (Bit 28) */ + #define R_ETHSW_GPARSER7_CMP16_Msk (0x10000000UL) /*!< CMP16 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER7_OFFSET_PLUS2_Pos (29UL) /*!< OFFSET_PLUS2 (Bit 29) */ + #define R_ETHSW_GPARSER7_OFFSET_PLUS2_Msk (0x20000000UL) /*!< OFFSET_PLUS2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GPARSER7_CMP_MASK_OR_Pos (30UL) /*!< CMP_MASK_OR (Bit 30) */ + #define R_ETHSW_GPARSER7_CMP_MASK_OR_Msk (0x40000000UL) /*!< CMP_MASK_OR (Bitfield-Mask: 0x01) */ +/* ======================================================== GARITH4 ======================================================== */ + #define R_ETHSW_GARITH4_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH4_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH4_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH4_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH4_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH4_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH4_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH4_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH4_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH4_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH4_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH4_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH4_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH4_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH4_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH4_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ======================================================== GARITH5 ======================================================== */ + #define R_ETHSW_GARITH5_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH5_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH5_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH5_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH5_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH5_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH5_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH5_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH5_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH5_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH5_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH5_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH5_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH5_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH5_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH5_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ======================================================== GARITH6 ======================================================== */ + #define R_ETHSW_GARITH6_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH6_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH6_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH6_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH6_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH6_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH6_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH6_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH6_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH6_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH6_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH6_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH6_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH6_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH6_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH6_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ======================================================== GARITH7 ======================================================== */ + #define R_ETHSW_GARITH7_NOT_INP_Pos (0UL) /*!< NOT_INP (Bit 0) */ + #define R_ETHSW_GARITH7_NOT_INP_Msk (0xfUL) /*!< NOT_INP (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH7_SEL_MATCH_Pos (8UL) /*!< SEL_MATCH (Bit 8) */ + #define R_ETHSW_GARITH7_SEL_MATCH_Msk (0xf00UL) /*!< SEL_MATCH (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_GARITH7_SEL_ARITH0_Pos (12UL) /*!< SEL_ARITH0 (Bit 12) */ + #define R_ETHSW_GARITH7_SEL_ARITH0_Msk (0x1000UL) /*!< SEL_ARITH0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH7_SEL_ARITH1_Pos (13UL) /*!< SEL_ARITH1 (Bit 13) */ + #define R_ETHSW_GARITH7_SEL_ARITH1_Msk (0x2000UL) /*!< SEL_ARITH1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH7_SEL_ARITH2_Pos (14UL) /*!< SEL_ARITH2 (Bit 14) */ + #define R_ETHSW_GARITH7_SEL_ARITH2_Msk (0x4000UL) /*!< SEL_ARITH2 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH7_OP_Pos (16UL) /*!< OP (Bit 16) */ + #define R_ETHSW_GARITH7_OP_Msk (0x10000UL) /*!< OP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH7_RESULT_INV_Pos (17UL) /*!< RESULT_INV (Bit 17) */ + #define R_ETHSW_GARITH7_RESULT_INV_Msk (0x20000UL) /*!< RESULT_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_GARITH7_SNP_MD_Pos (20UL) /*!< SNP_MD (Bit 20) */ + #define R_ETHSW_GARITH7_SNP_MD_Msk (0x300000UL) /*!< SNP_MD (Bitfield-Mask: 0x03) */ +/* ===================================================== VLAN_PRIORITY ===================================================== */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY0_Pos (0UL) /*!< PRIORITY0 (Bit 0) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY0_Msk (0x7UL) /*!< PRIORITY0 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY1_Pos (3UL) /*!< PRIORITY1 (Bit 3) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY1_Msk (0x38UL) /*!< PRIORITY1 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY2_Pos (6UL) /*!< PRIORITY2 (Bit 6) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY2_Msk (0x1c0UL) /*!< PRIORITY2 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY3_Pos (9UL) /*!< PRIORITY3 (Bit 9) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY3_Msk (0xe00UL) /*!< PRIORITY3 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY4_Pos (12UL) /*!< PRIORITY4 (Bit 12) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY4_Msk (0x7000UL) /*!< PRIORITY4 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY5_Pos (15UL) /*!< PRIORITY5 (Bit 15) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY5_Msk (0x38000UL) /*!< PRIORITY5 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY6_Pos (18UL) /*!< PRIORITY6 (Bit 18) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY6_Msk (0x1c0000UL) /*!< PRIORITY6 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY7_Pos (21UL) /*!< PRIORITY7 (Bit 21) */ + #define R_ETHSW_VLAN_PRIORITY_PRIORITY7_Msk (0xe00000UL) /*!< PRIORITY7 (Bitfield-Mask: 0x07) */ +/* ====================================================== IP_PRIORITY ====================================================== */ + #define R_ETHSW_IP_PRIORITY_ADDRESS_Pos (0UL) /*!< ADDRESS (Bit 0) */ + #define R_ETHSW_IP_PRIORITY_ADDRESS_Msk (0xffUL) /*!< ADDRESS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_IP_PRIORITY_IPV6SELECT_Pos (8UL) /*!< IPV6SELECT (Bit 8) */ + #define R_ETHSW_IP_PRIORITY_IPV6SELECT_Msk (0x100UL) /*!< IPV6SELECT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IP_PRIORITY_PRIORITY_Pos (9UL) /*!< PRIORITY (Bit 9) */ + #define R_ETHSW_IP_PRIORITY_PRIORITY_Msk (0xe00UL) /*!< PRIORITY (Bitfield-Mask: 0x07) */ + #define R_ETHSW_IP_PRIORITY_READ_Pos (31UL) /*!< READ (Bit 31) */ + #define R_ETHSW_IP_PRIORITY_READ_Msk (0x80000000UL) /*!< READ (Bitfield-Mask: 0x01) */ +/* ===================================================== PRIORITY_CFG ====================================================== */ + #define R_ETHSW_PRIORITY_CFG_VLANEN_Pos (0UL) /*!< VLANEN (Bit 0) */ + #define R_ETHSW_PRIORITY_CFG_VLANEN_Msk (0x1UL) /*!< VLANEN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRIORITY_CFG_IPEN_Pos (1UL) /*!< IPEN (Bit 1) */ + #define R_ETHSW_PRIORITY_CFG_IPEN_Msk (0x2UL) /*!< IPEN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRIORITY_CFG_MACEN_Pos (2UL) /*!< MACEN (Bit 2) */ + #define R_ETHSW_PRIORITY_CFG_MACEN_Msk (0x4UL) /*!< MACEN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRIORITY_CFG_TYPE_EN_Pos (3UL) /*!< TYPE_EN (Bit 3) */ + #define R_ETHSW_PRIORITY_CFG_TYPE_EN_Msk (0x8UL) /*!< TYPE_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRIORITY_CFG_DEFAULTPRI_Pos (4UL) /*!< DEFAULTPRI (Bit 4) */ + #define R_ETHSW_PRIORITY_CFG_DEFAULTPRI_Msk (0x70UL) /*!< DEFAULTPRI (Bitfield-Mask: 0x07) */ + #define R_ETHSW_PRIORITY_CFG_PCP_REMAP_DIS_Pos (7UL) /*!< PCP_REMAP_DIS (Bit 7) */ + #define R_ETHSW_PRIORITY_CFG_PCP_REMAP_DIS_Msk (0x80UL) /*!< PCP_REMAP_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRIORITY_CFG_PCP_REMAP_Pos (8UL) /*!< PCP_REMAP (Bit 8) */ + #define R_ETHSW_PRIORITY_CFG_PCP_REMAP_Msk (0xffffff00UL) /*!< PCP_REMAP (Bitfield-Mask: 0xffffff) */ +/* ==================================================== PRIORITY_TYPE1 ===================================================== */ + #define R_ETHSW_PRIORITY_TYPE1_TYPEVAL_Pos (0UL) /*!< TYPEVAL (Bit 0) */ + #define R_ETHSW_PRIORITY_TYPE1_TYPEVAL_Msk (0xffffUL) /*!< TYPEVAL (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_PRIORITY_TYPE1_VALID_Pos (16UL) /*!< VALID (Bit 16) */ + #define R_ETHSW_PRIORITY_TYPE1_VALID_Msk (0x10000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRIORITY_TYPE1_PRIORITY_Pos (17UL) /*!< PRIORITY (Bit 17) */ + #define R_ETHSW_PRIORITY_TYPE1_PRIORITY_Msk (0xe0000UL) /*!< PRIORITY (Bitfield-Mask: 0x07) */ +/* ==================================================== PRIORITY_TYPE2 ===================================================== */ + #define R_ETHSW_PRIORITY_TYPE2_TYPEVAL_Pos (0UL) /*!< TYPEVAL (Bit 0) */ + #define R_ETHSW_PRIORITY_TYPE2_TYPEVAL_Msk (0xffffUL) /*!< TYPEVAL (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_PRIORITY_TYPE2_VALID_Pos (16UL) /*!< VALID (Bit 16) */ + #define R_ETHSW_PRIORITY_TYPE2_VALID_Msk (0x10000UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRIORITY_TYPE2_PRIORITY_Pos (17UL) /*!< PRIORITY (Bit 17) */ + #define R_ETHSW_PRIORITY_TYPE2_PRIORITY_Msk (0xe0000UL) /*!< PRIORITY (Bitfield-Mask: 0x07) */ +/* ====================================================== SRCFLT_ENA ======================================================= */ + #define R_ETHSW_SRCFLT_ENA_SRCENA_Pos (0UL) /*!< SRCENA (Bit 0) */ + #define R_ETHSW_SRCFLT_ENA_SRCENA_Msk (0x7UL) /*!< SRCENA (Bitfield-Mask: 0x07) */ + #define R_ETHSW_SRCFLT_ENA_DSTENA_Pos (16UL) /*!< DSTENA (Bit 16) */ + #define R_ETHSW_SRCFLT_ENA_DSTENA_Msk (0xf0000UL) /*!< DSTENA (Bitfield-Mask: 0x0f) */ +/* ==================================================== SRCFLT_CONTROL ===================================================== */ + #define R_ETHSW_SRCFLT_CONTROL_MGMT_FWD_Pos (0UL) /*!< MGMT_FWD (Bit 0) */ + #define R_ETHSW_SRCFLT_CONTROL_MGMT_FWD_Msk (0x1UL) /*!< MGMT_FWD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_SRCFLT_CONTROL_WATCHDOG_ENA_Pos (1UL) /*!< WATCHDOG_ENA (Bit 1) */ + #define R_ETHSW_SRCFLT_CONTROL_WATCHDOG_ENA_Msk (0x2UL) /*!< WATCHDOG_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_SRCFLT_CONTROL_WATCHDOG_TIME_Pos (16UL) /*!< WATCHDOG_TIME (Bit 16) */ + #define R_ETHSW_SRCFLT_CONTROL_WATCHDOG_TIME_Msk (0xffff0000UL) /*!< WATCHDOG_TIME (Bitfield-Mask: 0xffff) */ +/* =================================================== SRCFLT_MACADDR_LO =================================================== */ + #define R_ETHSW_SRCFLT_MACADDR_LO_SRCFLT_MACADDR_Pos (0UL) /*!< SRCFLT_MACADDR (Bit 0) */ + #define R_ETHSW_SRCFLT_MACADDR_LO_SRCFLT_MACADDR_Msk (0xffffffffUL) /*!< SRCFLT_MACADDR (Bitfield-Mask: 0xffffffff) */ +/* =================================================== SRCFLT_MACADDR_HI =================================================== */ + #define R_ETHSW_SRCFLT_MACADDR_HI_SRCFLT_MACADDR_Pos (0UL) /*!< SRCFLT_MACADDR (Bit 0) */ + #define R_ETHSW_SRCFLT_MACADDR_HI_SRCFLT_MACADDR_Msk (0xffffUL) /*!< SRCFLT_MACADDR (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_SRCFLT_MACADDR_HI_MASK_Pos (16UL) /*!< MASK (Bit 16) */ + #define R_ETHSW_SRCFLT_MACADDR_HI_MASK_Msk (0xffff0000UL) /*!< MASK (Bitfield-Mask: 0xffff) */ +/* ==================================================== PHY_FILTER_CFG ===================================================== */ + #define R_ETHSW_PHY_FILTER_CFG_FILTER_DURATION_Pos (0UL) /*!< FILTER_DURATION (Bit 0) */ + #define R_ETHSW_PHY_FILTER_CFG_FILTER_DURATION_Msk (0x1ffUL) /*!< FILTER_DURATION (Bitfield-Mask: 0x1ff) */ + #define R_ETHSW_PHY_FILTER_CFG_FLT_EN_Pos (16UL) /*!< FLT_EN (Bit 16) */ + #define R_ETHSW_PHY_FILTER_CFG_FLT_EN_Msk (0x70000UL) /*!< FLT_EN (Bitfield-Mask: 0x07) */ +/* ==================================================== SYSTEM_TAGINFO ===================================================== */ + #define R_ETHSW_SYSTEM_TAGINFO_SYSVLANINFO_Pos (0UL) /*!< SYSVLANINFO (Bit 0) */ + #define R_ETHSW_SYSTEM_TAGINFO_SYSVLANINFO_Msk (0xffffUL) /*!< SYSVLANINFO (Bitfield-Mask: 0xffff) */ +/* ======================================================= AUTH_PORT ======================================================= */ + #define R_ETHSW_AUTH_PORT_AUTH_Pos (0UL) /*!< AUTH (Bit 0) */ + #define R_ETHSW_AUTH_PORT_AUTH_Msk (0x1UL) /*!< AUTH (Bitfield-Mask: 0x01) */ + #define R_ETHSW_AUTH_PORT_CTRL_BOTH_Pos (1UL) /*!< CTRL_BOTH (Bit 1) */ + #define R_ETHSW_AUTH_PORT_CTRL_BOTH_Msk (0x2UL) /*!< CTRL_BOTH (Bitfield-Mask: 0x01) */ + #define R_ETHSW_AUTH_PORT_EAPOL_EN_Pos (2UL) /*!< EAPOL_EN (Bit 2) */ + #define R_ETHSW_AUTH_PORT_EAPOL_EN_Msk (0x4UL) /*!< EAPOL_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_AUTH_PORT_GUEST_EN_Pos (3UL) /*!< GUEST_EN (Bit 3) */ + #define R_ETHSW_AUTH_PORT_GUEST_EN_Msk (0x8UL) /*!< GUEST_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_AUTH_PORT_BPDU_EN_Pos (4UL) /*!< BPDU_EN (Bit 4) */ + #define R_ETHSW_AUTH_PORT_BPDU_EN_Msk (0x10UL) /*!< BPDU_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_AUTH_PORT_EAPOL_UC_EN_Pos (5UL) /*!< EAPOL_UC_EN (Bit 5) */ + #define R_ETHSW_AUTH_PORT_EAPOL_UC_EN_Msk (0x20UL) /*!< EAPOL_UC_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_AUTH_PORT_ACHG_UNAUTH_Pos (11UL) /*!< ACHG_UNAUTH (Bit 11) */ + #define R_ETHSW_AUTH_PORT_ACHG_UNAUTH_Msk (0x800UL) /*!< ACHG_UNAUTH (Bitfield-Mask: 0x01) */ + #define R_ETHSW_AUTH_PORT_EAPOL_PNUM_Pos (12UL) /*!< EAPOL_PNUM (Bit 12) */ + #define R_ETHSW_AUTH_PORT_EAPOL_PNUM_Msk (0xf000UL) /*!< EAPOL_PNUM (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_AUTH_PORT_GUEST_MASK_Pos (16UL) /*!< GUEST_MASK (Bit 16) */ + #define R_ETHSW_AUTH_PORT_GUEST_MASK_Msk (0xf0000UL) /*!< GUEST_MASK (Bitfield-Mask: 0x0f) */ +/* ==================================================== VLAN_RES_TABLE ===================================================== */ + #define R_ETHSW_VLAN_RES_TABLE_PORTMASK_Pos (0UL) /*!< PORTMASK (Bit 0) */ + #define R_ETHSW_VLAN_RES_TABLE_PORTMASK_Msk (0xfUL) /*!< PORTMASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_VLAN_RES_TABLE_VLANID_Pos (4UL) /*!< VLANID (Bit 4) */ + #define R_ETHSW_VLAN_RES_TABLE_VLANID_Msk (0xfff0UL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_VLAN_RES_TABLE_RD_TAGMSK_Pos (28UL) /*!< RD_TAGMSK (Bit 28) */ + #define R_ETHSW_VLAN_RES_TABLE_RD_TAGMSK_Msk (0x10000000UL) /*!< RD_TAGMSK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_VLAN_RES_TABLE_WT_TAGMSK_Pos (29UL) /*!< WT_TAGMSK (Bit 29) */ + #define R_ETHSW_VLAN_RES_TABLE_WT_TAGMSK_Msk (0x20000000UL) /*!< WT_TAGMSK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_VLAN_RES_TABLE_WT_PRTMSK_Pos (30UL) /*!< WT_PRTMSK (Bit 30) */ + #define R_ETHSW_VLAN_RES_TABLE_WT_PRTMSK_Msk (0x40000000UL) /*!< WT_PRTMSK (Bitfield-Mask: 0x01) */ +/* ====================================================== TOTAL_DISC ======================================================= */ + #define R_ETHSW_TOTAL_DISC_TOTAL_DISC_Pos (0UL) /*!< TOTAL_DISC (Bit 0) */ + #define R_ETHSW_TOTAL_DISC_TOTAL_DISC_Msk (0xffffffffUL) /*!< TOTAL_DISC (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== TOTAL_BYT_DISC ===================================================== */ + #define R_ETHSW_TOTAL_BYT_DISC_TOTAL_BYT_DISC_Pos (0UL) /*!< TOTAL_BYT_DISC (Bit 0) */ + #define R_ETHSW_TOTAL_BYT_DISC_TOTAL_BYT_DISC_Msk (0xffffffffUL) /*!< TOTAL_BYT_DISC (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= TOTAL_FRM ======================================================= */ + #define R_ETHSW_TOTAL_FRM_TOTAL_FRM_Pos (0UL) /*!< TOTAL_FRM (Bit 0) */ + #define R_ETHSW_TOTAL_FRM_TOTAL_FRM_Msk (0xffffffffUL) /*!< TOTAL_FRM (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== TOTAL_BYT_FRM ===================================================== */ + #define R_ETHSW_TOTAL_BYT_FRM_TOTAL_BYT_FRM_Pos (0UL) /*!< TOTAL_BYT_FRM (Bit 0) */ + #define R_ETHSW_TOTAL_BYT_FRM_TOTAL_BYT_FRM_Msk (0xffffffffUL) /*!< TOTAL_BYT_FRM (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IALK_CONTROL ====================================================== */ + #define R_ETHSW_IALK_CONTROL_IA_LKUP_ENA_Pos (0UL) /*!< IA_LKUP_ENA (Bit 0) */ + #define R_ETHSW_IALK_CONTROL_IA_LKUP_ENA_Msk (0xfUL) /*!< IA_LKUP_ENA (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IALK_CONTROL_CT_ENA_Pos (16UL) /*!< CT_ENA (Bit 16) */ + #define R_ETHSW_IALK_CONTROL_CT_ENA_Msk (0xf0000UL) /*!< CT_ENA (Bitfield-Mask: 0x0f) */ +/* ======================================================= IALK_OUI ======================================================== */ + #define R_ETHSW_IALK_OUI_IALK_OUI_Pos (0UL) /*!< IALK_OUI (Bit 0) */ + #define R_ETHSW_IALK_OUI_IALK_OUI_Msk (0xffffffUL) /*!< IALK_OUI (Bitfield-Mask: 0xffffff) */ +/* ====================================================== IALK_ID_MIN ====================================================== */ + #define R_ETHSW_IALK_ID_MIN_IALK_ID_MIN_Pos (0UL) /*!< IALK_ID_MIN (Bit 0) */ + #define R_ETHSW_IALK_ID_MIN_IALK_ID_MIN_Msk (0xffffffUL) /*!< IALK_ID_MIN (Bitfield-Mask: 0xffffff) */ +/* ====================================================== IALK_ID_MAX ====================================================== */ + #define R_ETHSW_IALK_ID_MAX_IALK_ID_MAX_Pos (0UL) /*!< IALK_ID_MAX (Bit 0) */ + #define R_ETHSW_IALK_ID_MAX_IALK_ID_MAX_Msk (0xffffffUL) /*!< IALK_ID_MAX (Bitfield-Mask: 0xffffff) */ +/* ====================================================== IALK_ID_SUB ====================================================== */ + #define R_ETHSW_IALK_ID_SUB_IALK_ID_SUB_Pos (0UL) /*!< IALK_ID_SUB (Bit 0) */ + #define R_ETHSW_IALK_ID_SUB_IALK_ID_SUB_Msk (0xffffffUL) /*!< IALK_ID_SUB (Bitfield-Mask: 0xffffff) */ +/* ==================================================== IALK_ID_CONFIG ===================================================== */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_FLOOD_Pos (0UL) /*!< INVLD_ID_FLOOD (Bit 0) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_FLOOD_Msk (0x1UL) /*!< INVLD_ID_FLOOD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_LRN_ENA_Pos (1UL) /*!< INVLD_ID_LRN_ENA (Bit 1) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_LRN_ENA_Msk (0x2UL) /*!< INVLD_ID_LRN_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_PRIO_Pos (4UL) /*!< INVLD_ID_PRIO (Bit 4) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_PRIO_Msk (0x70UL) /*!< INVLD_ID_PRIO (Bitfield-Mask: 0x07) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_PRIO_VLD_Pos (7UL) /*!< INVLD_ID_PRIO_VLD (Bit 7) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_PRIO_VLD_Msk (0x80UL) /*!< INVLD_ID_PRIO_VLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_FLOOD_MASK_Pos (16UL) /*!< INVLD_ID_FLOOD_MASK (Bit 16) */ + #define R_ETHSW_IALK_ID_CONFIG_INVLD_ID_FLOOD_MASK_Msk (0xf0000UL) /*!< INVLD_ID_FLOOD_MASK (Bitfield-Mask: 0x0f) */ +/* =================================================== IALK_VLAN_CONFIG ==================================================== */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_FLOOD_Pos (0UL) /*!< UNKWN_VLAN_FLOOD (Bit 0) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_FLOOD_Msk (0x1UL) /*!< UNKWN_VLAN_FLOOD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_LRN_ENA_Pos (1UL) /*!< UNKWN_VLAN_LRN_ENA (Bit 1) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_LRN_ENA_Msk (0x2UL) /*!< UNKWN_VLAN_LRN_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_PRIO_Pos (4UL) /*!< UNKWN_VLAN_PRIO (Bit 4) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_PRIO_Msk (0x70UL) /*!< UNKWN_VLAN_PRIO (Bitfield-Mask: 0x07) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_PRIO_VLD_Pos (7UL) /*!< UNKWN_VLAN_PRIO_VLD (Bit 7) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_PRIO_VLD_Msk (0x80UL) /*!< UNKWN_VLAN_PRIO_VLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_VLAN_CONFIG_VLANS_ENABLED_Pos (8UL) /*!< VLANS_ENABLED (Bit 8) */ + #define R_ETHSW_IALK_VLAN_CONFIG_VLANS_ENABLED_Msk (0x700UL) /*!< VLANS_ENABLED (Bitfield-Mask: 0x07) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_FLOOD_MASK_Pos (16UL) /*!< UNKWN_VLAN_FLOOD_MASK (Bit 16) */ + #define R_ETHSW_IALK_VLAN_CONFIG_UNKWN_VLAN_FLOOD_MASK_Msk (0xf0000UL) /*!< UNKWN_VLAN_FLOOD_MASK (Bitfield-Mask: 0x0f) */ +/* ===================================================== IALK_TBL_ADDR ===================================================== */ + #define R_ETHSW_IALK_TBL_ADDR_ADDR_Pos (0UL) /*!< ADDR (Bit 0) */ + #define R_ETHSW_IALK_TBL_ADDR_ADDR_Msk (0x1fffUL) /*!< ADDR (Bitfield-Mask: 0x1fff) */ + #define R_ETHSW_IALK_TBL_ADDR_AINC_Pos (28UL) /*!< AINC (Bit 28) */ + #define R_ETHSW_IALK_TBL_ADDR_AINC_Msk (0xf0000000UL) /*!< AINC (Bitfield-Mask: 0x0f) */ +/* ===================================================== IALK_TBL_DATA ===================================================== */ + #define R_ETHSW_IALK_TBL_DATA_VALID_Pos (0UL) /*!< VALID (Bit 0) */ + #define R_ETHSW_IALK_TBL_DATA_VALID_Msk (0x1UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_TBL_DATA_FWD_MASK_Pos (1UL) /*!< FWD_MASK (Bit 1) */ + #define R_ETHSW_IALK_TBL_DATA_FWD_MASK_Msk (0x1eUL) /*!< FWD_MASK (Bitfield-Mask: 0x0f) */ +/* ====================================================== IALK_VLANID ====================================================== */ + #define R_ETHSW_IALK_VLANID_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_IALK_VLANID_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_IALK_VLANID_VLANID_ENA_Pos (12UL) /*!< VLANID_ENA (Bit 12) */ + #define R_ETHSW_IALK_VLANID_VLANID_ENA_Msk (0x1000UL) /*!< VLANID_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_VLANID_VLANID_LRN_ENA_Pos (13UL) /*!< VLANID_LRN_ENA (Bit 13) */ + #define R_ETHSW_IALK_VLANID_VLANID_LRN_ENA_Msk (0x2000UL) /*!< VLANID_LRN_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_IALK_VLANID_VLANID_FLOOD_MASK_Pos (16UL) /*!< VLANID_FLOOD_MASK (Bit 16) */ + #define R_ETHSW_IALK_VLANID_VLANID_FLOOD_MASK_Msk (0xf0000UL) /*!< VLANID_FLOOD_MASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IALK_VLANID_VLANID_PRIO_Pos (28UL) /*!< VLANID_PRIO (Bit 28) */ + #define R_ETHSW_IALK_VLANID_VLANID_PRIO_Msk (0x70000000UL) /*!< VLANID_PRIO (Bitfield-Mask: 0x07) */ + #define R_ETHSW_IALK_VLANID_VLANID_PRIO_VLD_Pos (31UL) /*!< VLANID_PRIO_VLD (Bit 31) */ + #define R_ETHSW_IALK_VLANID_VLANID_PRIO_VLD_Msk (0x80000000UL) /*!< VLANID_PRIO_VLD (Bitfield-Mask: 0x01) */ +/* ===================================================== IMC_QLEVEL_P ====================================================== */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE0_Pos (0UL) /*!< QUEUE0 (Bit 0) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE0_Msk (0xfUL) /*!< QUEUE0 (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE1_Pos (4UL) /*!< QUEUE1 (Bit 4) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE1_Msk (0xf0UL) /*!< QUEUE1 (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE2_Pos (8UL) /*!< QUEUE2 (Bit 8) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE2_Msk (0xf00UL) /*!< QUEUE2 (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE3_Pos (12UL) /*!< QUEUE3 (Bit 12) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE3_Msk (0xf000UL) /*!< QUEUE3 (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE4_Pos (16UL) /*!< QUEUE4 (Bit 16) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE4_Msk (0xf0000UL) /*!< QUEUE4 (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE5_Pos (20UL) /*!< QUEUE5 (Bit 20) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE5_Msk (0xf00000UL) /*!< QUEUE5 (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE6_Pos (24UL) /*!< QUEUE6 (Bit 24) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE6_Msk (0xf000000UL) /*!< QUEUE6 (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE7_Pos (28UL) /*!< QUEUE7 (Bit 28) */ + #define R_ETHSW_IMC_QLEVEL_P_QUEUE7_Msk (0xf0000000UL) /*!< QUEUE7 (Bitfield-Mask: 0x0f) */ +/* ======================================================== LK_CTRL ======================================================== */ + #define R_ETHSW_LK_CTRL_LKUP_EN_Pos (0UL) /*!< LKUP_EN (Bit 0) */ + #define R_ETHSW_LK_CTRL_LKUP_EN_Msk (0x1UL) /*!< LKUP_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_CTRL_LEARN_EN_Pos (1UL) /*!< LEARN_EN (Bit 1) */ + #define R_ETHSW_LK_CTRL_LEARN_EN_Msk (0x2UL) /*!< LEARN_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_CTRL_AGING_EN_Pos (2UL) /*!< AGING_EN (Bit 2) */ + #define R_ETHSW_LK_CTRL_AGING_EN_Msk (0x4UL) /*!< AGING_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_CTRL_ALW_MGRT_Pos (3UL) /*!< ALW_MGRT (Bit 3) */ + #define R_ETHSW_LK_CTRL_ALW_MGRT_Msk (0x8UL) /*!< ALW_MGRT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_CTRL_DISC_UNK_DEST_Pos (4UL) /*!< DISC_UNK_DEST (Bit 4) */ + #define R_ETHSW_LK_CTRL_DISC_UNK_DEST_Msk (0x10UL) /*!< DISC_UNK_DEST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_CTRL_CLRTBL_Pos (6UL) /*!< CLRTBL (Bit 6) */ + #define R_ETHSW_LK_CTRL_CLRTBL_Msk (0x40UL) /*!< CLRTBL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_CTRL_IND_VLAN_Pos (7UL) /*!< IND_VLAN (Bit 7) */ + #define R_ETHSW_LK_CTRL_IND_VLAN_Msk (0x80UL) /*!< IND_VLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_CTRL_DISC_UNK_SRC_Pos (16UL) /*!< DISC_UNK_SRC (Bit 16) */ + #define R_ETHSW_LK_CTRL_DISC_UNK_SRC_Msk (0xf0000UL) /*!< DISC_UNK_SRC (Bitfield-Mask: 0x0f) */ +/* ======================================================= LK_STATUS ======================================================= */ + #define R_ETHSW_LK_STATUS_AGEADDR_Pos (0UL) /*!< AGEADDR (Bit 0) */ + #define R_ETHSW_LK_STATUS_AGEADDR_Msk (0xffffUL) /*!< AGEADDR (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_LK_STATUS_OVRF_Pos (16UL) /*!< OVRF (Bit 16) */ + #define R_ETHSW_LK_STATUS_OVRF_Msk (0x3fff0000UL) /*!< OVRF (Bitfield-Mask: 0x3fff) */ + #define R_ETHSW_LK_STATUS_LRNEVNT_Pos (31UL) /*!< LRNEVNT (Bit 31) */ + #define R_ETHSW_LK_STATUS_LRNEVNT_Msk (0x80000000UL) /*!< LRNEVNT (Bitfield-Mask: 0x01) */ +/* ===================================================== LK_ADDR_CTRL ====================================================== */ + #define R_ETHSW_LK_ADDR_CTRL_ADDR_MSK_Pos (0UL) /*!< ADDR_MSK (Bit 0) */ + #define R_ETHSW_LK_ADDR_CTRL_ADDR_MSK_Msk (0xfffUL) /*!< ADDR_MSK (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_LK_ADDR_CTRL_CLR_DYNAMIC_Pos (22UL) /*!< CLR_DYNAMIC (Bit 22) */ + #define R_ETHSW_LK_ADDR_CTRL_CLR_DYNAMIC_Msk (0x400000UL) /*!< CLR_DYNAMIC (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_CLR_STATIC_Pos (23UL) /*!< CLR_STATIC (Bit 23) */ + #define R_ETHSW_LK_ADDR_CTRL_CLR_STATIC_Msk (0x800000UL) /*!< CLR_STATIC (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_GETLASTNEW_Pos (24UL) /*!< GETLASTNEW (Bit 24) */ + #define R_ETHSW_LK_ADDR_CTRL_GETLASTNEW_Msk (0x1000000UL) /*!< GETLASTNEW (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_WRITE_Pos (25UL) /*!< WRITE (Bit 25) */ + #define R_ETHSW_LK_ADDR_CTRL_WRITE_Msk (0x2000000UL) /*!< WRITE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_READ_Pos (26UL) /*!< READ (Bit 26) */ + #define R_ETHSW_LK_ADDR_CTRL_READ_Msk (0x4000000UL) /*!< READ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_WAIT_COMP_Pos (27UL) /*!< WAIT_COMP (Bit 27) */ + #define R_ETHSW_LK_ADDR_CTRL_WAIT_COMP_Msk (0x8000000UL) /*!< WAIT_COMP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_LOOKUP_Pos (28UL) /*!< LOOKUP (Bit 28) */ + #define R_ETHSW_LK_ADDR_CTRL_LOOKUP_Msk (0x10000000UL) /*!< LOOKUP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_CLEAR_Pos (29UL) /*!< CLEAR (Bit 29) */ + #define R_ETHSW_LK_ADDR_CTRL_CLEAR_Msk (0x20000000UL) /*!< CLEAR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_DEL_PORT_Pos (30UL) /*!< DEL_PORT (Bit 30) */ + #define R_ETHSW_LK_ADDR_CTRL_DEL_PORT_Msk (0x40000000UL) /*!< DEL_PORT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_LK_ADDR_CTRL_BUSY_Pos (31UL) /*!< BUSY (Bit 31) */ + #define R_ETHSW_LK_ADDR_CTRL_BUSY_Msk (0x80000000UL) /*!< BUSY (Bitfield-Mask: 0x01) */ +/* ====================================================== LK_DATA_LO ======================================================= */ + #define R_ETHSW_LK_DATA_LO_MEMDATA_Pos (0UL) /*!< MEMDATA (Bit 0) */ + #define R_ETHSW_LK_DATA_LO_MEMDATA_Msk (0xffffffffUL) /*!< MEMDATA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== LK_DATA_HI ======================================================= */ + #define R_ETHSW_LK_DATA_HI_MEMDATA_Pos (0UL) /*!< MEMDATA (Bit 0) */ + #define R_ETHSW_LK_DATA_HI_MEMDATA_Msk (0x1ffffffUL) /*!< MEMDATA (Bitfield-Mask: 0x1ffffff) */ +/* ====================================================== LK_DATA_HI2 ====================================================== */ + #define R_ETHSW_LK_DATA_HI2_MEMDATA_Pos (8UL) /*!< MEMDATA (Bit 8) */ + #define R_ETHSW_LK_DATA_HI2_MEMDATA_Msk (0xfff00UL) /*!< MEMDATA (Bitfield-Mask: 0xfff) */ +/* ===================================================== LK_LEARNCOUNT ===================================================== */ + #define R_ETHSW_LK_LEARNCOUNT_LEARNCOUNT_Pos (0UL) /*!< LEARNCOUNT (Bit 0) */ + #define R_ETHSW_LK_LEARNCOUNT_LEARNCOUNT_Msk (0x1fffUL) /*!< LEARNCOUNT (Bitfield-Mask: 0x1fff) */ + #define R_ETHSW_LK_LEARNCOUNT_WRITE_MD_Pos (30UL) /*!< WRITE_MD (Bit 30) */ + #define R_ETHSW_LK_LEARNCOUNT_WRITE_MD_Msk (0xc0000000UL) /*!< WRITE_MD (Bitfield-Mask: 0x03) */ +/* ====================================================== LK_AGETIME ======================================================= */ + #define R_ETHSW_LK_AGETIME_AGETIME_Pos (0UL) /*!< AGETIME (Bit 0) */ + #define R_ETHSW_LK_AGETIME_AGETIME_Msk (0xffffffUL) /*!< AGETIME (Bitfield-Mask: 0xffffff) */ +/* ==================================================== MGMT_TAG_CONFIG ==================================================== */ + #define R_ETHSW_MGMT_TAG_CONFIG_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_ETHSW_MGMT_TAG_CONFIG_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_TAG_CONFIG_AL_FRAMES_Pos (1UL) /*!< AL_FRAMES (Bit 1) */ + #define R_ETHSW_MGMT_TAG_CONFIG_AL_FRAMES_Msk (0x2UL) /*!< AL_FRAMES (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_TAG_CONFIG_TYPE1_EN_Pos (4UL) /*!< TYPE1_EN (Bit 4) */ + #define R_ETHSW_MGMT_TAG_CONFIG_TYPE1_EN_Msk (0x10UL) /*!< TYPE1_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_TAG_CONFIG_TYPE2_EN_Pos (5UL) /*!< TYPE2_EN (Bit 5) */ + #define R_ETHSW_MGMT_TAG_CONFIG_TYPE2_EN_Msk (0x20UL) /*!< TYPE2_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MGMT_TAG_CONFIG_TAGFIELD_Pos (16UL) /*!< TAGFIELD (Bit 16) */ + #define R_ETHSW_MGMT_TAG_CONFIG_TAGFIELD_Msk (0xffff0000UL) /*!< TAGFIELD (Bitfield-Mask: 0xffff) */ +/* ====================================================== TSM_CONFIG ======================================================= */ + #define R_ETHSW_TSM_CONFIG_IRQ_EN_Pos (0UL) /*!< IRQ_EN (Bit 0) */ + #define R_ETHSW_TSM_CONFIG_IRQ_EN_Msk (0x1UL) /*!< IRQ_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TSM_CONFIG_IRQ_TEST_Pos (1UL) /*!< IRQ_TEST (Bit 1) */ + #define R_ETHSW_TSM_CONFIG_IRQ_TEST_Msk (0x2UL) /*!< IRQ_TEST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TSM_CONFIG_IRQ_TSFIFO_OVR_Pos (2UL) /*!< IRQ_TSFIFO_OVR (Bit 2) */ + #define R_ETHSW_TSM_CONFIG_IRQ_TSFIFO_OVR_Msk (0x4UL) /*!< IRQ_TSFIFO_OVR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TSM_CONFIG_IRQ_EVT_OFFSET_Pos (4UL) /*!< IRQ_EVT_OFFSET (Bit 4) */ + #define R_ETHSW_TSM_CONFIG_IRQ_EVT_OFFSET_Msk (0x30UL) /*!< IRQ_EVT_OFFSET (Bitfield-Mask: 0x03) */ + #define R_ETHSW_TSM_CONFIG_IRQ_EVT_PERIOD_Pos (8UL) /*!< IRQ_EVT_PERIOD (Bit 8) */ + #define R_ETHSW_TSM_CONFIG_IRQ_EVT_PERIOD_Msk (0x300UL) /*!< IRQ_EVT_PERIOD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_TSM_CONFIG_IRQ_ATIME_OVER_Pos (12UL) /*!< IRQ_ATIME_OVER (Bit 12) */ + #define R_ETHSW_TSM_CONFIG_IRQ_ATIME_OVER_Msk (0x3000UL) /*!< IRQ_ATIME_OVER (Bitfield-Mask: 0x03) */ + #define R_ETHSW_TSM_CONFIG_IRQ_TX_EN_Pos (16UL) /*!< IRQ_TX_EN (Bit 16) */ + #define R_ETHSW_TSM_CONFIG_IRQ_TX_EN_Msk (0xf0000UL) /*!< IRQ_TX_EN (Bitfield-Mask: 0x0f) */ +/* =================================================== TSM_IRQ_STAT_ACK ==================================================== */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_STAT_Pos (0UL) /*!< IRQ_STAT (Bit 0) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_STAT_Msk (0x1UL) /*!< IRQ_STAT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_TEST_Pos (1UL) /*!< IRQ_TEST (Bit 1) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_TEST_Msk (0x2UL) /*!< IRQ_TEST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_TSFIFO_OVR_Pos (2UL) /*!< IRQ_TSFIFO_OVR (Bit 2) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_TSFIFO_OVR_Msk (0x4UL) /*!< IRQ_TSFIFO_OVR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_EVT_OFFSET_Pos (4UL) /*!< IRQ_EVT_OFFSET (Bit 4) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_EVT_OFFSET_Msk (0x30UL) /*!< IRQ_EVT_OFFSET (Bitfield-Mask: 0x03) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_EVT_PERIOD_Pos (8UL) /*!< IRQ_EVT_PERIOD (Bit 8) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_EVT_PERIOD_Msk (0x300UL) /*!< IRQ_EVT_PERIOD (Bitfield-Mask: 0x03) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_ATIME_OVER_Pos (12UL) /*!< IRQ_ATIME_OVER (Bit 12) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_ATIME_OVER_Msk (0x3000UL) /*!< IRQ_ATIME_OVER (Bitfield-Mask: 0x03) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_TX_Pos (16UL) /*!< IRQ_TX (Bit 16) */ + #define R_ETHSW_TSM_IRQ_STAT_ACK_IRQ_TX_Msk (0xf0000UL) /*!< IRQ_TX (Bitfield-Mask: 0x0f) */ +/* ====================================================== PTP_DOMAIN ======================================================= */ + #define R_ETHSW_PTP_DOMAIN_DOMAIN0_Pos (0UL) /*!< DOMAIN0 (Bit 0) */ + #define R_ETHSW_PTP_DOMAIN_DOMAIN0_Msk (0xffUL) /*!< DOMAIN0 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTP_DOMAIN_DOMAIN1_Pos (8UL) /*!< DOMAIN1 (Bit 8) */ + #define R_ETHSW_PTP_DOMAIN_DOMAIN1_Msk (0xff00UL) /*!< DOMAIN1 (Bitfield-Mask: 0xff) */ +/* ==================================================== PEERDELAY_P0_T0 ==================================================== */ + #define R_ETHSW_PEERDELAY_P0_T0_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P0_T0_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== PEERDELAY_P1_T0 ==================================================== */ + #define R_ETHSW_PEERDELAY_P1_T0_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P1_T0_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== PEERDELAY_P2_T0 ==================================================== */ + #define R_ETHSW_PEERDELAY_P2_T0_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P2_T0_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== PEERDELAY_P3_T0 ==================================================== */ + #define R_ETHSW_PEERDELAY_P3_T0_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P3_T0_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== PEERDELAY_P0_T1 ==================================================== */ + #define R_ETHSW_PEERDELAY_P0_T1_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P0_T1_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== PEERDELAY_P1_T1 ==================================================== */ + #define R_ETHSW_PEERDELAY_P1_T1_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P1_T1_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== PEERDELAY_P2_T1 ==================================================== */ + #define R_ETHSW_PEERDELAY_P2_T1_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P2_T1_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== PEERDELAY_P3_T1 ==================================================== */ + #define R_ETHSW_PEERDELAY_P3_T1_PEERDELAY_Pos (0UL) /*!< PEERDELAY (Bit 0) */ + #define R_ETHSW_PEERDELAY_P3_T1_PEERDELAY_Msk (0x3fffffffUL) /*!< PEERDELAY (Bitfield-Mask: 0x3fffffff) */ +/* ==================================================== TS_FIFO_STATUS ===================================================== */ + #define R_ETHSW_TS_FIFO_STATUS_FF_VALID_Pos (0UL) /*!< FF_VALID (Bit 0) */ + #define R_ETHSW_TS_FIFO_STATUS_FF_VALID_Msk (0xfUL) /*!< FF_VALID (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_TS_FIFO_STATUS_FF_OVR_Pos (16UL) /*!< FF_OVR (Bit 16) */ + #define R_ETHSW_TS_FIFO_STATUS_FF_OVR_Msk (0xf0000UL) /*!< FF_OVR (Bitfield-Mask: 0x0f) */ +/* =================================================== TS_FIFO_READ_CTRL =================================================== */ + #define R_ETHSW_TS_FIFO_READ_CTRL_PORT_NUM_Pos (0UL) /*!< PORT_NUM (Bit 0) */ + #define R_ETHSW_TS_FIFO_READ_CTRL_PORT_NUM_Msk (0x3UL) /*!< PORT_NUM (Bitfield-Mask: 0x03) */ + #define R_ETHSW_TS_FIFO_READ_CTRL_TS_VALID_Pos (4UL) /*!< TS_VALID (Bit 4) */ + #define R_ETHSW_TS_FIFO_READ_CTRL_TS_VALID_Msk (0x10UL) /*!< TS_VALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TS_FIFO_READ_CTRL_TS_SEL_Pos (6UL) /*!< TS_SEL (Bit 6) */ + #define R_ETHSW_TS_FIFO_READ_CTRL_TS_SEL_Msk (0x40UL) /*!< TS_SEL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TS_FIFO_READ_CTRL_TS_ID_Pos (8UL) /*!< TS_ID (Bit 8) */ + #define R_ETHSW_TS_FIFO_READ_CTRL_TS_ID_Msk (0x7f00UL) /*!< TS_ID (Bitfield-Mask: 0x7f) */ +/* ================================================ TS_FIFO_READ_TIMESTAMP ================================================= */ + #define R_ETHSW_TS_FIFO_READ_TIMESTAMP_TIMESTAMP_Pos (0UL) /*!< TIMESTAMP (Bit 0) */ + #define R_ETHSW_TS_FIFO_READ_TIMESTAMP_TIMESTAMP_Msk (0xffffffffUL) /*!< TIMESTAMP (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== INT_CONFIG ======================================================= */ + #define R_ETHSW_INT_CONFIG_IRQ_EN_Pos (0UL) /*!< IRQ_EN (Bit 0) */ + #define R_ETHSW_INT_CONFIG_IRQ_EN_Msk (0x1UL) /*!< IRQ_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_MDIO1_Pos (1UL) /*!< MDIO1 (Bit 1) */ + #define R_ETHSW_INT_CONFIG_MDIO1_Msk (0x2UL) /*!< MDIO1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_LK_NEW_SRC_Pos (3UL) /*!< LK_NEW_SRC (Bit 3) */ + #define R_ETHSW_INT_CONFIG_LK_NEW_SRC_Msk (0x8UL) /*!< LK_NEW_SRC (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_IRQ_TEST_Pos (4UL) /*!< IRQ_TEST (Bit 4) */ + #define R_ETHSW_INT_CONFIG_IRQ_TEST_Msk (0x10UL) /*!< IRQ_TEST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_DLR_INT_Pos (5UL) /*!< DLR_INT (Bit 5) */ + #define R_ETHSW_INT_CONFIG_DLR_INT_Msk (0x20UL) /*!< DLR_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_PRP_INT_Pos (6UL) /*!< PRP_INT (Bit 6) */ + #define R_ETHSW_INT_CONFIG_PRP_INT_Msk (0x40UL) /*!< PRP_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_HUB_INT_Pos (7UL) /*!< HUB_INT (Bit 7) */ + #define R_ETHSW_INT_CONFIG_HUB_INT_Msk (0x80UL) /*!< HUB_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_IRQ_LINK_Pos (8UL) /*!< IRQ_LINK (Bit 8) */ + #define R_ETHSW_INT_CONFIG_IRQ_LINK_Msk (0x700UL) /*!< IRQ_LINK (Bitfield-Mask: 0x07) */ + #define R_ETHSW_INT_CONFIG_IRQ_MAC_EEE_Pos (16UL) /*!< IRQ_MAC_EEE (Bit 16) */ + #define R_ETHSW_INT_CONFIG_IRQ_MAC_EEE_Msk (0x70000UL) /*!< IRQ_MAC_EEE (Bitfield-Mask: 0x07) */ + #define R_ETHSW_INT_CONFIG_EFP_INT_Pos (27UL) /*!< EFP_INT (Bit 27) */ + #define R_ETHSW_INT_CONFIG_EFP_INT_Msk (0x8000000UL) /*!< EFP_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_SRCFLT_WD_INT_Pos (28UL) /*!< SRCFLT_WD_INT (Bit 28) */ + #define R_ETHSW_INT_CONFIG_SRCFLT_WD_INT_Msk (0x10000000UL) /*!< SRCFLT_WD_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_TSM_INT_Pos (29UL) /*!< TSM_INT (Bit 29) */ + #define R_ETHSW_INT_CONFIG_TSM_INT_Msk (0x20000000UL) /*!< TSM_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_TDMA_INT_Pos (30UL) /*!< TDMA_INT (Bit 30) */ + #define R_ETHSW_INT_CONFIG_TDMA_INT_Msk (0x40000000UL) /*!< TDMA_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_CONFIG_PATTERN_INT_Pos (31UL) /*!< PATTERN_INT (Bit 31) */ + #define R_ETHSW_INT_CONFIG_PATTERN_INT_Msk (0x80000000UL) /*!< PATTERN_INT (Bitfield-Mask: 0x01) */ +/* ===================================================== INT_STAT_ACK ====================================================== */ + #define R_ETHSW_INT_STAT_ACK_IRQ_PEND_Pos (0UL) /*!< IRQ_PEND (Bit 0) */ + #define R_ETHSW_INT_STAT_ACK_IRQ_PEND_Msk (0x1UL) /*!< IRQ_PEND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_MDIO1_Pos (1UL) /*!< MDIO1 (Bit 1) */ + #define R_ETHSW_INT_STAT_ACK_MDIO1_Msk (0x2UL) /*!< MDIO1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_LK_NEW_SRC_Pos (3UL) /*!< LK_NEW_SRC (Bit 3) */ + #define R_ETHSW_INT_STAT_ACK_LK_NEW_SRC_Msk (0x8UL) /*!< LK_NEW_SRC (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_IRQ_TEST_Pos (4UL) /*!< IRQ_TEST (Bit 4) */ + #define R_ETHSW_INT_STAT_ACK_IRQ_TEST_Msk (0x10UL) /*!< IRQ_TEST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_DLR_INT_Pos (5UL) /*!< DLR_INT (Bit 5) */ + #define R_ETHSW_INT_STAT_ACK_DLR_INT_Msk (0x20UL) /*!< DLR_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_PRP_INT_Pos (6UL) /*!< PRP_INT (Bit 6) */ + #define R_ETHSW_INT_STAT_ACK_PRP_INT_Msk (0x40UL) /*!< PRP_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_HUB_INT_Pos (7UL) /*!< HUB_INT (Bit 7) */ + #define R_ETHSW_INT_STAT_ACK_HUB_INT_Msk (0x80UL) /*!< HUB_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_IRQ_LINK_Pos (8UL) /*!< IRQ_LINK (Bit 8) */ + #define R_ETHSW_INT_STAT_ACK_IRQ_LINK_Msk (0x700UL) /*!< IRQ_LINK (Bitfield-Mask: 0x07) */ + #define R_ETHSW_INT_STAT_ACK_IRQ_MAC_EEE_Pos (16UL) /*!< IRQ_MAC_EEE (Bit 16) */ + #define R_ETHSW_INT_STAT_ACK_IRQ_MAC_EEE_Msk (0x70000UL) /*!< IRQ_MAC_EEE (Bitfield-Mask: 0x07) */ + #define R_ETHSW_INT_STAT_ACK_EFP_INT_Pos (27UL) /*!< EFP_INT (Bit 27) */ + #define R_ETHSW_INT_STAT_ACK_EFP_INT_Msk (0x8000000UL) /*!< EFP_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_SRCFLT_WD_INT_Pos (28UL) /*!< SRCFLT_WD_INT (Bit 28) */ + #define R_ETHSW_INT_STAT_ACK_SRCFLT_WD_INT_Msk (0x10000000UL) /*!< SRCFLT_WD_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_TSM_INT_Pos (29UL) /*!< TSM_INT (Bit 29) */ + #define R_ETHSW_INT_STAT_ACK_TSM_INT_Msk (0x20000000UL) /*!< TSM_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_TDMA_INT_Pos (30UL) /*!< TDMA_INT (Bit 30) */ + #define R_ETHSW_INT_STAT_ACK_TDMA_INT_Msk (0x40000000UL) /*!< TDMA_INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_INT_STAT_ACK_PATTERN_INT_Pos (31UL) /*!< PATTERN_INT (Bit 31) */ + #define R_ETHSW_INT_STAT_ACK_PATTERN_INT_Msk (0x80000000UL) /*!< PATTERN_INT (Bitfield-Mask: 0x01) */ +/* ====================================================== ATIME_CTRL0 ====================================================== */ + #define R_ETHSW_ATIME_CTRL0_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_ETHSW_ATIME_CTRL0_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL0_ONE_SHOT_Pos (1UL) /*!< ONE_SHOT (Bit 1) */ + #define R_ETHSW_ATIME_CTRL0_ONE_SHOT_Msk (0x2UL) /*!< ONE_SHOT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL0_EVT_OFFSET_ENA_Pos (2UL) /*!< EVT_OFFSET_ENA (Bit 2) */ + #define R_ETHSW_ATIME_CTRL0_EVT_OFFSET_ENA_Msk (0x4UL) /*!< EVT_OFFSET_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL0_EVT_PERIOD_ENA_Pos (4UL) /*!< EVT_PERIOD_ENA (Bit 4) */ + #define R_ETHSW_ATIME_CTRL0_EVT_PERIOD_ENA_Msk (0x10UL) /*!< EVT_PERIOD_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL0_EVT_PERIOD_RST_Pos (5UL) /*!< EVT_PERIOD_RST (Bit 5) */ + #define R_ETHSW_ATIME_CTRL0_EVT_PERIOD_RST_Msk (0x20UL) /*!< EVT_PERIOD_RST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL0_RESTART_Pos (9UL) /*!< RESTART (Bit 9) */ + #define R_ETHSW_ATIME_CTRL0_RESTART_Msk (0x200UL) /*!< RESTART (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL0_CAPTURE_Pos (11UL) /*!< CAPTURE (Bit 11) */ + #define R_ETHSW_ATIME_CTRL0_CAPTURE_Msk (0x800UL) /*!< CAPTURE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL0_CAPTURE_ALL_Pos (12UL) /*!< CAPTURE_ALL (Bit 12) */ + #define R_ETHSW_ATIME_CTRL0_CAPTURE_ALL_Msk (0x1000UL) /*!< CAPTURE_ALL (Bitfield-Mask: 0x01) */ +/* ====================================================== ATIME_CTRL1 ====================================================== */ + #define R_ETHSW_ATIME_CTRL1_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_ETHSW_ATIME_CTRL1_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL1_ONE_SHOT_Pos (1UL) /*!< ONE_SHOT (Bit 1) */ + #define R_ETHSW_ATIME_CTRL1_ONE_SHOT_Msk (0x2UL) /*!< ONE_SHOT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL1_EVT_OFFSET_ENA_Pos (2UL) /*!< EVT_OFFSET_ENA (Bit 2) */ + #define R_ETHSW_ATIME_CTRL1_EVT_OFFSET_ENA_Msk (0x4UL) /*!< EVT_OFFSET_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL1_EVT_PERIOD_ENA_Pos (4UL) /*!< EVT_PERIOD_ENA (Bit 4) */ + #define R_ETHSW_ATIME_CTRL1_EVT_PERIOD_ENA_Msk (0x10UL) /*!< EVT_PERIOD_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL1_EVT_PERIOD_RST_Pos (5UL) /*!< EVT_PERIOD_RST (Bit 5) */ + #define R_ETHSW_ATIME_CTRL1_EVT_PERIOD_RST_Msk (0x20UL) /*!< EVT_PERIOD_RST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL1_RESTART_Pos (9UL) /*!< RESTART (Bit 9) */ + #define R_ETHSW_ATIME_CTRL1_RESTART_Msk (0x200UL) /*!< RESTART (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL1_CAPTURE_Pos (11UL) /*!< CAPTURE (Bit 11) */ + #define R_ETHSW_ATIME_CTRL1_CAPTURE_Msk (0x800UL) /*!< CAPTURE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ATIME_CTRL1_CAPTURE_ALL_Pos (12UL) /*!< CAPTURE_ALL (Bit 12) */ + #define R_ETHSW_ATIME_CTRL1_CAPTURE_ALL_Msk (0x1000UL) /*!< CAPTURE_ALL (Bitfield-Mask: 0x01) */ +/* ======================================================== ATIME0 ========================================================= */ + #define R_ETHSW_ATIME0_TIMER_VAL_Pos (0UL) /*!< TIMER_VAL (Bit 0) */ + #define R_ETHSW_ATIME0_TIMER_VAL_Msk (0xffffffffUL) /*!< TIMER_VAL (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ATIME1 ========================================================= */ + #define R_ETHSW_ATIME1_TIMER_VAL_Pos (0UL) /*!< TIMER_VAL (Bit 0) */ + #define R_ETHSW_ATIME1_TIMER_VAL_Msk (0xffffffffUL) /*!< TIMER_VAL (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== ATIME_OFFSET0 ===================================================== */ + #define R_ETHSW_ATIME_OFFSET0_OFFSET_Pos (0UL) /*!< OFFSET (Bit 0) */ + #define R_ETHSW_ATIME_OFFSET0_OFFSET_Msk (0xffffffffUL) /*!< OFFSET (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== ATIME_OFFSET1 ===================================================== */ + #define R_ETHSW_ATIME_OFFSET1_OFFSET_Pos (0UL) /*!< OFFSET (Bit 0) */ + #define R_ETHSW_ATIME_OFFSET1_OFFSET_Msk (0xffffffffUL) /*!< OFFSET (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ATIME_EVT_PERIOD0 =================================================== */ + #define R_ETHSW_ATIME_EVT_PERIOD0_PERIOD_Pos (0UL) /*!< PERIOD (Bit 0) */ + #define R_ETHSW_ATIME_EVT_PERIOD0_PERIOD_Msk (0xffffffffUL) /*!< PERIOD (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ATIME_EVT_PERIOD1 =================================================== */ + #define R_ETHSW_ATIME_EVT_PERIOD1_PERIOD_Pos (0UL) /*!< PERIOD (Bit 0) */ + #define R_ETHSW_ATIME_EVT_PERIOD1_PERIOD_Msk (0xffffffffUL) /*!< PERIOD (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== ATIME_CORR0 ====================================================== */ + #define R_ETHSW_ATIME_CORR0_CORR_PERIOD_Pos (0UL) /*!< CORR_PERIOD (Bit 0) */ + #define R_ETHSW_ATIME_CORR0_CORR_PERIOD_Msk (0x7fffffffUL) /*!< CORR_PERIOD (Bitfield-Mask: 0x7fffffff) */ +/* ====================================================== ATIME_CORR1 ====================================================== */ + #define R_ETHSW_ATIME_CORR1_CORR_PERIOD_Pos (0UL) /*!< CORR_PERIOD (Bit 0) */ + #define R_ETHSW_ATIME_CORR1_CORR_PERIOD_Msk (0x7fffffffUL) /*!< CORR_PERIOD (Bitfield-Mask: 0x7fffffff) */ +/* ====================================================== ATIME_INC0 ======================================================= */ + #define R_ETHSW_ATIME_INC0_CLK_PERIOD_Pos (0UL) /*!< CLK_PERIOD (Bit 0) */ + #define R_ETHSW_ATIME_INC0_CLK_PERIOD_Msk (0x7fUL) /*!< CLK_PERIOD (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_ATIME_INC0_CORR_INC_Pos (8UL) /*!< CORR_INC (Bit 8) */ + #define R_ETHSW_ATIME_INC0_CORR_INC_Msk (0x7f00UL) /*!< CORR_INC (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_ATIME_INC0_OFFS_CORR_INC_Pos (16UL) /*!< OFFS_CORR_INC (Bit 16) */ + #define R_ETHSW_ATIME_INC0_OFFS_CORR_INC_Msk (0x7f0000UL) /*!< OFFS_CORR_INC (Bitfield-Mask: 0x7f) */ +/* ====================================================== ATIME_INC1 ======================================================= */ + #define R_ETHSW_ATIME_INC1_CLK_PERIOD_Pos (0UL) /*!< CLK_PERIOD (Bit 0) */ + #define R_ETHSW_ATIME_INC1_CLK_PERIOD_Msk (0x7fUL) /*!< CLK_PERIOD (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_ATIME_INC1_CORR_INC_Pos (8UL) /*!< CORR_INC (Bit 8) */ + #define R_ETHSW_ATIME_INC1_CORR_INC_Msk (0x7f00UL) /*!< CORR_INC (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_ATIME_INC1_OFFS_CORR_INC_Pos (16UL) /*!< OFFS_CORR_INC (Bit 16) */ + #define R_ETHSW_ATIME_INC1_OFFS_CORR_INC_Msk (0x7f0000UL) /*!< OFFS_CORR_INC (Bitfield-Mask: 0x7f) */ +/* ====================================================== ATIME_SEC0 ======================================================= */ + #define R_ETHSW_ATIME_SEC0_SEC_TIME_Pos (0UL) /*!< SEC_TIME (Bit 0) */ + #define R_ETHSW_ATIME_SEC0_SEC_TIME_Msk (0xffffffffUL) /*!< SEC_TIME (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== ATIME_SEC1 ======================================================= */ + #define R_ETHSW_ATIME_SEC1_SEC_TIME_Pos (0UL) /*!< SEC_TIME (Bit 0) */ + #define R_ETHSW_ATIME_SEC1_SEC_TIME_Msk (0xffffffffUL) /*!< SEC_TIME (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ATIME_OFFS_CORR0 ==================================================== */ + #define R_ETHSW_ATIME_OFFS_CORR0_OFFS_CORR_CNT_Pos (0UL) /*!< OFFS_CORR_CNT (Bit 0) */ + #define R_ETHSW_ATIME_OFFS_CORR0_OFFS_CORR_CNT_Msk (0xffffffffUL) /*!< OFFS_CORR_CNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ATIME_OFFS_CORR1 ==================================================== */ + #define R_ETHSW_ATIME_OFFS_CORR1_OFFS_CORR_CNT_Pos (0UL) /*!< OFFS_CORR_CNT (Bit 0) */ + #define R_ETHSW_ATIME_OFFS_CORR1_OFFS_CORR_CNT_Msk (0xffffffffUL) /*!< OFFS_CORR_CNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== MDIO_CFG_STATUS ==================================================== */ + #define R_ETHSW_MDIO_CFG_STATUS_BUSY_Pos (0UL) /*!< BUSY (Bit 0) */ + #define R_ETHSW_MDIO_CFG_STATUS_BUSY_Msk (0x1UL) /*!< BUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MDIO_CFG_STATUS_READERR_Pos (1UL) /*!< READERR (Bit 1) */ + #define R_ETHSW_MDIO_CFG_STATUS_READERR_Msk (0x2UL) /*!< READERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MDIO_CFG_STATUS_HOLD_Pos (2UL) /*!< HOLD (Bit 2) */ + #define R_ETHSW_MDIO_CFG_STATUS_HOLD_Msk (0x1cUL) /*!< HOLD (Bitfield-Mask: 0x07) */ + #define R_ETHSW_MDIO_CFG_STATUS_DISPREAM_Pos (5UL) /*!< DISPREAM (Bit 5) */ + #define R_ETHSW_MDIO_CFG_STATUS_DISPREAM_Msk (0x20UL) /*!< DISPREAM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MDIO_CFG_STATUS_CLKDIV_Pos (7UL) /*!< CLKDIV (Bit 7) */ + #define R_ETHSW_MDIO_CFG_STATUS_CLKDIV_Msk (0xff80UL) /*!< CLKDIV (Bitfield-Mask: 0x1ff) */ +/* ===================================================== MDIO_COMMAND ====================================================== */ + #define R_ETHSW_MDIO_COMMAND_REGADDR_Pos (0UL) /*!< REGADDR (Bit 0) */ + #define R_ETHSW_MDIO_COMMAND_REGADDR_Msk (0x1fUL) /*!< REGADDR (Bitfield-Mask: 0x1f) */ + #define R_ETHSW_MDIO_COMMAND_PHYADDR_Pos (5UL) /*!< PHYADDR (Bit 5) */ + #define R_ETHSW_MDIO_COMMAND_PHYADDR_Msk (0x3e0UL) /*!< PHYADDR (Bitfield-Mask: 0x1f) */ + #define R_ETHSW_MDIO_COMMAND_TRANINIT_Pos (15UL) /*!< TRANINIT (Bit 15) */ + #define R_ETHSW_MDIO_COMMAND_TRANINIT_Msk (0x8000UL) /*!< TRANINIT (Bitfield-Mask: 0x01) */ +/* ======================================================= MDIO_DATA ======================================================= */ + #define R_ETHSW_MDIO_DATA_MDIO_DATA_Pos (0UL) /*!< MDIO_DATA (Bit 0) */ + #define R_ETHSW_MDIO_DATA_MDIO_DATA_Msk (0xffffUL) /*!< MDIO_DATA (Bitfield-Mask: 0xffff) */ +/* ======================================================== REV_P0 ========================================================= */ + #define R_ETHSW_REV_P0_REV_Pos (0UL) /*!< REV (Bit 0) */ + #define R_ETHSW_REV_P0_REV_Msk (0xffffffffUL) /*!< REV (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== REV_P1 ========================================================= */ + #define R_ETHSW_REV_P1_REV_Pos (0UL) /*!< REV (Bit 0) */ + #define R_ETHSW_REV_P1_REV_Msk (0xffffffffUL) /*!< REV (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== REV_P2 ========================================================= */ + #define R_ETHSW_REV_P2_REV_Pos (0UL) /*!< REV (Bit 0) */ + #define R_ETHSW_REV_P2_REV_Msk (0xffffffffUL) /*!< REV (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== REV_P3 ========================================================= */ + #define R_ETHSW_REV_P3_REV_Pos (0UL) /*!< REV (Bit 0) */ + #define R_ETHSW_REV_P3_REV_Msk (0xffffffffUL) /*!< REV (Bitfield-Mask: 0xffffffff) */ +/* =================================================== COMMAND_CONFIG_P0 =================================================== */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_ENA_Pos (0UL) /*!< TX_ENA (Bit 0) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_ENA_Msk (0x1UL) /*!< TX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_RX_ENA_Pos (1UL) /*!< RX_ENA (Bit 1) */ + #define R_ETHSW_COMMAND_CONFIG_P0_RX_ENA_Msk (0x2UL) /*!< RX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TDMA_PREBUF_DIS_Pos (2UL) /*!< TDMA_PREBUF_DIS (Bit 2) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TDMA_PREBUF_DIS_Msk (0x4UL) /*!< TDMA_PREBUF_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_ETH_SPEED_Pos (3UL) /*!< ETH_SPEED (Bit 3) */ + #define R_ETHSW_COMMAND_CONFIG_P0_ETH_SPEED_Msk (0x8UL) /*!< ETH_SPEED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PROMIS_EN_Pos (4UL) /*!< PROMIS_EN (Bit 4) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PROMIS_EN_Msk (0x10UL) /*!< PROMIS_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PAD_EN_Pos (5UL) /*!< PAD_EN (Bit 5) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PAD_EN_Msk (0x20UL) /*!< PAD_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PAUSE_FWD_Pos (7UL) /*!< PAUSE_FWD (Bit 7) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PAUSE_FWD_Msk (0x80UL) /*!< PAUSE_FWD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PAUSE_IGNORE_Pos (8UL) /*!< PAUSE_IGNORE (Bit 8) */ + #define R_ETHSW_COMMAND_CONFIG_P0_PAUSE_IGNORE_Msk (0x100UL) /*!< PAUSE_IGNORE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_ADDR_INS_Pos (9UL) /*!< TX_ADDR_INS (Bit 9) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_ADDR_INS_Msk (0x200UL) /*!< TX_ADDR_INS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_HD_ENA_Pos (10UL) /*!< HD_ENA (Bit 10) */ + #define R_ETHSW_COMMAND_CONFIG_P0_HD_ENA_Msk (0x400UL) /*!< HD_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_CRC_APPEND_Pos (11UL) /*!< TX_CRC_APPEND (Bit 11) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_CRC_APPEND_Msk (0x800UL) /*!< TX_CRC_APPEND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_SW_RESET_Pos (13UL) /*!< SW_RESET (Bit 13) */ + #define R_ETHSW_COMMAND_CONFIG_P0_SW_RESET_Msk (0x2000UL) /*!< SW_RESET (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_CNTL_FRM_ENA_Pos (23UL) /*!< CNTL_FRM_ENA (Bit 23) */ + #define R_ETHSW_COMMAND_CONFIG_P0_CNTL_FRM_ENA_Msk (0x800000UL) /*!< CNTL_FRM_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_NO_LGTH_CHK_Pos (24UL) /*!< NO_LGTH_CHK (Bit 24) */ + #define R_ETHSW_COMMAND_CONFIG_P0_NO_LGTH_CHK_Msk (0x1000000UL) /*!< NO_LGTH_CHK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_ENA_10_Pos (25UL) /*!< ENA_10 (Bit 25) */ + #define R_ETHSW_COMMAND_CONFIG_P0_ENA_10_Msk (0x2000000UL) /*!< ENA_10 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_EFPI_SELECT_Pos (26UL) /*!< EFPI_SELECT (Bit 26) */ + #define R_ETHSW_COMMAND_CONFIG_P0_EFPI_SELECT_Msk (0x4000000UL) /*!< EFPI_SELECT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_TRUNCATE_Pos (27UL) /*!< TX_TRUNCATE (Bit 27) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TX_TRUNCATE_Msk (0x8000000UL) /*!< TX_TRUNCATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TIMER_SEL_Pos (30UL) /*!< TIMER_SEL (Bit 30) */ + #define R_ETHSW_COMMAND_CONFIG_P0_TIMER_SEL_Msk (0x40000000UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ +/* =================================================== COMMAND_CONFIG_P1 =================================================== */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_ENA_Pos (0UL) /*!< TX_ENA (Bit 0) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_ENA_Msk (0x1UL) /*!< TX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_RX_ENA_Pos (1UL) /*!< RX_ENA (Bit 1) */ + #define R_ETHSW_COMMAND_CONFIG_P1_RX_ENA_Msk (0x2UL) /*!< RX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TDMA_PREBUF_DIS_Pos (2UL) /*!< TDMA_PREBUF_DIS (Bit 2) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TDMA_PREBUF_DIS_Msk (0x4UL) /*!< TDMA_PREBUF_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_ETH_SPEED_Pos (3UL) /*!< ETH_SPEED (Bit 3) */ + #define R_ETHSW_COMMAND_CONFIG_P1_ETH_SPEED_Msk (0x8UL) /*!< ETH_SPEED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PROMIS_EN_Pos (4UL) /*!< PROMIS_EN (Bit 4) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PROMIS_EN_Msk (0x10UL) /*!< PROMIS_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PAD_EN_Pos (5UL) /*!< PAD_EN (Bit 5) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PAD_EN_Msk (0x20UL) /*!< PAD_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PAUSE_FWD_Pos (7UL) /*!< PAUSE_FWD (Bit 7) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PAUSE_FWD_Msk (0x80UL) /*!< PAUSE_FWD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PAUSE_IGNORE_Pos (8UL) /*!< PAUSE_IGNORE (Bit 8) */ + #define R_ETHSW_COMMAND_CONFIG_P1_PAUSE_IGNORE_Msk (0x100UL) /*!< PAUSE_IGNORE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_ADDR_INS_Pos (9UL) /*!< TX_ADDR_INS (Bit 9) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_ADDR_INS_Msk (0x200UL) /*!< TX_ADDR_INS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_HD_ENA_Pos (10UL) /*!< HD_ENA (Bit 10) */ + #define R_ETHSW_COMMAND_CONFIG_P1_HD_ENA_Msk (0x400UL) /*!< HD_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_CRC_APPEND_Pos (11UL) /*!< TX_CRC_APPEND (Bit 11) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_CRC_APPEND_Msk (0x800UL) /*!< TX_CRC_APPEND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_SW_RESET_Pos (13UL) /*!< SW_RESET (Bit 13) */ + #define R_ETHSW_COMMAND_CONFIG_P1_SW_RESET_Msk (0x2000UL) /*!< SW_RESET (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_CNTL_FRM_ENA_Pos (23UL) /*!< CNTL_FRM_ENA (Bit 23) */ + #define R_ETHSW_COMMAND_CONFIG_P1_CNTL_FRM_ENA_Msk (0x800000UL) /*!< CNTL_FRM_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_NO_LGTH_CHK_Pos (24UL) /*!< NO_LGTH_CHK (Bit 24) */ + #define R_ETHSW_COMMAND_CONFIG_P1_NO_LGTH_CHK_Msk (0x1000000UL) /*!< NO_LGTH_CHK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_ENA_10_Pos (25UL) /*!< ENA_10 (Bit 25) */ + #define R_ETHSW_COMMAND_CONFIG_P1_ENA_10_Msk (0x2000000UL) /*!< ENA_10 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_EFPI_SELECT_Pos (26UL) /*!< EFPI_SELECT (Bit 26) */ + #define R_ETHSW_COMMAND_CONFIG_P1_EFPI_SELECT_Msk (0x4000000UL) /*!< EFPI_SELECT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_TRUNCATE_Pos (27UL) /*!< TX_TRUNCATE (Bit 27) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TX_TRUNCATE_Msk (0x8000000UL) /*!< TX_TRUNCATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TIMER_SEL_Pos (30UL) /*!< TIMER_SEL (Bit 30) */ + #define R_ETHSW_COMMAND_CONFIG_P1_TIMER_SEL_Msk (0x40000000UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ +/* =================================================== COMMAND_CONFIG_P2 =================================================== */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_ENA_Pos (0UL) /*!< TX_ENA (Bit 0) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_ENA_Msk (0x1UL) /*!< TX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_RX_ENA_Pos (1UL) /*!< RX_ENA (Bit 1) */ + #define R_ETHSW_COMMAND_CONFIG_P2_RX_ENA_Msk (0x2UL) /*!< RX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TDMA_PREBUF_DIS_Pos (2UL) /*!< TDMA_PREBUF_DIS (Bit 2) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TDMA_PREBUF_DIS_Msk (0x4UL) /*!< TDMA_PREBUF_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_ETH_SPEED_Pos (3UL) /*!< ETH_SPEED (Bit 3) */ + #define R_ETHSW_COMMAND_CONFIG_P2_ETH_SPEED_Msk (0x8UL) /*!< ETH_SPEED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PROMIS_EN_Pos (4UL) /*!< PROMIS_EN (Bit 4) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PROMIS_EN_Msk (0x10UL) /*!< PROMIS_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PAD_EN_Pos (5UL) /*!< PAD_EN (Bit 5) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PAD_EN_Msk (0x20UL) /*!< PAD_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PAUSE_FWD_Pos (7UL) /*!< PAUSE_FWD (Bit 7) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PAUSE_FWD_Msk (0x80UL) /*!< PAUSE_FWD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PAUSE_IGNORE_Pos (8UL) /*!< PAUSE_IGNORE (Bit 8) */ + #define R_ETHSW_COMMAND_CONFIG_P2_PAUSE_IGNORE_Msk (0x100UL) /*!< PAUSE_IGNORE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_ADDR_INS_Pos (9UL) /*!< TX_ADDR_INS (Bit 9) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_ADDR_INS_Msk (0x200UL) /*!< TX_ADDR_INS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_HD_ENA_Pos (10UL) /*!< HD_ENA (Bit 10) */ + #define R_ETHSW_COMMAND_CONFIG_P2_HD_ENA_Msk (0x400UL) /*!< HD_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_CRC_APPEND_Pos (11UL) /*!< TX_CRC_APPEND (Bit 11) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_CRC_APPEND_Msk (0x800UL) /*!< TX_CRC_APPEND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_SW_RESET_Pos (13UL) /*!< SW_RESET (Bit 13) */ + #define R_ETHSW_COMMAND_CONFIG_P2_SW_RESET_Msk (0x2000UL) /*!< SW_RESET (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_CNTL_FRM_ENA_Pos (23UL) /*!< CNTL_FRM_ENA (Bit 23) */ + #define R_ETHSW_COMMAND_CONFIG_P2_CNTL_FRM_ENA_Msk (0x800000UL) /*!< CNTL_FRM_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_NO_LGTH_CHK_Pos (24UL) /*!< NO_LGTH_CHK (Bit 24) */ + #define R_ETHSW_COMMAND_CONFIG_P2_NO_LGTH_CHK_Msk (0x1000000UL) /*!< NO_LGTH_CHK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_ENA_10_Pos (25UL) /*!< ENA_10 (Bit 25) */ + #define R_ETHSW_COMMAND_CONFIG_P2_ENA_10_Msk (0x2000000UL) /*!< ENA_10 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_EFPI_SELECT_Pos (26UL) /*!< EFPI_SELECT (Bit 26) */ + #define R_ETHSW_COMMAND_CONFIG_P2_EFPI_SELECT_Msk (0x4000000UL) /*!< EFPI_SELECT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_TRUNCATE_Pos (27UL) /*!< TX_TRUNCATE (Bit 27) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TX_TRUNCATE_Msk (0x8000000UL) /*!< TX_TRUNCATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TIMER_SEL_Pos (30UL) /*!< TIMER_SEL (Bit 30) */ + #define R_ETHSW_COMMAND_CONFIG_P2_TIMER_SEL_Msk (0x40000000UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ +/* =================================================== COMMAND_CONFIG_P3 =================================================== */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_ENA_Pos (0UL) /*!< TX_ENA (Bit 0) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_ENA_Msk (0x1UL) /*!< TX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_RX_ENA_Pos (1UL) /*!< RX_ENA (Bit 1) */ + #define R_ETHSW_COMMAND_CONFIG_P3_RX_ENA_Msk (0x2UL) /*!< RX_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TDMA_PREBUF_DIS_Pos (2UL) /*!< TDMA_PREBUF_DIS (Bit 2) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TDMA_PREBUF_DIS_Msk (0x4UL) /*!< TDMA_PREBUF_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_ETH_SPEED_Pos (3UL) /*!< ETH_SPEED (Bit 3) */ + #define R_ETHSW_COMMAND_CONFIG_P3_ETH_SPEED_Msk (0x8UL) /*!< ETH_SPEED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PROMIS_EN_Pos (4UL) /*!< PROMIS_EN (Bit 4) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PROMIS_EN_Msk (0x10UL) /*!< PROMIS_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PAD_EN_Pos (5UL) /*!< PAD_EN (Bit 5) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PAD_EN_Msk (0x20UL) /*!< PAD_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PAUSE_FWD_Pos (7UL) /*!< PAUSE_FWD (Bit 7) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PAUSE_FWD_Msk (0x80UL) /*!< PAUSE_FWD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PAUSE_IGNORE_Pos (8UL) /*!< PAUSE_IGNORE (Bit 8) */ + #define R_ETHSW_COMMAND_CONFIG_P3_PAUSE_IGNORE_Msk (0x100UL) /*!< PAUSE_IGNORE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_ADDR_INS_Pos (9UL) /*!< TX_ADDR_INS (Bit 9) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_ADDR_INS_Msk (0x200UL) /*!< TX_ADDR_INS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_HD_ENA_Pos (10UL) /*!< HD_ENA (Bit 10) */ + #define R_ETHSW_COMMAND_CONFIG_P3_HD_ENA_Msk (0x400UL) /*!< HD_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_CRC_APPEND_Pos (11UL) /*!< TX_CRC_APPEND (Bit 11) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_CRC_APPEND_Msk (0x800UL) /*!< TX_CRC_APPEND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_SW_RESET_Pos (13UL) /*!< SW_RESET (Bit 13) */ + #define R_ETHSW_COMMAND_CONFIG_P3_SW_RESET_Msk (0x2000UL) /*!< SW_RESET (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_CNTL_FRM_ENA_Pos (23UL) /*!< CNTL_FRM_ENA (Bit 23) */ + #define R_ETHSW_COMMAND_CONFIG_P3_CNTL_FRM_ENA_Msk (0x800000UL) /*!< CNTL_FRM_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_NO_LGTH_CHK_Pos (24UL) /*!< NO_LGTH_CHK (Bit 24) */ + #define R_ETHSW_COMMAND_CONFIG_P3_NO_LGTH_CHK_Msk (0x1000000UL) /*!< NO_LGTH_CHK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_ENA_10_Pos (25UL) /*!< ENA_10 (Bit 25) */ + #define R_ETHSW_COMMAND_CONFIG_P3_ENA_10_Msk (0x2000000UL) /*!< ENA_10 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_EFPI_SELECT_Pos (26UL) /*!< EFPI_SELECT (Bit 26) */ + #define R_ETHSW_COMMAND_CONFIG_P3_EFPI_SELECT_Msk (0x4000000UL) /*!< EFPI_SELECT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_TRUNCATE_Pos (27UL) /*!< TX_TRUNCATE (Bit 27) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TX_TRUNCATE_Msk (0x8000000UL) /*!< TX_TRUNCATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TIMER_SEL_Pos (30UL) /*!< TIMER_SEL (Bit 30) */ + #define R_ETHSW_COMMAND_CONFIG_P3_TIMER_SEL_Msk (0x40000000UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ +/* ===================================================== MAC_ADDR_0_P0 ===================================================== */ + #define R_ETHSW_MAC_ADDR_0_P0_MAC_ADDR_Pos (0UL) /*!< MAC_ADDR (Bit 0) */ + #define R_ETHSW_MAC_ADDR_0_P0_MAC_ADDR_Msk (0xffffffffUL) /*!< MAC_ADDR (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== MAC_ADDR_0_P1 ===================================================== */ + #define R_ETHSW_MAC_ADDR_0_P1_MAC_ADDR_Pos (0UL) /*!< MAC_ADDR (Bit 0) */ + #define R_ETHSW_MAC_ADDR_0_P1_MAC_ADDR_Msk (0xffffffffUL) /*!< MAC_ADDR (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== MAC_ADDR_0_P2 ===================================================== */ + #define R_ETHSW_MAC_ADDR_0_P2_MAC_ADDR_Pos (0UL) /*!< MAC_ADDR (Bit 0) */ + #define R_ETHSW_MAC_ADDR_0_P2_MAC_ADDR_Msk (0xffffffffUL) /*!< MAC_ADDR (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== MAC_ADDR_1_P0 ===================================================== */ + #define R_ETHSW_MAC_ADDR_1_P0_MAC_ADDR_Pos (0UL) /*!< MAC_ADDR (Bit 0) */ + #define R_ETHSW_MAC_ADDR_1_P0_MAC_ADDR_Msk (0xffffUL) /*!< MAC_ADDR (Bitfield-Mask: 0xffff) */ +/* ===================================================== MAC_ADDR_1_P1 ===================================================== */ + #define R_ETHSW_MAC_ADDR_1_P1_MAC_ADDR_Pos (0UL) /*!< MAC_ADDR (Bit 0) */ + #define R_ETHSW_MAC_ADDR_1_P1_MAC_ADDR_Msk (0xffffUL) /*!< MAC_ADDR (Bitfield-Mask: 0xffff) */ +/* ===================================================== MAC_ADDR_1_P2 ===================================================== */ + #define R_ETHSW_MAC_ADDR_1_P2_MAC_ADDR_Pos (0UL) /*!< MAC_ADDR (Bit 0) */ + #define R_ETHSW_MAC_ADDR_1_P2_MAC_ADDR_Msk (0xffffUL) /*!< MAC_ADDR (Bitfield-Mask: 0xffff) */ +/* ===================================================== FRM_LENGTH_P0 ===================================================== */ + #define R_ETHSW_FRM_LENGTH_P0_FRM_LENGTH_Pos (0UL) /*!< FRM_LENGTH (Bit 0) */ + #define R_ETHSW_FRM_LENGTH_P0_FRM_LENGTH_Msk (0x3fffUL) /*!< FRM_LENGTH (Bitfield-Mask: 0x3fff) */ +/* ===================================================== FRM_LENGTH_P1 ===================================================== */ + #define R_ETHSW_FRM_LENGTH_P1_FRM_LENGTH_Pos (0UL) /*!< FRM_LENGTH (Bit 0) */ + #define R_ETHSW_FRM_LENGTH_P1_FRM_LENGTH_Msk (0x3fffUL) /*!< FRM_LENGTH (Bitfield-Mask: 0x3fff) */ +/* ===================================================== FRM_LENGTH_P2 ===================================================== */ + #define R_ETHSW_FRM_LENGTH_P2_FRM_LENGTH_Pos (0UL) /*!< FRM_LENGTH (Bit 0) */ + #define R_ETHSW_FRM_LENGTH_P2_FRM_LENGTH_Msk (0x3fffUL) /*!< FRM_LENGTH (Bitfield-Mask: 0x3fff) */ +/* ===================================================== FRM_LENGTH_P3 ===================================================== */ + #define R_ETHSW_FRM_LENGTH_P3_FRM_LENGTH_Pos (0UL) /*!< FRM_LENGTH (Bit 0) */ + #define R_ETHSW_FRM_LENGTH_P3_FRM_LENGTH_Msk (0x3fffUL) /*!< FRM_LENGTH (Bitfield-Mask: 0x3fff) */ +/* ==================================================== PAUSE_QUANT_P0 ===================================================== */ + #define R_ETHSW_PAUSE_QUANT_P0_PAUSE_QUANT_Pos (0UL) /*!< PAUSE_QUANT (Bit 0) */ + #define R_ETHSW_PAUSE_QUANT_P0_PAUSE_QUANT_Msk (0xffffUL) /*!< PAUSE_QUANT (Bitfield-Mask: 0xffff) */ +/* ==================================================== PAUSE_QUANT_P1 ===================================================== */ + #define R_ETHSW_PAUSE_QUANT_P1_PAUSE_QUANT_Pos (0UL) /*!< PAUSE_QUANT (Bit 0) */ + #define R_ETHSW_PAUSE_QUANT_P1_PAUSE_QUANT_Msk (0xffffUL) /*!< PAUSE_QUANT (Bitfield-Mask: 0xffff) */ +/* ==================================================== PAUSE_QUANT_P2 ===================================================== */ + #define R_ETHSW_PAUSE_QUANT_P2_PAUSE_QUANT_Pos (0UL) /*!< PAUSE_QUANT (Bit 0) */ + #define R_ETHSW_PAUSE_QUANT_P2_PAUSE_QUANT_Msk (0xffffUL) /*!< PAUSE_QUANT (Bitfield-Mask: 0xffff) */ +/* ==================================================== PAUSE_QUANT_P3 ===================================================== */ + #define R_ETHSW_PAUSE_QUANT_P3_PAUSE_QUANT_Pos (0UL) /*!< PAUSE_QUANT (Bit 0) */ + #define R_ETHSW_PAUSE_QUANT_P3_PAUSE_QUANT_Msk (0xffffUL) /*!< PAUSE_QUANT (Bitfield-Mask: 0xffff) */ +/* =================================================== MAC_LINK_QTRIG_P0 =================================================== */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_PORT_MASK_Pos (0UL) /*!< PORT_MASK (Bit 0) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_PORT_MASK_Msk (0xfUL) /*!< PORT_MASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_QUEUE_MASK_Pos (16UL) /*!< QUEUE_MASK (Bit 16) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_QUEUE_MASK_Msk (0xff0000UL) /*!< QUEUE_MASK (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_TRIGGERED_Pos (28UL) /*!< TRIGGERED (Bit 28) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_TRIGGERED_Msk (0x10000000UL) /*!< TRIGGERED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_DLR_MODE_Pos (29UL) /*!< DLR_MODE (Bit 29) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_DLR_MODE_Msk (0x20000000UL) /*!< DLR_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_MODE_Pos (30UL) /*!< MODE (Bit 30) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_MODE_Msk (0x40000000UL) /*!< MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_ENABLE_Pos (31UL) /*!< ENABLE (Bit 31) */ + #define R_ETHSW_MAC_LINK_QTRIG_P0_ENABLE_Msk (0x80000000UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* =================================================== MAC_LINK_QTRIG_P1 =================================================== */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_PORT_MASK_Pos (0UL) /*!< PORT_MASK (Bit 0) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_PORT_MASK_Msk (0xfUL) /*!< PORT_MASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_QUEUE_MASK_Pos (16UL) /*!< QUEUE_MASK (Bit 16) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_QUEUE_MASK_Msk (0xff0000UL) /*!< QUEUE_MASK (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_TRIGGERED_Pos (28UL) /*!< TRIGGERED (Bit 28) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_TRIGGERED_Msk (0x10000000UL) /*!< TRIGGERED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_DLR_MODE_Pos (29UL) /*!< DLR_MODE (Bit 29) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_DLR_MODE_Msk (0x20000000UL) /*!< DLR_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_MODE_Pos (30UL) /*!< MODE (Bit 30) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_MODE_Msk (0x40000000UL) /*!< MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_ENABLE_Pos (31UL) /*!< ENABLE (Bit 31) */ + #define R_ETHSW_MAC_LINK_QTRIG_P1_ENABLE_Msk (0x80000000UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* =================================================== MAC_LINK_QTRIG_P2 =================================================== */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_PORT_MASK_Pos (0UL) /*!< PORT_MASK (Bit 0) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_PORT_MASK_Msk (0xfUL) /*!< PORT_MASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_QUEUE_MASK_Pos (16UL) /*!< QUEUE_MASK (Bit 16) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_QUEUE_MASK_Msk (0xff0000UL) /*!< QUEUE_MASK (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_TRIGGERED_Pos (28UL) /*!< TRIGGERED (Bit 28) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_TRIGGERED_Msk (0x10000000UL) /*!< TRIGGERED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_DLR_MODE_Pos (29UL) /*!< DLR_MODE (Bit 29) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_DLR_MODE_Msk (0x20000000UL) /*!< DLR_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_MODE_Pos (30UL) /*!< MODE (Bit 30) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_MODE_Msk (0x40000000UL) /*!< MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_ENABLE_Pos (31UL) /*!< ENABLE (Bit 31) */ + #define R_ETHSW_MAC_LINK_QTRIG_P2_ENABLE_Msk (0x80000000UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* ================================================= PTPCLOCKIDENTITY1_P0 ================================================== */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY0_Pos (0UL) /*!< CLK_IDENTITY0 (Bit 0) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY0_Msk (0xffUL) /*!< CLK_IDENTITY0 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY1_Pos (8UL) /*!< CLK_IDENTITY1 (Bit 8) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY1_Msk (0xff00UL) /*!< CLK_IDENTITY1 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY2_Pos (16UL) /*!< CLK_IDENTITY2 (Bit 16) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY2_Msk (0xff0000UL) /*!< CLK_IDENTITY2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY3_Pos (24UL) /*!< CLK_IDENTITY3 (Bit 24) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P0_CLK_IDENTITY3_Msk (0xff000000UL) /*!< CLK_IDENTITY3 (Bitfield-Mask: 0xff) */ +/* ================================================= PTPCLOCKIDENTITY1_P1 ================================================== */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY0_Pos (0UL) /*!< CLK_IDENTITY0 (Bit 0) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY0_Msk (0xffUL) /*!< CLK_IDENTITY0 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY1_Pos (8UL) /*!< CLK_IDENTITY1 (Bit 8) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY1_Msk (0xff00UL) /*!< CLK_IDENTITY1 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY2_Pos (16UL) /*!< CLK_IDENTITY2 (Bit 16) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY2_Msk (0xff0000UL) /*!< CLK_IDENTITY2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY3_Pos (24UL) /*!< CLK_IDENTITY3 (Bit 24) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P1_CLK_IDENTITY3_Msk (0xff000000UL) /*!< CLK_IDENTITY3 (Bitfield-Mask: 0xff) */ +/* ================================================= PTPCLOCKIDENTITY1_P2 ================================================== */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY0_Pos (0UL) /*!< CLK_IDENTITY0 (Bit 0) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY0_Msk (0xffUL) /*!< CLK_IDENTITY0 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY1_Pos (8UL) /*!< CLK_IDENTITY1 (Bit 8) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY1_Msk (0xff00UL) /*!< CLK_IDENTITY1 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY2_Pos (16UL) /*!< CLK_IDENTITY2 (Bit 16) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY2_Msk (0xff0000UL) /*!< CLK_IDENTITY2 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY3_Pos (24UL) /*!< CLK_IDENTITY3 (Bit 24) */ + #define R_ETHSW_PTPCLOCKIDENTITY1_P2_CLK_IDENTITY3_Msk (0xff000000UL) /*!< CLK_IDENTITY3 (Bitfield-Mask: 0xff) */ +/* ================================================= PTPCLOCKIDENTITY2_P0 ================================================== */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY4_Pos (0UL) /*!< CLK_IDENTITY4 (Bit 0) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY4_Msk (0xffUL) /*!< CLK_IDENTITY4 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY5_Pos (8UL) /*!< CLK_IDENTITY5 (Bit 8) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY5_Msk (0xff00UL) /*!< CLK_IDENTITY5 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY6_Pos (16UL) /*!< CLK_IDENTITY6 (Bit 16) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY6_Msk (0xff0000UL) /*!< CLK_IDENTITY6 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY7_Pos (24UL) /*!< CLK_IDENTITY7 (Bit 24) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P0_CLK_IDENTITY7_Msk (0xff000000UL) /*!< CLK_IDENTITY7 (Bitfield-Mask: 0xff) */ +/* ================================================= PTPCLOCKIDENTITY2_P1 ================================================== */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY4_Pos (0UL) /*!< CLK_IDENTITY4 (Bit 0) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY4_Msk (0xffUL) /*!< CLK_IDENTITY4 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY5_Pos (8UL) /*!< CLK_IDENTITY5 (Bit 8) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY5_Msk (0xff00UL) /*!< CLK_IDENTITY5 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY6_Pos (16UL) /*!< CLK_IDENTITY6 (Bit 16) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY6_Msk (0xff0000UL) /*!< CLK_IDENTITY6 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY7_Pos (24UL) /*!< CLK_IDENTITY7 (Bit 24) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P1_CLK_IDENTITY7_Msk (0xff000000UL) /*!< CLK_IDENTITY7 (Bitfield-Mask: 0xff) */ +/* ================================================= PTPCLOCKIDENTITY2_P2 ================================================== */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY4_Pos (0UL) /*!< CLK_IDENTITY4 (Bit 0) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY4_Msk (0xffUL) /*!< CLK_IDENTITY4 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY5_Pos (8UL) /*!< CLK_IDENTITY5 (Bit 8) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY5_Msk (0xff00UL) /*!< CLK_IDENTITY5 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY6_Pos (16UL) /*!< CLK_IDENTITY6 (Bit 16) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY6_Msk (0xff0000UL) /*!< CLK_IDENTITY6 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY7_Pos (24UL) /*!< CLK_IDENTITY7 (Bit 24) */ + #define R_ETHSW_PTPCLOCKIDENTITY2_P2_CLK_IDENTITY7_Msk (0xff000000UL) /*!< CLK_IDENTITY7 (Bitfield-Mask: 0xff) */ +/* ================================================== PTPAUTORESPONSE_P0 =================================================== */ + #define R_ETHSW_PTPAUTORESPONSE_P0_ARSP_EN_Pos (0UL) /*!< ARSP_EN (Bit 0) */ + #define R_ETHSW_PTPAUTORESPONSE_P0_ARSP_EN_Msk (0x1UL) /*!< ARSP_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTPAUTORESPONSE_P0_D_TIMER_Pos (1UL) /*!< D_TIMER (Bit 1) */ + #define R_ETHSW_PTPAUTORESPONSE_P0_D_TIMER_Msk (0x2UL) /*!< D_TIMER (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTPAUTORESPONSE_P0_PORTNUM1_Pos (16UL) /*!< PORTNUM1 (Bit 16) */ + #define R_ETHSW_PTPAUTORESPONSE_P0_PORTNUM1_Msk (0xff0000UL) /*!< PORTNUM1 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPAUTORESPONSE_P0_PORTNUM0_Pos (24UL) /*!< PORTNUM0 (Bit 24) */ + #define R_ETHSW_PTPAUTORESPONSE_P0_PORTNUM0_Msk (0xff000000UL) /*!< PORTNUM0 (Bitfield-Mask: 0xff) */ +/* ================================================== PTPAUTORESPONSE_P1 =================================================== */ + #define R_ETHSW_PTPAUTORESPONSE_P1_ARSP_EN_Pos (0UL) /*!< ARSP_EN (Bit 0) */ + #define R_ETHSW_PTPAUTORESPONSE_P1_ARSP_EN_Msk (0x1UL) /*!< ARSP_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTPAUTORESPONSE_P1_D_TIMER_Pos (1UL) /*!< D_TIMER (Bit 1) */ + #define R_ETHSW_PTPAUTORESPONSE_P1_D_TIMER_Msk (0x2UL) /*!< D_TIMER (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTPAUTORESPONSE_P1_PORTNUM1_Pos (16UL) /*!< PORTNUM1 (Bit 16) */ + #define R_ETHSW_PTPAUTORESPONSE_P1_PORTNUM1_Msk (0xff0000UL) /*!< PORTNUM1 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPAUTORESPONSE_P1_PORTNUM0_Pos (24UL) /*!< PORTNUM0 (Bit 24) */ + #define R_ETHSW_PTPAUTORESPONSE_P1_PORTNUM0_Msk (0xff000000UL) /*!< PORTNUM0 (Bitfield-Mask: 0xff) */ +/* ================================================== PTPAUTORESPONSE_P2 =================================================== */ + #define R_ETHSW_PTPAUTORESPONSE_P2_ARSP_EN_Pos (0UL) /*!< ARSP_EN (Bit 0) */ + #define R_ETHSW_PTPAUTORESPONSE_P2_ARSP_EN_Msk (0x1UL) /*!< ARSP_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTPAUTORESPONSE_P2_D_TIMER_Pos (1UL) /*!< D_TIMER (Bit 1) */ + #define R_ETHSW_PTPAUTORESPONSE_P2_D_TIMER_Msk (0x2UL) /*!< D_TIMER (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PTPAUTORESPONSE_P2_PORTNUM1_Pos (16UL) /*!< PORTNUM1 (Bit 16) */ + #define R_ETHSW_PTPAUTORESPONSE_P2_PORTNUM1_Msk (0xff0000UL) /*!< PORTNUM1 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_PTPAUTORESPONSE_P2_PORTNUM0_Pos (24UL) /*!< PORTNUM0 (Bit 24) */ + #define R_ETHSW_PTPAUTORESPONSE_P2_PORTNUM0_Msk (0xff000000UL) /*!< PORTNUM0 (Bitfield-Mask: 0xff) */ +/* ======================================================= STATUS_P0 ======================================================= */ + #define R_ETHSW_STATUS_P0_PHYSPEED_Pos (0UL) /*!< PHYSPEED (Bit 0) */ + #define R_ETHSW_STATUS_P0_PHYSPEED_Msk (0x3UL) /*!< PHYSPEED (Bitfield-Mask: 0x03) */ + #define R_ETHSW_STATUS_P0_PHYLINK_Pos (2UL) /*!< PHYLINK (Bit 2) */ + #define R_ETHSW_STATUS_P0_PHYLINK_Msk (0x4UL) /*!< PHYLINK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P0_PHYDUPLEX_Pos (3UL) /*!< PHYDUPLEX (Bit 3) */ + #define R_ETHSW_STATUS_P0_PHYDUPLEX_Msk (0x8UL) /*!< PHYDUPLEX (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P0_TX_UNDFLW_Pos (4UL) /*!< TX_UNDFLW (Bit 4) */ + #define R_ETHSW_STATUS_P0_TX_UNDFLW_Msk (0x10UL) /*!< TX_UNDFLW (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P0_LK_DST_ERR_Pos (5UL) /*!< LK_DST_ERR (Bit 5) */ + #define R_ETHSW_STATUS_P0_LK_DST_ERR_Msk (0x20UL) /*!< LK_DST_ERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P0_BR_VERIF_ST_Pos (6UL) /*!< BR_VERIF_ST (Bit 6) */ + #define R_ETHSW_STATUS_P0_BR_VERIF_ST_Msk (0x1c0UL) /*!< BR_VERIF_ST (Bitfield-Mask: 0x07) */ +/* ======================================================= STATUS_P1 ======================================================= */ + #define R_ETHSW_STATUS_P1_PHYSPEED_Pos (0UL) /*!< PHYSPEED (Bit 0) */ + #define R_ETHSW_STATUS_P1_PHYSPEED_Msk (0x3UL) /*!< PHYSPEED (Bitfield-Mask: 0x03) */ + #define R_ETHSW_STATUS_P1_PHYLINK_Pos (2UL) /*!< PHYLINK (Bit 2) */ + #define R_ETHSW_STATUS_P1_PHYLINK_Msk (0x4UL) /*!< PHYLINK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P1_PHYDUPLEX_Pos (3UL) /*!< PHYDUPLEX (Bit 3) */ + #define R_ETHSW_STATUS_P1_PHYDUPLEX_Msk (0x8UL) /*!< PHYDUPLEX (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P1_TX_UNDFLW_Pos (4UL) /*!< TX_UNDFLW (Bit 4) */ + #define R_ETHSW_STATUS_P1_TX_UNDFLW_Msk (0x10UL) /*!< TX_UNDFLW (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P1_LK_DST_ERR_Pos (5UL) /*!< LK_DST_ERR (Bit 5) */ + #define R_ETHSW_STATUS_P1_LK_DST_ERR_Msk (0x20UL) /*!< LK_DST_ERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P1_BR_VERIF_ST_Pos (6UL) /*!< BR_VERIF_ST (Bit 6) */ + #define R_ETHSW_STATUS_P1_BR_VERIF_ST_Msk (0x1c0UL) /*!< BR_VERIF_ST (Bitfield-Mask: 0x07) */ +/* ======================================================= STATUS_P2 ======================================================= */ + #define R_ETHSW_STATUS_P2_PHYSPEED_Pos (0UL) /*!< PHYSPEED (Bit 0) */ + #define R_ETHSW_STATUS_P2_PHYSPEED_Msk (0x3UL) /*!< PHYSPEED (Bitfield-Mask: 0x03) */ + #define R_ETHSW_STATUS_P2_PHYLINK_Pos (2UL) /*!< PHYLINK (Bit 2) */ + #define R_ETHSW_STATUS_P2_PHYLINK_Msk (0x4UL) /*!< PHYLINK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P2_PHYDUPLEX_Pos (3UL) /*!< PHYDUPLEX (Bit 3) */ + #define R_ETHSW_STATUS_P2_PHYDUPLEX_Msk (0x8UL) /*!< PHYDUPLEX (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P2_TX_UNDFLW_Pos (4UL) /*!< TX_UNDFLW (Bit 4) */ + #define R_ETHSW_STATUS_P2_TX_UNDFLW_Msk (0x10UL) /*!< TX_UNDFLW (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P2_LK_DST_ERR_Pos (5UL) /*!< LK_DST_ERR (Bit 5) */ + #define R_ETHSW_STATUS_P2_LK_DST_ERR_Msk (0x20UL) /*!< LK_DST_ERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P2_BR_VERIF_ST_Pos (6UL) /*!< BR_VERIF_ST (Bit 6) */ + #define R_ETHSW_STATUS_P2_BR_VERIF_ST_Msk (0x1c0UL) /*!< BR_VERIF_ST (Bitfield-Mask: 0x07) */ +/* ======================================================= STATUS_P3 ======================================================= */ + #define R_ETHSW_STATUS_P3_PHYSPEED_Pos (0UL) /*!< PHYSPEED (Bit 0) */ + #define R_ETHSW_STATUS_P3_PHYSPEED_Msk (0x3UL) /*!< PHYSPEED (Bitfield-Mask: 0x03) */ + #define R_ETHSW_STATUS_P3_PHYLINK_Pos (2UL) /*!< PHYLINK (Bit 2) */ + #define R_ETHSW_STATUS_P3_PHYLINK_Msk (0x4UL) /*!< PHYLINK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P3_PHYDUPLEX_Pos (3UL) /*!< PHYDUPLEX (Bit 3) */ + #define R_ETHSW_STATUS_P3_PHYDUPLEX_Msk (0x8UL) /*!< PHYDUPLEX (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P3_TX_UNDFLW_Pos (4UL) /*!< TX_UNDFLW (Bit 4) */ + #define R_ETHSW_STATUS_P3_TX_UNDFLW_Msk (0x10UL) /*!< TX_UNDFLW (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P3_LK_DST_ERR_Pos (5UL) /*!< LK_DST_ERR (Bit 5) */ + #define R_ETHSW_STATUS_P3_LK_DST_ERR_Msk (0x20UL) /*!< LK_DST_ERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATUS_P3_BR_VERIF_ST_Pos (6UL) /*!< BR_VERIF_ST (Bit 6) */ + #define R_ETHSW_STATUS_P3_BR_VERIF_ST_Msk (0x1c0UL) /*!< BR_VERIF_ST (Bitfield-Mask: 0x07) */ +/* =================================================== TX_IPG_LENGTH_P0 ==================================================== */ + #define R_ETHSW_TX_IPG_LENGTH_P0_TX_IPG_LENGTH_Pos (0UL) /*!< TX_IPG_LENGTH (Bit 0) */ + #define R_ETHSW_TX_IPG_LENGTH_P0_TX_IPG_LENGTH_Msk (0x1fUL) /*!< TX_IPG_LENGTH (Bitfield-Mask: 0x1f) */ + #define R_ETHSW_TX_IPG_LENGTH_P0_MINRTC3GAP_Pos (16UL) /*!< MINRTC3GAP (Bit 16) */ + #define R_ETHSW_TX_IPG_LENGTH_P0_MINRTC3GAP_Msk (0x1f0000UL) /*!< MINRTC3GAP (Bitfield-Mask: 0x1f) */ +/* =================================================== TX_IPG_LENGTH_P1 ==================================================== */ + #define R_ETHSW_TX_IPG_LENGTH_P1_TX_IPG_LENGTH_Pos (0UL) /*!< TX_IPG_LENGTH (Bit 0) */ + #define R_ETHSW_TX_IPG_LENGTH_P1_TX_IPG_LENGTH_Msk (0x1fUL) /*!< TX_IPG_LENGTH (Bitfield-Mask: 0x1f) */ + #define R_ETHSW_TX_IPG_LENGTH_P1_MINRTC3GAP_Pos (16UL) /*!< MINRTC3GAP (Bit 16) */ + #define R_ETHSW_TX_IPG_LENGTH_P1_MINRTC3GAP_Msk (0x1f0000UL) /*!< MINRTC3GAP (Bitfield-Mask: 0x1f) */ +/* =================================================== TX_IPG_LENGTH_P2 ==================================================== */ + #define R_ETHSW_TX_IPG_LENGTH_P2_TX_IPG_LENGTH_Pos (0UL) /*!< TX_IPG_LENGTH (Bit 0) */ + #define R_ETHSW_TX_IPG_LENGTH_P2_TX_IPG_LENGTH_Msk (0x1fUL) /*!< TX_IPG_LENGTH (Bitfield-Mask: 0x1f) */ + #define R_ETHSW_TX_IPG_LENGTH_P2_MINRTC3GAP_Pos (16UL) /*!< MINRTC3GAP (Bit 16) */ + #define R_ETHSW_TX_IPG_LENGTH_P2_MINRTC3GAP_Msk (0x1f0000UL) /*!< MINRTC3GAP (Bitfield-Mask: 0x1f) */ +/* =================================================== TX_IPG_LENGTH_P3 ==================================================== */ + #define R_ETHSW_TX_IPG_LENGTH_P3_TX_IPG_LENGTH_Pos (0UL) /*!< TX_IPG_LENGTH (Bit 0) */ + #define R_ETHSW_TX_IPG_LENGTH_P3_TX_IPG_LENGTH_Msk (0x1fUL) /*!< TX_IPG_LENGTH (Bitfield-Mask: 0x1f) */ + #define R_ETHSW_TX_IPG_LENGTH_P3_MINRTC3GAP_Pos (16UL) /*!< MINRTC3GAP (Bit 16) */ + #define R_ETHSW_TX_IPG_LENGTH_P3_MINRTC3GAP_Msk (0x1f0000UL) /*!< MINRTC3GAP (Bitfield-Mask: 0x1f) */ +/* ==================================================== EEE_CTL_STAT_P0 ==================================================== */ + #define R_ETHSW_EEE_CTL_STAT_P0_EEE_AUTO_Pos (0UL) /*!< EEE_AUTO (Bit 0) */ + #define R_ETHSW_EEE_CTL_STAT_P0_EEE_AUTO_Msk (0x1UL) /*!< EEE_AUTO (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_LPI_REQ_Pos (1UL) /*!< LPI_REQ (Bit 1) */ + #define R_ETHSW_EEE_CTL_STAT_P0_LPI_REQ_Msk (0x2UL) /*!< LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_LPI_TXHOLD_Pos (2UL) /*!< LPI_TXHOLD (Bit 2) */ + #define R_ETHSW_EEE_CTL_STAT_P0_LPI_TXHOLD_Msk (0x4UL) /*!< LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_LPI_REQ_Pos (8UL) /*!< ST_LPI_REQ (Bit 8) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_LPI_REQ_Msk (0x100UL) /*!< ST_LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_LPI_TXHOLD_Pos (9UL) /*!< ST_LPI_TXHOLD (Bit 9) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_LPI_TXHOLD_Msk (0x200UL) /*!< ST_LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_TXBUSY_Pos (10UL) /*!< ST_TXBUSY (Bit 10) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_TXBUSY_Msk (0x400UL) /*!< ST_TXBUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_TXAVAIL_Pos (11UL) /*!< ST_TXAVAIL (Bit 11) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_TXAVAIL_Msk (0x800UL) /*!< ST_TXAVAIL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_LPI_IND_Pos (12UL) /*!< ST_LPI_IND (Bit 12) */ + #define R_ETHSW_EEE_CTL_STAT_P0_ST_LPI_IND_Msk (0x1000UL) /*!< ST_LPI_IND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_LPI_REQ_Pos (16UL) /*!< STLH_LPI_REQ (Bit 16) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_LPI_REQ_Msk (0x10000UL) /*!< STLH_LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_LPI_TXHOLD_Pos (17UL) /*!< STLH_LPI_TXHOLD (Bit 17) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_LPI_TXHOLD_Msk (0x20000UL) /*!< STLH_LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_TXBUSY_Pos (18UL) /*!< STLH_TXBUSY (Bit 18) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_TXBUSY_Msk (0x40000UL) /*!< STLH_TXBUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_LPI_IND_Pos (20UL) /*!< STLH_LPI_IND (Bit 20) */ + #define R_ETHSW_EEE_CTL_STAT_P0_STLH_LPI_IND_Msk (0x100000UL) /*!< STLH_LPI_IND (Bitfield-Mask: 0x01) */ +/* ==================================================== EEE_CTL_STAT_P1 ==================================================== */ + #define R_ETHSW_EEE_CTL_STAT_P1_EEE_AUTO_Pos (0UL) /*!< EEE_AUTO (Bit 0) */ + #define R_ETHSW_EEE_CTL_STAT_P1_EEE_AUTO_Msk (0x1UL) /*!< EEE_AUTO (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_LPI_REQ_Pos (1UL) /*!< LPI_REQ (Bit 1) */ + #define R_ETHSW_EEE_CTL_STAT_P1_LPI_REQ_Msk (0x2UL) /*!< LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_LPI_TXHOLD_Pos (2UL) /*!< LPI_TXHOLD (Bit 2) */ + #define R_ETHSW_EEE_CTL_STAT_P1_LPI_TXHOLD_Msk (0x4UL) /*!< LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_LPI_REQ_Pos (8UL) /*!< ST_LPI_REQ (Bit 8) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_LPI_REQ_Msk (0x100UL) /*!< ST_LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_LPI_TXHOLD_Pos (9UL) /*!< ST_LPI_TXHOLD (Bit 9) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_LPI_TXHOLD_Msk (0x200UL) /*!< ST_LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_TXBUSY_Pos (10UL) /*!< ST_TXBUSY (Bit 10) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_TXBUSY_Msk (0x400UL) /*!< ST_TXBUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_TXAVAIL_Pos (11UL) /*!< ST_TXAVAIL (Bit 11) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_TXAVAIL_Msk (0x800UL) /*!< ST_TXAVAIL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_LPI_IND_Pos (12UL) /*!< ST_LPI_IND (Bit 12) */ + #define R_ETHSW_EEE_CTL_STAT_P1_ST_LPI_IND_Msk (0x1000UL) /*!< ST_LPI_IND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_LPI_REQ_Pos (16UL) /*!< STLH_LPI_REQ (Bit 16) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_LPI_REQ_Msk (0x10000UL) /*!< STLH_LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_LPI_TXHOLD_Pos (17UL) /*!< STLH_LPI_TXHOLD (Bit 17) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_LPI_TXHOLD_Msk (0x20000UL) /*!< STLH_LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_TXBUSY_Pos (18UL) /*!< STLH_TXBUSY (Bit 18) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_TXBUSY_Msk (0x40000UL) /*!< STLH_TXBUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_LPI_IND_Pos (20UL) /*!< STLH_LPI_IND (Bit 20) */ + #define R_ETHSW_EEE_CTL_STAT_P1_STLH_LPI_IND_Msk (0x100000UL) /*!< STLH_LPI_IND (Bitfield-Mask: 0x01) */ +/* ==================================================== EEE_CTL_STAT_P2 ==================================================== */ + #define R_ETHSW_EEE_CTL_STAT_P2_EEE_AUTO_Pos (0UL) /*!< EEE_AUTO (Bit 0) */ + #define R_ETHSW_EEE_CTL_STAT_P2_EEE_AUTO_Msk (0x1UL) /*!< EEE_AUTO (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_LPI_REQ_Pos (1UL) /*!< LPI_REQ (Bit 1) */ + #define R_ETHSW_EEE_CTL_STAT_P2_LPI_REQ_Msk (0x2UL) /*!< LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_LPI_TXHOLD_Pos (2UL) /*!< LPI_TXHOLD (Bit 2) */ + #define R_ETHSW_EEE_CTL_STAT_P2_LPI_TXHOLD_Msk (0x4UL) /*!< LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_LPI_REQ_Pos (8UL) /*!< ST_LPI_REQ (Bit 8) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_LPI_REQ_Msk (0x100UL) /*!< ST_LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_LPI_TXHOLD_Pos (9UL) /*!< ST_LPI_TXHOLD (Bit 9) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_LPI_TXHOLD_Msk (0x200UL) /*!< ST_LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_TXBUSY_Pos (10UL) /*!< ST_TXBUSY (Bit 10) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_TXBUSY_Msk (0x400UL) /*!< ST_TXBUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_TXAVAIL_Pos (11UL) /*!< ST_TXAVAIL (Bit 11) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_TXAVAIL_Msk (0x800UL) /*!< ST_TXAVAIL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_LPI_IND_Pos (12UL) /*!< ST_LPI_IND (Bit 12) */ + #define R_ETHSW_EEE_CTL_STAT_P2_ST_LPI_IND_Msk (0x1000UL) /*!< ST_LPI_IND (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_LPI_REQ_Pos (16UL) /*!< STLH_LPI_REQ (Bit 16) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_LPI_REQ_Msk (0x10000UL) /*!< STLH_LPI_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_LPI_TXHOLD_Pos (17UL) /*!< STLH_LPI_TXHOLD (Bit 17) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_LPI_TXHOLD_Msk (0x20000UL) /*!< STLH_LPI_TXHOLD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_TXBUSY_Pos (18UL) /*!< STLH_TXBUSY (Bit 18) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_TXBUSY_Msk (0x40000UL) /*!< STLH_TXBUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_LPI_IND_Pos (20UL) /*!< STLH_LPI_IND (Bit 20) */ + #define R_ETHSW_EEE_CTL_STAT_P2_STLH_LPI_IND_Msk (0x100000UL) /*!< STLH_LPI_IND (Bitfield-Mask: 0x01) */ +/* =================================================== EEE_IDLE_TIME_P0 ==================================================== */ + #define R_ETHSW_EEE_IDLE_TIME_P0_EEE_IDLE_TIME_Pos (0UL) /*!< EEE_IDLE_TIME (Bit 0) */ + #define R_ETHSW_EEE_IDLE_TIME_P0_EEE_IDLE_TIME_Msk (0xffffffffUL) /*!< EEE_IDLE_TIME (Bitfield-Mask: 0xffffffff) */ +/* =================================================== EEE_IDLE_TIME_P1 ==================================================== */ + #define R_ETHSW_EEE_IDLE_TIME_P1_EEE_IDLE_TIME_Pos (0UL) /*!< EEE_IDLE_TIME (Bit 0) */ + #define R_ETHSW_EEE_IDLE_TIME_P1_EEE_IDLE_TIME_Msk (0xffffffffUL) /*!< EEE_IDLE_TIME (Bitfield-Mask: 0xffffffff) */ +/* =================================================== EEE_IDLE_TIME_P2 ==================================================== */ + #define R_ETHSW_EEE_IDLE_TIME_P2_EEE_IDLE_TIME_Pos (0UL) /*!< EEE_IDLE_TIME (Bit 0) */ + #define R_ETHSW_EEE_IDLE_TIME_P2_EEE_IDLE_TIME_Msk (0xffffffffUL) /*!< EEE_IDLE_TIME (Bitfield-Mask: 0xffffffff) */ +/* =================================================== EEE_TWSYS_TIME_P0 =================================================== */ + #define R_ETHSW_EEE_TWSYS_TIME_P0_EEE_WKUP_TIME_Pos (0UL) /*!< EEE_WKUP_TIME (Bit 0) */ + #define R_ETHSW_EEE_TWSYS_TIME_P0_EEE_WKUP_TIME_Msk (0xffffffffUL) /*!< EEE_WKUP_TIME (Bitfield-Mask: 0xffffffff) */ +/* =================================================== EEE_TWSYS_TIME_P1 =================================================== */ + #define R_ETHSW_EEE_TWSYS_TIME_P1_EEE_WKUP_TIME_Pos (0UL) /*!< EEE_WKUP_TIME (Bit 0) */ + #define R_ETHSW_EEE_TWSYS_TIME_P1_EEE_WKUP_TIME_Msk (0xffffffffUL) /*!< EEE_WKUP_TIME (Bitfield-Mask: 0xffffffff) */ +/* =================================================== EEE_TWSYS_TIME_P2 =================================================== */ + #define R_ETHSW_EEE_TWSYS_TIME_P2_EEE_WKUP_TIME_Pos (0UL) /*!< EEE_WKUP_TIME (Bit 0) */ + #define R_ETHSW_EEE_TWSYS_TIME_P2_EEE_WKUP_TIME_Msk (0xffffffffUL) /*!< EEE_WKUP_TIME (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IDLE_SLOPE_P0 ===================================================== */ + #define R_ETHSW_IDLE_SLOPE_P0_IDLE_SLOPE_Pos (0UL) /*!< IDLE_SLOPE (Bit 0) */ + #define R_ETHSW_IDLE_SLOPE_P0_IDLE_SLOPE_Msk (0x7ffUL) /*!< IDLE_SLOPE (Bitfield-Mask: 0x7ff) */ +/* ===================================================== IDLE_SLOPE_P1 ===================================================== */ + #define R_ETHSW_IDLE_SLOPE_P1_IDLE_SLOPE_Pos (0UL) /*!< IDLE_SLOPE (Bit 0) */ + #define R_ETHSW_IDLE_SLOPE_P1_IDLE_SLOPE_Msk (0x7ffUL) /*!< IDLE_SLOPE (Bitfield-Mask: 0x7ff) */ +/* ===================================================== IDLE_SLOPE_P2 ===================================================== */ + #define R_ETHSW_IDLE_SLOPE_P2_IDLE_SLOPE_Pos (0UL) /*!< IDLE_SLOPE (Bit 0) */ + #define R_ETHSW_IDLE_SLOPE_P2_IDLE_SLOPE_Msk (0x7ffUL) /*!< IDLE_SLOPE (Bitfield-Mask: 0x7ff) */ +/* ===================================================== IDLE_SLOPE_P3 ===================================================== */ + #define R_ETHSW_IDLE_SLOPE_P3_IDLE_SLOPE_Pos (0UL) /*!< IDLE_SLOPE (Bit 0) */ + #define R_ETHSW_IDLE_SLOPE_P3_IDLE_SLOPE_Msk (0x7ffUL) /*!< IDLE_SLOPE (Bitfield-Mask: 0x7ff) */ +/* ====================================================== CT_DELAY_P0 ====================================================== */ + #define R_ETHSW_CT_DELAY_P0_CT_DELAY_Pos (0UL) /*!< CT_DELAY (Bit 0) */ + #define R_ETHSW_CT_DELAY_P0_CT_DELAY_Msk (0x1ffUL) /*!< CT_DELAY (Bitfield-Mask: 0x1ff) */ +/* ====================================================== CT_DELAY_P1 ====================================================== */ + #define R_ETHSW_CT_DELAY_P1_CT_DELAY_Pos (0UL) /*!< CT_DELAY (Bit 0) */ + #define R_ETHSW_CT_DELAY_P1_CT_DELAY_Msk (0x1ffUL) /*!< CT_DELAY (Bitfield-Mask: 0x1ff) */ +/* ====================================================== CT_DELAY_P2 ====================================================== */ + #define R_ETHSW_CT_DELAY_P2_CT_DELAY_Pos (0UL) /*!< CT_DELAY (Bit 0) */ + #define R_ETHSW_CT_DELAY_P2_CT_DELAY_Msk (0x1ffUL) /*!< CT_DELAY (Bitfield-Mask: 0x1ff) */ +/* ===================================================== BR_CONTROL_P0 ===================================================== */ + #define R_ETHSW_BR_CONTROL_P0_PREEMPT_ENA_Pos (0UL) /*!< PREEMPT_ENA (Bit 0) */ + #define R_ETHSW_BR_CONTROL_P0_PREEMPT_ENA_Msk (0x1UL) /*!< PREEMPT_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P0_VERIFY_DIS_Pos (1UL) /*!< VERIFY_DIS (Bit 1) */ + #define R_ETHSW_BR_CONTROL_P0_VERIFY_DIS_Msk (0x2UL) /*!< VERIFY_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P0_RESPONSE_DIS_Pos (2UL) /*!< RESPONSE_DIS (Bit 2) */ + #define R_ETHSW_BR_CONTROL_P0_RESPONSE_DIS_Msk (0x4UL) /*!< RESPONSE_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P0_ADDFRAGSIZE_Pos (4UL) /*!< ADDFRAGSIZE (Bit 4) */ + #define R_ETHSW_BR_CONTROL_P0_ADDFRAGSIZE_Msk (0x30UL) /*!< ADDFRAGSIZE (Bitfield-Mask: 0x03) */ + #define R_ETHSW_BR_CONTROL_P0_TX_VERIFY_TIME_Pos (8UL) /*!< TX_VERIFY_TIME (Bit 8) */ + #define R_ETHSW_BR_CONTROL_P0_TX_VERIFY_TIME_Msk (0x7f00UL) /*!< TX_VERIFY_TIME (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_BR_CONTROL_P0_RX_STRICT_PRE_Pos (16UL) /*!< RX_STRICT_PRE (Bit 16) */ + #define R_ETHSW_BR_CONTROL_P0_RX_STRICT_PRE_Msk (0x10000UL) /*!< RX_STRICT_PRE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P0_RX_BR_SMD_DIS_Pos (17UL) /*!< RX_BR_SMD_DIS (Bit 17) */ + #define R_ETHSW_BR_CONTROL_P0_RX_BR_SMD_DIS_Msk (0x20000UL) /*!< RX_BR_SMD_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P0_RX_STRICT_BR_CTL_Pos (18UL) /*!< RX_STRICT_BR_CTL (Bit 18) */ + #define R_ETHSW_BR_CONTROL_P0_RX_STRICT_BR_CTL_Msk (0x40000UL) /*!< RX_STRICT_BR_CTL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P0_TX_MCRC_INV_Pos (19UL) /*!< TX_MCRC_INV (Bit 19) */ + #define R_ETHSW_BR_CONTROL_P0_TX_MCRC_INV_Msk (0x80000UL) /*!< TX_MCRC_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P0_RX_MCRC_INV_Pos (20UL) /*!< RX_MCRC_INV (Bit 20) */ + #define R_ETHSW_BR_CONTROL_P0_RX_MCRC_INV_Msk (0x100000UL) /*!< RX_MCRC_INV (Bitfield-Mask: 0x01) */ +/* ===================================================== BR_CONTROL_P1 ===================================================== */ + #define R_ETHSW_BR_CONTROL_P1_PREEMPT_ENA_Pos (0UL) /*!< PREEMPT_ENA (Bit 0) */ + #define R_ETHSW_BR_CONTROL_P1_PREEMPT_ENA_Msk (0x1UL) /*!< PREEMPT_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P1_VERIFY_DIS_Pos (1UL) /*!< VERIFY_DIS (Bit 1) */ + #define R_ETHSW_BR_CONTROL_P1_VERIFY_DIS_Msk (0x2UL) /*!< VERIFY_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P1_RESPONSE_DIS_Pos (2UL) /*!< RESPONSE_DIS (Bit 2) */ + #define R_ETHSW_BR_CONTROL_P1_RESPONSE_DIS_Msk (0x4UL) /*!< RESPONSE_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P1_ADDFRAGSIZE_Pos (4UL) /*!< ADDFRAGSIZE (Bit 4) */ + #define R_ETHSW_BR_CONTROL_P1_ADDFRAGSIZE_Msk (0x30UL) /*!< ADDFRAGSIZE (Bitfield-Mask: 0x03) */ + #define R_ETHSW_BR_CONTROL_P1_TX_VERIFY_TIME_Pos (8UL) /*!< TX_VERIFY_TIME (Bit 8) */ + #define R_ETHSW_BR_CONTROL_P1_TX_VERIFY_TIME_Msk (0x7f00UL) /*!< TX_VERIFY_TIME (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_BR_CONTROL_P1_RX_STRICT_PRE_Pos (16UL) /*!< RX_STRICT_PRE (Bit 16) */ + #define R_ETHSW_BR_CONTROL_P1_RX_STRICT_PRE_Msk (0x10000UL) /*!< RX_STRICT_PRE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P1_RX_BR_SMD_DIS_Pos (17UL) /*!< RX_BR_SMD_DIS (Bit 17) */ + #define R_ETHSW_BR_CONTROL_P1_RX_BR_SMD_DIS_Msk (0x20000UL) /*!< RX_BR_SMD_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P1_RX_STRICT_BR_CTL_Pos (18UL) /*!< RX_STRICT_BR_CTL (Bit 18) */ + #define R_ETHSW_BR_CONTROL_P1_RX_STRICT_BR_CTL_Msk (0x40000UL) /*!< RX_STRICT_BR_CTL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P1_TX_MCRC_INV_Pos (19UL) /*!< TX_MCRC_INV (Bit 19) */ + #define R_ETHSW_BR_CONTROL_P1_TX_MCRC_INV_Msk (0x80000UL) /*!< TX_MCRC_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P1_RX_MCRC_INV_Pos (20UL) /*!< RX_MCRC_INV (Bit 20) */ + #define R_ETHSW_BR_CONTROL_P1_RX_MCRC_INV_Msk (0x100000UL) /*!< RX_MCRC_INV (Bitfield-Mask: 0x01) */ +/* ===================================================== BR_CONTROL_P2 ===================================================== */ + #define R_ETHSW_BR_CONTROL_P2_PREEMPT_ENA_Pos (0UL) /*!< PREEMPT_ENA (Bit 0) */ + #define R_ETHSW_BR_CONTROL_P2_PREEMPT_ENA_Msk (0x1UL) /*!< PREEMPT_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P2_VERIFY_DIS_Pos (1UL) /*!< VERIFY_DIS (Bit 1) */ + #define R_ETHSW_BR_CONTROL_P2_VERIFY_DIS_Msk (0x2UL) /*!< VERIFY_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P2_RESPONSE_DIS_Pos (2UL) /*!< RESPONSE_DIS (Bit 2) */ + #define R_ETHSW_BR_CONTROL_P2_RESPONSE_DIS_Msk (0x4UL) /*!< RESPONSE_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P2_ADDFRAGSIZE_Pos (4UL) /*!< ADDFRAGSIZE (Bit 4) */ + #define R_ETHSW_BR_CONTROL_P2_ADDFRAGSIZE_Msk (0x30UL) /*!< ADDFRAGSIZE (Bitfield-Mask: 0x03) */ + #define R_ETHSW_BR_CONTROL_P2_TX_VERIFY_TIME_Pos (8UL) /*!< TX_VERIFY_TIME (Bit 8) */ + #define R_ETHSW_BR_CONTROL_P2_TX_VERIFY_TIME_Msk (0x7f00UL) /*!< TX_VERIFY_TIME (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_BR_CONTROL_P2_RX_STRICT_PRE_Pos (16UL) /*!< RX_STRICT_PRE (Bit 16) */ + #define R_ETHSW_BR_CONTROL_P2_RX_STRICT_PRE_Msk (0x10000UL) /*!< RX_STRICT_PRE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P2_RX_BR_SMD_DIS_Pos (17UL) /*!< RX_BR_SMD_DIS (Bit 17) */ + #define R_ETHSW_BR_CONTROL_P2_RX_BR_SMD_DIS_Msk (0x20000UL) /*!< RX_BR_SMD_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P2_RX_STRICT_BR_CTL_Pos (18UL) /*!< RX_STRICT_BR_CTL (Bit 18) */ + #define R_ETHSW_BR_CONTROL_P2_RX_STRICT_BR_CTL_Msk (0x40000UL) /*!< RX_STRICT_BR_CTL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P2_TX_MCRC_INV_Pos (19UL) /*!< TX_MCRC_INV (Bit 19) */ + #define R_ETHSW_BR_CONTROL_P2_TX_MCRC_INV_Msk (0x80000UL) /*!< TX_MCRC_INV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_BR_CONTROL_P2_RX_MCRC_INV_Pos (20UL) /*!< RX_MCRC_INV (Bit 20) */ + #define R_ETHSW_BR_CONTROL_P2_RX_MCRC_INV_Msk (0x100000UL) /*!< RX_MCRC_INV (Bitfield-Mask: 0x01) */ +/* ================================================ AFRAMESTRANSMITTEDOK_P0 ================================================ */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P0_TXVALIDCOUNT_Pos (0UL) /*!< TXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P0_TXVALIDCOUNT_Msk (0xffffffffUL) /*!< TXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AFRAMESTRANSMITTEDOK_P1 ================================================ */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P1_TXVALIDCOUNT_Pos (0UL) /*!< TXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P1_TXVALIDCOUNT_Msk (0xffffffffUL) /*!< TXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AFRAMESTRANSMITTEDOK_P2 ================================================ */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P2_TXVALIDCOUNT_Pos (0UL) /*!< TXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P2_TXVALIDCOUNT_Msk (0xffffffffUL) /*!< TXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AFRAMESTRANSMITTEDOK_P3 ================================================ */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P3_TXVALIDCOUNT_Pos (0UL) /*!< TXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESTRANSMITTEDOK_P3_TXVALIDCOUNT_Msk (0xffffffffUL) /*!< TXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AFRAMESRECEIVEDOK_P0 ================================================== */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P0_RXVALIDCOUNT_Pos (0UL) /*!< RXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P0_RXVALIDCOUNT_Msk (0xffffffffUL) /*!< RXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AFRAMESRECEIVEDOK_P1 ================================================== */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P1_RXVALIDCOUNT_Pos (0UL) /*!< RXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P1_RXVALIDCOUNT_Msk (0xffffffffUL) /*!< RXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AFRAMESRECEIVEDOK_P2 ================================================== */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P2_RXVALIDCOUNT_Pos (0UL) /*!< RXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P2_RXVALIDCOUNT_Msk (0xffffffffUL) /*!< RXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AFRAMESRECEIVEDOK_P3 ================================================== */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P3_RXVALIDCOUNT_Pos (0UL) /*!< RXVALIDCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMESRECEIVEDOK_P3_RXVALIDCOUNT_Msk (0xffffffffUL) /*!< RXVALIDCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================= AFRAMECHECKSEQUENCEERRORS_P0 ============================================== */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P0_FCSERRCOUNT_Pos (0UL) /*!< FCSERRCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P0_FCSERRCOUNT_Msk (0xffffffffUL) /*!< FCSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================= AFRAMECHECKSEQUENCEERRORS_P1 ============================================== */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P1_FCSERRCOUNT_Pos (0UL) /*!< FCSERRCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P1_FCSERRCOUNT_Msk (0xffffffffUL) /*!< FCSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================= AFRAMECHECKSEQUENCEERRORS_P2 ============================================== */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P2_FCSERRCOUNT_Pos (0UL) /*!< FCSERRCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P2_FCSERRCOUNT_Msk (0xffffffffUL) /*!< FCSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================= AFRAMECHECKSEQUENCEERRORS_P3 ============================================== */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P3_FCSERRCOUNT_Pos (0UL) /*!< FCSERRCOUNT (Bit 0) */ + #define R_ETHSW_AFRAMECHECKSEQUENCEERRORS_P3_FCSERRCOUNT_Msk (0xffffffffUL) /*!< FCSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== AALIGNMENTERRORS_P0 ================================================== */ + #define R_ETHSW_AALIGNMENTERRORS_P0_ALGNERRCOUNT_Pos (0UL) /*!< ALGNERRCOUNT (Bit 0) */ + #define R_ETHSW_AALIGNMENTERRORS_P0_ALGNERRCOUNT_Msk (0xffffffffUL) /*!< ALGNERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== AALIGNMENTERRORS_P1 ================================================== */ + #define R_ETHSW_AALIGNMENTERRORS_P1_ALGNERRCOUNT_Pos (0UL) /*!< ALGNERRCOUNT (Bit 0) */ + #define R_ETHSW_AALIGNMENTERRORS_P1_ALGNERRCOUNT_Msk (0xffffffffUL) /*!< ALGNERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== AALIGNMENTERRORS_P2 ================================================== */ + #define R_ETHSW_AALIGNMENTERRORS_P2_ALGNERRCOUNT_Pos (0UL) /*!< ALGNERRCOUNT (Bit 0) */ + #define R_ETHSW_AALIGNMENTERRORS_P2_ALGNERRCOUNT_Msk (0xffffffffUL) /*!< ALGNERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== AALIGNMENTERRORS_P3 ================================================== */ + #define R_ETHSW_AALIGNMENTERRORS_P3_ALGNERRCOUNT_Pos (0UL) /*!< ALGNERRCOUNT (Bit 0) */ + #define R_ETHSW_AALIGNMENTERRORS_P3_ALGNERRCOUNT_Msk (0xffffffffUL) /*!< ALGNERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AOCTETSTRANSMITTEDOK_P0 ================================================ */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P0_TXVALIDOCTETS_Pos (0UL) /*!< TXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P0_TXVALIDOCTETS_Msk (0xffffffffUL) /*!< TXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AOCTETSTRANSMITTEDOK_P1 ================================================ */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P1_TXVALIDOCTETS_Pos (0UL) /*!< TXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P1_TXVALIDOCTETS_Msk (0xffffffffUL) /*!< TXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AOCTETSTRANSMITTEDOK_P2 ================================================ */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P2_TXVALIDOCTETS_Pos (0UL) /*!< TXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P2_TXVALIDOCTETS_Msk (0xffffffffUL) /*!< TXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AOCTETSTRANSMITTEDOK_P3 ================================================ */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P3_TXVALIDOCTETS_Pos (0UL) /*!< TXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSTRANSMITTEDOK_P3_TXVALIDOCTETS_Msk (0xffffffffUL) /*!< TXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AOCTETSRECEIVEDOK_P0 ================================================== */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P0_RXVALIDOCTETS_Pos (0UL) /*!< RXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P0_RXVALIDOCTETS_Msk (0xffffffffUL) /*!< RXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AOCTETSRECEIVEDOK_P1 ================================================== */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P1_RXVALIDOCTETS_Pos (0UL) /*!< RXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P1_RXVALIDOCTETS_Msk (0xffffffffUL) /*!< RXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AOCTETSRECEIVEDOK_P2 ================================================== */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P2_RXVALIDOCTETS_Pos (0UL) /*!< RXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P2_RXVALIDOCTETS_Msk (0xffffffffUL) /*!< RXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================= AOCTETSRECEIVEDOK_P3 ================================================== */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P3_RXVALIDOCTETS_Pos (0UL) /*!< RXVALIDOCTETS (Bit 0) */ + #define R_ETHSW_AOCTETSRECEIVEDOK_P3_RXVALIDOCTETS_Msk (0xffffffffUL) /*!< RXVALIDOCTETS (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ATXPAUSEMACCTRLFRAMES_P0 ================================================ */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P0_TXPAUSECOUNT_Pos (0UL) /*!< TXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P0_TXPAUSECOUNT_Msk (0xffffffffUL) /*!< TXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ATXPAUSEMACCTRLFRAMES_P1 ================================================ */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P1_TXPAUSECOUNT_Pos (0UL) /*!< TXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P1_TXPAUSECOUNT_Msk (0xffffffffUL) /*!< TXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ATXPAUSEMACCTRLFRAMES_P2 ================================================ */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P2_TXPAUSECOUNT_Pos (0UL) /*!< TXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P2_TXPAUSECOUNT_Msk (0xffffffffUL) /*!< TXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ATXPAUSEMACCTRLFRAMES_P3 ================================================ */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P3_TXPAUSECOUNT_Pos (0UL) /*!< TXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ATXPAUSEMACCTRLFRAMES_P3_TXPAUSECOUNT_Msk (0xffffffffUL) /*!< TXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ARXPAUSEMACCTRLFRAMES_P0 ================================================ */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P0_RXPAUSECOUNT_Pos (0UL) /*!< RXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P0_RXPAUSECOUNT_Msk (0xffffffffUL) /*!< RXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ARXPAUSEMACCTRLFRAMES_P1 ================================================ */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P1_RXPAUSECOUNT_Pos (0UL) /*!< RXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P1_RXPAUSECOUNT_Msk (0xffffffffUL) /*!< RXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ARXPAUSEMACCTRLFRAMES_P2 ================================================ */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P2_RXPAUSECOUNT_Pos (0UL) /*!< RXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P2_RXPAUSECOUNT_Msk (0xffffffffUL) /*!< RXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ARXPAUSEMACCTRLFRAMES_P3 ================================================ */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P3_RXPAUSECOUNT_Pos (0UL) /*!< RXPAUSECOUNT (Bit 0) */ + #define R_ETHSW_ARXPAUSEMACCTRLFRAMES_P3_RXPAUSECOUNT_Msk (0xffffffffUL) /*!< RXPAUSECOUNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IFINERRORS_P0 ===================================================== */ + #define R_ETHSW_IFINERRORS_P0_INERRCOUNT_Pos (0UL) /*!< INERRCOUNT (Bit 0) */ + #define R_ETHSW_IFINERRORS_P0_INERRCOUNT_Msk (0xffffffffUL) /*!< INERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IFINERRORS_P1 ===================================================== */ + #define R_ETHSW_IFINERRORS_P1_INERRCOUNT_Pos (0UL) /*!< INERRCOUNT (Bit 0) */ + #define R_ETHSW_IFINERRORS_P1_INERRCOUNT_Msk (0xffffffffUL) /*!< INERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IFINERRORS_P2 ===================================================== */ + #define R_ETHSW_IFINERRORS_P2_INERRCOUNT_Pos (0UL) /*!< INERRCOUNT (Bit 0) */ + #define R_ETHSW_IFINERRORS_P2_INERRCOUNT_Msk (0xffffffffUL) /*!< INERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IFINERRORS_P3 ===================================================== */ + #define R_ETHSW_IFINERRORS_P3_INERRCOUNT_Pos (0UL) /*!< INERRCOUNT (Bit 0) */ + #define R_ETHSW_IFINERRORS_P3_INERRCOUNT_Msk (0xffffffffUL) /*!< INERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IFOUTERRORS_P0 ===================================================== */ + #define R_ETHSW_IFOUTERRORS_P0_OUTERRCOUNT_Pos (0UL) /*!< OUTERRCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTERRORS_P0_OUTERRCOUNT_Msk (0xffffffffUL) /*!< OUTERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IFOUTERRORS_P1 ===================================================== */ + #define R_ETHSW_IFOUTERRORS_P1_OUTERRCOUNT_Pos (0UL) /*!< OUTERRCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTERRORS_P1_OUTERRCOUNT_Msk (0xffffffffUL) /*!< OUTERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IFOUTERRORS_P2 ===================================================== */ + #define R_ETHSW_IFOUTERRORS_P2_OUTERRCOUNT_Pos (0UL) /*!< OUTERRCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTERRORS_P2_OUTERRCOUNT_Msk (0xffffffffUL) /*!< OUTERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IFOUTERRORS_P3 ===================================================== */ + #define R_ETHSW_IFOUTERRORS_P3_OUTERRCOUNT_Pos (0UL) /*!< OUTERRCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTERRORS_P3_OUTERRCOUNT_Msk (0xffffffffUL) /*!< OUTERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFINUCASTPKTS_P0 ==================================================== */ + #define R_ETHSW_IFINUCASTPKTS_P0_RXUCASTCOUNT_Pos (0UL) /*!< RXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINUCASTPKTS_P0_RXUCASTCOUNT_Msk (0xffffffffUL) /*!< RXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFINUCASTPKTS_P1 ==================================================== */ + #define R_ETHSW_IFINUCASTPKTS_P1_RXUCASTCOUNT_Pos (0UL) /*!< RXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINUCASTPKTS_P1_RXUCASTCOUNT_Msk (0xffffffffUL) /*!< RXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFINUCASTPKTS_P2 ==================================================== */ + #define R_ETHSW_IFINUCASTPKTS_P2_RXUCASTCOUNT_Pos (0UL) /*!< RXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINUCASTPKTS_P2_RXUCASTCOUNT_Msk (0xffffffffUL) /*!< RXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFINUCASTPKTS_P3 ==================================================== */ + #define R_ETHSW_IFINUCASTPKTS_P3_RXUCASTCOUNT_Pos (0UL) /*!< RXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINUCASTPKTS_P3_RXUCASTCOUNT_Msk (0xffffffffUL) /*!< RXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINMULTICASTPKTS_P0 ================================================== */ + #define R_ETHSW_IFINMULTICASTPKTS_P0_RXMCASTCOUNT_Pos (0UL) /*!< RXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINMULTICASTPKTS_P0_RXMCASTCOUNT_Msk (0xffffffffUL) /*!< RXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINMULTICASTPKTS_P1 ================================================== */ + #define R_ETHSW_IFINMULTICASTPKTS_P1_RXMCASTCOUNT_Pos (0UL) /*!< RXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINMULTICASTPKTS_P1_RXMCASTCOUNT_Msk (0xffffffffUL) /*!< RXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINMULTICASTPKTS_P2 ================================================== */ + #define R_ETHSW_IFINMULTICASTPKTS_P2_RXMCASTCOUNT_Pos (0UL) /*!< RXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINMULTICASTPKTS_P2_RXMCASTCOUNT_Msk (0xffffffffUL) /*!< RXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINMULTICASTPKTS_P3 ================================================== */ + #define R_ETHSW_IFINMULTICASTPKTS_P3_RXMCASTCOUNT_Pos (0UL) /*!< RXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINMULTICASTPKTS_P3_RXMCASTCOUNT_Msk (0xffffffffUL) /*!< RXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINBROADCASTPKTS_P0 ================================================== */ + #define R_ETHSW_IFINBROADCASTPKTS_P0_RXBCASTCOUNT_Pos (0UL) /*!< RXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINBROADCASTPKTS_P0_RXBCASTCOUNT_Msk (0xffffffffUL) /*!< RXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINBROADCASTPKTS_P1 ================================================== */ + #define R_ETHSW_IFINBROADCASTPKTS_P1_RXBCASTCOUNT_Pos (0UL) /*!< RXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINBROADCASTPKTS_P1_RXBCASTCOUNT_Msk (0xffffffffUL) /*!< RXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINBROADCASTPKTS_P2 ================================================== */ + #define R_ETHSW_IFINBROADCASTPKTS_P2_RXBCASTCOUNT_Pos (0UL) /*!< RXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINBROADCASTPKTS_P2_RXBCASTCOUNT_Msk (0xffffffffUL) /*!< RXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFINBROADCASTPKTS_P3 ================================================== */ + #define R_ETHSW_IFINBROADCASTPKTS_P3_RXBCASTCOUNT_Pos (0UL) /*!< RXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFINBROADCASTPKTS_P3_RXBCASTCOUNT_Msk (0xffffffffUL) /*!< RXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTDISCARDS_P0 ==================================================== */ + #define R_ETHSW_IFOUTDISCARDS_P0_DISCOBCOUNT_Pos (0UL) /*!< DISCOBCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTDISCARDS_P0_DISCOBCOUNT_Msk (0xffffffffUL) /*!< DISCOBCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTDISCARDS_P1 ==================================================== */ + #define R_ETHSW_IFOUTDISCARDS_P1_DISCOBCOUNT_Pos (0UL) /*!< DISCOBCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTDISCARDS_P1_DISCOBCOUNT_Msk (0xffffffffUL) /*!< DISCOBCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTDISCARDS_P2 ==================================================== */ + #define R_ETHSW_IFOUTDISCARDS_P2_DISCOBCOUNT_Pos (0UL) /*!< DISCOBCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTDISCARDS_P2_DISCOBCOUNT_Msk (0xffffffffUL) /*!< DISCOBCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTDISCARDS_P3 ==================================================== */ + #define R_ETHSW_IFOUTDISCARDS_P3_DISCOBCOUNT_Pos (0UL) /*!< DISCOBCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTDISCARDS_P3_DISCOBCOUNT_Msk (0xffffffffUL) /*!< DISCOBCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTUCASTPKTS_P0 =================================================== */ + #define R_ETHSW_IFOUTUCASTPKTS_P0_TXUCASTCOUNT_Pos (0UL) /*!< TXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTUCASTPKTS_P0_TXUCASTCOUNT_Msk (0xffffffffUL) /*!< TXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTUCASTPKTS_P1 =================================================== */ + #define R_ETHSW_IFOUTUCASTPKTS_P1_TXUCASTCOUNT_Pos (0UL) /*!< TXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTUCASTPKTS_P1_TXUCASTCOUNT_Msk (0xffffffffUL) /*!< TXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTUCASTPKTS_P2 =================================================== */ + #define R_ETHSW_IFOUTUCASTPKTS_P2_TXUCASTCOUNT_Pos (0UL) /*!< TXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTUCASTPKTS_P2_TXUCASTCOUNT_Msk (0xffffffffUL) /*!< TXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== IFOUTUCASTPKTS_P3 =================================================== */ + #define R_ETHSW_IFOUTUCASTPKTS_P3_TXUCASTCOUNT_Pos (0UL) /*!< TXUCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTUCASTPKTS_P3_TXUCASTCOUNT_Msk (0xffffffffUL) /*!< TXUCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTMULTICASTPKTS_P0 ================================================= */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P0_TXMCASTCOUNT_Pos (0UL) /*!< TXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P0_TXMCASTCOUNT_Msk (0xffffffffUL) /*!< TXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTMULTICASTPKTS_P1 ================================================= */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P1_TXMCASTCOUNT_Pos (0UL) /*!< TXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P1_TXMCASTCOUNT_Msk (0xffffffffUL) /*!< TXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTMULTICASTPKTS_P2 ================================================= */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P2_TXMCASTCOUNT_Pos (0UL) /*!< TXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P2_TXMCASTCOUNT_Msk (0xffffffffUL) /*!< TXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTMULTICASTPKTS_P3 ================================================= */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P3_TXMCASTCOUNT_Pos (0UL) /*!< TXMCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTMULTICASTPKTS_P3_TXMCASTCOUNT_Msk (0xffffffffUL) /*!< TXMCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTBROADCASTPKTS_P0 ================================================= */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P0_TXBCASTCOUNT_Pos (0UL) /*!< TXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P0_TXBCASTCOUNT_Msk (0xffffffffUL) /*!< TXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTBROADCASTPKTS_P1 ================================================= */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P1_TXBCASTCOUNT_Pos (0UL) /*!< TXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P1_TXBCASTCOUNT_Msk (0xffffffffUL) /*!< TXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTBROADCASTPKTS_P2 ================================================= */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P2_TXBCASTCOUNT_Pos (0UL) /*!< TXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P2_TXBCASTCOUNT_Msk (0xffffffffUL) /*!< TXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= IFOUTBROADCASTPKTS_P3 ================================================= */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P3_TXBCASTCOUNT_Pos (0UL) /*!< TXBCASTCOUNT (Bit 0) */ + #define R_ETHSW_IFOUTBROADCASTPKTS_P3_TXBCASTCOUNT_Msk (0xffffffffUL) /*!< TXBCASTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSDROPEVENTS_P0 ================================================ */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P0_DROPCOUNT_Pos (0UL) /*!< DROPCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P0_DROPCOUNT_Msk (0xffffffffUL) /*!< DROPCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSDROPEVENTS_P1 ================================================ */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P1_DROPCOUNT_Pos (0UL) /*!< DROPCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P1_DROPCOUNT_Msk (0xffffffffUL) /*!< DROPCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSDROPEVENTS_P2 ================================================ */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P2_DROPCOUNT_Pos (0UL) /*!< DROPCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P2_DROPCOUNT_Msk (0xffffffffUL) /*!< DROPCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSDROPEVENTS_P3 ================================================ */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P3_DROPCOUNT_Pos (0UL) /*!< DROPCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSDROPEVENTS_P3_DROPCOUNT_Msk (0xffffffffUL) /*!< DROPCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ETHERSTATSOCTETS_P0 ================================================== */ + #define R_ETHSW_ETHERSTATSOCTETS_P0_ALLOCTETS_Pos (0UL) /*!< ALLOCTETS (Bit 0) */ + #define R_ETHSW_ETHERSTATSOCTETS_P0_ALLOCTETS_Msk (0xffffffffUL) /*!< ALLOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ETHERSTATSOCTETS_P1 ================================================== */ + #define R_ETHSW_ETHERSTATSOCTETS_P1_ALLOCTETS_Pos (0UL) /*!< ALLOCTETS (Bit 0) */ + #define R_ETHSW_ETHERSTATSOCTETS_P1_ALLOCTETS_Msk (0xffffffffUL) /*!< ALLOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ETHERSTATSOCTETS_P2 ================================================== */ + #define R_ETHSW_ETHERSTATSOCTETS_P2_ALLOCTETS_Pos (0UL) /*!< ALLOCTETS (Bit 0) */ + #define R_ETHSW_ETHERSTATSOCTETS_P2_ALLOCTETS_Msk (0xffffffffUL) /*!< ALLOCTETS (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ETHERSTATSOCTETS_P3 ================================================== */ + #define R_ETHSW_ETHERSTATSOCTETS_P3_ALLOCTETS_Pos (0UL) /*!< ALLOCTETS (Bit 0) */ + #define R_ETHSW_ETHERSTATSOCTETS_P3_ALLOCTETS_Msk (0xffffffffUL) /*!< ALLOCTETS (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ETHERSTATSPKTS_P0 =================================================== */ + #define R_ETHSW_ETHERSTATSPKTS_P0_ALLCOUNT_Pos (0UL) /*!< ALLCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS_P0_ALLCOUNT_Msk (0xffffffffUL) /*!< ALLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ETHERSTATSPKTS_P1 =================================================== */ + #define R_ETHSW_ETHERSTATSPKTS_P1_ALLCOUNT_Pos (0UL) /*!< ALLCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS_P1_ALLCOUNT_Msk (0xffffffffUL) /*!< ALLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ETHERSTATSPKTS_P2 =================================================== */ + #define R_ETHSW_ETHERSTATSPKTS_P2_ALLCOUNT_Pos (0UL) /*!< ALLCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS_P2_ALLCOUNT_Msk (0xffffffffUL) /*!< ALLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== ETHERSTATSPKTS_P3 =================================================== */ + #define R_ETHSW_ETHERSTATSPKTS_P3_ALLCOUNT_Pos (0UL) /*!< ALLCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS_P3_ALLCOUNT_Msk (0xffffffffUL) /*!< ALLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ETHERSTATSUNDERSIZEPKTS_P0 =============================================== */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P0_TOOSHRTCOUNT_Pos (0UL) /*!< TOOSHRTCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P0_TOOSHRTCOUNT_Msk (0xffffffffUL) /*!< TOOSHRTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ETHERSTATSUNDERSIZEPKTS_P1 =============================================== */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P1_TOOSHRTCOUNT_Pos (0UL) /*!< TOOSHRTCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P1_TOOSHRTCOUNT_Msk (0xffffffffUL) /*!< TOOSHRTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ETHERSTATSUNDERSIZEPKTS_P2 =============================================== */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P2_TOOSHRTCOUNT_Pos (0UL) /*!< TOOSHRTCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P2_TOOSHRTCOUNT_Msk (0xffffffffUL) /*!< TOOSHRTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ============================================== ETHERSTATSUNDERSIZEPKTS_P3 =============================================== */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P3_TOOSHRTCOUNT_Pos (0UL) /*!< TOOSHRTCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSUNDERSIZEPKTS_P3_TOOSHRTCOUNT_Msk (0xffffffffUL) /*!< TOOSHRTCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSOVERSIZEPKTS_P0 =============================================== */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P0_TOOLONGCOUNT_Pos (0UL) /*!< TOOLONGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P0_TOOLONGCOUNT_Msk (0xffffffffUL) /*!< TOOLONGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSOVERSIZEPKTS_P1 =============================================== */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P1_TOOLONGCOUNT_Pos (0UL) /*!< TOOLONGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P1_TOOLONGCOUNT_Msk (0xffffffffUL) /*!< TOOLONGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSOVERSIZEPKTS_P2 =============================================== */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P2_TOOLONGCOUNT_Pos (0UL) /*!< TOOLONGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P2_TOOLONGCOUNT_Msk (0xffffffffUL) /*!< TOOLONGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSOVERSIZEPKTS_P3 =============================================== */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P3_TOOLONGCOUNT_Pos (0UL) /*!< TOOLONGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSOVERSIZEPKTS_P3_TOOLONGCOUNT_Msk (0xffffffffUL) /*!< TOOLONGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSPKTS64OCTETS_P0 =============================================== */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P0_OCTCNT64_Pos (0UL) /*!< OCTCNT64 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P0_OCTCNT64_Msk (0xffffffffUL) /*!< OCTCNT64 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSPKTS64OCTETS_P1 =============================================== */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P1_OCTCNT64_Pos (0UL) /*!< OCTCNT64 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P1_OCTCNT64_Msk (0xffffffffUL) /*!< OCTCNT64 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSPKTS64OCTETS_P2 =============================================== */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P2_OCTCNT64_Pos (0UL) /*!< OCTCNT64 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P2_OCTCNT64_Msk (0xffffffffUL) /*!< OCTCNT64 (Bitfield-Mask: 0xffffffff) */ +/* =============================================== ETHERSTATSPKTS64OCTETS_P3 =============================================== */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P3_OCTCNT64_Pos (0UL) /*!< OCTCNT64 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS64OCTETS_P3_OCTCNT64_Msk (0xffffffffUL) /*!< OCTCNT64 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS65TO127OCTETS_P0 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P0_OCTCNT65T127_Pos (0UL) /*!< OCTCNT65T127 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P0_OCTCNT65T127_Msk (0xffffffffUL) /*!< OCTCNT65T127 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS65TO127OCTETS_P1 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P1_OCTCNT65T127_Pos (0UL) /*!< OCTCNT65T127 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P1_OCTCNT65T127_Msk (0xffffffffUL) /*!< OCTCNT65T127 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS65TO127OCTETS_P2 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P2_OCTCNT65T127_Pos (0UL) /*!< OCTCNT65T127 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P2_OCTCNT65T127_Msk (0xffffffffUL) /*!< OCTCNT65T127 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS65TO127OCTETS_P3 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P3_OCTCNT65T127_Pos (0UL) /*!< OCTCNT65T127 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS65TO127OCTETS_P3_OCTCNT65T127_Msk (0xffffffffUL) /*!< OCTCNT65T127 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS128TO255OCTETS_P0 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P0_OCTCNT128T255_Pos (0UL) /*!< OCTCNT128T255 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P0_OCTCNT128T255_Msk (0xffffffffUL) /*!< OCTCNT128T255 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS128TO255OCTETS_P1 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P1_OCTCNT128T255_Pos (0UL) /*!< OCTCNT128T255 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P1_OCTCNT128T255_Msk (0xffffffffUL) /*!< OCTCNT128T255 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS128TO255OCTETS_P2 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P2_OCTCNT128T255_Pos (0UL) /*!< OCTCNT128T255 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P2_OCTCNT128T255_Msk (0xffffffffUL) /*!< OCTCNT128T255 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS128TO255OCTETS_P3 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P3_OCTCNT128T255_Pos (0UL) /*!< OCTCNT128T255 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS128TO255OCTETS_P3_OCTCNT128T255_Msk (0xffffffffUL) /*!< OCTCNT128T255 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS256TO511OCTETS_P0 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P0_OCTCNT256T511_Pos (0UL) /*!< OCTCNT256T511 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P0_OCTCNT256T511_Msk (0xffffffffUL) /*!< OCTCNT256T511 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS256TO511OCTETS_P1 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P1_OCTCNT256T511_Pos (0UL) /*!< OCTCNT256T511 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P1_OCTCNT256T511_Msk (0xffffffffUL) /*!< OCTCNT256T511 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS256TO511OCTETS_P2 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P2_OCTCNT256T511_Pos (0UL) /*!< OCTCNT256T511 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P2_OCTCNT256T511_Msk (0xffffffffUL) /*!< OCTCNT256T511 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS256TO511OCTETS_P3 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P3_OCTCNT256T511_Pos (0UL) /*!< OCTCNT256T511 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS256TO511OCTETS_P3_OCTCNT256T511_Msk (0xffffffffUL) /*!< OCTCNT256T511 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS512TO1023OCTETS_P0 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P0_OCTCNT512T1023_Pos (0UL) /*!< OCTCNT512T1023 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P0_OCTCNT512T1023_Msk (0xffffffffUL) /*!< OCTCNT512T1023 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS512TO1023OCTETS_P1 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P1_OCTCNT512T1023_Pos (0UL) /*!< OCTCNT512T1023 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P1_OCTCNT512T1023_Msk (0xffffffffUL) /*!< OCTCNT512T1023 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS512TO1023OCTETS_P2 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P2_OCTCNT512T1023_Pos (0UL) /*!< OCTCNT512T1023 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P2_OCTCNT512T1023_Msk (0xffffffffUL) /*!< OCTCNT512T1023 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS512TO1023OCTETS_P3 ============================================ */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P3_OCTCNT512T1023_Pos (0UL) /*!< OCTCNT512T1023 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS512TO1023OCTETS_P3_OCTCNT512T1023_Msk (0xffffffffUL) /*!< OCTCNT512T1023 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS1024TO1518OCTETS_P0 =========================================== */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P0_OCTCNT1024T1518_Pos (0UL) /*!< OCTCNT1024T1518 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P0_OCTCNT1024T1518_Msk (0xffffffffUL) /*!< OCTCNT1024T1518 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS1024TO1518OCTETS_P1 =========================================== */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P1_OCTCNT1024T1518_Pos (0UL) /*!< OCTCNT1024T1518 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P1_OCTCNT1024T1518_Msk (0xffffffffUL) /*!< OCTCNT1024T1518 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS1024TO1518OCTETS_P2 =========================================== */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P2_OCTCNT1024T1518_Pos (0UL) /*!< OCTCNT1024T1518 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P2_OCTCNT1024T1518_Msk (0xffffffffUL) /*!< OCTCNT1024T1518 (Bitfield-Mask: 0xffffffff) */ +/* =========================================== ETHERSTATSPKTS1024TO1518OCTETS_P3 =========================================== */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P3_OCTCNT1024T1518_Pos (0UL) /*!< OCTCNT1024T1518 (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1024TO1518OCTETS_P3_OCTCNT1024T1518_Msk (0xffffffffUL) /*!< OCTCNT1024T1518 (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS1519TOXOCTETS_P0 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P0_OCTCNT1519TX_Pos (0UL) /*!< OCTCNT1519TX (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P0_OCTCNT1519TX_Msk (0xffffffffUL) /*!< OCTCNT1519TX (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS1519TOXOCTETS_P1 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P1_OCTCNT1519TX_Pos (0UL) /*!< OCTCNT1519TX (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P1_OCTCNT1519TX_Msk (0xffffffffUL) /*!< OCTCNT1519TX (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS1519TOXOCTETS_P2 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P2_OCTCNT1519TX_Pos (0UL) /*!< OCTCNT1519TX (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P2_OCTCNT1519TX_Msk (0xffffffffUL) /*!< OCTCNT1519TX (Bitfield-Mask: 0xffffffff) */ +/* ============================================ ETHERSTATSPKTS1519TOXOCTETS_P3 ============================================= */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P3_OCTCNT1519TX_Pos (0UL) /*!< OCTCNT1519TX (Bit 0) */ + #define R_ETHSW_ETHERSTATSPKTS1519TOXOCTETS_P3_OCTCNT1519TX_Msk (0xffffffffUL) /*!< OCTCNT1519TX (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ETHERSTATSJABBERS_P0 ================================================== */ + #define R_ETHSW_ETHERSTATSJABBERS_P0_JABBERCOUNT_Pos (0UL) /*!< JABBERCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSJABBERS_P0_JABBERCOUNT_Msk (0xffffffffUL) /*!< JABBERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ETHERSTATSJABBERS_P1 ================================================== */ + #define R_ETHSW_ETHERSTATSJABBERS_P1_JABBERCOUNT_Pos (0UL) /*!< JABBERCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSJABBERS_P1_JABBERCOUNT_Msk (0xffffffffUL) /*!< JABBERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ETHERSTATSJABBERS_P2 ================================================== */ + #define R_ETHSW_ETHERSTATSJABBERS_P2_JABBERCOUNT_Pos (0UL) /*!< JABBERCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSJABBERS_P2_JABBERCOUNT_Msk (0xffffffffUL) /*!< JABBERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ETHERSTATSJABBERS_P3 ================================================== */ + #define R_ETHSW_ETHERSTATSJABBERS_P3_JABBERCOUNT_Pos (0UL) /*!< JABBERCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSJABBERS_P3_JABBERCOUNT_Msk (0xffffffffUL) /*!< JABBERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSFRAGMENTS_P0 ================================================= */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P0_FRAGCOUNT_Pos (0UL) /*!< FRAGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P0_FRAGCOUNT_Msk (0xffffffffUL) /*!< FRAGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSFRAGMENTS_P1 ================================================= */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P1_FRAGCOUNT_Pos (0UL) /*!< FRAGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P1_FRAGCOUNT_Msk (0xffffffffUL) /*!< FRAGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSFRAGMENTS_P2 ================================================= */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P2_FRAGCOUNT_Pos (0UL) /*!< FRAGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P2_FRAGCOUNT_Msk (0xffffffffUL) /*!< FRAGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ETHERSTATSFRAGMENTS_P3 ================================================= */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P3_FRAGCOUNT_Pos (0UL) /*!< FRAGCOUNT (Bit 0) */ + #define R_ETHSW_ETHERSTATSFRAGMENTS_P3_FRAGCOUNT_Msk (0xffffffffUL) /*!< FRAGCOUNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== VLANRECEIVEDOK_P0 =================================================== */ + #define R_ETHSW_VLANRECEIVEDOK_P0_RXVLANTAGCNT_Pos (0UL) /*!< RXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANRECEIVEDOK_P0_RXVLANTAGCNT_Msk (0xffffffffUL) /*!< RXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== VLANRECEIVEDOK_P1 =================================================== */ + #define R_ETHSW_VLANRECEIVEDOK_P1_RXVLANTAGCNT_Pos (0UL) /*!< RXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANRECEIVEDOK_P1_RXVLANTAGCNT_Msk (0xffffffffUL) /*!< RXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== VLANRECEIVEDOK_P2 =================================================== */ + #define R_ETHSW_VLANRECEIVEDOK_P2_RXVLANTAGCNT_Pos (0UL) /*!< RXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANRECEIVEDOK_P2_RXVLANTAGCNT_Msk (0xffffffffUL) /*!< RXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== VLANRECEIVEDOK_P3 =================================================== */ + #define R_ETHSW_VLANRECEIVEDOK_P3_RXVLANTAGCNT_Pos (0UL) /*!< RXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANRECEIVEDOK_P3_RXVLANTAGCNT_Msk (0xffffffffUL) /*!< RXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= VLANTRANSMITTEDOK_P0 ================================================== */ + #define R_ETHSW_VLANTRANSMITTEDOK_P0_TXVLANTAGCNT_Pos (0UL) /*!< TXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANTRANSMITTEDOK_P0_TXVLANTAGCNT_Msk (0xffffffffUL) /*!< TXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= VLANTRANSMITTEDOK_P1 ================================================== */ + #define R_ETHSW_VLANTRANSMITTEDOK_P1_TXVLANTAGCNT_Pos (0UL) /*!< TXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANTRANSMITTEDOK_P1_TXVLANTAGCNT_Msk (0xffffffffUL) /*!< TXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= VLANTRANSMITTEDOK_P2 ================================================== */ + #define R_ETHSW_VLANTRANSMITTEDOK_P2_TXVLANTAGCNT_Pos (0UL) /*!< TXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANTRANSMITTEDOK_P2_TXVLANTAGCNT_Msk (0xffffffffUL) /*!< TXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================= VLANTRANSMITTEDOK_P3 ================================================== */ + #define R_ETHSW_VLANTRANSMITTEDOK_P3_TXVLANTAGCNT_Pos (0UL) /*!< TXVLANTAGCNT (Bit 0) */ + #define R_ETHSW_VLANTRANSMITTEDOK_P3_TXVLANTAGCNT_Msk (0xffffffffUL) /*!< TXVLANTAGCNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ FRAMESRETRANSMITTED_P0 ================================================= */ + #define R_ETHSW_FRAMESRETRANSMITTED_P0_RETXCOUNT_Pos (0UL) /*!< RETXCOUNT (Bit 0) */ + #define R_ETHSW_FRAMESRETRANSMITTED_P0_RETXCOUNT_Msk (0xffffffffUL) /*!< RETXCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ FRAMESRETRANSMITTED_P1 ================================================= */ + #define R_ETHSW_FRAMESRETRANSMITTED_P1_RETXCOUNT_Pos (0UL) /*!< RETXCOUNT (Bit 0) */ + #define R_ETHSW_FRAMESRETRANSMITTED_P1_RETXCOUNT_Msk (0xffffffffUL) /*!< RETXCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ FRAMESRETRANSMITTED_P2 ================================================= */ + #define R_ETHSW_FRAMESRETRANSMITTED_P2_RETXCOUNT_Pos (0UL) /*!< RETXCOUNT (Bit 0) */ + #define R_ETHSW_FRAMESRETRANSMITTED_P2_RETXCOUNT_Msk (0xffffffffUL) /*!< RETXCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ FRAMESRETRANSMITTED_P3 ================================================= */ + #define R_ETHSW_FRAMESRETRANSMITTED_P3_RETXCOUNT_Pos (0UL) /*!< RETXCOUNT (Bit 0) */ + #define R_ETHSW_FRAMESRETRANSMITTED_P3_RETXCOUNT_Msk (0xffffffffUL) /*!< RETXCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== STATS_HIWORD_P0 ==================================================== */ + #define R_ETHSW_STATS_HIWORD_P0_STATS_HIWORD_Pos (0UL) /*!< STATS_HIWORD (Bit 0) */ + #define R_ETHSW_STATS_HIWORD_P0_STATS_HIWORD_Msk (0xffffffffUL) /*!< STATS_HIWORD (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== STATS_HIWORD_P1 ==================================================== */ + #define R_ETHSW_STATS_HIWORD_P1_STATS_HIWORD_Pos (0UL) /*!< STATS_HIWORD (Bit 0) */ + #define R_ETHSW_STATS_HIWORD_P1_STATS_HIWORD_Msk (0xffffffffUL) /*!< STATS_HIWORD (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== STATS_HIWORD_P2 ==================================================== */ + #define R_ETHSW_STATS_HIWORD_P2_STATS_HIWORD_Pos (0UL) /*!< STATS_HIWORD (Bit 0) */ + #define R_ETHSW_STATS_HIWORD_P2_STATS_HIWORD_Msk (0xffffffffUL) /*!< STATS_HIWORD (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== STATS_HIWORD_P3 ==================================================== */ + #define R_ETHSW_STATS_HIWORD_P3_STATS_HIWORD_Pos (0UL) /*!< STATS_HIWORD (Bit 0) */ + #define R_ETHSW_STATS_HIWORD_P3_STATS_HIWORD_Msk (0xffffffffUL) /*!< STATS_HIWORD (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== STATS_CTRL_P0 ===================================================== */ + #define R_ETHSW_STATS_CTRL_P0_CLRALL_Pos (0UL) /*!< CLRALL (Bit 0) */ + #define R_ETHSW_STATS_CTRL_P0_CLRALL_Msk (0x1UL) /*!< CLRALL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATS_CTRL_P0_CLRBUSY_Pos (1UL) /*!< CLRBUSY (Bit 1) */ + #define R_ETHSW_STATS_CTRL_P0_CLRBUSY_Msk (0x2UL) /*!< CLRBUSY (Bitfield-Mask: 0x01) */ +/* ===================================================== STATS_CTRL_P1 ===================================================== */ + #define R_ETHSW_STATS_CTRL_P1_CLRALL_Pos (0UL) /*!< CLRALL (Bit 0) */ + #define R_ETHSW_STATS_CTRL_P1_CLRALL_Msk (0x1UL) /*!< CLRALL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATS_CTRL_P1_CLRBUSY_Pos (1UL) /*!< CLRBUSY (Bit 1) */ + #define R_ETHSW_STATS_CTRL_P1_CLRBUSY_Msk (0x2UL) /*!< CLRBUSY (Bitfield-Mask: 0x01) */ +/* ===================================================== STATS_CTRL_P2 ===================================================== */ + #define R_ETHSW_STATS_CTRL_P2_CLRALL_Pos (0UL) /*!< CLRALL (Bit 0) */ + #define R_ETHSW_STATS_CTRL_P2_CLRALL_Msk (0x1UL) /*!< CLRALL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATS_CTRL_P2_CLRBUSY_Pos (1UL) /*!< CLRBUSY (Bit 1) */ + #define R_ETHSW_STATS_CTRL_P2_CLRBUSY_Msk (0x2UL) /*!< CLRBUSY (Bitfield-Mask: 0x01) */ +/* ===================================================== STATS_CTRL_P3 ===================================================== */ + #define R_ETHSW_STATS_CTRL_P3_CLRALL_Pos (0UL) /*!< CLRALL (Bit 0) */ + #define R_ETHSW_STATS_CTRL_P3_CLRALL_Msk (0x1UL) /*!< CLRALL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATS_CTRL_P3_CLRBUSY_Pos (1UL) /*!< CLRBUSY (Bit 1) */ + #define R_ETHSW_STATS_CTRL_P3_CLRBUSY_Msk (0x2UL) /*!< CLRBUSY (Bitfield-Mask: 0x01) */ +/* ================================================ STATS_CLEAR_VALUELO_P0 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P0_STATS_CLEAR_VALUELO_Pos (0UL) /*!< STATS_CLEAR_VALUELO (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P0_STATS_CLEAR_VALUELO_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUELO (Bitfield-Mask: 0xffffffff) */ +/* ================================================ STATS_CLEAR_VALUELO_P1 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P1_STATS_CLEAR_VALUELO_Pos (0UL) /*!< STATS_CLEAR_VALUELO (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P1_STATS_CLEAR_VALUELO_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUELO (Bitfield-Mask: 0xffffffff) */ +/* ================================================ STATS_CLEAR_VALUELO_P2 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P2_STATS_CLEAR_VALUELO_Pos (0UL) /*!< STATS_CLEAR_VALUELO (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P2_STATS_CLEAR_VALUELO_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUELO (Bitfield-Mask: 0xffffffff) */ +/* ================================================ STATS_CLEAR_VALUELO_P3 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P3_STATS_CLEAR_VALUELO_Pos (0UL) /*!< STATS_CLEAR_VALUELO (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUELO_P3_STATS_CLEAR_VALUELO_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUELO (Bitfield-Mask: 0xffffffff) */ +/* ================================================ STATS_CLEAR_VALUEHI_P0 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P0_STATS_CLEAR_VALUEHI_Pos (0UL) /*!< STATS_CLEAR_VALUEHI (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P0_STATS_CLEAR_VALUEHI_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUEHI (Bitfield-Mask: 0xffffffff) */ +/* ================================================ STATS_CLEAR_VALUEHI_P1 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P1_STATS_CLEAR_VALUEHI_Pos (0UL) /*!< STATS_CLEAR_VALUEHI (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P1_STATS_CLEAR_VALUEHI_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUEHI (Bitfield-Mask: 0xffffffff) */ +/* ================================================ STATS_CLEAR_VALUEHI_P2 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P2_STATS_CLEAR_VALUEHI_Pos (0UL) /*!< STATS_CLEAR_VALUEHI (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P2_STATS_CLEAR_VALUEHI_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUEHI (Bitfield-Mask: 0xffffffff) */ +/* ================================================ STATS_CLEAR_VALUEHI_P3 ================================================= */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P3_STATS_CLEAR_VALUEHI_Pos (0UL) /*!< STATS_CLEAR_VALUEHI (Bit 0) */ + #define R_ETHSW_STATS_CLEAR_VALUEHI_P3_STATS_CLEAR_VALUEHI_Msk (0xffffffffUL) /*!< STATS_CLEAR_VALUEHI (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== ADEFERRED_P0 ====================================================== */ + #define R_ETHSW_ADEFERRED_P0_DEFERCOUNT_Pos (0UL) /*!< DEFERCOUNT (Bit 0) */ + #define R_ETHSW_ADEFERRED_P0_DEFERCOUNT_Msk (0xffffffffUL) /*!< DEFERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== ADEFERRED_P1 ====================================================== */ + #define R_ETHSW_ADEFERRED_P1_DEFERCOUNT_Pos (0UL) /*!< DEFERCOUNT (Bit 0) */ + #define R_ETHSW_ADEFERRED_P1_DEFERCOUNT_Msk (0xffffffffUL) /*!< DEFERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== ADEFERRED_P2 ====================================================== */ + #define R_ETHSW_ADEFERRED_P2_DEFERCOUNT_Pos (0UL) /*!< DEFERCOUNT (Bit 0) */ + #define R_ETHSW_ADEFERRED_P2_DEFERCOUNT_Msk (0xffffffffUL) /*!< DEFERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== ADEFERRED_P3 ====================================================== */ + #define R_ETHSW_ADEFERRED_P3_DEFERCOUNT_Pos (0UL) /*!< DEFERCOUNT (Bit 0) */ + #define R_ETHSW_ADEFERRED_P3_DEFERCOUNT_Msk (0xffffffffUL) /*!< DEFERCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AMULTIPLECOLLISIONS_P0 ================================================= */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P0_COUNTAFTMLTCOLL_Pos (0UL) /*!< COUNTAFTMLTCOLL (Bit 0) */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P0_COUNTAFTMLTCOLL_Msk (0xffffffffUL) /*!< COUNTAFTMLTCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AMULTIPLECOLLISIONS_P1 ================================================= */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P1_COUNTAFTMLTCOLL_Pos (0UL) /*!< COUNTAFTMLTCOLL (Bit 0) */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P1_COUNTAFTMLTCOLL_Msk (0xffffffffUL) /*!< COUNTAFTMLTCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AMULTIPLECOLLISIONS_P2 ================================================= */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P2_COUNTAFTMLTCOLL_Pos (0UL) /*!< COUNTAFTMLTCOLL (Bit 0) */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P2_COUNTAFTMLTCOLL_Msk (0xffffffffUL) /*!< COUNTAFTMLTCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AMULTIPLECOLLISIONS_P3 ================================================= */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P3_COUNTAFTMLTCOLL_Pos (0UL) /*!< COUNTAFTMLTCOLL (Bit 0) */ + #define R_ETHSW_AMULTIPLECOLLISIONS_P3_COUNTAFTMLTCOLL_Msk (0xffffffffUL) /*!< COUNTAFTMLTCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ASINGLECOLLISIONS_P0 ================================================== */ + #define R_ETHSW_ASINGLECOLLISIONS_P0_COUNTAFTSNGLCOLL_Pos (0UL) /*!< COUNTAFTSNGLCOLL (Bit 0) */ + #define R_ETHSW_ASINGLECOLLISIONS_P0_COUNTAFTSNGLCOLL_Msk (0xffffffffUL) /*!< COUNTAFTSNGLCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ASINGLECOLLISIONS_P1 ================================================== */ + #define R_ETHSW_ASINGLECOLLISIONS_P1_COUNTAFTSNGLCOLL_Pos (0UL) /*!< COUNTAFTSNGLCOLL (Bit 0) */ + #define R_ETHSW_ASINGLECOLLISIONS_P1_COUNTAFTSNGLCOLL_Msk (0xffffffffUL) /*!< COUNTAFTSNGLCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ASINGLECOLLISIONS_P2 ================================================== */ + #define R_ETHSW_ASINGLECOLLISIONS_P2_COUNTAFTSNGLCOLL_Pos (0UL) /*!< COUNTAFTSNGLCOLL (Bit 0) */ + #define R_ETHSW_ASINGLECOLLISIONS_P2_COUNTAFTSNGLCOLL_Msk (0xffffffffUL) /*!< COUNTAFTSNGLCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================= ASINGLECOLLISIONS_P3 ================================================== */ + #define R_ETHSW_ASINGLECOLLISIONS_P3_COUNTAFTSNGLCOLL_Pos (0UL) /*!< COUNTAFTSNGLCOLL (Bit 0) */ + #define R_ETHSW_ASINGLECOLLISIONS_P3_COUNTAFTSNGLCOLL_Msk (0xffffffffUL) /*!< COUNTAFTSNGLCOLL (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ALATECOLLISIONS_P0 =================================================== */ + #define R_ETHSW_ALATECOLLISIONS_P0_LATECOLLCOUNT_Pos (0UL) /*!< LATECOLLCOUNT (Bit 0) */ + #define R_ETHSW_ALATECOLLISIONS_P0_LATECOLLCOUNT_Msk (0xffffffffUL) /*!< LATECOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ALATECOLLISIONS_P1 =================================================== */ + #define R_ETHSW_ALATECOLLISIONS_P1_LATECOLLCOUNT_Pos (0UL) /*!< LATECOLLCOUNT (Bit 0) */ + #define R_ETHSW_ALATECOLLISIONS_P1_LATECOLLCOUNT_Msk (0xffffffffUL) /*!< LATECOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ALATECOLLISIONS_P2 =================================================== */ + #define R_ETHSW_ALATECOLLISIONS_P2_LATECOLLCOUNT_Pos (0UL) /*!< LATECOLLCOUNT (Bit 0) */ + #define R_ETHSW_ALATECOLLISIONS_P2_LATECOLLCOUNT_Msk (0xffffffffUL) /*!< LATECOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================== ALATECOLLISIONS_P3 =================================================== */ + #define R_ETHSW_ALATECOLLISIONS_P3_LATECOLLCOUNT_Pos (0UL) /*!< LATECOLLCOUNT (Bit 0) */ + #define R_ETHSW_ALATECOLLISIONS_P3_LATECOLLCOUNT_Msk (0xffffffffUL) /*!< LATECOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AEXCESSIVECOLLISIONS_P0 ================================================ */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P0_EXCCOLLCOUNT_Pos (0UL) /*!< EXCCOLLCOUNT (Bit 0) */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P0_EXCCOLLCOUNT_Msk (0xffffffffUL) /*!< EXCCOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AEXCESSIVECOLLISIONS_P1 ================================================ */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P1_EXCCOLLCOUNT_Pos (0UL) /*!< EXCCOLLCOUNT (Bit 0) */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P1_EXCCOLLCOUNT_Msk (0xffffffffUL) /*!< EXCCOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AEXCESSIVECOLLISIONS_P2 ================================================ */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P2_EXCCOLLCOUNT_Pos (0UL) /*!< EXCCOLLCOUNT (Bit 0) */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P2_EXCCOLLCOUNT_Msk (0xffffffffUL) /*!< EXCCOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ AEXCESSIVECOLLISIONS_P3 ================================================ */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P3_EXCCOLLCOUNT_Pos (0UL) /*!< EXCCOLLCOUNT (Bit 0) */ + #define R_ETHSW_AEXCESSIVECOLLISIONS_P3_EXCCOLLCOUNT_Msk (0xffffffffUL) /*!< EXCCOLLCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ACARRIERSENSEERRORS_P0 ================================================= */ + #define R_ETHSW_ACARRIERSENSEERRORS_P0_CSERRCOUNT_Pos (0UL) /*!< CSERRCOUNT (Bit 0) */ + #define R_ETHSW_ACARRIERSENSEERRORS_P0_CSERRCOUNT_Msk (0xffffffffUL) /*!< CSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ACARRIERSENSEERRORS_P1 ================================================= */ + #define R_ETHSW_ACARRIERSENSEERRORS_P1_CSERRCOUNT_Pos (0UL) /*!< CSERRCOUNT (Bit 0) */ + #define R_ETHSW_ACARRIERSENSEERRORS_P1_CSERRCOUNT_Msk (0xffffffffUL) /*!< CSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ACARRIERSENSEERRORS_P2 ================================================= */ + #define R_ETHSW_ACARRIERSENSEERRORS_P2_CSERRCOUNT_Pos (0UL) /*!< CSERRCOUNT (Bit 0) */ + #define R_ETHSW_ACARRIERSENSEERRORS_P2_CSERRCOUNT_Msk (0xffffffffUL) /*!< CSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ================================================ ACARRIERSENSEERRORS_P3 ================================================= */ + #define R_ETHSW_ACARRIERSENSEERRORS_P3_CSERRCOUNT_Pos (0UL) /*!< CSERRCOUNT (Bit 0) */ + #define R_ETHSW_ACARRIERSENSEERRORS_P3_CSERRCOUNT_Msk (0xffffffffUL) /*!< CSERRCOUNT (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACU0 ====================================================== */ + #define R_ETHSW_P0_QSTMACU0_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU0_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU0_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU0_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACU1 ====================================================== */ + #define R_ETHSW_P0_QSTMACU1_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU1_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU1_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU1_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACU2 ====================================================== */ + #define R_ETHSW_P0_QSTMACU2_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU2_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU2_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU2_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACU3 ====================================================== */ + #define R_ETHSW_P0_QSTMACU3_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU3_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU3_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU3_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACU4 ====================================================== */ + #define R_ETHSW_P0_QSTMACU4_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU4_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU4_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU4_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACU5 ====================================================== */ + #define R_ETHSW_P0_QSTMACU5_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU5_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU5_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU5_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACU6 ====================================================== */ + #define R_ETHSW_P0_QSTMACU6_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU6_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU6_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU6_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACU7 ====================================================== */ + #define R_ETHSW_P0_QSTMACU7_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACU7_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P0_QSTMACU7_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P0_QSTMACU7_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSTMACD0 ====================================================== */ + #define R_ETHSW_P0_QSTMACD0_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD0_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACD1 ====================================================== */ + #define R_ETHSW_P0_QSTMACD1_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD1_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACD2 ====================================================== */ + #define R_ETHSW_P0_QSTMACD2_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD2_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACD3 ====================================================== */ + #define R_ETHSW_P0_QSTMACD3_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD3_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACD4 ====================================================== */ + #define R_ETHSW_P0_QSTMACD4_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD4_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACD5 ====================================================== */ + #define R_ETHSW_P0_QSTMACD5_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD5_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACD6 ====================================================== */ + #define R_ETHSW_P0_QSTMACD6_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD6_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMACD7 ====================================================== */ + #define R_ETHSW_P0_QSTMACD7_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P0_QSTMACD7_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMU0 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU0_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU0_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMU1 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU1_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU1_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMU2 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU2_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU2_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMU3 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU3_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU3_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMU4 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU4_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU4_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMU5 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU5_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU5_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMU6 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU6_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU6_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMU7 ====================================================== */ + #define R_ETHSW_P0_QSTMAMU7_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMU7_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QSTMAMD0 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD0_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD0_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMD1 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD1_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD1_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMD2 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD2_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD2_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMD3 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD3_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD3_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMD4 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD4_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD4_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMD5 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD5_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD5_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMD6 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD6_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD6_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSTMAMD7 ====================================================== */ + #define R_ETHSW_P0_QSTMAMD7_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P0_QSTMAMD7_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P0_QSFTVL0 ======================================================= */ + #define R_ETHSW_P0_QSFTVL0_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL0_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL0_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL0_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL0_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL0_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL0_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL0_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVL1 ======================================================= */ + #define R_ETHSW_P0_QSFTVL1_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL1_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL1_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL1_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL1_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL1_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL1_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL1_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVL2 ======================================================= */ + #define R_ETHSW_P0_QSFTVL2_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL2_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL2_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL2_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL2_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL2_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL2_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL2_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVL3 ======================================================= */ + #define R_ETHSW_P0_QSFTVL3_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL3_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL3_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL3_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL3_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL3_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL3_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL3_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVL4 ======================================================= */ + #define R_ETHSW_P0_QSFTVL4_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL4_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL4_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL4_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL4_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL4_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL4_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL4_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVL5 ======================================================= */ + #define R_ETHSW_P0_QSFTVL5_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL5_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL5_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL5_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL5_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL5_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL5_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL5_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVL6 ======================================================= */ + #define R_ETHSW_P0_QSFTVL6_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL6_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL6_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL6_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL6_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL6_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL6_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL6_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVL7 ======================================================= */ + #define R_ETHSW_P0_QSFTVL7_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P0_QSFTVL7_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVL7_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_QSFTVL7_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVL7_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_QSFTVL7_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTVL7_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P0_QSFTVL7_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P0_QSFTVLM0 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM0_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM0_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM0_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM0_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM0_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM0_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTVLM1 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM1_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM1_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM1_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM1_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM1_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM1_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTVLM2 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM2_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM2_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM2_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM2_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM2_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM2_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTVLM3 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM3_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM3_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM3_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM3_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM3_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM3_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTVLM4 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM4_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM4_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM4_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM4_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM4_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM4_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTVLM5 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM5_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM5_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM5_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM5_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM5_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM5_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTVLM6 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM6_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM6_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM6_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM6_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM6_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM6_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTVLM7 ====================================================== */ + #define R_ETHSW_P0_QSFTVLM7_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P0_QSFTVLM7_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_QSFTVLM7_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P0_QSFTVLM7_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTVLM7_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P0_QSFTVLM7_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_QSFTBL0 ======================================================= */ + #define R_ETHSW_P0_QSFTBL0_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL0_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL0_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL0_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL0_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL0_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL0_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL0_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL0_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL0_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL0_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL0_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL0_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL0_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL0_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL0_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSFTBL1 ======================================================= */ + #define R_ETHSW_P0_QSFTBL1_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL1_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL1_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL1_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL1_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL1_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL1_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL1_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL1_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL1_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL1_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL1_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL1_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL1_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL1_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL1_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSFTBL2 ======================================================= */ + #define R_ETHSW_P0_QSFTBL2_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL2_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL2_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL2_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL2_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL2_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL2_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL2_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL2_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL2_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL2_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL2_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL2_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL2_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL2_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL2_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSFTBL3 ======================================================= */ + #define R_ETHSW_P0_QSFTBL3_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL3_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL3_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL3_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL3_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL3_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL3_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL3_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL3_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL3_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL3_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL3_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL3_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL3_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL3_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL3_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSFTBL4 ======================================================= */ + #define R_ETHSW_P0_QSFTBL4_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL4_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL4_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL4_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL4_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL4_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL4_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL4_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL4_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL4_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL4_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL4_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL4_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL4_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL4_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL4_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSFTBL5 ======================================================= */ + #define R_ETHSW_P0_QSFTBL5_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL5_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL5_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL5_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL5_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL5_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL5_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL5_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL5_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL5_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL5_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL5_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL5_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL5_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL5_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL5_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSFTBL6 ======================================================= */ + #define R_ETHSW_P0_QSFTBL6_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL6_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL6_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL6_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL6_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL6_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL6_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL6_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL6_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL6_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL6_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL6_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL6_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL6_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL6_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL6_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QSFTBL7 ======================================================= */ + #define R_ETHSW_P0_QSFTBL7_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P0_QSFTBL7_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL7_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P0_QSFTBL7_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL7_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P0_QSFTBL7_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL7_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P0_QSFTBL7_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_QSFTBL7_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P0_QSFTBL7_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL7_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P0_QSFTBL7_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P0_QSFTBL7_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P0_QSFTBL7_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QSFTBL7_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P0_QSFTBL7_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ======================================================= P0_QSMFC0 ======================================================= */ + #define R_ETHSW_P0_QSMFC0_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC0_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSMFC1 ======================================================= */ + #define R_ETHSW_P0_QSMFC1_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC1_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSMFC2 ======================================================= */ + #define R_ETHSW_P0_QSMFC2_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC2_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSMFC3 ======================================================= */ + #define R_ETHSW_P0_QSMFC3_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC3_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSMFC4 ======================================================= */ + #define R_ETHSW_P0_QSMFC4_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC4_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSMFC5 ======================================================= */ + #define R_ETHSW_P0_QSMFC5_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC5_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSMFC6 ======================================================= */ + #define R_ETHSW_P0_QSMFC6_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC6_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSMFC7 ======================================================= */ + #define R_ETHSW_P0_QSMFC7_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P0_QSMFC7_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC0 ======================================================= */ + #define R_ETHSW_P0_QMSPPC0_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC0_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC1 ======================================================= */ + #define R_ETHSW_P0_QMSPPC1_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC1_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC2 ======================================================= */ + #define R_ETHSW_P0_QMSPPC2_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC2_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC3 ======================================================= */ + #define R_ETHSW_P0_QMSPPC3_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC3_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC4 ======================================================= */ + #define R_ETHSW_P0_QMSPPC4_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC4_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC5 ======================================================= */ + #define R_ETHSW_P0_QMSPPC5_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC5_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC6 ======================================================= */ + #define R_ETHSW_P0_QMSPPC6_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC6_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSPPC7 ======================================================= */ + #define R_ETHSW_P0_QMSPPC7_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P0_QMSPPC7_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC0 ======================================================= */ + #define R_ETHSW_P0_QMSRPC0_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC0_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC1 ======================================================= */ + #define R_ETHSW_P0_QMSRPC1_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC1_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC2 ======================================================= */ + #define R_ETHSW_P0_QMSRPC2_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC2_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC3 ======================================================= */ + #define R_ETHSW_P0_QMSRPC3_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC3_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC4 ======================================================= */ + #define R_ETHSW_P0_QMSRPC4_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC4_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC5 ======================================================= */ + #define R_ETHSW_P0_QMSRPC5_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC5_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC6 ======================================================= */ + #define R_ETHSW_P0_QMSRPC6_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC6_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P0_QMSRPC7 ======================================================= */ + #define R_ETHSW_P0_QMSRPC7_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P0_QMSRPC7_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QSEIS ======================================================== */ + #define R_ETHSW_P0_QSEIS_QSMOIS_Pos (0UL) /*!< QSMOIS (Bit 0) */ + #define R_ETHSW_P0_QSEIS_QSMOIS_Msk (0xffUL) /*!< QSMOIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QSEIS ======================================================== */ + #define R_ETHSW_P1_QSEIS_QSMOIS_Pos (0UL) /*!< QSMOIS (Bit 0) */ + #define R_ETHSW_P1_QSEIS_QSMOIS_Msk (0xffUL) /*!< QSMOIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QSEIS ======================================================== */ + #define R_ETHSW_P2_QSEIS_QSMOIS_Pos (0UL) /*!< QSMOIS (Bit 0) */ + #define R_ETHSW_P2_QSEIS_QSMOIS_Msk (0xffUL) /*!< QSMOIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QSEIE ======================================================== */ + #define R_ETHSW_P0_QSEIE_QSMOIE_Pos (0UL) /*!< QSMOIE (Bit 0) */ + #define R_ETHSW_P0_QSEIE_QSMOIE_Msk (0xffUL) /*!< QSMOIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QSEIE ======================================================== */ + #define R_ETHSW_P1_QSEIE_QSMOIE_Pos (0UL) /*!< QSMOIE (Bit 0) */ + #define R_ETHSW_P1_QSEIE_QSMOIE_Msk (0xffUL) /*!< QSMOIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QSEIE ======================================================== */ + #define R_ETHSW_P2_QSEIE_QSMOIE_Pos (0UL) /*!< QSMOIE (Bit 0) */ + #define R_ETHSW_P2_QSEIE_QSMOIE_Msk (0xffUL) /*!< QSMOIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QSEID ======================================================== */ + #define R_ETHSW_P0_QSEID_QSMOID_Pos (0UL) /*!< QSMOID (Bit 0) */ + #define R_ETHSW_P0_QSEID_QSMOID_Msk (0xffUL) /*!< QSMOID (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QSEID ======================================================== */ + #define R_ETHSW_P1_QSEID_QSMOID_Pos (0UL) /*!< QSMOID (Bit 0) */ + #define R_ETHSW_P1_QSEID_QSMOID_Msk (0xffUL) /*!< QSMOID (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QSEID ======================================================== */ + #define R_ETHSW_P2_QSEID_QSMOID_Pos (0UL) /*!< QSMOID (Bit 0) */ + #define R_ETHSW_P2_QSEID_QSMOID_Msk (0xffUL) /*!< QSMOID (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QGMOD ======================================================== */ + #define R_ETHSW_P0_QGMOD_QGMOD_Pos (0UL) /*!< QGMOD (Bit 0) */ + #define R_ETHSW_P0_QGMOD_QGMOD_Msk (0xffUL) /*!< QGMOD (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QGMOD ======================================================== */ + #define R_ETHSW_P1_QGMOD_QGMOD_Pos (0UL) /*!< QGMOD (Bit 0) */ + #define R_ETHSW_P1_QGMOD_QGMOD_Msk (0xffUL) /*!< QGMOD (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QGMOD ======================================================== */ + #define R_ETHSW_P2_QGMOD_QGMOD_Pos (0UL) /*!< QGMOD (Bit 0) */ + #define R_ETHSW_P2_QGMOD_QGMOD_Msk (0xffUL) /*!< QGMOD (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QGPPC ======================================================== */ + #define R_ETHSW_P0_QGPPC_QGPPC_Pos (0UL) /*!< QGPPC (Bit 0) */ + #define R_ETHSW_P0_QGPPC_QGPPC_Msk (0xffffUL) /*!< QGPPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGPPC ======================================================== */ + #define R_ETHSW_P1_QGPPC_QGPPC_Pos (0UL) /*!< QGPPC (Bit 0) */ + #define R_ETHSW_P1_QGPPC_QGPPC_Msk (0xffffUL) /*!< QGPPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGPPC ======================================================== */ + #define R_ETHSW_P2_QGPPC_QGPPC_Pos (0UL) /*!< QGPPC (Bit 0) */ + #define R_ETHSW_P2_QGPPC_QGPPC_Msk (0xffffUL) /*!< QGPPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC0 ======================================================= */ + #define R_ETHSW_P0_QGDPC0_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC0_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC1 ======================================================= */ + #define R_ETHSW_P0_QGDPC1_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC1_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC2 ======================================================= */ + #define R_ETHSW_P0_QGDPC2_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC2_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC3 ======================================================= */ + #define R_ETHSW_P0_QGDPC3_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC3_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC4 ======================================================= */ + #define R_ETHSW_P0_QGDPC4_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC4_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC5 ======================================================= */ + #define R_ETHSW_P0_QGDPC5_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC5_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC6 ======================================================= */ + #define R_ETHSW_P0_QGDPC6_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC6_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGDPC7 ======================================================= */ + #define R_ETHSW_P0_QGDPC7_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P0_QGDPC7_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QGEIS ======================================================== */ + #define R_ETHSW_P0_QGEIS_QGMOIS_Pos (0UL) /*!< QGMOIS (Bit 0) */ + #define R_ETHSW_P0_QGEIS_QGMOIS_Msk (0xffUL) /*!< QGMOIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QGEIS ======================================================== */ + #define R_ETHSW_P1_QGEIS_QGMOIS_Pos (0UL) /*!< QGMOIS (Bit 0) */ + #define R_ETHSW_P1_QGEIS_QGMOIS_Msk (0xffUL) /*!< QGMOIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QGEIS ======================================================== */ + #define R_ETHSW_P2_QGEIS_QGMOIS_Pos (0UL) /*!< QGMOIS (Bit 0) */ + #define R_ETHSW_P2_QGEIS_QGMOIS_Msk (0xffUL) /*!< QGMOIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QGEIE ======================================================== */ + #define R_ETHSW_P0_QGEIE_QGMOIE_Pos (0UL) /*!< QGMOIE (Bit 0) */ + #define R_ETHSW_P0_QGEIE_QGMOIE_Msk (0xffUL) /*!< QGMOIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QGEIE ======================================================== */ + #define R_ETHSW_P1_QGEIE_QGMOIE_Pos (0UL) /*!< QGMOIE (Bit 0) */ + #define R_ETHSW_P1_QGEIE_QGMOIE_Msk (0xffUL) /*!< QGMOIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QGEIE ======================================================== */ + #define R_ETHSW_P2_QGEIE_QGMOIE_Pos (0UL) /*!< QGMOIE (Bit 0) */ + #define R_ETHSW_P2_QGEIE_QGMOIE_Msk (0xffUL) /*!< QGMOIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QGEID ======================================================== */ + #define R_ETHSW_P0_QGEID_QGMOID_Pos (0UL) /*!< QGMOID (Bit 0) */ + #define R_ETHSW_P0_QGEID_QGMOID_Msk (0xffUL) /*!< QGMOID (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QGEID ======================================================== */ + #define R_ETHSW_P1_QGEID_QGMOID_Pos (0UL) /*!< QGMOID (Bit 0) */ + #define R_ETHSW_P1_QGEID_QGMOID_Msk (0xffUL) /*!< QGMOID (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QGEID ======================================================== */ + #define R_ETHSW_P2_QGEID_QGMOID_Pos (0UL) /*!< QGMOID (Bit 0) */ + #define R_ETHSW_P2_QGEID_QGMOID_Msk (0xffUL) /*!< QGMOID (Bitfield-Mask: 0xff) */ +/* ====================================================== P0_QMDESC0 ======================================================= */ + #define R_ETHSW_P0_QMDESC0_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC0_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC0_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC0_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC0_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC0_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMDESC1 ======================================================= */ + #define R_ETHSW_P0_QMDESC1_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC1_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC1_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC1_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC1_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC1_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMDESC2 ======================================================= */ + #define R_ETHSW_P0_QMDESC2_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC2_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC2_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC2_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC2_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC2_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMDESC3 ======================================================= */ + #define R_ETHSW_P0_QMDESC3_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC3_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC3_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC3_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC3_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC3_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMDESC4 ======================================================= */ + #define R_ETHSW_P0_QMDESC4_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC4_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC4_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC4_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC4_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC4_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMDESC5 ======================================================= */ + #define R_ETHSW_P0_QMDESC5_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC5_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC5_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC5_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC5_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC5_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMDESC6 ======================================================= */ + #define R_ETHSW_P0_QMDESC6_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC6_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC6_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC6_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC6_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC6_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMDESC7 ======================================================= */ + #define R_ETHSW_P0_QMDESC7_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P0_QMDESC7_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC7_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P0_QMDESC7_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_QMDESC7_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P0_QMDESC7_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P0_QMCBSC0 ======================================================= */ + #define R_ETHSW_P0_QMCBSC0_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC0_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCBSC1 ======================================================= */ + #define R_ETHSW_P0_QMCBSC1_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC1_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCBSC2 ======================================================= */ + #define R_ETHSW_P0_QMCBSC2_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC2_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCBSC3 ======================================================= */ + #define R_ETHSW_P0_QMCBSC3_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC3_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCBSC4 ======================================================= */ + #define R_ETHSW_P0_QMCBSC4_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC4_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCBSC5 ======================================================= */ + #define R_ETHSW_P0_QMCBSC5_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC5_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCBSC6 ======================================================= */ + #define R_ETHSW_P0_QMCBSC6_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC6_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCBSC7 ======================================================= */ + #define R_ETHSW_P0_QMCBSC7_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P0_QMCBSC7_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P0_QMCIRC0 ======================================================= */ + #define R_ETHSW_P0_QMCIRC0_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC0_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P0_QMCIRC1 ======================================================= */ + #define R_ETHSW_P0_QMCIRC1_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC1_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P0_QMCIRC2 ======================================================= */ + #define R_ETHSW_P0_QMCIRC2_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC2_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P0_QMCIRC3 ======================================================= */ + #define R_ETHSW_P0_QMCIRC3_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC3_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P0_QMCIRC4 ======================================================= */ + #define R_ETHSW_P0_QMCIRC4_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC4_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P0_QMCIRC5 ======================================================= */ + #define R_ETHSW_P0_QMCIRC5_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC5_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P0_QMCIRC6 ======================================================= */ + #define R_ETHSW_P0_QMCIRC6_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC6_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P0_QMCIRC7 ======================================================= */ + #define R_ETHSW_P0_QMCIRC7_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P0_QMCIRC7_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ======================================================= P0_QMGPC0 ======================================================= */ + #define R_ETHSW_P0_QMGPC0_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC0_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMGPC1 ======================================================= */ + #define R_ETHSW_P0_QMGPC1_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC1_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMGPC2 ======================================================= */ + #define R_ETHSW_P0_QMGPC2_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC2_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMGPC3 ======================================================= */ + #define R_ETHSW_P0_QMGPC3_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC3_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMGPC4 ======================================================= */ + #define R_ETHSW_P0_QMGPC4_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC4_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMGPC5 ======================================================= */ + #define R_ETHSW_P0_QMGPC5_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC5_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMGPC6 ======================================================= */ + #define R_ETHSW_P0_QMGPC6_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC6_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMGPC7 ======================================================= */ + #define R_ETHSW_P0_QMGPC7_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P0_QMGPC7_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC0 ======================================================= */ + #define R_ETHSW_P0_QMRPC0_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC0_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC1 ======================================================= */ + #define R_ETHSW_P0_QMRPC1_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC1_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC2 ======================================================= */ + #define R_ETHSW_P0_QMRPC2_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC2_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC3 ======================================================= */ + #define R_ETHSW_P0_QMRPC3_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC3_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC4 ======================================================= */ + #define R_ETHSW_P0_QMRPC4_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC4_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC5 ======================================================= */ + #define R_ETHSW_P0_QMRPC5_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC5_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC6 ======================================================= */ + #define R_ETHSW_P0_QMRPC6_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC6_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P0_QMRPC7 ======================================================= */ + #define R_ETHSW_P0_QMRPC7_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P0_QMRPC7_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================== P0_QMEC ======================================================== */ + #define R_ETHSW_P0_QMEC_ME_Pos (0UL) /*!< ME (Bit 0) */ + #define R_ETHSW_P0_QMEC_ME_Msk (0xffUL) /*!< ME (Bitfield-Mask: 0xff) */ +/* ======================================================== P1_QMEC ======================================================== */ + #define R_ETHSW_P1_QMEC_ME_Pos (0UL) /*!< ME (Bit 0) */ + #define R_ETHSW_P1_QMEC_ME_Msk (0xffUL) /*!< ME (Bitfield-Mask: 0xff) */ +/* ======================================================== P2_QMEC ======================================================== */ + #define R_ETHSW_P2_QMEC_ME_Pos (0UL) /*!< ME (Bit 0) */ + #define R_ETHSW_P2_QMEC_ME_Msk (0xffUL) /*!< ME (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QMEIS ======================================================== */ + #define R_ETHSW_P0_QMEIS_QRFIS_Pos (0UL) /*!< QRFIS (Bit 0) */ + #define R_ETHSW_P0_QMEIS_QRFIS_Msk (0xffUL) /*!< QRFIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QMEIS ======================================================== */ + #define R_ETHSW_P1_QMEIS_QRFIS_Pos (0UL) /*!< QRFIS (Bit 0) */ + #define R_ETHSW_P1_QMEIS_QRFIS_Msk (0xffUL) /*!< QRFIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QMEIS ======================================================== */ + #define R_ETHSW_P2_QMEIS_QRFIS_Pos (0UL) /*!< QRFIS (Bit 0) */ + #define R_ETHSW_P2_QMEIS_QRFIS_Msk (0xffUL) /*!< QRFIS (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QMEIE ======================================================== */ + #define R_ETHSW_P0_QMEIE_QRFIE_Pos (0UL) /*!< QRFIE (Bit 0) */ + #define R_ETHSW_P0_QMEIE_QRFIE_Msk (0xffUL) /*!< QRFIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QMEIE ======================================================== */ + #define R_ETHSW_P1_QMEIE_QRFIE_Pos (0UL) /*!< QRFIE (Bit 0) */ + #define R_ETHSW_P1_QMEIE_QRFIE_Msk (0xffUL) /*!< QRFIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QMEIE ======================================================== */ + #define R_ETHSW_P2_QMEIE_QRFIE_Pos (0UL) /*!< QRFIE (Bit 0) */ + #define R_ETHSW_P2_QMEIE_QRFIE_Msk (0xffUL) /*!< QRFIE (Bitfield-Mask: 0xff) */ +/* ======================================================= P0_QMEID ======================================================== */ + #define R_ETHSW_P0_QMEID_QRFID_Pos (0UL) /*!< QRFID (Bit 0) */ + #define R_ETHSW_P0_QMEID_QRFID_Msk (0xffUL) /*!< QRFID (Bitfield-Mask: 0xff) */ +/* ======================================================= P1_QMEID ======================================================== */ + #define R_ETHSW_P1_QMEID_QRFID_Pos (0UL) /*!< QRFID (Bit 0) */ + #define R_ETHSW_P1_QMEID_QRFID_Msk (0xffUL) /*!< QRFID (Bitfield-Mask: 0xff) */ +/* ======================================================= P2_QMEID ======================================================== */ + #define R_ETHSW_P2_QMEID_QRFID_Pos (0UL) /*!< QRFID (Bit 0) */ + #define R_ETHSW_P2_QMEID_QRFID_Msk (0xffUL) /*!< QRFID (Bitfield-Mask: 0xff) */ +/* ===================================================== P0_PCP_REMAP ====================================================== */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP0_Pos (0UL) /*!< PCP_REMAP0 (Bit 0) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP0_Msk (0x7UL) /*!< PCP_REMAP0 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP1_Pos (3UL) /*!< PCP_REMAP1 (Bit 3) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP1_Msk (0x38UL) /*!< PCP_REMAP1 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP2_Pos (6UL) /*!< PCP_REMAP2 (Bit 6) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP2_Msk (0x1c0UL) /*!< PCP_REMAP2 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP3_Pos (9UL) /*!< PCP_REMAP3 (Bit 9) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP3_Msk (0xe00UL) /*!< PCP_REMAP3 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP4_Pos (12UL) /*!< PCP_REMAP4 (Bit 12) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP4_Msk (0x7000UL) /*!< PCP_REMAP4 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP5_Pos (15UL) /*!< PCP_REMAP5 (Bit 15) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP5_Msk (0x38000UL) /*!< PCP_REMAP5 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP6_Pos (18UL) /*!< PCP_REMAP6 (Bit 18) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP6_Msk (0x1c0000UL) /*!< PCP_REMAP6 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP7_Pos (21UL) /*!< PCP_REMAP7 (Bit 21) */ + #define R_ETHSW_P0_PCP_REMAP_PCP_REMAP7_Msk (0xe00000UL) /*!< PCP_REMAP7 (Bitfield-Mask: 0x07) */ +/* ===================================================== P1_PCP_REMAP ====================================================== */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP0_Pos (0UL) /*!< PCP_REMAP0 (Bit 0) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP0_Msk (0x7UL) /*!< PCP_REMAP0 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP1_Pos (3UL) /*!< PCP_REMAP1 (Bit 3) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP1_Msk (0x38UL) /*!< PCP_REMAP1 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP2_Pos (6UL) /*!< PCP_REMAP2 (Bit 6) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP2_Msk (0x1c0UL) /*!< PCP_REMAP2 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP3_Pos (9UL) /*!< PCP_REMAP3 (Bit 9) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP3_Msk (0xe00UL) /*!< PCP_REMAP3 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP4_Pos (12UL) /*!< PCP_REMAP4 (Bit 12) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP4_Msk (0x7000UL) /*!< PCP_REMAP4 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP5_Pos (15UL) /*!< PCP_REMAP5 (Bit 15) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP5_Msk (0x38000UL) /*!< PCP_REMAP5 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP6_Pos (18UL) /*!< PCP_REMAP6 (Bit 18) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP6_Msk (0x1c0000UL) /*!< PCP_REMAP6 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP7_Pos (21UL) /*!< PCP_REMAP7 (Bit 21) */ + #define R_ETHSW_P1_PCP_REMAP_PCP_REMAP7_Msk (0xe00000UL) /*!< PCP_REMAP7 (Bitfield-Mask: 0x07) */ +/* ===================================================== P2_PCP_REMAP ====================================================== */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP0_Pos (0UL) /*!< PCP_REMAP0 (Bit 0) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP0_Msk (0x7UL) /*!< PCP_REMAP0 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP1_Pos (3UL) /*!< PCP_REMAP1 (Bit 3) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP1_Msk (0x38UL) /*!< PCP_REMAP1 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP2_Pos (6UL) /*!< PCP_REMAP2 (Bit 6) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP2_Msk (0x1c0UL) /*!< PCP_REMAP2 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP3_Pos (9UL) /*!< PCP_REMAP3 (Bit 9) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP3_Msk (0xe00UL) /*!< PCP_REMAP3 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP4_Pos (12UL) /*!< PCP_REMAP4 (Bit 12) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP4_Msk (0x7000UL) /*!< PCP_REMAP4 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP5_Pos (15UL) /*!< PCP_REMAP5 (Bit 15) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP5_Msk (0x38000UL) /*!< PCP_REMAP5 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP6_Pos (18UL) /*!< PCP_REMAP6 (Bit 18) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP6_Msk (0x1c0000UL) /*!< PCP_REMAP6 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP7_Pos (21UL) /*!< PCP_REMAP7 (Bit 21) */ + #define R_ETHSW_P2_PCP_REMAP_PCP_REMAP7_Msk (0xe00000UL) /*!< PCP_REMAP7 (Bitfield-Mask: 0x07) */ +/* ====================================================== P0_VLAN_TAG ====================================================== */ + #define R_ETHSW_P0_VLAN_TAG_VID_Pos (0UL) /*!< VID (Bit 0) */ + #define R_ETHSW_P0_VLAN_TAG_VID_Msk (0xfffUL) /*!< VID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P0_VLAN_TAG_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P0_VLAN_TAG_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_VLAN_TAG_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P0_VLAN_TAG_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P0_VLAN_TAG_TPID_Pos (16UL) /*!< TPID (Bit 16) */ + #define R_ETHSW_P0_VLAN_TAG_TPID_Msk (0xffff0000UL) /*!< TPID (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_VLAN_TAG ====================================================== */ + #define R_ETHSW_P1_VLAN_TAG_VID_Pos (0UL) /*!< VID (Bit 0) */ + #define R_ETHSW_P1_VLAN_TAG_VID_Msk (0xfffUL) /*!< VID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_VLAN_TAG_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_VLAN_TAG_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_VLAN_TAG_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_VLAN_TAG_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_VLAN_TAG_TPID_Pos (16UL) /*!< TPID (Bit 16) */ + #define R_ETHSW_P1_VLAN_TAG_TPID_Msk (0xffff0000UL) /*!< TPID (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_VLAN_TAG ====================================================== */ + #define R_ETHSW_P2_VLAN_TAG_VID_Pos (0UL) /*!< VID (Bit 0) */ + #define R_ETHSW_P2_VLAN_TAG_VID_Msk (0xfffUL) /*!< VID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_VLAN_TAG_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_VLAN_TAG_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_VLAN_TAG_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_VLAN_TAG_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_VLAN_TAG_TPID_Pos (16UL) /*!< TPID (Bit 16) */ + #define R_ETHSW_P2_VLAN_TAG_TPID_Msk (0xffff0000UL) /*!< TPID (Bitfield-Mask: 0xffff) */ +/* ===================================================== P0_VLAN_MODE ====================================================== */ + #define R_ETHSW_P0_VLAN_MODE_VITM_Pos (0UL) /*!< VITM (Bit 0) */ + #define R_ETHSW_P0_VLAN_MODE_VITM_Msk (0x3UL) /*!< VITM (Bitfield-Mask: 0x03) */ + #define R_ETHSW_P0_VLAN_MODE_VICM_Pos (2UL) /*!< VICM (Bit 2) */ + #define R_ETHSW_P0_VLAN_MODE_VICM_Msk (0xcUL) /*!< VICM (Bitfield-Mask: 0x03) */ +/* ===================================================== P1_VLAN_MODE ====================================================== */ + #define R_ETHSW_P1_VLAN_MODE_VITM_Pos (0UL) /*!< VITM (Bit 0) */ + #define R_ETHSW_P1_VLAN_MODE_VITM_Msk (0x3UL) /*!< VITM (Bitfield-Mask: 0x03) */ + #define R_ETHSW_P1_VLAN_MODE_VICM_Pos (2UL) /*!< VICM (Bit 2) */ + #define R_ETHSW_P1_VLAN_MODE_VICM_Msk (0xcUL) /*!< VICM (Bitfield-Mask: 0x03) */ +/* ===================================================== P2_VLAN_MODE ====================================================== */ + #define R_ETHSW_P2_VLAN_MODE_VITM_Pos (0UL) /*!< VITM (Bit 0) */ + #define R_ETHSW_P2_VLAN_MODE_VITM_Msk (0x3UL) /*!< VITM (Bitfield-Mask: 0x03) */ + #define R_ETHSW_P2_VLAN_MODE_VICM_Pos (2UL) /*!< VICM (Bit 2) */ + #define R_ETHSW_P2_VLAN_MODE_VICM_Msk (0xcUL) /*!< VICM (Bitfield-Mask: 0x03) */ +/* ==================================================== P0_VIC_DROP_CNT ==================================================== */ + #define R_ETHSW_P0_VIC_DROP_CNT_VIC_DROP_CNT_Pos (0UL) /*!< VIC_DROP_CNT (Bit 0) */ + #define R_ETHSW_P0_VIC_DROP_CNT_VIC_DROP_CNT_Msk (0xffffUL) /*!< VIC_DROP_CNT (Bitfield-Mask: 0xffff) */ +/* ==================================================== P1_VIC_DROP_CNT ==================================================== */ + #define R_ETHSW_P1_VIC_DROP_CNT_VIC_DROP_CNT_Pos (0UL) /*!< VIC_DROP_CNT (Bit 0) */ + #define R_ETHSW_P1_VIC_DROP_CNT_VIC_DROP_CNT_Msk (0xffffUL) /*!< VIC_DROP_CNT (Bitfield-Mask: 0xffff) */ +/* ==================================================== P2_VIC_DROP_CNT ==================================================== */ + #define R_ETHSW_P2_VIC_DROP_CNT_VIC_DROP_CNT_Pos (0UL) /*!< VIC_DROP_CNT (Bit 0) */ + #define R_ETHSW_P2_VIC_DROP_CNT_VIC_DROP_CNT_Msk (0xffffUL) /*!< VIC_DROP_CNT (Bitfield-Mask: 0xffff) */ +/* =================================================== P0_LOOKUP_HIT_CNT =================================================== */ + #define R_ETHSW_P0_LOOKUP_HIT_CNT_LOOKUP_HIT_CNT_Pos (0UL) /*!< LOOKUP_HIT_CNT (Bit 0) */ + #define R_ETHSW_P0_LOOKUP_HIT_CNT_LOOKUP_HIT_CNT_Msk (0xffffffUL) /*!< LOOKUP_HIT_CNT (Bitfield-Mask: 0xffffff) */ +/* =================================================== P1_LOOKUP_HIT_CNT =================================================== */ + #define R_ETHSW_P1_LOOKUP_HIT_CNT_LOOKUP_HIT_CNT_Pos (0UL) /*!< LOOKUP_HIT_CNT (Bit 0) */ + #define R_ETHSW_P1_LOOKUP_HIT_CNT_LOOKUP_HIT_CNT_Msk (0xffffffUL) /*!< LOOKUP_HIT_CNT (Bitfield-Mask: 0xffffff) */ +/* =================================================== P2_LOOKUP_HIT_CNT =================================================== */ + #define R_ETHSW_P2_LOOKUP_HIT_CNT_LOOKUP_HIT_CNT_Pos (0UL) /*!< LOOKUP_HIT_CNT (Bit 0) */ + #define R_ETHSW_P2_LOOKUP_HIT_CNT_LOOKUP_HIT_CNT_Msk (0xffffffUL) /*!< LOOKUP_HIT_CNT (Bitfield-Mask: 0xffffff) */ +/* ==================================================== P0_ERROR_STATUS ==================================================== */ + #define R_ETHSW_P0_ERROR_STATUS_SOPERR_Pos (0UL) /*!< SOPERR (Bit 0) */ + #define R_ETHSW_P0_ERROR_STATUS_SOPERR_Msk (0x1UL) /*!< SOPERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_STATUS_PUNDSZ_Pos (1UL) /*!< PUNDSZ (Bit 1) */ + #define R_ETHSW_P0_ERROR_STATUS_PUNDSZ_Msk (0x2UL) /*!< PUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_STATUS_POVRSZ_Pos (2UL) /*!< POVRSZ (Bit 2) */ + #define R_ETHSW_P0_ERROR_STATUS_POVRSZ_Msk (0x4UL) /*!< POVRSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_STATUS_EUNDSZ_Pos (3UL) /*!< EUNDSZ (Bit 3) */ + #define R_ETHSW_P0_ERROR_STATUS_EUNDSZ_Msk (0x8UL) /*!< EUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_STATUS_EOVRSZ_Pos (4UL) /*!< EOVRSZ (Bit 4) */ + #define R_ETHSW_P0_ERROR_STATUS_EOVRSZ_Msk (0x10UL) /*!< EOVRSZ (Bitfield-Mask: 0x01) */ +/* ==================================================== P1_ERROR_STATUS ==================================================== */ + #define R_ETHSW_P1_ERROR_STATUS_SOPERR_Pos (0UL) /*!< SOPERR (Bit 0) */ + #define R_ETHSW_P1_ERROR_STATUS_SOPERR_Msk (0x1UL) /*!< SOPERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_STATUS_PUNDSZ_Pos (1UL) /*!< PUNDSZ (Bit 1) */ + #define R_ETHSW_P1_ERROR_STATUS_PUNDSZ_Msk (0x2UL) /*!< PUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_STATUS_POVRSZ_Pos (2UL) /*!< POVRSZ (Bit 2) */ + #define R_ETHSW_P1_ERROR_STATUS_POVRSZ_Msk (0x4UL) /*!< POVRSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_STATUS_EUNDSZ_Pos (3UL) /*!< EUNDSZ (Bit 3) */ + #define R_ETHSW_P1_ERROR_STATUS_EUNDSZ_Msk (0x8UL) /*!< EUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_STATUS_EOVRSZ_Pos (4UL) /*!< EOVRSZ (Bit 4) */ + #define R_ETHSW_P1_ERROR_STATUS_EOVRSZ_Msk (0x10UL) /*!< EOVRSZ (Bitfield-Mask: 0x01) */ +/* ==================================================== P2_ERROR_STATUS ==================================================== */ + #define R_ETHSW_P2_ERROR_STATUS_SOPERR_Pos (0UL) /*!< SOPERR (Bit 0) */ + #define R_ETHSW_P2_ERROR_STATUS_SOPERR_Msk (0x1UL) /*!< SOPERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_STATUS_PUNDSZ_Pos (1UL) /*!< PUNDSZ (Bit 1) */ + #define R_ETHSW_P2_ERROR_STATUS_PUNDSZ_Msk (0x2UL) /*!< PUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_STATUS_POVRSZ_Pos (2UL) /*!< POVRSZ (Bit 2) */ + #define R_ETHSW_P2_ERROR_STATUS_POVRSZ_Msk (0x4UL) /*!< POVRSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_STATUS_EUNDSZ_Pos (3UL) /*!< EUNDSZ (Bit 3) */ + #define R_ETHSW_P2_ERROR_STATUS_EUNDSZ_Msk (0x8UL) /*!< EUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_STATUS_EOVRSZ_Pos (4UL) /*!< EOVRSZ (Bit 4) */ + #define R_ETHSW_P2_ERROR_STATUS_EOVRSZ_Msk (0x10UL) /*!< EOVRSZ (Bitfield-Mask: 0x01) */ +/* ===================================================== P0_ERROR_MASK ===================================================== */ + #define R_ETHSW_P0_ERROR_MASK_MSOPERR_Pos (0UL) /*!< MSOPERR (Bit 0) */ + #define R_ETHSW_P0_ERROR_MASK_MSOPERR_Msk (0x1UL) /*!< MSOPERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_MASK_MPUNDSZ_Pos (1UL) /*!< MPUNDSZ (Bit 1) */ + #define R_ETHSW_P0_ERROR_MASK_MPUNDSZ_Msk (0x2UL) /*!< MPUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_MASK_MPOVRSZ_Pos (2UL) /*!< MPOVRSZ (Bit 2) */ + #define R_ETHSW_P0_ERROR_MASK_MPOVRSZ_Msk (0x4UL) /*!< MPOVRSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_MASK_MEUNDSZ_Pos (3UL) /*!< MEUNDSZ (Bit 3) */ + #define R_ETHSW_P0_ERROR_MASK_MEUNDSZ_Msk (0x8UL) /*!< MEUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P0_ERROR_MASK_MEOVRSZ_Pos (4UL) /*!< MEOVRSZ (Bit 4) */ + #define R_ETHSW_P0_ERROR_MASK_MEOVRSZ_Msk (0x10UL) /*!< MEOVRSZ (Bitfield-Mask: 0x01) */ +/* ===================================================== P1_ERROR_MASK ===================================================== */ + #define R_ETHSW_P1_ERROR_MASK_MSOPERR_Pos (0UL) /*!< MSOPERR (Bit 0) */ + #define R_ETHSW_P1_ERROR_MASK_MSOPERR_Msk (0x1UL) /*!< MSOPERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_MASK_MPUNDSZ_Pos (1UL) /*!< MPUNDSZ (Bit 1) */ + #define R_ETHSW_P1_ERROR_MASK_MPUNDSZ_Msk (0x2UL) /*!< MPUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_MASK_MPOVRSZ_Pos (2UL) /*!< MPOVRSZ (Bit 2) */ + #define R_ETHSW_P1_ERROR_MASK_MPOVRSZ_Msk (0x4UL) /*!< MPOVRSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_MASK_MEUNDSZ_Pos (3UL) /*!< MEUNDSZ (Bit 3) */ + #define R_ETHSW_P1_ERROR_MASK_MEUNDSZ_Msk (0x8UL) /*!< MEUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_ERROR_MASK_MEOVRSZ_Pos (4UL) /*!< MEOVRSZ (Bit 4) */ + #define R_ETHSW_P1_ERROR_MASK_MEOVRSZ_Msk (0x10UL) /*!< MEOVRSZ (Bitfield-Mask: 0x01) */ +/* ===================================================== P2_ERROR_MASK ===================================================== */ + #define R_ETHSW_P2_ERROR_MASK_MSOPERR_Pos (0UL) /*!< MSOPERR (Bit 0) */ + #define R_ETHSW_P2_ERROR_MASK_MSOPERR_Msk (0x1UL) /*!< MSOPERR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_MASK_MPUNDSZ_Pos (1UL) /*!< MPUNDSZ (Bit 1) */ + #define R_ETHSW_P2_ERROR_MASK_MPUNDSZ_Msk (0x2UL) /*!< MPUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_MASK_MPOVRSZ_Pos (2UL) /*!< MPOVRSZ (Bit 2) */ + #define R_ETHSW_P2_ERROR_MASK_MPOVRSZ_Msk (0x4UL) /*!< MPOVRSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_MASK_MEUNDSZ_Pos (3UL) /*!< MEUNDSZ (Bit 3) */ + #define R_ETHSW_P2_ERROR_MASK_MEUNDSZ_Msk (0x8UL) /*!< MEUNDSZ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_ERROR_MASK_MEOVRSZ_Pos (4UL) /*!< MEOVRSZ (Bit 4) */ + #define R_ETHSW_P2_ERROR_MASK_MEOVRSZ_Msk (0x10UL) /*!< MEOVRSZ (Bitfield-Mask: 0x01) */ +/* ===================================================== CHANNEL_STATE ===================================================== */ + #define R_ETHSW_CHANNEL_STATE_CH0ACT_Pos (0UL) /*!< CH0ACT (Bit 0) */ + #define R_ETHSW_CHANNEL_STATE_CH0ACT_Msk (0x1UL) /*!< CH0ACT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_CHANNEL_STATE_CH1ACT_Pos (1UL) /*!< CH1ACT (Bit 1) */ + #define R_ETHSW_CHANNEL_STATE_CH1ACT_Msk (0x2UL) /*!< CH1ACT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_CHANNEL_STATE_CH2ACT_Pos (2UL) /*!< CH2ACT (Bit 2) */ + #define R_ETHSW_CHANNEL_STATE_CH2ACT_Msk (0x4UL) /*!< CH2ACT (Bitfield-Mask: 0x01) */ +/* ==================================================== CHANNEL_ENABLE ===================================================== */ + #define R_ETHSW_CHANNEL_ENABLE_CH0ENA_Pos (0UL) /*!< CH0ENA (Bit 0) */ + #define R_ETHSW_CHANNEL_ENABLE_CH0ENA_Msk (0x1UL) /*!< CH0ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_CHANNEL_ENABLE_CH1ENA_Pos (1UL) /*!< CH1ENA (Bit 1) */ + #define R_ETHSW_CHANNEL_ENABLE_CH1ENA_Msk (0x2UL) /*!< CH1ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_CHANNEL_ENABLE_CH2ENA_Pos (2UL) /*!< CH2ENA (Bit 2) */ + #define R_ETHSW_CHANNEL_ENABLE_CH2ENA_Msk (0x4UL) /*!< CH2ENA (Bitfield-Mask: 0x01) */ +/* ==================================================== CHANNEL_DISABLE ==================================================== */ + #define R_ETHSW_CHANNEL_DISABLE_CH0DIS_Pos (0UL) /*!< CH0DIS (Bit 0) */ + #define R_ETHSW_CHANNEL_DISABLE_CH0DIS_Msk (0x1UL) /*!< CH0DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_CHANNEL_DISABLE_CH1DIS_Pos (1UL) /*!< CH1DIS (Bit 1) */ + #define R_ETHSW_CHANNEL_DISABLE_CH1DIS_Msk (0x2UL) /*!< CH1DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_CHANNEL_DISABLE_CH2DIS_Pos (2UL) /*!< CH2DIS (Bit 2) */ + #define R_ETHSW_CHANNEL_DISABLE_CH2DIS_Msk (0x4UL) /*!< CH2DIS (Bitfield-Mask: 0x01) */ +/* ===================================================== ASI_MEM_WDATA ===================================================== */ + #define R_ETHSW_ASI_MEM_WDATA_WDATA_Pos (0UL) /*!< WDATA (Bit 0) */ + #define R_ETHSW_ASI_MEM_WDATA_WDATA_Msk (0xffffffffUL) /*!< WDATA (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== ASI_MEM_ADDR ====================================================== */ + #define R_ETHSW_ASI_MEM_ADDR_ADDR_Pos (0UL) /*!< ADDR (Bit 0) */ + #define R_ETHSW_ASI_MEM_ADDR_ADDR_Msk (0x7fUL) /*!< ADDR (Bitfield-Mask: 0x7f) */ + #define R_ETHSW_ASI_MEM_ADDR_MEM_WEN_Pos (7UL) /*!< MEM_WEN (Bit 7) */ + #define R_ETHSW_ASI_MEM_ADDR_MEM_WEN_Msk (0x80UL) /*!< MEM_WEN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_ASI_MEM_ADDR_MEM_REQ_Pos (8UL) /*!< MEM_REQ (Bit 8) */ + #define R_ETHSW_ASI_MEM_ADDR_MEM_REQ_Msk (0x700UL) /*!< MEM_REQ (Bitfield-Mask: 0x07) */ +/* ===================================================== ASI_MEM_RDATA ===================================================== */ + #define R_ETHSW_ASI_MEM_RDATA_RDATA_Pos (0UL) /*!< RDATA (Bit 0) */ + #define R_ETHSW_ASI_MEM_RDATA_RDATA_Msk (0xffffffffUL) /*!< RDATA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACU0 ====================================================== */ + #define R_ETHSW_P1_QSTMACU0_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU0_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU0_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU0_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACU1 ====================================================== */ + #define R_ETHSW_P1_QSTMACU1_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU1_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU1_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU1_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACU2 ====================================================== */ + #define R_ETHSW_P1_QSTMACU2_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU2_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU2_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU2_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACU3 ====================================================== */ + #define R_ETHSW_P1_QSTMACU3_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU3_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU3_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU3_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACU4 ====================================================== */ + #define R_ETHSW_P1_QSTMACU4_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU4_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU4_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU4_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACU5 ====================================================== */ + #define R_ETHSW_P1_QSTMACU5_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU5_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU5_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU5_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACU6 ====================================================== */ + #define R_ETHSW_P1_QSTMACU6_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU6_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU6_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU6_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACU7 ====================================================== */ + #define R_ETHSW_P1_QSTMACU7_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACU7_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P1_QSTMACU7_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P1_QSTMACU7_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSTMACD0 ====================================================== */ + #define R_ETHSW_P1_QSTMACD0_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD0_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACD1 ====================================================== */ + #define R_ETHSW_P1_QSTMACD1_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD1_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACD2 ====================================================== */ + #define R_ETHSW_P1_QSTMACD2_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD2_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACD3 ====================================================== */ + #define R_ETHSW_P1_QSTMACD3_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD3_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACD4 ====================================================== */ + #define R_ETHSW_P1_QSTMACD4_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD4_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACD5 ====================================================== */ + #define R_ETHSW_P1_QSTMACD5_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD5_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACD6 ====================================================== */ + #define R_ETHSW_P1_QSTMACD6_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD6_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMACD7 ====================================================== */ + #define R_ETHSW_P1_QSTMACD7_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P1_QSTMACD7_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMU0 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU0_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU0_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMU1 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU1_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU1_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMU2 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU2_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU2_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMU3 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU3_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU3_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMU4 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU4_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU4_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMU5 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU5_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU5_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMU6 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU6_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU6_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMU7 ====================================================== */ + #define R_ETHSW_P1_QSTMAMU7_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMU7_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QSTMAMD0 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD0_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD0_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMD1 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD1_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD1_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMD2 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD2_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD2_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMD3 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD3_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD3_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMD4 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD4_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD4_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMD5 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD5_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD5_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMD6 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD6_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD6_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSTMAMD7 ====================================================== */ + #define R_ETHSW_P1_QSTMAMD7_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P1_QSTMAMD7_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P1_QSFTVL0 ======================================================= */ + #define R_ETHSW_P1_QSFTVL0_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL0_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL0_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL0_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL0_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL0_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL0_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL0_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVL1 ======================================================= */ + #define R_ETHSW_P1_QSFTVL1_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL1_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL1_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL1_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL1_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL1_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL1_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL1_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVL2 ======================================================= */ + #define R_ETHSW_P1_QSFTVL2_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL2_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL2_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL2_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL2_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL2_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL2_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL2_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVL3 ======================================================= */ + #define R_ETHSW_P1_QSFTVL3_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL3_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL3_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL3_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL3_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL3_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL3_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL3_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVL4 ======================================================= */ + #define R_ETHSW_P1_QSFTVL4_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL4_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL4_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL4_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL4_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL4_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL4_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL4_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVL5 ======================================================= */ + #define R_ETHSW_P1_QSFTVL5_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL5_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL5_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL5_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL5_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL5_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL5_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL5_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVL6 ======================================================= */ + #define R_ETHSW_P1_QSFTVL6_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL6_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL6_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL6_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL6_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL6_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL6_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL6_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVL7 ======================================================= */ + #define R_ETHSW_P1_QSFTVL7_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P1_QSFTVL7_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVL7_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P1_QSFTVL7_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVL7_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P1_QSFTVL7_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTVL7_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P1_QSFTVL7_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P1_QSFTVLM0 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM0_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM0_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM0_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM0_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM0_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM0_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTVLM1 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM1_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM1_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM1_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM1_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM1_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM1_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTVLM2 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM2_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM2_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM2_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM2_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM2_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM2_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTVLM3 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM3_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM3_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM3_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM3_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM3_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM3_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTVLM4 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM4_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM4_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM4_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM4_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM4_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM4_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTVLM5 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM5_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM5_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM5_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM5_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM5_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM5_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTVLM6 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM6_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM6_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM6_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM6_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM6_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM6_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTVLM7 ====================================================== */ + #define R_ETHSW_P1_QSFTVLM7_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P1_QSFTVLM7_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P1_QSFTVLM7_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P1_QSFTVLM7_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTVLM7_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P1_QSFTVLM7_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P1_QSFTBL0 ======================================================= */ + #define R_ETHSW_P1_QSFTBL0_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL0_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL0_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL0_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL0_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL0_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL0_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL0_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL0_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL0_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL0_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL0_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL0_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL0_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL0_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL0_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSFTBL1 ======================================================= */ + #define R_ETHSW_P1_QSFTBL1_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL1_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL1_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL1_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL1_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL1_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL1_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL1_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL1_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL1_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL1_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL1_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL1_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL1_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL1_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL1_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSFTBL2 ======================================================= */ + #define R_ETHSW_P1_QSFTBL2_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL2_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL2_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL2_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL2_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL2_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL2_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL2_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL2_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL2_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL2_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL2_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL2_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL2_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL2_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL2_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSFTBL3 ======================================================= */ + #define R_ETHSW_P1_QSFTBL3_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL3_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL3_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL3_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL3_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL3_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL3_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL3_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL3_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL3_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL3_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL3_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL3_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL3_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL3_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL3_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSFTBL4 ======================================================= */ + #define R_ETHSW_P1_QSFTBL4_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL4_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL4_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL4_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL4_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL4_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL4_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL4_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL4_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL4_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL4_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL4_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL4_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL4_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL4_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL4_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSFTBL5 ======================================================= */ + #define R_ETHSW_P1_QSFTBL5_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL5_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL5_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL5_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL5_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL5_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL5_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL5_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL5_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL5_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL5_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL5_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL5_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL5_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL5_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL5_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSFTBL6 ======================================================= */ + #define R_ETHSW_P1_QSFTBL6_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL6_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL6_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL6_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL6_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL6_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL6_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL6_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL6_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL6_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL6_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL6_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL6_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL6_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL6_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL6_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QSFTBL7 ======================================================= */ + #define R_ETHSW_P1_QSFTBL7_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P1_QSFTBL7_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL7_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P1_QSFTBL7_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL7_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P1_QSFTBL7_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL7_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P1_QSFTBL7_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P1_QSFTBL7_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P1_QSFTBL7_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL7_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P1_QSFTBL7_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P1_QSFTBL7_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P1_QSFTBL7_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QSFTBL7_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P1_QSFTBL7_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ======================================================= P1_QSMFC0 ======================================================= */ + #define R_ETHSW_P1_QSMFC0_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC0_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QSMFC1 ======================================================= */ + #define R_ETHSW_P1_QSMFC1_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC1_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QSMFC2 ======================================================= */ + #define R_ETHSW_P1_QSMFC2_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC2_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QSMFC3 ======================================================= */ + #define R_ETHSW_P1_QSMFC3_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC3_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QSMFC4 ======================================================= */ + #define R_ETHSW_P1_QSMFC4_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC4_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QSMFC5 ======================================================= */ + #define R_ETHSW_P1_QSMFC5_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC5_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QSMFC6 ======================================================= */ + #define R_ETHSW_P1_QSMFC6_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC6_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QSMFC7 ======================================================= */ + #define R_ETHSW_P1_QSMFC7_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P1_QSMFC7_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC0 ======================================================= */ + #define R_ETHSW_P1_QMSPPC0_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC0_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC1 ======================================================= */ + #define R_ETHSW_P1_QMSPPC1_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC1_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC2 ======================================================= */ + #define R_ETHSW_P1_QMSPPC2_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC2_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC3 ======================================================= */ + #define R_ETHSW_P1_QMSPPC3_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC3_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC4 ======================================================= */ + #define R_ETHSW_P1_QMSPPC4_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC4_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC5 ======================================================= */ + #define R_ETHSW_P1_QMSPPC5_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC5_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC6 ======================================================= */ + #define R_ETHSW_P1_QMSPPC6_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC6_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSPPC7 ======================================================= */ + #define R_ETHSW_P1_QMSPPC7_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P1_QMSPPC7_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC0 ======================================================= */ + #define R_ETHSW_P1_QMSRPC0_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC0_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC1 ======================================================= */ + #define R_ETHSW_P1_QMSRPC1_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC1_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC2 ======================================================= */ + #define R_ETHSW_P1_QMSRPC2_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC2_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC3 ======================================================= */ + #define R_ETHSW_P1_QMSRPC3_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC3_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC4 ======================================================= */ + #define R_ETHSW_P1_QMSRPC4_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC4_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC5 ======================================================= */ + #define R_ETHSW_P1_QMSRPC5_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC5_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC6 ======================================================= */ + #define R_ETHSW_P1_QMSRPC6_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC6_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMSRPC7 ======================================================= */ + #define R_ETHSW_P1_QMSRPC7_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P1_QMSRPC7_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC0 ======================================================= */ + #define R_ETHSW_P1_QGDPC0_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC0_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC1 ======================================================= */ + #define R_ETHSW_P1_QGDPC1_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC1_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC2 ======================================================= */ + #define R_ETHSW_P1_QGDPC2_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC2_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC3 ======================================================= */ + #define R_ETHSW_P1_QGDPC3_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC3_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC4 ======================================================= */ + #define R_ETHSW_P1_QGDPC4_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC4_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC5 ======================================================= */ + #define R_ETHSW_P1_QGDPC5_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC5_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC6 ======================================================= */ + #define R_ETHSW_P1_QGDPC6_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC6_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QGDPC7 ======================================================= */ + #define R_ETHSW_P1_QGDPC7_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P1_QGDPC7_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P1_QMDESC0 ======================================================= */ + #define R_ETHSW_P1_QMDESC0_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC0_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC0_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC0_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC0_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC0_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMDESC1 ======================================================= */ + #define R_ETHSW_P1_QMDESC1_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC1_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC1_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC1_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC1_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC1_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMDESC2 ======================================================= */ + #define R_ETHSW_P1_QMDESC2_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC2_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC2_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC2_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC2_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC2_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMDESC3 ======================================================= */ + #define R_ETHSW_P1_QMDESC3_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC3_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC3_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC3_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC3_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC3_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMDESC4 ======================================================= */ + #define R_ETHSW_P1_QMDESC4_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC4_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC4_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC4_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC4_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC4_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMDESC5 ======================================================= */ + #define R_ETHSW_P1_QMDESC5_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC5_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC5_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC5_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC5_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC5_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMDESC6 ======================================================= */ + #define R_ETHSW_P1_QMDESC6_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC6_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC6_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC6_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC6_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC6_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMDESC7 ======================================================= */ + #define R_ETHSW_P1_QMDESC7_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P1_QMDESC7_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC7_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P1_QMDESC7_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P1_QMDESC7_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P1_QMDESC7_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P1_QMCBSC0 ======================================================= */ + #define R_ETHSW_P1_QMCBSC0_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC0_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCBSC1 ======================================================= */ + #define R_ETHSW_P1_QMCBSC1_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC1_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCBSC2 ======================================================= */ + #define R_ETHSW_P1_QMCBSC2_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC2_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCBSC3 ======================================================= */ + #define R_ETHSW_P1_QMCBSC3_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC3_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCBSC4 ======================================================= */ + #define R_ETHSW_P1_QMCBSC4_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC4_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCBSC5 ======================================================= */ + #define R_ETHSW_P1_QMCBSC5_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC5_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCBSC6 ======================================================= */ + #define R_ETHSW_P1_QMCBSC6_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC6_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCBSC7 ======================================================= */ + #define R_ETHSW_P1_QMCBSC7_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P1_QMCBSC7_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P1_QMCIRC0 ======================================================= */ + #define R_ETHSW_P1_QMCIRC0_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC0_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P1_QMCIRC1 ======================================================= */ + #define R_ETHSW_P1_QMCIRC1_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC1_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P1_QMCIRC2 ======================================================= */ + #define R_ETHSW_P1_QMCIRC2_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC2_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P1_QMCIRC3 ======================================================= */ + #define R_ETHSW_P1_QMCIRC3_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC3_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P1_QMCIRC4 ======================================================= */ + #define R_ETHSW_P1_QMCIRC4_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC4_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P1_QMCIRC5 ======================================================= */ + #define R_ETHSW_P1_QMCIRC5_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC5_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P1_QMCIRC6 ======================================================= */ + #define R_ETHSW_P1_QMCIRC6_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC6_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P1_QMCIRC7 ======================================================= */ + #define R_ETHSW_P1_QMCIRC7_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P1_QMCIRC7_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ======================================================= P1_QMGPC0 ======================================================= */ + #define R_ETHSW_P1_QMGPC0_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC0_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMGPC1 ======================================================= */ + #define R_ETHSW_P1_QMGPC1_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC1_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMGPC2 ======================================================= */ + #define R_ETHSW_P1_QMGPC2_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC2_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMGPC3 ======================================================= */ + #define R_ETHSW_P1_QMGPC3_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC3_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMGPC4 ======================================================= */ + #define R_ETHSW_P1_QMGPC4_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC4_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMGPC5 ======================================================= */ + #define R_ETHSW_P1_QMGPC5_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC5_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMGPC6 ======================================================= */ + #define R_ETHSW_P1_QMGPC6_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC6_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMGPC7 ======================================================= */ + #define R_ETHSW_P1_QMGPC7_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P1_QMGPC7_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC0 ======================================================= */ + #define R_ETHSW_P1_QMRPC0_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC0_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC1 ======================================================= */ + #define R_ETHSW_P1_QMRPC1_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC1_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC2 ======================================================= */ + #define R_ETHSW_P1_QMRPC2_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC2_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC3 ======================================================= */ + #define R_ETHSW_P1_QMRPC3_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC3_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC4 ======================================================= */ + #define R_ETHSW_P1_QMRPC4_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC4_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC5 ======================================================= */ + #define R_ETHSW_P1_QMRPC5_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC5_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC6 ======================================================= */ + #define R_ETHSW_P1_QMRPC6_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC6_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P1_QMRPC7 ======================================================= */ + #define R_ETHSW_P1_QMRPC7_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P1_QMRPC7_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMACU0 ====================================================== */ + #define R_ETHSW_P2_QSTMACU0_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU0_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU0_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU0_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACU1 ====================================================== */ + #define R_ETHSW_P2_QSTMACU1_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU1_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU1_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU1_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACU2 ====================================================== */ + #define R_ETHSW_P2_QSTMACU2_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU2_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU2_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU2_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACU3 ====================================================== */ + #define R_ETHSW_P2_QSTMACU3_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU3_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU3_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU3_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACU4 ====================================================== */ + #define R_ETHSW_P2_QSTMACU4_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU4_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU4_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU4_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACU5 ====================================================== */ + #define R_ETHSW_P2_QSTMACU5_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU5_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU5_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU5_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACU6 ====================================================== */ + #define R_ETHSW_P2_QSTMACU6_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU6_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU6_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU6_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACU7 ====================================================== */ + #define R_ETHSW_P2_QSTMACU7_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACU7_MACA_Msk (0xffffUL) /*!< MACA (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_P2_QSTMACU7_DASA_Pos (16UL) /*!< DASA (Bit 16) */ + #define R_ETHSW_P2_QSTMACU7_DASA_Msk (0x10000UL) /*!< DASA (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSTMACD0 ====================================================== */ + #define R_ETHSW_P2_QSTMACD0_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD0_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMACD1 ====================================================== */ + #define R_ETHSW_P2_QSTMACD1_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD1_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMACD2 ====================================================== */ + #define R_ETHSW_P2_QSTMACD2_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD2_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMACD3 ====================================================== */ + #define R_ETHSW_P2_QSTMACD3_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD3_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMACD4 ====================================================== */ + #define R_ETHSW_P2_QSTMACD4_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD4_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMACD5 ====================================================== */ + #define R_ETHSW_P2_QSTMACD5_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD5_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMACD6 ====================================================== */ + #define R_ETHSW_P2_QSTMACD6_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD6_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMACD7 ====================================================== */ + #define R_ETHSW_P2_QSTMACD7_MACA_Pos (0UL) /*!< MACA (Bit 0) */ + #define R_ETHSW_P2_QSTMACD7_MACA_Msk (0xffffffffUL) /*!< MACA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMU0 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU0_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU0_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMU1 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU1_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU1_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMU2 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU2_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU2_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMU3 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU3_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU3_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMU4 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU4_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU4_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMU5 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU5_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU5_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMU6 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU6_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU6_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMU7 ====================================================== */ + #define R_ETHSW_P2_QSTMAMU7_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMU7_MACAM_Msk (0xffffUL) /*!< MACAM (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QSTMAMD0 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD0_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD0_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMD1 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD1_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD1_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMD2 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD2_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD2_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMD3 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD3_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD3_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMD4 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD4_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD4_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMD5 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD5_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD5_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMD6 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD6_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD6_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSTMAMD7 ====================================================== */ + #define R_ETHSW_P2_QSTMAMD7_MACAM_Pos (0UL) /*!< MACAM (Bit 0) */ + #define R_ETHSW_P2_QSTMAMD7_MACAM_Msk (0xffffffffUL) /*!< MACAM (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== P2_QSFTVL0 ======================================================= */ + #define R_ETHSW_P2_QSFTVL0_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL0_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL0_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL0_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL0_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL0_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL0_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL0_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVL1 ======================================================= */ + #define R_ETHSW_P2_QSFTVL1_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL1_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL1_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL1_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL1_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL1_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL1_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL1_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVL2 ======================================================= */ + #define R_ETHSW_P2_QSFTVL2_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL2_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL2_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL2_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL2_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL2_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL2_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL2_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVL3 ======================================================= */ + #define R_ETHSW_P2_QSFTVL3_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL3_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL3_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL3_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL3_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL3_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL3_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL3_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVL4 ======================================================= */ + #define R_ETHSW_P2_QSFTVL4_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL4_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL4_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL4_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL4_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL4_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL4_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL4_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVL5 ======================================================= */ + #define R_ETHSW_P2_QSFTVL5_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL5_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL5_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL5_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL5_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL5_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL5_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL5_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVL6 ======================================================= */ + #define R_ETHSW_P2_QSFTVL6_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL6_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL6_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL6_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL6_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL6_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL6_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL6_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVL7 ======================================================= */ + #define R_ETHSW_P2_QSFTVL7_VLANID_Pos (0UL) /*!< VLANID (Bit 0) */ + #define R_ETHSW_P2_QSFTVL7_VLANID_Msk (0xfffUL) /*!< VLANID (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVL7_DEI_Pos (12UL) /*!< DEI (Bit 12) */ + #define R_ETHSW_P2_QSFTVL7_DEI_Msk (0x1000UL) /*!< DEI (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVL7_PCP_Pos (13UL) /*!< PCP (Bit 13) */ + #define R_ETHSW_P2_QSFTVL7_PCP_Msk (0xe000UL) /*!< PCP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTVL7_TAGMD_Pos (16UL) /*!< TAGMD (Bit 16) */ + #define R_ETHSW_P2_QSFTVL7_TAGMD_Msk (0x30000UL) /*!< TAGMD (Bitfield-Mask: 0x03) */ +/* ====================================================== P2_QSFTVLM0 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM0_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM0_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM0_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM0_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM0_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM0_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTVLM1 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM1_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM1_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM1_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM1_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM1_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM1_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTVLM2 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM2_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM2_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM2_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM2_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM2_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM2_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTVLM3 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM3_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM3_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM3_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM3_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM3_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM3_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTVLM4 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM4_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM4_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM4_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM4_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM4_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM4_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTVLM5 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM5_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM5_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM5_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM5_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM5_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM5_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTVLM6 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM6_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM6_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM6_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM6_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM6_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM6_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTVLM7 ====================================================== */ + #define R_ETHSW_P2_QSFTVLM7_VLANIDM_Pos (0UL) /*!< VLANIDM (Bit 0) */ + #define R_ETHSW_P2_QSFTVLM7_VLANIDM_Msk (0xfffUL) /*!< VLANIDM (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_P2_QSFTVLM7_DEIM_Pos (12UL) /*!< DEIM (Bit 12) */ + #define R_ETHSW_P2_QSFTVLM7_DEIM_Msk (0x1000UL) /*!< DEIM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTVLM7_PCPM_Pos (13UL) /*!< PCPM (Bit 13) */ + #define R_ETHSW_P2_QSFTVLM7_PCPM_Msk (0xe000UL) /*!< PCPM (Bitfield-Mask: 0x07) */ +/* ====================================================== P2_QSFTBL0 ======================================================= */ + #define R_ETHSW_P2_QSFTBL0_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL0_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL0_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL0_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL0_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL0_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL0_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL0_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL0_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL0_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL0_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL0_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL0_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL0_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL0_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL0_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSFTBL1 ======================================================= */ + #define R_ETHSW_P2_QSFTBL1_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL1_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL1_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL1_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL1_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL1_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL1_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL1_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL1_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL1_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL1_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL1_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL1_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL1_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL1_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL1_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSFTBL2 ======================================================= */ + #define R_ETHSW_P2_QSFTBL2_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL2_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL2_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL2_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL2_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL2_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL2_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL2_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL2_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL2_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL2_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL2_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL2_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL2_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL2_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL2_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSFTBL3 ======================================================= */ + #define R_ETHSW_P2_QSFTBL3_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL3_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL3_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL3_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL3_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL3_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL3_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL3_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL3_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL3_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL3_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL3_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL3_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL3_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL3_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL3_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSFTBL4 ======================================================= */ + #define R_ETHSW_P2_QSFTBL4_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL4_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL4_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL4_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL4_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL4_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL4_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL4_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL4_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL4_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL4_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL4_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL4_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL4_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL4_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL4_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSFTBL5 ======================================================= */ + #define R_ETHSW_P2_QSFTBL5_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL5_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL5_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL5_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL5_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL5_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL5_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL5_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL5_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL5_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL5_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL5_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL5_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL5_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL5_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL5_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSFTBL6 ======================================================= */ + #define R_ETHSW_P2_QSFTBL6_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL6_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL6_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL6_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL6_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL6_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL6_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL6_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL6_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL6_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL6_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL6_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL6_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL6_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL6_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL6_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QSFTBL7 ======================================================= */ + #define R_ETHSW_P2_QSFTBL7_QSTE_Pos (0UL) /*!< QSTE (Bit 0) */ + #define R_ETHSW_P2_QSFTBL7_QSTE_Msk (0x1UL) /*!< QSTE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL7_GAID_Pos (4UL) /*!< GAID (Bit 4) */ + #define R_ETHSW_P2_QSFTBL7_GAID_Msk (0x70UL) /*!< GAID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL7_GAIDV_Pos (7UL) /*!< GAIDV (Bit 7) */ + #define R_ETHSW_P2_QSFTBL7_GAIDV_Msk (0x80UL) /*!< GAIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL7_MEID_Pos (8UL) /*!< MEID (Bit 8) */ + #define R_ETHSW_P2_QSFTBL7_MEID_Msk (0x700UL) /*!< MEID (Bitfield-Mask: 0x07) */ + #define R_ETHSW_P2_QSFTBL7_MEIDV_Pos (12UL) /*!< MEIDV (Bit 12) */ + #define R_ETHSW_P2_QSFTBL7_MEIDV_Msk (0x1000UL) /*!< MEIDV (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL7_MSDU_Pos (16UL) /*!< MSDU (Bit 16) */ + #define R_ETHSW_P2_QSFTBL7_MSDU_Msk (0x7ff0000UL) /*!< MSDU (Bitfield-Mask: 0x7ff) */ + #define R_ETHSW_P2_QSFTBL7_MSDUE_Pos (27UL) /*!< MSDUE (Bit 27) */ + #define R_ETHSW_P2_QSFTBL7_MSDUE_Msk (0x8000000UL) /*!< MSDUE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QSFTBL7_QSMSM_Pos (28UL) /*!< QSMSM (Bit 28) */ + #define R_ETHSW_P2_QSFTBL7_QSMSM_Msk (0x10000000UL) /*!< QSMSM (Bitfield-Mask: 0x01) */ +/* ======================================================= P2_QSMFC0 ======================================================= */ + #define R_ETHSW_P2_QSMFC0_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC0_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QSMFC1 ======================================================= */ + #define R_ETHSW_P2_QSMFC1_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC1_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QSMFC2 ======================================================= */ + #define R_ETHSW_P2_QSMFC2_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC2_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QSMFC3 ======================================================= */ + #define R_ETHSW_P2_QSMFC3_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC3_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QSMFC4 ======================================================= */ + #define R_ETHSW_P2_QSMFC4_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC4_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QSMFC5 ======================================================= */ + #define R_ETHSW_P2_QSMFC5_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC5_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QSMFC6 ======================================================= */ + #define R_ETHSW_P2_QSMFC6_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC6_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QSMFC7 ======================================================= */ + #define R_ETHSW_P2_QSMFC7_QSMFC_Pos (0UL) /*!< QSMFC (Bit 0) */ + #define R_ETHSW_P2_QSMFC7_QSMFC_Msk (0xffffUL) /*!< QSMFC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC0 ======================================================= */ + #define R_ETHSW_P2_QMSPPC0_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC0_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC1 ======================================================= */ + #define R_ETHSW_P2_QMSPPC1_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC1_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC2 ======================================================= */ + #define R_ETHSW_P2_QMSPPC2_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC2_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC3 ======================================================= */ + #define R_ETHSW_P2_QMSPPC3_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC3_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC4 ======================================================= */ + #define R_ETHSW_P2_QMSPPC4_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC4_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC5 ======================================================= */ + #define R_ETHSW_P2_QMSPPC5_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC5_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC6 ======================================================= */ + #define R_ETHSW_P2_QMSPPC6_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC6_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSPPC7 ======================================================= */ + #define R_ETHSW_P2_QMSPPC7_QMSPPC_Pos (0UL) /*!< QMSPPC (Bit 0) */ + #define R_ETHSW_P2_QMSPPC7_QMSPPC_Msk (0xffffUL) /*!< QMSPPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC0 ======================================================= */ + #define R_ETHSW_P2_QMSRPC0_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC0_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC1 ======================================================= */ + #define R_ETHSW_P2_QMSRPC1_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC1_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC2 ======================================================= */ + #define R_ETHSW_P2_QMSRPC2_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC2_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC3 ======================================================= */ + #define R_ETHSW_P2_QMSRPC3_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC3_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC4 ======================================================= */ + #define R_ETHSW_P2_QMSRPC4_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC4_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC5 ======================================================= */ + #define R_ETHSW_P2_QMSRPC5_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC5_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC6 ======================================================= */ + #define R_ETHSW_P2_QMSRPC6_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC6_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMSRPC7 ======================================================= */ + #define R_ETHSW_P2_QMSRPC7_QMSRPC_Pos (0UL) /*!< QMSRPC (Bit 0) */ + #define R_ETHSW_P2_QMSRPC7_QMSRPC_Msk (0xffffUL) /*!< QMSRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC0 ======================================================= */ + #define R_ETHSW_P2_QGDPC0_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC0_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC1 ======================================================= */ + #define R_ETHSW_P2_QGDPC1_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC1_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC2 ======================================================= */ + #define R_ETHSW_P2_QGDPC2_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC2_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC3 ======================================================= */ + #define R_ETHSW_P2_QGDPC3_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC3_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC4 ======================================================= */ + #define R_ETHSW_P2_QGDPC4_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC4_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC5 ======================================================= */ + #define R_ETHSW_P2_QGDPC5_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC5_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC6 ======================================================= */ + #define R_ETHSW_P2_QGDPC6_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC6_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QGDPC7 ======================================================= */ + #define R_ETHSW_P2_QGDPC7_QGDPC_Pos (0UL) /*!< QGDPC (Bit 0) */ + #define R_ETHSW_P2_QGDPC7_QGDPC_Msk (0xffffUL) /*!< QGDPC (Bitfield-Mask: 0xffff) */ +/* ====================================================== P2_QMDESC0 ======================================================= */ + #define R_ETHSW_P2_QMDESC0_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC0_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC0_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC0_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC0_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC0_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMDESC1 ======================================================= */ + #define R_ETHSW_P2_QMDESC1_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC1_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC1_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC1_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC1_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC1_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMDESC2 ======================================================= */ + #define R_ETHSW_P2_QMDESC2_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC2_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC2_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC2_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC2_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC2_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMDESC3 ======================================================= */ + #define R_ETHSW_P2_QMDESC3_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC3_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC3_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC3_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC3_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC3_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMDESC4 ======================================================= */ + #define R_ETHSW_P2_QMDESC4_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC4_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC4_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC4_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC4_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC4_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMDESC5 ======================================================= */ + #define R_ETHSW_P2_QMDESC5_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC5_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC5_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC5_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC5_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC5_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMDESC6 ======================================================= */ + #define R_ETHSW_P2_QMDESC6_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC6_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC6_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC6_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC6_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC6_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMDESC7 ======================================================= */ + #define R_ETHSW_P2_QMDESC7_RFD_Pos (0UL) /*!< RFD (Bit 0) */ + #define R_ETHSW_P2_QMDESC7_RFD_Msk (0x1UL) /*!< RFD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC7_MM_Pos (1UL) /*!< MM (Bit 1) */ + #define R_ETHSW_P2_QMDESC7_MM_Msk (0x2UL) /*!< MM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_P2_QMDESC7_CF_Pos (2UL) /*!< CF (Bit 2) */ + #define R_ETHSW_P2_QMDESC7_CF_Msk (0x4UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ====================================================== P2_QMCBSC0 ======================================================= */ + #define R_ETHSW_P2_QMCBSC0_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC0_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCBSC1 ======================================================= */ + #define R_ETHSW_P2_QMCBSC1_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC1_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCBSC2 ======================================================= */ + #define R_ETHSW_P2_QMCBSC2_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC2_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCBSC3 ======================================================= */ + #define R_ETHSW_P2_QMCBSC3_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC3_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCBSC4 ======================================================= */ + #define R_ETHSW_P2_QMCBSC4_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC4_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCBSC5 ======================================================= */ + #define R_ETHSW_P2_QMCBSC5_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC5_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCBSC6 ======================================================= */ + #define R_ETHSW_P2_QMCBSC6_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC6_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCBSC7 ======================================================= */ + #define R_ETHSW_P2_QMCBSC7_CBS_Pos (0UL) /*!< CBS (Bit 0) */ + #define R_ETHSW_P2_QMCBSC7_CBS_Msk (0x3ffffUL) /*!< CBS (Bitfield-Mask: 0x3ffff) */ +/* ====================================================== P2_QMCIRC0 ======================================================= */ + #define R_ETHSW_P2_QMCIRC0_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC0_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P2_QMCIRC1 ======================================================= */ + #define R_ETHSW_P2_QMCIRC1_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC1_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P2_QMCIRC2 ======================================================= */ + #define R_ETHSW_P2_QMCIRC2_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC2_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P2_QMCIRC3 ======================================================= */ + #define R_ETHSW_P2_QMCIRC3_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC3_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P2_QMCIRC4 ======================================================= */ + #define R_ETHSW_P2_QMCIRC4_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC4_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P2_QMCIRC5 ======================================================= */ + #define R_ETHSW_P2_QMCIRC5_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC5_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P2_QMCIRC6 ======================================================= */ + #define R_ETHSW_P2_QMCIRC6_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC6_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ====================================================== P2_QMCIRC7 ======================================================= */ + #define R_ETHSW_P2_QMCIRC7_CIR_Pos (0UL) /*!< CIR (Bit 0) */ + #define R_ETHSW_P2_QMCIRC7_CIR_Msk (0x1ffffUL) /*!< CIR (Bitfield-Mask: 0x1ffff) */ +/* ======================================================= P2_QMGPC0 ======================================================= */ + #define R_ETHSW_P2_QMGPC0_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC0_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMGPC1 ======================================================= */ + #define R_ETHSW_P2_QMGPC1_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC1_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMGPC2 ======================================================= */ + #define R_ETHSW_P2_QMGPC2_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC2_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMGPC3 ======================================================= */ + #define R_ETHSW_P2_QMGPC3_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC3_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMGPC4 ======================================================= */ + #define R_ETHSW_P2_QMGPC4_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC4_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMGPC5 ======================================================= */ + #define R_ETHSW_P2_QMGPC5_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC5_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMGPC6 ======================================================= */ + #define R_ETHSW_P2_QMGPC6_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC6_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMGPC7 ======================================================= */ + #define R_ETHSW_P2_QMGPC7_QMGPC_Pos (0UL) /*!< QMGPC (Bit 0) */ + #define R_ETHSW_P2_QMGPC7_QMGPC_Msk (0xffffUL) /*!< QMGPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC0 ======================================================= */ + #define R_ETHSW_P2_QMRPC0_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC0_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC1 ======================================================= */ + #define R_ETHSW_P2_QMRPC1_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC1_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC2 ======================================================= */ + #define R_ETHSW_P2_QMRPC2_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC2_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC3 ======================================================= */ + #define R_ETHSW_P2_QMRPC3_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC3_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC4 ======================================================= */ + #define R_ETHSW_P2_QMRPC4_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC4_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC5 ======================================================= */ + #define R_ETHSW_P2_QMRPC5_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC5_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC6 ======================================================= */ + #define R_ETHSW_P2_QMRPC6_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC6_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ======================================================= P2_QMRPC7 ======================================================= */ + #define R_ETHSW_P2_QMRPC7_QMRPC_Pos (0UL) /*!< QMRPC (Bit 0) */ + #define R_ETHSW_P2_QMRPC7_QMRPC_Msk (0xffffUL) /*!< QMRPC (Bitfield-Mask: 0xffff) */ +/* ===================================================== STATN_STATUS ====================================================== */ + #define R_ETHSW_STATN_STATUS_BUSY_Pos (0UL) /*!< BUSY (Bit 0) */ + #define R_ETHSW_STATN_STATUS_BUSY_Msk (0x1UL) /*!< BUSY (Bitfield-Mask: 0x01) */ +/* ===================================================== STATN_CONFIG ====================================================== */ + #define R_ETHSW_STATN_CONFIG_CLEAR_ON_READ_Pos (1UL) /*!< CLEAR_ON_READ (Bit 1) */ + #define R_ETHSW_STATN_CONFIG_CLEAR_ON_READ_Msk (0x2UL) /*!< CLEAR_ON_READ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATN_CONFIG_RESET_Pos (31UL) /*!< RESET (Bit 31) */ + #define R_ETHSW_STATN_CONFIG_RESET_Msk (0x80000000UL) /*!< RESET (Bitfield-Mask: 0x01) */ +/* ===================================================== STATN_CONTROL ===================================================== */ + #define R_ETHSW_STATN_CONTROL_CHANMASK_Pos (0UL) /*!< CHANMASK (Bit 0) */ + #define R_ETHSW_STATN_CONTROL_CHANMASK_Msk (0xfUL) /*!< CHANMASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_STATN_CONTROL_CLEAR_PRE_Pos (29UL) /*!< CLEAR_PRE (Bit 29) */ + #define R_ETHSW_STATN_CONTROL_CLEAR_PRE_Msk (0x20000000UL) /*!< CLEAR_PRE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_STATN_CONTROL_CMD_CLEAR_Pos (31UL) /*!< CMD_CLEAR (Bit 31) */ + #define R_ETHSW_STATN_CONTROL_CMD_CLEAR_Msk (0x80000000UL) /*!< CMD_CLEAR (Bitfield-Mask: 0x01) */ +/* ================================================== STATN_CLEARVALUE_LO ================================================== */ + #define R_ETHSW_STATN_CLEARVALUE_LO_STATN_CLEARVALUE_LO_Pos (0UL) /*!< STATN_CLEARVALUE_LO (Bit 0) */ + #define R_ETHSW_STATN_CLEARVALUE_LO_STATN_CLEARVALUE_LO_Msk (0xffffffffUL) /*!< STATN_CLEARVALUE_LO (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ODISC0 ========================================================= */ + #define R_ETHSW_ODISC0_ODISC_Pos (0UL) /*!< ODISC (Bit 0) */ + #define R_ETHSW_ODISC0_ODISC_Msk (0xffffffffUL) /*!< ODISC (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ODISC1 ========================================================= */ + #define R_ETHSW_ODISC1_ODISC_Pos (0UL) /*!< ODISC (Bit 0) */ + #define R_ETHSW_ODISC1_ODISC_Msk (0xffffffffUL) /*!< ODISC (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ODISC2 ========================================================= */ + #define R_ETHSW_ODISC2_ODISC_Pos (0UL) /*!< ODISC (Bit 0) */ + #define R_ETHSW_ODISC2_ODISC_Msk (0xffffffffUL) /*!< ODISC (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ODISC3 ========================================================= */ + #define R_ETHSW_ODISC3_ODISC_Pos (0UL) /*!< ODISC (Bit 0) */ + #define R_ETHSW_ODISC3_ODISC_Msk (0xffffffffUL) /*!< ODISC (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_VLAN0 ====================================================== */ + #define R_ETHSW_IDISC_VLAN0_IDISC_VLAN_Pos (0UL) /*!< IDISC_VLAN (Bit 0) */ + #define R_ETHSW_IDISC_VLAN0_IDISC_VLAN_Msk (0xffffffffUL) /*!< IDISC_VLAN (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_VLAN1 ====================================================== */ + #define R_ETHSW_IDISC_VLAN1_IDISC_VLAN_Pos (0UL) /*!< IDISC_VLAN (Bit 0) */ + #define R_ETHSW_IDISC_VLAN1_IDISC_VLAN_Msk (0xffffffffUL) /*!< IDISC_VLAN (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_VLAN2 ====================================================== */ + #define R_ETHSW_IDISC_VLAN2_IDISC_VLAN_Pos (0UL) /*!< IDISC_VLAN (Bit 0) */ + #define R_ETHSW_IDISC_VLAN2_IDISC_VLAN_Msk (0xffffffffUL) /*!< IDISC_VLAN (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_VLAN3 ====================================================== */ + #define R_ETHSW_IDISC_VLAN3_IDISC_VLAN_Pos (0UL) /*!< IDISC_VLAN (Bit 0) */ + #define R_ETHSW_IDISC_VLAN3_IDISC_VLAN_Msk (0xffffffffUL) /*!< IDISC_VLAN (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_UNTAGGED0 ==================================================== */ + #define R_ETHSW_IDISC_UNTAGGED0_IDISC_UNTAGGED_Pos (0UL) /*!< IDISC_UNTAGGED (Bit 0) */ + #define R_ETHSW_IDISC_UNTAGGED0_IDISC_UNTAGGED_Msk (0xffffffffUL) /*!< IDISC_UNTAGGED (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_UNTAGGED1 ==================================================== */ + #define R_ETHSW_IDISC_UNTAGGED1_IDISC_UNTAGGED_Pos (0UL) /*!< IDISC_UNTAGGED (Bit 0) */ + #define R_ETHSW_IDISC_UNTAGGED1_IDISC_UNTAGGED_Msk (0xffffffffUL) /*!< IDISC_UNTAGGED (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_UNTAGGED2 ==================================================== */ + #define R_ETHSW_IDISC_UNTAGGED2_IDISC_UNTAGGED_Pos (0UL) /*!< IDISC_UNTAGGED (Bit 0) */ + #define R_ETHSW_IDISC_UNTAGGED2_IDISC_UNTAGGED_Msk (0xffffffffUL) /*!< IDISC_UNTAGGED (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_UNTAGGED3 ==================================================== */ + #define R_ETHSW_IDISC_UNTAGGED3_IDISC_UNTAGGED_Pos (0UL) /*!< IDISC_UNTAGGED (Bit 0) */ + #define R_ETHSW_IDISC_UNTAGGED3_IDISC_UNTAGGED_Msk (0xffffffffUL) /*!< IDISC_UNTAGGED (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_BLOCKED0 ===================================================== */ + #define R_ETHSW_IDISC_BLOCKED0_IDISC_BLOCKED_Pos (0UL) /*!< IDISC_BLOCKED (Bit 0) */ + #define R_ETHSW_IDISC_BLOCKED0_IDISC_BLOCKED_Msk (0xffffffffUL) /*!< IDISC_BLOCKED (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_BLOCKED1 ===================================================== */ + #define R_ETHSW_IDISC_BLOCKED1_IDISC_BLOCKED_Pos (0UL) /*!< IDISC_BLOCKED (Bit 0) */ + #define R_ETHSW_IDISC_BLOCKED1_IDISC_BLOCKED_Msk (0xffffffffUL) /*!< IDISC_BLOCKED (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_BLOCKED2 ===================================================== */ + #define R_ETHSW_IDISC_BLOCKED2_IDISC_BLOCKED_Pos (0UL) /*!< IDISC_BLOCKED (Bit 0) */ + #define R_ETHSW_IDISC_BLOCKED2_IDISC_BLOCKED_Msk (0xffffffffUL) /*!< IDISC_BLOCKED (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== IDISC_BLOCKED3 ===================================================== */ + #define R_ETHSW_IDISC_BLOCKED3_IDISC_BLOCKED_Pos (0UL) /*!< IDISC_BLOCKED (Bit 0) */ + #define R_ETHSW_IDISC_BLOCKED3_IDISC_BLOCKED_Msk (0xffffffffUL) /*!< IDISC_BLOCKED (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_ANY0 ======================================================= */ + #define R_ETHSW_IDISC_ANY0_IDISC_ANY_Pos (0UL) /*!< IDISC_ANY (Bit 0) */ + #define R_ETHSW_IDISC_ANY0_IDISC_ANY_Msk (0xffffffffUL) /*!< IDISC_ANY (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_ANY1 ======================================================= */ + #define R_ETHSW_IDISC_ANY1_IDISC_ANY_Pos (0UL) /*!< IDISC_ANY (Bit 0) */ + #define R_ETHSW_IDISC_ANY1_IDISC_ANY_Msk (0xffffffffUL) /*!< IDISC_ANY (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_ANY2 ======================================================= */ + #define R_ETHSW_IDISC_ANY2_IDISC_ANY_Pos (0UL) /*!< IDISC_ANY (Bit 0) */ + #define R_ETHSW_IDISC_ANY2_IDISC_ANY_Msk (0xffffffffUL) /*!< IDISC_ANY (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== IDISC_ANY3 ======================================================= */ + #define R_ETHSW_IDISC_ANY3_IDISC_ANY_Pos (0UL) /*!< IDISC_ANY (Bit 0) */ + #define R_ETHSW_IDISC_ANY3_IDISC_ANY_Msk (0xffffffffUL) /*!< IDISC_ANY (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IDISC_SRCFLT0 ===================================================== */ + #define R_ETHSW_IDISC_SRCFLT0_IDISC_SRCFLT_Pos (0UL) /*!< IDISC_SRCFLT (Bit 0) */ + #define R_ETHSW_IDISC_SRCFLT0_IDISC_SRCFLT_Msk (0xffffffffUL) /*!< IDISC_SRCFLT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IDISC_SRCFLT1 ===================================================== */ + #define R_ETHSW_IDISC_SRCFLT1_IDISC_SRCFLT_Pos (0UL) /*!< IDISC_SRCFLT (Bit 0) */ + #define R_ETHSW_IDISC_SRCFLT1_IDISC_SRCFLT_Msk (0xffffffffUL) /*!< IDISC_SRCFLT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== IDISC_SRCFLT2 ===================================================== */ + #define R_ETHSW_IDISC_SRCFLT2_IDISC_SRCFLT_Pos (0UL) /*!< IDISC_SRCFLT (Bit 0) */ + #define R_ETHSW_IDISC_SRCFLT2_IDISC_SRCFLT_Msk (0xffffffffUL) /*!< IDISC_SRCFLT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TX_HOLD_REQ_CNT0 ==================================================== */ + #define R_ETHSW_TX_HOLD_REQ_CNT0_TX_HOLD_REQ_CNT_Pos (0UL) /*!< TX_HOLD_REQ_CNT (Bit 0) */ + #define R_ETHSW_TX_HOLD_REQ_CNT0_TX_HOLD_REQ_CNT_Msk (0xffffffffUL) /*!< TX_HOLD_REQ_CNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TX_HOLD_REQ_CNT1 ==================================================== */ + #define R_ETHSW_TX_HOLD_REQ_CNT1_TX_HOLD_REQ_CNT_Pos (0UL) /*!< TX_HOLD_REQ_CNT (Bit 0) */ + #define R_ETHSW_TX_HOLD_REQ_CNT1_TX_HOLD_REQ_CNT_Msk (0xffffffffUL) /*!< TX_HOLD_REQ_CNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TX_HOLD_REQ_CNT2 ==================================================== */ + #define R_ETHSW_TX_HOLD_REQ_CNT2_TX_HOLD_REQ_CNT_Pos (0UL) /*!< TX_HOLD_REQ_CNT (Bit 0) */ + #define R_ETHSW_TX_HOLD_REQ_CNT2_TX_HOLD_REQ_CNT_Msk (0xffffffffUL) /*!< TX_HOLD_REQ_CNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== TX_FRAG_CNT0 ====================================================== */ + #define R_ETHSW_TX_FRAG_CNT0_TX_FRAG_CNT_Pos (0UL) /*!< TX_FRAG_CNT (Bit 0) */ + #define R_ETHSW_TX_FRAG_CNT0_TX_FRAG_CNT_Msk (0xffffffffUL) /*!< TX_FRAG_CNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== TX_FRAG_CNT1 ====================================================== */ + #define R_ETHSW_TX_FRAG_CNT1_TX_FRAG_CNT_Pos (0UL) /*!< TX_FRAG_CNT (Bit 0) */ + #define R_ETHSW_TX_FRAG_CNT1_TX_FRAG_CNT_Msk (0xffffffffUL) /*!< TX_FRAG_CNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== TX_FRAG_CNT2 ====================================================== */ + #define R_ETHSW_TX_FRAG_CNT2_TX_FRAG_CNT_Pos (0UL) /*!< TX_FRAG_CNT (Bit 0) */ + #define R_ETHSW_TX_FRAG_CNT2_TX_FRAG_CNT_Msk (0xffffffffUL) /*!< TX_FRAG_CNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== RX_FRAG_CNT0 ====================================================== */ + #define R_ETHSW_RX_FRAG_CNT0_RX_FRAG_CNT_Pos (0UL) /*!< RX_FRAG_CNT (Bit 0) */ + #define R_ETHSW_RX_FRAG_CNT0_RX_FRAG_CNT_Msk (0xffffffffUL) /*!< RX_FRAG_CNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== RX_FRAG_CNT1 ====================================================== */ + #define R_ETHSW_RX_FRAG_CNT1_RX_FRAG_CNT_Pos (0UL) /*!< RX_FRAG_CNT (Bit 0) */ + #define R_ETHSW_RX_FRAG_CNT1_RX_FRAG_CNT_Msk (0xffffffffUL) /*!< RX_FRAG_CNT (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== RX_FRAG_CNT2 ====================================================== */ + #define R_ETHSW_RX_FRAG_CNT2_RX_FRAG_CNT_Pos (0UL) /*!< RX_FRAG_CNT (Bit 0) */ + #define R_ETHSW_RX_FRAG_CNT2_RX_FRAG_CNT_Msk (0xffffffffUL) /*!< RX_FRAG_CNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== RX_ASSY_OK_CNT0 ==================================================== */ + #define R_ETHSW_RX_ASSY_OK_CNT0_RX_ASSY_OK_CNT_Pos (0UL) /*!< RX_ASSY_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_ASSY_OK_CNT0_RX_ASSY_OK_CNT_Msk (0xffffffffUL) /*!< RX_ASSY_OK_CNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== RX_ASSY_OK_CNT1 ==================================================== */ + #define R_ETHSW_RX_ASSY_OK_CNT1_RX_ASSY_OK_CNT_Pos (0UL) /*!< RX_ASSY_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_ASSY_OK_CNT1_RX_ASSY_OK_CNT_Msk (0xffffffffUL) /*!< RX_ASSY_OK_CNT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== RX_ASSY_OK_CNT2 ==================================================== */ + #define R_ETHSW_RX_ASSY_OK_CNT2_RX_ASSY_OK_CNT_Pos (0UL) /*!< RX_ASSY_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_ASSY_OK_CNT2_RX_ASSY_OK_CNT_Msk (0xffffffffUL) /*!< RX_ASSY_OK_CNT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== RX_ASSY_ERR_CNT0 ==================================================== */ + #define R_ETHSW_RX_ASSY_ERR_CNT0_RX_ASSY_ERR_CNT_Pos (0UL) /*!< RX_ASSY_ERR_CNT (Bit 0) */ + #define R_ETHSW_RX_ASSY_ERR_CNT0_RX_ASSY_ERR_CNT_Msk (0xffffUL) /*!< RX_ASSY_ERR_CNT (Bitfield-Mask: 0xffff) */ +/* =================================================== RX_ASSY_ERR_CNT1 ==================================================== */ + #define R_ETHSW_RX_ASSY_ERR_CNT1_RX_ASSY_ERR_CNT_Pos (0UL) /*!< RX_ASSY_ERR_CNT (Bit 0) */ + #define R_ETHSW_RX_ASSY_ERR_CNT1_RX_ASSY_ERR_CNT_Msk (0xffffUL) /*!< RX_ASSY_ERR_CNT (Bitfield-Mask: 0xffff) */ +/* =================================================== RX_ASSY_ERR_CNT2 ==================================================== */ + #define R_ETHSW_RX_ASSY_ERR_CNT2_RX_ASSY_ERR_CNT_Pos (0UL) /*!< RX_ASSY_ERR_CNT (Bit 0) */ + #define R_ETHSW_RX_ASSY_ERR_CNT2_RX_ASSY_ERR_CNT_Msk (0xffffUL) /*!< RX_ASSY_ERR_CNT (Bitfield-Mask: 0xffff) */ +/* ==================================================== RX_SMD_ERR_CNT0 ==================================================== */ + #define R_ETHSW_RX_SMD_ERR_CNT0_RX_SMD_ERR_CNT_Pos (0UL) /*!< RX_SMD_ERR_CNT (Bit 0) */ + #define R_ETHSW_RX_SMD_ERR_CNT0_RX_SMD_ERR_CNT_Msk (0xffffUL) /*!< RX_SMD_ERR_CNT (Bitfield-Mask: 0xffff) */ +/* ==================================================== RX_SMD_ERR_CNT1 ==================================================== */ + #define R_ETHSW_RX_SMD_ERR_CNT1_RX_SMD_ERR_CNT_Pos (0UL) /*!< RX_SMD_ERR_CNT (Bit 0) */ + #define R_ETHSW_RX_SMD_ERR_CNT1_RX_SMD_ERR_CNT_Msk (0xffffUL) /*!< RX_SMD_ERR_CNT (Bitfield-Mask: 0xffff) */ +/* ==================================================== RX_SMD_ERR_CNT2 ==================================================== */ + #define R_ETHSW_RX_SMD_ERR_CNT2_RX_SMD_ERR_CNT_Pos (0UL) /*!< RX_SMD_ERR_CNT (Bit 0) */ + #define R_ETHSW_RX_SMD_ERR_CNT2_RX_SMD_ERR_CNT_Msk (0xffffUL) /*!< RX_SMD_ERR_CNT (Bitfield-Mask: 0xffff) */ +/* =================================================== TX_VERIFY_OK_CNT0 =================================================== */ + #define R_ETHSW_TX_VERIFY_OK_CNT0_TX_VERIFY_OK_CNT_Pos (0UL) /*!< TX_VERIFY_OK_CNT (Bit 0) */ + #define R_ETHSW_TX_VERIFY_OK_CNT0_TX_VERIFY_OK_CNT_Msk (0xffUL) /*!< TX_VERIFY_OK_CNT (Bitfield-Mask: 0xff) */ +/* =================================================== TX_VERIFY_OK_CNT1 =================================================== */ + #define R_ETHSW_TX_VERIFY_OK_CNT1_TX_VERIFY_OK_CNT_Pos (0UL) /*!< TX_VERIFY_OK_CNT (Bit 0) */ + #define R_ETHSW_TX_VERIFY_OK_CNT1_TX_VERIFY_OK_CNT_Msk (0xffUL) /*!< TX_VERIFY_OK_CNT (Bitfield-Mask: 0xff) */ +/* =================================================== TX_VERIFY_OK_CNT2 =================================================== */ + #define R_ETHSW_TX_VERIFY_OK_CNT2_TX_VERIFY_OK_CNT_Pos (0UL) /*!< TX_VERIFY_OK_CNT (Bit 0) */ + #define R_ETHSW_TX_VERIFY_OK_CNT2_TX_VERIFY_OK_CNT_Msk (0xffUL) /*!< TX_VERIFY_OK_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== TX_RESPONSE_OK_CNT0 ================================================== */ + #define R_ETHSW_TX_RESPONSE_OK_CNT0_TX_RESPONSE_OK_CNT_Pos (0UL) /*!< TX_RESPONSE_OK_CNT (Bit 0) */ + #define R_ETHSW_TX_RESPONSE_OK_CNT0_TX_RESPONSE_OK_CNT_Msk (0xffUL) /*!< TX_RESPONSE_OK_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== TX_RESPONSE_OK_CNT1 ================================================== */ + #define R_ETHSW_TX_RESPONSE_OK_CNT1_TX_RESPONSE_OK_CNT_Pos (0UL) /*!< TX_RESPONSE_OK_CNT (Bit 0) */ + #define R_ETHSW_TX_RESPONSE_OK_CNT1_TX_RESPONSE_OK_CNT_Msk (0xffUL) /*!< TX_RESPONSE_OK_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== TX_RESPONSE_OK_CNT2 ================================================== */ + #define R_ETHSW_TX_RESPONSE_OK_CNT2_TX_RESPONSE_OK_CNT_Pos (0UL) /*!< TX_RESPONSE_OK_CNT (Bit 0) */ + #define R_ETHSW_TX_RESPONSE_OK_CNT2_TX_RESPONSE_OK_CNT_Msk (0xffUL) /*!< TX_RESPONSE_OK_CNT (Bitfield-Mask: 0xff) */ +/* =================================================== RX_VERIFY_OK_CNT0 =================================================== */ + #define R_ETHSW_RX_VERIFY_OK_CNT0_RX_VERIFY_OK_CNT_Pos (0UL) /*!< RX_VERIFY_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_VERIFY_OK_CNT0_RX_VERIFY_OK_CNT_Msk (0xffUL) /*!< RX_VERIFY_OK_CNT (Bitfield-Mask: 0xff) */ +/* =================================================== RX_VERIFY_OK_CNT1 =================================================== */ + #define R_ETHSW_RX_VERIFY_OK_CNT1_RX_VERIFY_OK_CNT_Pos (0UL) /*!< RX_VERIFY_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_VERIFY_OK_CNT1_RX_VERIFY_OK_CNT_Msk (0xffUL) /*!< RX_VERIFY_OK_CNT (Bitfield-Mask: 0xff) */ +/* =================================================== RX_VERIFY_OK_CNT2 =================================================== */ + #define R_ETHSW_RX_VERIFY_OK_CNT2_RX_VERIFY_OK_CNT_Pos (0UL) /*!< RX_VERIFY_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_VERIFY_OK_CNT2_RX_VERIFY_OK_CNT_Msk (0xffUL) /*!< RX_VERIFY_OK_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== RX_RESPONSE_OK_CNT0 ================================================== */ + #define R_ETHSW_RX_RESPONSE_OK_CNT0_RX_RESPONSE_OK_CNT_Pos (0UL) /*!< RX_RESPONSE_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_RESPONSE_OK_CNT0_RX_RESPONSE_OK_CNT_Msk (0xffUL) /*!< RX_RESPONSE_OK_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== RX_RESPONSE_OK_CNT1 ================================================== */ + #define R_ETHSW_RX_RESPONSE_OK_CNT1_RX_RESPONSE_OK_CNT_Pos (0UL) /*!< RX_RESPONSE_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_RESPONSE_OK_CNT1_RX_RESPONSE_OK_CNT_Msk (0xffUL) /*!< RX_RESPONSE_OK_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== RX_RESPONSE_OK_CNT2 ================================================== */ + #define R_ETHSW_RX_RESPONSE_OK_CNT2_RX_RESPONSE_OK_CNT_Pos (0UL) /*!< RX_RESPONSE_OK_CNT (Bit 0) */ + #define R_ETHSW_RX_RESPONSE_OK_CNT2_RX_RESPONSE_OK_CNT_Msk (0xffUL) /*!< RX_RESPONSE_OK_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== RX_VERIFY_BAD_CNT0 =================================================== */ + #define R_ETHSW_RX_VERIFY_BAD_CNT0_RX_VERIFY_BAD_CNT_Pos (0UL) /*!< RX_VERIFY_BAD_CNT (Bit 0) */ + #define R_ETHSW_RX_VERIFY_BAD_CNT0_RX_VERIFY_BAD_CNT_Msk (0xffUL) /*!< RX_VERIFY_BAD_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== RX_VERIFY_BAD_CNT1 =================================================== */ + #define R_ETHSW_RX_VERIFY_BAD_CNT1_RX_VERIFY_BAD_CNT_Pos (0UL) /*!< RX_VERIFY_BAD_CNT (Bit 0) */ + #define R_ETHSW_RX_VERIFY_BAD_CNT1_RX_VERIFY_BAD_CNT_Msk (0xffUL) /*!< RX_VERIFY_BAD_CNT (Bitfield-Mask: 0xff) */ +/* ================================================== RX_VERIFY_BAD_CNT2 =================================================== */ + #define R_ETHSW_RX_VERIFY_BAD_CNT2_RX_VERIFY_BAD_CNT_Pos (0UL) /*!< RX_VERIFY_BAD_CNT (Bit 0) */ + #define R_ETHSW_RX_VERIFY_BAD_CNT2_RX_VERIFY_BAD_CNT_Msk (0xffUL) /*!< RX_VERIFY_BAD_CNT (Bitfield-Mask: 0xff) */ +/* ================================================= RX_RESPONSE_BAD_CNT0 ================================================== */ + #define R_ETHSW_RX_RESPONSE_BAD_CNT0_RX_RESPONSE_BAD_CNT_Pos (0UL) /*!< RX_RESPONSE_BAD_CNT (Bit 0) */ + #define R_ETHSW_RX_RESPONSE_BAD_CNT0_RX_RESPONSE_BAD_CNT_Msk (0xffUL) /*!< RX_RESPONSE_BAD_CNT (Bitfield-Mask: 0xff) */ +/* ================================================= RX_RESPONSE_BAD_CNT1 ================================================== */ + #define R_ETHSW_RX_RESPONSE_BAD_CNT1_RX_RESPONSE_BAD_CNT_Pos (0UL) /*!< RX_RESPONSE_BAD_CNT (Bit 0) */ + #define R_ETHSW_RX_RESPONSE_BAD_CNT1_RX_RESPONSE_BAD_CNT_Msk (0xffUL) /*!< RX_RESPONSE_BAD_CNT (Bitfield-Mask: 0xff) */ +/* ================================================= RX_RESPONSE_BAD_CNT2 ================================================== */ + #define R_ETHSW_RX_RESPONSE_BAD_CNT2_RX_RESPONSE_BAD_CNT_Pos (0UL) /*!< RX_RESPONSE_BAD_CNT (Bit 0) */ + #define R_ETHSW_RX_RESPONSE_BAD_CNT2_RX_RESPONSE_BAD_CNT_Msk (0xffUL) /*!< RX_RESPONSE_BAD_CNT (Bitfield-Mask: 0xff) */ +/* ===================================================== MMCTL_OUT_CT ====================================================== */ + #define R_ETHSW_MMCTL_OUT_CT_CT_OVR_ENA_Pos (0UL) /*!< CT_OVR_ENA (Bit 0) */ + #define R_ETHSW_MMCTL_OUT_CT_CT_OVR_ENA_Msk (0x7UL) /*!< CT_OVR_ENA (Bitfield-Mask: 0x07) */ + #define R_ETHSW_MMCTL_OUT_CT_CT_OVR_Pos (16UL) /*!< CT_OVR (Bit 16) */ + #define R_ETHSW_MMCTL_OUT_CT_CT_OVR_Msk (0x70000UL) /*!< CT_OVR (Bitfield-Mask: 0x07) */ +/* ================================================== MMCTL_CTFL_P0_3_ENA ================================================== */ + #define R_ETHSW_MMCTL_CTFL_P0_3_ENA_CTFL_P0_ENA_Pos (0UL) /*!< CTFL_P0_ENA (Bit 0) */ + #define R_ETHSW_MMCTL_CTFL_P0_3_ENA_CTFL_P0_ENA_Msk (0xffUL) /*!< CTFL_P0_ENA (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_CTFL_P0_3_ENA_CTFL_P1_ENA_Pos (8UL) /*!< CTFL_P1_ENA (Bit 8) */ + #define R_ETHSW_MMCTL_CTFL_P0_3_ENA_CTFL_P1_ENA_Msk (0xff00UL) /*!< CTFL_P1_ENA (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_CTFL_P0_3_ENA_CTFL_P2_ENA_Pos (16UL) /*!< CTFL_P2_ENA (Bit 16) */ + #define R_ETHSW_MMCTL_CTFL_P0_3_ENA_CTFL_P2_ENA_Msk (0xff0000UL) /*!< CTFL_P2_ENA (Bitfield-Mask: 0xff) */ +/* ============================================== MMCTL_YELLOW_BYTE_LENGTH_P =============================================== */ + #define R_ETHSW_MMCTL_YELLOW_BYTE_LENGTH_P_YELLOW_LEN_Pos (2UL) /*!< YELLOW_LEN (Bit 2) */ + #define R_ETHSW_MMCTL_YELLOW_BYTE_LENGTH_P_YELLOW_LEN_Msk (0xfffcUL) /*!< YELLOW_LEN (Bitfield-Mask: 0x3fff) */ + #define R_ETHSW_MMCTL_YELLOW_BYTE_LENGTH_P_YLEN_EN_Pos (16UL) /*!< YLEN_EN (Bit 16) */ + #define R_ETHSW_MMCTL_YELLOW_BYTE_LENGTH_P_YLEN_EN_Msk (0x10000UL) /*!< YLEN_EN (Bitfield-Mask: 0x01) */ +/* ==================================================== MMCTL_POOL0_CTR ==================================================== */ + #define R_ETHSW_MMCTL_POOL0_CTR_CELLS_Pos (0UL) /*!< CELLS (Bit 0) */ + #define R_ETHSW_MMCTL_POOL0_CTR_CELLS_Msk (0x3ffUL) /*!< CELLS (Bitfield-Mask: 0x3ff) */ + #define R_ETHSW_MMCTL_POOL0_CTR_USED_Pos (16UL) /*!< USED (Bit 16) */ + #define R_ETHSW_MMCTL_POOL0_CTR_USED_Msk (0x3ff0000UL) /*!< USED (Bitfield-Mask: 0x3ff) */ +/* ==================================================== MMCTL_POOL1_CTR ==================================================== */ + #define R_ETHSW_MMCTL_POOL1_CTR_CELLS_Pos (0UL) /*!< CELLS (Bit 0) */ + #define R_ETHSW_MMCTL_POOL1_CTR_CELLS_Msk (0x3ffUL) /*!< CELLS (Bitfield-Mask: 0x3ff) */ + #define R_ETHSW_MMCTL_POOL1_CTR_USED_Pos (16UL) /*!< USED (Bit 16) */ + #define R_ETHSW_MMCTL_POOL1_CTR_USED_Msk (0x3ff0000UL) /*!< USED (Bitfield-Mask: 0x3ff) */ +/* =================================================== MMCTL_POOL_GLOBAL =================================================== */ + #define R_ETHSW_MMCTL_POOL_GLOBAL_CELLS_Pos (0UL) /*!< CELLS (Bit 0) */ + #define R_ETHSW_MMCTL_POOL_GLOBAL_CELLS_Msk (0x3ffUL) /*!< CELLS (Bitfield-Mask: 0x3ff) */ + #define R_ETHSW_MMCTL_POOL_GLOBAL_USED_Pos (16UL) /*!< USED (Bit 16) */ + #define R_ETHSW_MMCTL_POOL_GLOBAL_USED_Msk (0x3ff0000UL) /*!< USED (Bitfield-Mask: 0x3ff) */ +/* =================================================== MMCTL_POOL_STATUS =================================================== */ + #define R_ETHSW_MMCTL_POOL_STATUS_QUEUE_FULL_Pos (0UL) /*!< QUEUE_FULL (Bit 0) */ + #define R_ETHSW_MMCTL_POOL_STATUS_QUEUE_FULL_Msk (0xffUL) /*!< QUEUE_FULL (Bitfield-Mask: 0xff) */ +/* ==================================================== MMCTL_POOL_QMAP ==================================================== */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q0_MAP_Pos (0UL) /*!< Q0_MAP (Bit 0) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q0_MAP_Msk (0x1UL) /*!< Q0_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q0_ENA_Pos (3UL) /*!< Q0_ENA (Bit 3) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q0_ENA_Msk (0x8UL) /*!< Q0_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q1_MAP_Pos (4UL) /*!< Q1_MAP (Bit 4) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q1_MAP_Msk (0x10UL) /*!< Q1_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q1_ENA_Pos (7UL) /*!< Q1_ENA (Bit 7) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q1_ENA_Msk (0x80UL) /*!< Q1_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q2_MAP_Pos (8UL) /*!< Q2_MAP (Bit 8) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q2_MAP_Msk (0x100UL) /*!< Q2_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q2_ENA_Pos (11UL) /*!< Q2_ENA (Bit 11) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q2_ENA_Msk (0x800UL) /*!< Q2_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q3_MAP_Pos (12UL) /*!< Q3_MAP (Bit 12) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q3_MAP_Msk (0x1000UL) /*!< Q3_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q3_ENA_Pos (15UL) /*!< Q3_ENA (Bit 15) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q3_ENA_Msk (0x8000UL) /*!< Q3_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q4_MAP_Pos (16UL) /*!< Q4_MAP (Bit 16) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q4_MAP_Msk (0x10000UL) /*!< Q4_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q4_ENA_Pos (19UL) /*!< Q4_ENA (Bit 19) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q4_ENA_Msk (0x80000UL) /*!< Q4_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q5_MAP_Pos (20UL) /*!< Q5_MAP (Bit 20) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q5_MAP_Msk (0x100000UL) /*!< Q5_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q5_ENA_Pos (23UL) /*!< Q5_ENA (Bit 23) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q5_ENA_Msk (0x800000UL) /*!< Q5_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q6_MAP_Pos (24UL) /*!< Q6_MAP (Bit 24) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q6_MAP_Msk (0x1000000UL) /*!< Q6_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q6_ENA_Pos (27UL) /*!< Q6_ENA (Bit 27) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q6_ENA_Msk (0x8000000UL) /*!< Q6_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q7_MAP_Pos (28UL) /*!< Q7_MAP (Bit 28) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q7_MAP_Msk (0x10000000UL) /*!< Q7_MAP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q7_ENA_Pos (31UL) /*!< Q7_ENA (Bit 31) */ + #define R_ETHSW_MMCTL_POOL_QMAP_Q7_ENA_Msk (0x80000000UL) /*!< Q7_ENA (Bitfield-Mask: 0x01) */ +/* ====================================================== MMCTL_QGATE ====================================================== */ + #define R_ETHSW_MMCTL_QGATE_PORT_MASK_Pos (0UL) /*!< PORT_MASK (Bit 0) */ + #define R_ETHSW_MMCTL_QGATE_PORT_MASK_Msk (0xfUL) /*!< PORT_MASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MMCTL_QGATE_QUEUE_GATE_Pos (16UL) /*!< QUEUE_GATE (Bit 16) */ + #define R_ETHSW_MMCTL_QGATE_QUEUE_GATE_Msk (0xffff0000UL) /*!< QUEUE_GATE (Bitfield-Mask: 0xffff) */ +/* ====================================================== MMCTL_QTRIG ====================================================== */ + #define R_ETHSW_MMCTL_QTRIG_PORT_MASK_Pos (0UL) /*!< PORT_MASK (Bit 0) */ + #define R_ETHSW_MMCTL_QTRIG_PORT_MASK_Msk (0xfUL) /*!< PORT_MASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MMCTL_QTRIG_QUEUE_TRIG_Pos (16UL) /*!< QUEUE_TRIG (Bit 16) */ + #define R_ETHSW_MMCTL_QTRIG_QUEUE_TRIG_Msk (0xff0000UL) /*!< QUEUE_TRIG (Bitfield-Mask: 0xff) */ +/* ===================================================== MMCTL_QFLUSH ====================================================== */ + #define R_ETHSW_MMCTL_QFLUSH_PORT_MASK_Pos (0UL) /*!< PORT_MASK (Bit 0) */ + #define R_ETHSW_MMCTL_QFLUSH_PORT_MASK_Msk (0xfUL) /*!< PORT_MASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MMCTL_QFLUSH_QUEUE_MASK_Pos (16UL) /*!< QUEUE_MASK (Bit 16) */ + #define R_ETHSW_MMCTL_QFLUSH_QUEUE_MASK_Msk (0xff0000UL) /*!< QUEUE_MASK (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_QFLUSH_ACTION_Pos (24UL) /*!< ACTION (Bit 24) */ + #define R_ETHSW_MMCTL_QFLUSH_ACTION_Msk (0x3000000UL) /*!< ACTION (Bitfield-Mask: 0x03) */ +/* =============================================== MMCTL_QCLOSED_STATUS_P0_3 =============================================== */ + #define R_ETHSW_MMCTL_QCLOSED_STATUS_P0_3_P0_STATUS_Pos (0UL) /*!< P0_STATUS (Bit 0) */ + #define R_ETHSW_MMCTL_QCLOSED_STATUS_P0_3_P0_STATUS_Msk (0xffUL) /*!< P0_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_QCLOSED_STATUS_P0_3_P1_STATUS_Pos (8UL) /*!< P1_STATUS (Bit 8) */ + #define R_ETHSW_MMCTL_QCLOSED_STATUS_P0_3_P1_STATUS_Msk (0xff00UL) /*!< P1_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_QCLOSED_STATUS_P0_3_P2_STATUS_Pos (16UL) /*!< P2_STATUS (Bit 16) */ + #define R_ETHSW_MMCTL_QCLOSED_STATUS_P0_3_P2_STATUS_Msk (0xff0000UL) /*!< P2_STATUS (Bitfield-Mask: 0xff) */ +/* ================================================== MMCTL_1FRAME_MODE_P ================================================== */ + #define R_ETHSW_MMCTL_1FRAME_MODE_P_Q_1FRAME_ENA_Pos (0UL) /*!< Q_1FRAME_ENA (Bit 0) */ + #define R_ETHSW_MMCTL_1FRAME_MODE_P_Q_1FRAME_ENA_Msk (0xffUL) /*!< Q_1FRAME_ENA (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_1FRAME_MODE_P_Q_BUF_ENA_Pos (16UL) /*!< Q_BUF_ENA (Bit 16) */ + #define R_ETHSW_MMCTL_1FRAME_MODE_P_Q_BUF_ENA_Msk (0xff0000UL) /*!< Q_BUF_ENA (Bitfield-Mask: 0xff) */ +/* ================================================ MMCTL_P0_3_QUEUE_STATUS ================================================ */ + #define R_ETHSW_MMCTL_P0_3_QUEUE_STATUS_P0_Q_STATUS_Pos (0UL) /*!< P0_Q_STATUS (Bit 0) */ + #define R_ETHSW_MMCTL_P0_3_QUEUE_STATUS_P0_Q_STATUS_Msk (0xffUL) /*!< P0_Q_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_P0_3_QUEUE_STATUS_P1_Q_STATUS_Pos (8UL) /*!< P1_Q_STATUS (Bit 8) */ + #define R_ETHSW_MMCTL_P0_3_QUEUE_STATUS_P1_Q_STATUS_Msk (0xff00UL) /*!< P1_Q_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_P0_3_QUEUE_STATUS_P2_Q_STATUS_Pos (16UL) /*!< P2_Q_STATUS (Bit 16) */ + #define R_ETHSW_MMCTL_P0_3_QUEUE_STATUS_P2_Q_STATUS_Msk (0xff0000UL) /*!< P2_Q_STATUS (Bitfield-Mask: 0xff) */ +/* ================================================ MMCTL_P0_3_FLUSH_STATUS ================================================ */ + #define R_ETHSW_MMCTL_P0_3_FLUSH_STATUS_P0_F_STATUS_Pos (0UL) /*!< P0_F_STATUS (Bit 0) */ + #define R_ETHSW_MMCTL_P0_3_FLUSH_STATUS_P0_F_STATUS_Msk (0xffUL) /*!< P0_F_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_P0_3_FLUSH_STATUS_P1_F_STATUS_Pos (8UL) /*!< P1_F_STATUS (Bit 8) */ + #define R_ETHSW_MMCTL_P0_3_FLUSH_STATUS_P1_F_STATUS_Msk (0xff00UL) /*!< P1_F_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_P0_3_FLUSH_STATUS_P2_F_STATUS_Pos (16UL) /*!< P2_F_STATUS (Bit 16) */ + #define R_ETHSW_MMCTL_P0_3_FLUSH_STATUS_P2_F_STATUS_Msk (0xff0000UL) /*!< P2_F_STATUS (Bitfield-Mask: 0xff) */ +/* ================================================ MMCTL_DLY_QTRIGGER_CTRL ================================================ */ + #define R_ETHSW_MMCTL_DLY_QTRIGGER_CTRL_DELAY_TIME_Pos (0UL) /*!< DELAY_TIME (Bit 0) */ + #define R_ETHSW_MMCTL_DLY_QTRIGGER_CTRL_DELAY_TIME_Msk (0x3fffffffUL) /*!< DELAY_TIME (Bitfield-Mask: 0x3fffffff) */ + #define R_ETHSW_MMCTL_DLY_QTRIGGER_CTRL_TIMER_SEL_Pos (30UL) /*!< TIMER_SEL (Bit 30) */ + #define R_ETHSW_MMCTL_DLY_QTRIGGER_CTRL_TIMER_SEL_Msk (0x40000000UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ +/* ================================================= MMCTL_PREEMPT_QUEUES ================================================== */ + #define R_ETHSW_MMCTL_PREEMPT_QUEUES_PREEMPT_ENA_Pos (0UL) /*!< PREEMPT_ENA (Bit 0) */ + #define R_ETHSW_MMCTL_PREEMPT_QUEUES_PREEMPT_ENA_Msk (0xffUL) /*!< PREEMPT_ENA (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_PREEMPT_QUEUES_PREEMPT_ON_QCLOSE_Pos (8UL) /*!< PREEMPT_ON_QCLOSE (Bit 8) */ + #define R_ETHSW_MMCTL_PREEMPT_QUEUES_PREEMPT_ON_QCLOSE_Msk (0xff00UL) /*!< PREEMPT_ON_QCLOSE (Bitfield-Mask: 0xff) */ +/* ================================================== MMCTL_HOLD_CONTROL =================================================== */ + #define R_ETHSW_MMCTL_HOLD_CONTROL_Q_HOLD_REQ_FORCE_Pos (0UL) /*!< Q_HOLD_REQ_FORCE (Bit 0) */ + #define R_ETHSW_MMCTL_HOLD_CONTROL_Q_HOLD_REQ_FORCE_Msk (0x7UL) /*!< Q_HOLD_REQ_FORCE (Bitfield-Mask: 0x07) */ + #define R_ETHSW_MMCTL_HOLD_CONTROL_Q_HOLD_REQ_RELEASE_Pos (16UL) /*!< Q_HOLD_REQ_RELEASE (Bit 16) */ + #define R_ETHSW_MMCTL_HOLD_CONTROL_Q_HOLD_REQ_RELEASE_Msk (0x70000UL) /*!< Q_HOLD_REQ_RELEASE (Bitfield-Mask: 0x07) */ +/* ================================================= MMCTL_PREEMPT_STATUS ================================================== */ + #define R_ETHSW_MMCTL_PREEMPT_STATUS_PREEMPT_STATE_Pos (0UL) /*!< PREEMPT_STATE (Bit 0) */ + #define R_ETHSW_MMCTL_PREEMPT_STATUS_PREEMPT_STATE_Msk (0x7UL) /*!< PREEMPT_STATE (Bitfield-Mask: 0x07) */ + #define R_ETHSW_MMCTL_PREEMPT_STATUS_HOLD_REQ_STATE_Pos (16UL) /*!< HOLD_REQ_STATE (Bit 16) */ + #define R_ETHSW_MMCTL_PREEMPT_STATUS_HOLD_REQ_STATE_Msk (0x70000UL) /*!< HOLD_REQ_STATE (Bitfield-Mask: 0x07) */ +/* =================================================== MMCTL_CQF_CTRL_P ==================================================== */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_PRIO_ENABLE0_Pos (0UL) /*!< PRIO_ENABLE0 (Bit 0) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_PRIO_ENABLE0_Msk (0xffUL) /*!< PRIO_ENABLE0 (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_QUEUE_SEL0_Pos (8UL) /*!< QUEUE_SEL0 (Bit 8) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_QUEUE_SEL0_Msk (0x700UL) /*!< QUEUE_SEL0 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_GATE_SEL0_Pos (11UL) /*!< GATE_SEL0 (Bit 11) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_GATE_SEL0_Msk (0x3800UL) /*!< GATE_SEL0 (Bitfield-Mask: 0x07) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_USE_SOP0_Pos (14UL) /*!< USE_SOP0 (Bit 14) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_USE_SOP0_Msk (0x4000UL) /*!< USE_SOP0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_REF_SEL0_Pos (15UL) /*!< REF_SEL0 (Bit 15) */ + #define R_ETHSW_MMCTL_CQF_CTRL_P_REF_SEL0_Msk (0x8000UL) /*!< REF_SEL0 (Bitfield-Mask: 0x01) */ +/* ============================================== MMCTL_P0_3_QCLOSED_NONEMPTY ============================================== */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P0_Q_STATUS_Pos (0UL) /*!< P0_Q_STATUS (Bit 0) */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P0_Q_STATUS_Msk (0xffUL) /*!< P0_Q_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P1_Q_STATUS_Pos (8UL) /*!< P1_Q_STATUS (Bit 8) */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P1_Q_STATUS_Msk (0xff00UL) /*!< P1_Q_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P2_Q_STATUS_Pos (16UL) /*!< P2_Q_STATUS (Bit 16) */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P2_Q_STATUS_Msk (0xff0000UL) /*!< P2_Q_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P3_Q_STATUS_Pos (24UL) /*!< P3_Q_STATUS (Bit 24) */ + #define R_ETHSW_MMCTL_P0_3_QCLOSED_NONEMPTY_P3_Q_STATUS_Msk (0xff000000UL) /*!< P3_Q_STATUS (Bitfield-Mask: 0xff) */ +/* ================================================== MMCTL_PREEMPT_EXTRA ================================================== */ + #define R_ETHSW_MMCTL_PREEMPT_EXTRA_MIN_PFRM_ADJ_Pos (0UL) /*!< MIN_PFRM_ADJ (Bit 0) */ + #define R_ETHSW_MMCTL_PREEMPT_EXTRA_MIN_PFRM_ADJ_Msk (0xfUL) /*!< MIN_PFRM_ADJ (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_MMCTL_PREEMPT_EXTRA_LAST_PFRM_ADJ_Pos (4UL) /*!< LAST_PFRM_ADJ (Bit 4) */ + #define R_ETHSW_MMCTL_PREEMPT_EXTRA_LAST_PFRM_ADJ_Msk (0xf0UL) /*!< LAST_PFRM_ADJ (Bitfield-Mask: 0x0f) */ +/* ====================================================== DLR_CONTROL ====================================================== */ + #define R_ETHSW_DLR_CONTROL_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_ETHSW_DLR_CONTROL_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_CONTROL_AUTOFLUSH_Pos (1UL) /*!< AUTOFLUSH (Bit 1) */ + #define R_ETHSW_DLR_CONTROL_AUTOFLUSH_Msk (0x2UL) /*!< AUTOFLUSH (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_CONTROL_LOOP_FILTER_ENA_Pos (2UL) /*!< LOOP_FILTER_ENA (Bit 2) */ + #define R_ETHSW_DLR_CONTROL_LOOP_FILTER_ENA_Msk (0x4UL) /*!< LOOP_FILTER_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_CONTROL_IGNORE_INVTM_Pos (4UL) /*!< IGNORE_INVTM (Bit 4) */ + #define R_ETHSW_DLR_CONTROL_IGNORE_INVTM_Msk (0x10UL) /*!< IGNORE_INVTM (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_CONTROL_US_TIME_Pos (8UL) /*!< US_TIME (Bit 8) */ + #define R_ETHSW_DLR_CONTROL_US_TIME_Msk (0xfff00UL) /*!< US_TIME (Bitfield-Mask: 0xfff) */ +/* ====================================================== DLR_STATUS ======================================================= */ + #define R_ETHSW_DLR_STATUS_LastBcnRcvPort_Pos (0UL) /*!< LastBcnRcvPort (Bit 0) */ + #define R_ETHSW_DLR_STATUS_LastBcnRcvPort_Msk (0x3UL) /*!< LastBcnRcvPort (Bitfield-Mask: 0x03) */ + #define R_ETHSW_DLR_STATUS_NODE_STATE_Pos (8UL) /*!< NODE_STATE (Bit 8) */ + #define R_ETHSW_DLR_STATUS_NODE_STATE_Msk (0xff00UL) /*!< NODE_STATE (Bitfield-Mask: 0xff) */ + #define R_ETHSW_DLR_STATUS_LINK_STATUS_Pos (16UL) /*!< LINK_STATUS (Bit 16) */ + #define R_ETHSW_DLR_STATUS_LINK_STATUS_Msk (0x30000UL) /*!< LINK_STATUS (Bitfield-Mask: 0x03) */ + #define R_ETHSW_DLR_STATUS_TOPOLOGY_Pos (24UL) /*!< TOPOLOGY (Bit 24) */ + #define R_ETHSW_DLR_STATUS_TOPOLOGY_Msk (0xff000000UL) /*!< TOPOLOGY (Bitfield-Mask: 0xff) */ +/* ====================================================== DLR_ETH_TYP ====================================================== */ + #define R_ETHSW_DLR_ETH_TYP_DLR_ETH_TYP_Pos (0UL) /*!< DLR_ETH_TYP (Bit 0) */ + #define R_ETHSW_DLR_ETH_TYP_DLR_ETH_TYP_Msk (0xffffUL) /*!< DLR_ETH_TYP (Bitfield-Mask: 0xffff) */ +/* ==================================================== DLR_IRQ_CONTROL ==================================================== */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_state_chng_ena_Pos (0UL) /*!< IRQ_state_chng_ena (Bit 0) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_state_chng_ena_Msk (0x1UL) /*!< IRQ_state_chng_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_flush_macaddr_ena_Pos (1UL) /*!< IRQ_flush_macaddr_ena (Bit 1) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_flush_macaddr_ena_Msk (0x2UL) /*!< IRQ_flush_macaddr_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_stop_nbchk0_ena_Pos (2UL) /*!< IRQ_stop_nbchk0_ena (Bit 2) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_stop_nbchk0_ena_Msk (0x4UL) /*!< IRQ_stop_nbchk0_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_stop_nbchk1_ena_Pos (3UL) /*!< IRQ_stop_nbchk1_ena (Bit 3) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_stop_nbchk1_ena_Msk (0x8UL) /*!< IRQ_stop_nbchk1_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_tmr0_exp_ena_Pos (4UL) /*!< IRQ_bec_tmr0_exp_ena (Bit 4) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_tmr0_exp_ena_Msk (0x10UL) /*!< IRQ_bec_tmr0_exp_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_tmr1_exp_ena_Pos (5UL) /*!< IRQ_bec_tmr1_exp_ena (Bit 5) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_tmr1_exp_ena_Msk (0x20UL) /*!< IRQ_bec_tmr1_exp_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_supr_chng_ena_Pos (6UL) /*!< IRQ_supr_chng_ena (Bit 6) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_supr_chng_ena_Msk (0x40UL) /*!< IRQ_supr_chng_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_link_chng0_ena_Pos (7UL) /*!< IRQ_link_chng0_ena (Bit 7) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_link_chng0_ena_Msk (0x80UL) /*!< IRQ_link_chng0_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_link_chng1_ena_Pos (8UL) /*!< IRQ_link_chng1_ena (Bit 8) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_link_chng1_ena_Msk (0x100UL) /*!< IRQ_link_chng1_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_sup_ignord_ena_Pos (9UL) /*!< IRQ_sup_ignord_ena (Bit 9) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_sup_ignord_ena_Msk (0x200UL) /*!< IRQ_sup_ignord_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_ip_addr_chng_ena_Pos (10UL) /*!< IRQ_ip_addr_chng_ena (Bit 10) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_ip_addr_chng_ena_Msk (0x400UL) /*!< IRQ_ip_addr_chng_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_invalid_tmr_ena_Pos (11UL) /*!< IRQ_invalid_tmr_ena (Bit 11) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_invalid_tmr_ena_Msk (0x800UL) /*!< IRQ_invalid_tmr_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_rcv0_ena_Pos (12UL) /*!< IRQ_bec_rcv0_ena (Bit 12) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_rcv0_ena_Msk (0x1000UL) /*!< IRQ_bec_rcv0_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_rcv1_ena_Pos (13UL) /*!< IRQ_bec_rcv1_ena (Bit 13) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_bec_rcv1_ena_Msk (0x2000UL) /*!< IRQ_bec_rcv1_ena (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_frm_dscrd0_Pos (14UL) /*!< IRQ_frm_dscrd0 (Bit 14) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_frm_dscrd0_Msk (0x4000UL) /*!< IRQ_frm_dscrd0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_frm_dscrd1_Pos (15UL) /*!< IRQ_frm_dscrd1 (Bit 15) */ + #define R_ETHSW_DLR_IRQ_CONTROL_IRQ_frm_dscrd1_Msk (0x8000UL) /*!< IRQ_frm_dscrd1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_low_int_en_Pos (29UL) /*!< low_int_en (Bit 29) */ + #define R_ETHSW_DLR_IRQ_CONTROL_low_int_en_Msk (0x20000000UL) /*!< low_int_en (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_atomic_OR_Pos (30UL) /*!< atomic_OR (Bit 30) */ + #define R_ETHSW_DLR_IRQ_CONTROL_atomic_OR_Msk (0x40000000UL) /*!< atomic_OR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_CONTROL_atomic_AND_Pos (31UL) /*!< atomic_AND (Bit 31) */ + #define R_ETHSW_DLR_IRQ_CONTROL_atomic_AND_Msk (0x80000000UL) /*!< atomic_AND (Bitfield-Mask: 0x01) */ +/* =================================================== DLR_IRQ_STAT_ACK ==================================================== */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_state_chng_IRQ_pending_Pos (0UL) /*!< state_chng_IRQ_pending (Bit 0) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_state_chng_IRQ_pending_Msk (0x1UL) /*!< state_chng_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_flush_IRQ_pending_Pos (1UL) /*!< flush_IRQ_pending (Bit 1) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_flush_IRQ_pending_Msk (0x2UL) /*!< flush_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_nbchk0_IRQ_pending_Pos (2UL) /*!< nbchk0_IRQ_pending (Bit 2) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_nbchk0_IRQ_pending_Msk (0x4UL) /*!< nbchk0_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_nbchk1_IRQ_pending_Pos (3UL) /*!< nbchk1_IRQ_pending (Bit 3) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_nbchk1_IRQ_pending_Msk (0x8UL) /*!< nbchk1_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_tmr0_IRQ_pending_Pos (4UL) /*!< bec_tmr0_IRQ_pending (Bit 4) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_tmr0_IRQ_pending_Msk (0x10UL) /*!< bec_tmr0_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_tmr1_IRQ_pending_Pos (5UL) /*!< bec_tmr1_IRQ_pending (Bit 5) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_tmr1_IRQ_pending_Msk (0x20UL) /*!< bec_tmr1_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_supr_chng_IRQ_pending_Pos (6UL) /*!< supr_chng_IRQ_pending (Bit 6) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_supr_chng_IRQ_pending_Msk (0x40UL) /*!< supr_chng_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_Link0_IRQ_pending_Pos (7UL) /*!< Link0_IRQ_pending (Bit 7) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_Link0_IRQ_pending_Msk (0x80UL) /*!< Link0_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_Link1_IRQ_pending_Pos (8UL) /*!< Link1_IRQ_pending (Bit 8) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_Link1_IRQ_pending_Msk (0x100UL) /*!< Link1_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_sup_ignord_IRQ_pending_Pos (9UL) /*!< sup_ignord_IRQ_pending (Bit 9) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_sup_ignord_IRQ_pending_Msk (0x200UL) /*!< sup_ignord_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_ip_chng_IRQ_pending_Pos (10UL) /*!< ip_chng_IRQ_pending (Bit 10) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_ip_chng_IRQ_pending_Msk (0x400UL) /*!< ip_chng_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_invalid_tmr_IRQ_pending_Pos (11UL) /*!< invalid_tmr_IRQ_pending (Bit 11) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_invalid_tmr_IRQ_pending_Msk (0x800UL) /*!< invalid_tmr_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_rcv0_IRQ_pending_Pos (12UL) /*!< bec_rcv0_IRQ_pending (Bit 12) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_rcv0_IRQ_pending_Msk (0x1000UL) /*!< bec_rcv0_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_rcv1_IRQ_pending_Pos (13UL) /*!< bec_rcv1_IRQ_pending (Bit 13) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_bec_rcv1_IRQ_pending_Msk (0x2000UL) /*!< bec_rcv1_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_frm_dscrd0_IRQ_pending_Pos (14UL) /*!< frm_dscrd0_IRQ_pending (Bit 14) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_frm_dscrd0_IRQ_pending_Msk (0x4000UL) /*!< frm_dscrd0_IRQ_pending (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_frm_dscrd1_IRQ_pending_Pos (15UL) /*!< frm_dscrd1_IRQ_pending (Bit 15) */ + #define R_ETHSW_DLR_IRQ_STAT_ACK_frm_dscrd1_IRQ_pending_Msk (0x8000UL) /*!< frm_dscrd1_IRQ_pending (Bitfield-Mask: 0x01) */ +/* ===================================================== DLR_LOC_MAClo ===================================================== */ + #define R_ETHSW_DLR_LOC_MAClo_LOC_MAC_Pos (0UL) /*!< LOC_MAC (Bit 0) */ + #define R_ETHSW_DLR_LOC_MAClo_LOC_MAC_Msk (0xffffffffUL) /*!< LOC_MAC (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DLR_LOC_MAChi ===================================================== */ + #define R_ETHSW_DLR_LOC_MAChi_LOC_MAC_Pos (0UL) /*!< LOC_MAC (Bit 0) */ + #define R_ETHSW_DLR_LOC_MAChi_LOC_MAC_Msk (0xffffUL) /*!< LOC_MAC (Bitfield-Mask: 0xffff) */ +/* ==================================================== DLR_SUPR_MAClo ===================================================== */ + #define R_ETHSW_DLR_SUPR_MAClo_SUPR_MAC_Pos (0UL) /*!< SUPR_MAC (Bit 0) */ + #define R_ETHSW_DLR_SUPR_MAClo_SUPR_MAC_Msk (0xffffffffUL) /*!< SUPR_MAC (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DLR_SUPR_MAChi ===================================================== */ + #define R_ETHSW_DLR_SUPR_MAChi_SUPR_MAC_Pos (0UL) /*!< SUPR_MAC (Bit 0) */ + #define R_ETHSW_DLR_SUPR_MAChi_SUPR_MAC_Msk (0xffffUL) /*!< SUPR_MAC (Bitfield-Mask: 0xffff) */ + #define R_ETHSW_DLR_SUPR_MAChi_PRECE_Pos (16UL) /*!< PRECE (Bit 16) */ + #define R_ETHSW_DLR_SUPR_MAChi_PRECE_Msk (0xff0000UL) /*!< PRECE (Bitfield-Mask: 0xff) */ +/* ==================================================== DLR_STATE_VLAN ===================================================== */ + #define R_ETHSW_DLR_STATE_VLAN_RINGSTAT_Pos (0UL) /*!< RINGSTAT (Bit 0) */ + #define R_ETHSW_DLR_STATE_VLAN_RINGSTAT_Msk (0xffUL) /*!< RINGSTAT (Bitfield-Mask: 0xff) */ + #define R_ETHSW_DLR_STATE_VLAN_VLANVALID_Pos (8UL) /*!< VLANVALID (Bit 8) */ + #define R_ETHSW_DLR_STATE_VLAN_VLANVALID_Msk (0x100UL) /*!< VLANVALID (Bitfield-Mask: 0x01) */ + #define R_ETHSW_DLR_STATE_VLAN_VLANINFO_Pos (16UL) /*!< VLANINFO (Bit 16) */ + #define R_ETHSW_DLR_STATE_VLAN_VLANINFO_Msk (0xffff0000UL) /*!< VLANINFO (Bitfield-Mask: 0xffff) */ +/* ===================================================== DLR_BEC_TMOUT ===================================================== */ + #define R_ETHSW_DLR_BEC_TMOUT_BEC_TMOUT_Pos (0UL) /*!< BEC_TMOUT (Bit 0) */ + #define R_ETHSW_DLR_BEC_TMOUT_BEC_TMOUT_Msk (0xffffffffUL) /*!< BEC_TMOUT (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DLR_BEC_INTRVL ===================================================== */ + #define R_ETHSW_DLR_BEC_INTRVL_BEC_INTRVL_Pos (0UL) /*!< BEC_INTRVL (Bit 0) */ + #define R_ETHSW_DLR_BEC_INTRVL_BEC_INTRVL_Msk (0xffffffffUL) /*!< BEC_INTRVL (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DLR_SUPR_IPADR ===================================================== */ + #define R_ETHSW_DLR_SUPR_IPADR_SUPR_IPADR_Pos (0UL) /*!< SUPR_IPADR (Bit 0) */ + #define R_ETHSW_DLR_SUPR_IPADR_SUPR_IPADR_Msk (0xffffffffUL) /*!< SUPR_IPADR (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DLR_ETH_STYP_VER ==================================================== */ + #define R_ETHSW_DLR_ETH_STYP_VER_SUBTYPE_Pos (0UL) /*!< SUBTYPE (Bit 0) */ + #define R_ETHSW_DLR_ETH_STYP_VER_SUBTYPE_Msk (0xffUL) /*!< SUBTYPE (Bitfield-Mask: 0xff) */ + #define R_ETHSW_DLR_ETH_STYP_VER_PROTVER_Pos (8UL) /*!< PROTVER (Bit 8) */ + #define R_ETHSW_DLR_ETH_STYP_VER_PROTVER_Msk (0xff00UL) /*!< PROTVER (Bitfield-Mask: 0xff) */ + #define R_ETHSW_DLR_ETH_STYP_VER_SPORT_Pos (16UL) /*!< SPORT (Bit 16) */ + #define R_ETHSW_DLR_ETH_STYP_VER_SPORT_Msk (0xff0000UL) /*!< SPORT (Bitfield-Mask: 0xff) */ +/* ===================================================== DLR_INV_TMOUT ===================================================== */ + #define R_ETHSW_DLR_INV_TMOUT_INV_TMOUT_Pos (0UL) /*!< INV_TMOUT (Bit 0) */ + #define R_ETHSW_DLR_INV_TMOUT_INV_TMOUT_Msk (0xffffffffUL) /*!< INV_TMOUT (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== DLR_SEQ_ID ======================================================= */ + #define R_ETHSW_DLR_SEQ_ID_SEQ_ID_Pos (0UL) /*!< SEQ_ID (Bit 0) */ + #define R_ETHSW_DLR_SEQ_ID_SEQ_ID_Msk (0xffffffffUL) /*!< SEQ_ID (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= DLR_DSTlo ======================================================= */ + #define R_ETHSW_DLR_DSTlo_DLR_DST_Pos (0UL) /*!< DLR_DST (Bit 0) */ + #define R_ETHSW_DLR_DSTlo_DLR_DST_Msk (0xffffffffUL) /*!< DLR_DST (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= DLR_DSThi ======================================================= */ + #define R_ETHSW_DLR_DSThi_DLR_DST_Pos (0UL) /*!< DLR_DST (Bit 0) */ + #define R_ETHSW_DLR_DSThi_DLR_DST_Msk (0xffffUL) /*!< DLR_DST (Bitfield-Mask: 0xffff) */ +/* ===================================================== DLR_RX_STAT0 ====================================================== */ + #define R_ETHSW_DLR_RX_STAT0_RX_STAT0_Pos (0UL) /*!< RX_STAT0 (Bit 0) */ + #define R_ETHSW_DLR_RX_STAT0_RX_STAT0_Msk (0xffffffffUL) /*!< RX_STAT0 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DLR_RX_ERR_STAT0 ==================================================== */ + #define R_ETHSW_DLR_RX_ERR_STAT0_RX_ERR_STAT0_Pos (0UL) /*!< RX_ERR_STAT0 (Bit 0) */ + #define R_ETHSW_DLR_RX_ERR_STAT0_RX_ERR_STAT0_Msk (0xffffffffUL) /*!< RX_ERR_STAT0 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DLR_RX_LF_STAT0 ==================================================== */ + #define R_ETHSW_DLR_RX_LF_STAT0_RX_LF_STAT0_Pos (0UL) /*!< RX_LF_STAT0 (Bit 0) */ + #define R_ETHSW_DLR_RX_LF_STAT0_RX_LF_STAT0_Msk (0xffUL) /*!< RX_LF_STAT0 (Bitfield-Mask: 0xff) */ +/* ===================================================== DLR_RX_STAT1 ====================================================== */ + #define R_ETHSW_DLR_RX_STAT1_RX_STAT1_Pos (0UL) /*!< RX_STAT1 (Bit 0) */ + #define R_ETHSW_DLR_RX_STAT1_RX_STAT1_Msk (0xffffffffUL) /*!< RX_STAT1 (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DLR_RX_ERR_STAT1 ==================================================== */ + #define R_ETHSW_DLR_RX_ERR_STAT1_RX_ERR_STAT1_Pos (0UL) /*!< RX_ERR_STAT1 (Bit 0) */ + #define R_ETHSW_DLR_RX_ERR_STAT1_RX_ERR_STAT1_Msk (0xffffffffUL) /*!< RX_ERR_STAT1 (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DLR_RX_LF_STAT1 ==================================================== */ + #define R_ETHSW_DLR_RX_LF_STAT1_RX_LF_STAT1_Pos (0UL) /*!< RX_LF_STAT1 (Bit 0) */ + #define R_ETHSW_DLR_RX_LF_STAT1_RX_LF_STAT1_Msk (0xffUL) /*!< RX_LF_STAT1 (Bitfield-Mask: 0xff) */ +/* ====================================================== PRP_CONFIG ======================================================= */ + #define R_ETHSW_PRP_CONFIG_PRP_ENA_Pos (0UL) /*!< PRP_ENA (Bit 0) */ + #define R_ETHSW_PRP_CONFIG_PRP_ENA_Msk (0x1UL) /*!< PRP_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_RX_DUP_ACCEPT_Pos (1UL) /*!< RX_DUP_ACCEPT (Bit 1) */ + #define R_ETHSW_PRP_CONFIG_RX_DUP_ACCEPT_Msk (0x2UL) /*!< RX_DUP_ACCEPT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_RX_REMOVE_RCT_Pos (2UL) /*!< RX_REMOVE_RCT (Bit 2) */ + #define R_ETHSW_PRP_CONFIG_RX_REMOVE_RCT_Msk (0x4UL) /*!< RX_REMOVE_RCT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_MODE_Pos (3UL) /*!< TX_RCT_MODE (Bit 3) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_MODE_Msk (0x18UL) /*!< TX_RCT_MODE (Bitfield-Mask: 0x03) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_BROADCAST_Pos (5UL) /*!< TX_RCT_BROADCAST (Bit 5) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_BROADCAST_Msk (0x20UL) /*!< TX_RCT_BROADCAST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_MULTICAST_Pos (6UL) /*!< TX_RCT_MULTICAST (Bit 6) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_MULTICAST_Msk (0x40UL) /*!< TX_RCT_MULTICAST (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_UNKNOWN_Pos (7UL) /*!< TX_RCT_UNKNOWN (Bit 7) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_UNKNOWN_Msk (0x80UL) /*!< TX_RCT_UNKNOWN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_1588_Pos (8UL) /*!< TX_RCT_1588 (Bit 8) */ + #define R_ETHSW_PRP_CONFIG_TX_RCT_1588_Msk (0x100UL) /*!< TX_RCT_1588 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_RCT_LEN_CHK_DIS_Pos (9UL) /*!< RCT_LEN_CHK_DIS (Bit 9) */ + #define R_ETHSW_PRP_CONFIG_RCT_LEN_CHK_DIS_Msk (0x200UL) /*!< RCT_LEN_CHK_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_CONFIG_PRP_AGE_ENA_Pos (16UL) /*!< PRP_AGE_ENA (Bit 16) */ + #define R_ETHSW_PRP_CONFIG_PRP_AGE_ENA_Msk (0x10000UL) /*!< PRP_AGE_ENA (Bitfield-Mask: 0x01) */ +/* ======================================================= PRP_GROUP ======================================================= */ + #define R_ETHSW_PRP_GROUP_PRP_GROUP_Pos (0UL) /*!< PRP_GROUP (Bit 0) */ + #define R_ETHSW_PRP_GROUP_PRP_GROUP_Msk (0x7UL) /*!< PRP_GROUP (Bitfield-Mask: 0x07) */ + #define R_ETHSW_PRP_GROUP_LANB_MASK_Pos (16UL) /*!< LANB_MASK (Bit 16) */ + #define R_ETHSW_PRP_GROUP_LANB_MASK_Msk (0x70000UL) /*!< LANB_MASK (Bitfield-Mask: 0x07) */ +/* ====================================================== PRP_SUFFIX ======================================================= */ + #define R_ETHSW_PRP_SUFFIX_PRP_SUFFIX_Pos (0UL) /*!< PRP_SUFFIX (Bit 0) */ + #define R_ETHSW_PRP_SUFFIX_PRP_SUFFIX_Msk (0xffffUL) /*!< PRP_SUFFIX (Bitfield-Mask: 0xffff) */ +/* ======================================================= PRP_LANID ======================================================= */ + #define R_ETHSW_PRP_LANID_LANAID_Pos (0UL) /*!< LANAID (Bit 0) */ + #define R_ETHSW_PRP_LANID_LANAID_Msk (0xfUL) /*!< LANAID (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_PRP_LANID_LANBID_Pos (4UL) /*!< LANBID (Bit 4) */ + #define R_ETHSW_PRP_LANID_LANBID_Msk (0xf0UL) /*!< LANBID (Bitfield-Mask: 0x0f) */ +/* ========================================================= DUP_W ========================================================= */ + #define R_ETHSW_DUP_W_DUP_W_Pos (0UL) /*!< DUP_W (Bit 0) */ + #define R_ETHSW_DUP_W_DUP_W_Msk (0xffUL) /*!< DUP_W (Bitfield-Mask: 0xff) */ +/* ====================================================== PRP_AGETIME ====================================================== */ + #define R_ETHSW_PRP_AGETIME_PRP_AGETIME_Pos (0UL) /*!< PRP_AGETIME (Bit 0) */ + #define R_ETHSW_PRP_AGETIME_PRP_AGETIME_Msk (0xffffffUL) /*!< PRP_AGETIME (Bitfield-Mask: 0xffffff) */ +/* ==================================================== PRP_IRQ_CONTROL ==================================================== */ + #define R_ETHSW_PRP_IRQ_CONTROL_MEMTOOLATE_Pos (0UL) /*!< MEMTOOLATE (Bit 0) */ + #define R_ETHSW_PRP_IRQ_CONTROL_MEMTOOLATE_Msk (0x1UL) /*!< MEMTOOLATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_IRQ_CONTROL_WRONGLAN_Pos (1UL) /*!< WRONGLAN (Bit 1) */ + #define R_ETHSW_PRP_IRQ_CONTROL_WRONGLAN_Msk (0x2UL) /*!< WRONGLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_IRQ_CONTROL_OUTOFSEQ_Pos (2UL) /*!< OUTOFSEQ (Bit 2) */ + #define R_ETHSW_PRP_IRQ_CONTROL_OUTOFSEQ_Msk (0x4UL) /*!< OUTOFSEQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_IRQ_CONTROL_SEQMISSING_Pos (3UL) /*!< SEQMISSING (Bit 3) */ + #define R_ETHSW_PRP_IRQ_CONTROL_SEQMISSING_Msk (0x8UL) /*!< SEQMISSING (Bitfield-Mask: 0x01) */ +/* =================================================== PRP_IRQ_STAT_ACK ==================================================== */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_MEMTOOLATE_Pos (0UL) /*!< MEMTOOLATE (Bit 0) */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_MEMTOOLATE_Msk (0x1UL) /*!< MEMTOOLATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_WRONGLAN_Pos (1UL) /*!< WRONGLAN (Bit 1) */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_WRONGLAN_Msk (0x2UL) /*!< WRONGLAN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_OUTOFSEQ_Pos (2UL) /*!< OUTOFSEQ (Bit 2) */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_OUTOFSEQ_Msk (0x4UL) /*!< OUTOFSEQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_SEQMISSING_Pos (3UL) /*!< SEQMISSING (Bit 3) */ + #define R_ETHSW_PRP_IRQ_STAT_ACK_SEQMISSING_Msk (0x8UL) /*!< SEQMISSING (Bitfield-Mask: 0x01) */ +/* ===================================================== RM_ADDR_CTRL ====================================================== */ + #define R_ETHSW_RM_ADDR_CTRL_address_Pos (0UL) /*!< address (Bit 0) */ + #define R_ETHSW_RM_ADDR_CTRL_address_Msk (0xfffUL) /*!< address (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_RM_ADDR_CTRL_CLEAR_DYNAMIC_Pos (22UL) /*!< CLEAR_DYNAMIC (Bit 22) */ + #define R_ETHSW_RM_ADDR_CTRL_CLEAR_DYNAMIC_Msk (0x400000UL) /*!< CLEAR_DYNAMIC (Bitfield-Mask: 0x01) */ + #define R_ETHSW_RM_ADDR_CTRL_CLEAR_MEMORY_Pos (23UL) /*!< CLEAR_MEMORY (Bit 23) */ + #define R_ETHSW_RM_ADDR_CTRL_CLEAR_MEMORY_Msk (0x800000UL) /*!< CLEAR_MEMORY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_RM_ADDR_CTRL_WRITE_Pos (25UL) /*!< WRITE (Bit 25) */ + #define R_ETHSW_RM_ADDR_CTRL_WRITE_Msk (0x2000000UL) /*!< WRITE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_RM_ADDR_CTRL_READ_Pos (26UL) /*!< READ (Bit 26) */ + #define R_ETHSW_RM_ADDR_CTRL_READ_Msk (0x4000000UL) /*!< READ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_RM_ADDR_CTRL_CLEAR_Pos (29UL) /*!< CLEAR (Bit 29) */ + #define R_ETHSW_RM_ADDR_CTRL_CLEAR_Msk (0x20000000UL) /*!< CLEAR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_RM_ADDR_CTRL_BUSY_Pos (31UL) /*!< BUSY (Bit 31) */ + #define R_ETHSW_RM_ADDR_CTRL_BUSY_Msk (0x80000000UL) /*!< BUSY (Bitfield-Mask: 0x01) */ +/* ======================================================== RM_DATA ======================================================== */ + #define R_ETHSW_RM_DATA_RM_DATA_Pos (0UL) /*!< RM_DATA (Bit 0) */ + #define R_ETHSW_RM_DATA_RM_DATA_Msk (0xffffffffUL) /*!< RM_DATA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== RM_DATA_HI ======================================================= */ + #define R_ETHSW_RM_DATA_HI_RM_DATA_HI_Pos (0UL) /*!< RM_DATA_HI (Bit 0) */ + #define R_ETHSW_RM_DATA_HI_RM_DATA_HI_Msk (0xffffffffUL) /*!< RM_DATA_HI (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= RM_STATUS ======================================================= */ + #define R_ETHSW_RM_STATUS_ageaddress_Pos (0UL) /*!< ageaddress (Bit 0) */ + #define R_ETHSW_RM_STATUS_ageaddress_Msk (0xfffUL) /*!< ageaddress (Bitfield-Mask: 0xfff) */ +/* ===================================================== TxSeqTooLate ====================================================== */ + #define R_ETHSW_TxSeqTooLate_TxSeqTooLate_Pos (0UL) /*!< TxSeqTooLate (Bit 0) */ + #define R_ETHSW_TxSeqTooLate_TxSeqTooLate_Msk (0xfUL) /*!< TxSeqTooLate (Bitfield-Mask: 0x0f) */ +/* ==================================================== CntErrWrongLanA ==================================================== */ + #define R_ETHSW_CntErrWrongLanA_CntErrWrongLanA_Pos (0UL) /*!< CntErrWrongLanA (Bit 0) */ + #define R_ETHSW_CntErrWrongLanA_CntErrWrongLanA_Msk (0xffffffffUL) /*!< CntErrWrongLanA (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== CntErrWrongLanB ==================================================== */ + #define R_ETHSW_CntErrWrongLanB_CntErrWrongLanB_Pos (0UL) /*!< CntErrWrongLanB (Bit 0) */ + #define R_ETHSW_CntErrWrongLanB_CntErrWrongLanB_Msk (0xffffffffUL) /*!< CntErrWrongLanB (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== CntDupLanA ======================================================= */ + #define R_ETHSW_CntDupLanA_CntDupLanA_Pos (0UL) /*!< CntDupLanA (Bit 0) */ + #define R_ETHSW_CntDupLanA_CntDupLanA_Msk (0xffffffffUL) /*!< CntDupLanA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== CntDupLanB ======================================================= */ + #define R_ETHSW_CntDupLanB_CntDupLanB_Pos (0UL) /*!< CntDupLanB (Bit 0) */ + #define R_ETHSW_CntDupLanB_CntDupLanB_Msk (0xffffffffUL) /*!< CntDupLanB (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== CntOutOfSeqLowA ==================================================== */ + #define R_ETHSW_CntOutOfSeqLowA_CntOutOfSeqLowA_Pos (0UL) /*!< CntOutOfSeqLowA (Bit 0) */ + #define R_ETHSW_CntOutOfSeqLowA_CntOutOfSeqLowA_Msk (0xffffffffUL) /*!< CntOutOfSeqLowA (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== CntOutOfSeqLowB ==================================================== */ + #define R_ETHSW_CntOutOfSeqLowB_CntOutOfSeqLowB_Pos (0UL) /*!< CntOutOfSeqLowB (Bit 0) */ + #define R_ETHSW_CntOutOfSeqLowB_CntOutOfSeqLowB_Msk (0xffffffffUL) /*!< CntOutOfSeqLowB (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== CntOutOfSeqA ====================================================== */ + #define R_ETHSW_CntOutOfSeqA_CntOutOfSeqA_Pos (0UL) /*!< CntOutOfSeqA (Bit 0) */ + #define R_ETHSW_CntOutOfSeqA_CntOutOfSeqA_Msk (0xffffffffUL) /*!< CntOutOfSeqA (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== CntOutOfSeqB ====================================================== */ + #define R_ETHSW_CntOutOfSeqB_CntOutOfSeqB_Pos (0UL) /*!< CntOutOfSeqB (Bit 0) */ + #define R_ETHSW_CntOutOfSeqB_CntOutOfSeqB_Msk (0xffffffffUL) /*!< CntOutOfSeqB (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== CntAcceptA ======================================================= */ + #define R_ETHSW_CntAcceptA_CntAcceptA_Pos (0UL) /*!< CntAcceptA (Bit 0) */ + #define R_ETHSW_CntAcceptA_CntAcceptA_Msk (0xffffffffUL) /*!< CntAcceptA (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== CntAcceptB ======================================================= */ + #define R_ETHSW_CntAcceptB_CntAcceptB_Pos (0UL) /*!< CntAcceptB (Bit 0) */ + #define R_ETHSW_CntAcceptB_CntAcceptB_Msk (0xffffffffUL) /*!< CntAcceptB (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== CntMissing ======================================================= */ + #define R_ETHSW_CntMissing_CntMissing_Pos (0UL) /*!< CntMissing (Bit 0) */ + #define R_ETHSW_CntMissing_CntMissing_Msk (0xffffffffUL) /*!< CntMissing (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== HUB_CONFIG ======================================================= */ + #define R_ETHSW_HUB_CONFIG_HUB_ENA_Pos (0UL) /*!< HUB_ENA (Bit 0) */ + #define R_ETHSW_HUB_CONFIG_HUB_ENA_Msk (0x1UL) /*!< HUB_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_CONFIG_RETRANSMIT_ENA_Pos (1UL) /*!< RETRANSMIT_ENA (Bit 1) */ + #define R_ETHSW_HUB_CONFIG_RETRANSMIT_ENA_Msk (0x2UL) /*!< RETRANSMIT_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_CONFIG_TRIGGER_MODE_Pos (2UL) /*!< TRIGGER_MODE (Bit 2) */ + #define R_ETHSW_HUB_CONFIG_TRIGGER_MODE_Msk (0x4UL) /*!< TRIGGER_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_CONFIG_HUB_ISOLATE_Pos (3UL) /*!< HUB_ISOLATE (Bit 3) */ + #define R_ETHSW_HUB_CONFIG_HUB_ISOLATE_Msk (0x8UL) /*!< HUB_ISOLATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_CONFIG_TIMER_SEL_Pos (4UL) /*!< TIMER_SEL (Bit 4) */ + #define R_ETHSW_HUB_CONFIG_TIMER_SEL_Msk (0x10UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_CONFIG_IPG_WAIT_Pos (6UL) /*!< IPG_WAIT (Bit 6) */ + #define R_ETHSW_HUB_CONFIG_IPG_WAIT_Msk (0x1c0UL) /*!< IPG_WAIT (Bitfield-Mask: 0x07) */ + #define R_ETHSW_HUB_CONFIG_CRS_GEN_Pos (9UL) /*!< CRS_GEN (Bit 9) */ + #define R_ETHSW_HUB_CONFIG_CRS_GEN_Msk (0x200UL) /*!< CRS_GEN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_CONFIG_PRMB_GEN_DIS_Pos (10UL) /*!< PRMB_GEN_DIS (Bit 10) */ + #define R_ETHSW_HUB_CONFIG_PRMB_GEN_DIS_Msk (0x400UL) /*!< PRMB_GEN_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_CONFIG_JAM_WAIT_IDLE_Pos (11UL) /*!< JAM_WAIT_IDLE (Bit 11) */ + #define R_ETHSW_HUB_CONFIG_JAM_WAIT_IDLE_Msk (0x800UL) /*!< JAM_WAIT_IDLE (Bitfield-Mask: 0x01) */ +/* ======================================================= HUB_GROUP ======================================================= */ + #define R_ETHSW_HUB_GROUP_HUB_GROUP_Pos (0UL) /*!< HUB_GROUP (Bit 0) */ + #define R_ETHSW_HUB_GROUP_HUB_GROUP_Msk (0x7UL) /*!< HUB_GROUP (Bitfield-Mask: 0x07) */ +/* ====================================================== HUB_DEFPORT ====================================================== */ + #define R_ETHSW_HUB_DEFPORT_HUB_DEFPORT_Pos (0UL) /*!< HUB_DEFPORT (Bit 0) */ + #define R_ETHSW_HUB_DEFPORT_HUB_DEFPORT_Msk (0x7UL) /*!< HUB_DEFPORT (Bitfield-Mask: 0x07) */ +/* ================================================= HUB_TRIGGER_IMMEDIATE ================================================= */ + #define R_ETHSW_HUB_TRIGGER_IMMEDIATE_HUB_TRIGGER_IMMEDIATE_Pos (0UL) /*!< HUB_TRIGGER_IMMEDIATE (Bit 0) */ + #define R_ETHSW_HUB_TRIGGER_IMMEDIATE_HUB_TRIGGER_IMMEDIATE_Msk (0x7UL) /*!< HUB_TRIGGER_IMMEDIATE (Bitfield-Mask: 0x07) */ +/* ==================================================== HUB_TRIGGER_AT ===================================================== */ + #define R_ETHSW_HUB_TRIGGER_AT_HUB_TRIGGER_AT_Pos (0UL) /*!< HUB_TRIGGER_AT (Bit 0) */ + #define R_ETHSW_HUB_TRIGGER_AT_HUB_TRIGGER_AT_Msk (0x7UL) /*!< HUB_TRIGGER_AT (Bitfield-Mask: 0x07) */ +/* ======================================================= HUB_TTIME ======================================================= */ + #define R_ETHSW_HUB_TTIME_HUB_TTIME_Pos (0UL) /*!< HUB_TTIME (Bit 0) */ + #define R_ETHSW_HUB_TTIME_HUB_TTIME_Msk (0xffffffffUL) /*!< HUB_TTIME (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== HUB_IRQ_CONTROL ==================================================== */ + #define R_ETHSW_HUB_IRQ_CONTROL_RX_TRIGGER_Pos (0UL) /*!< RX_TRIGGER (Bit 0) */ + #define R_ETHSW_HUB_IRQ_CONTROL_RX_TRIGGER_Msk (0x7UL) /*!< RX_TRIGGER (Bitfield-Mask: 0x07) */ + #define R_ETHSW_HUB_IRQ_CONTROL_CHANGE_DET_Pos (3UL) /*!< CHANGE_DET (Bit 3) */ + #define R_ETHSW_HUB_IRQ_CONTROL_CHANGE_DET_Msk (0x8UL) /*!< CHANGE_DET (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_IRQ_CONTROL_TRIGGER_IMMEDIATE_Pos (4UL) /*!< TRIGGER_IMMEDIATE (Bit 4) */ + #define R_ETHSW_HUB_IRQ_CONTROL_TRIGGER_IMMEDIATE_Msk (0x10UL) /*!< TRIGGER_IMMEDIATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_IRQ_CONTROL_TRIGGER_TIMER_Pos (5UL) /*!< TRIGGER_TIMER (Bit 5) */ + #define R_ETHSW_HUB_IRQ_CONTROL_TRIGGER_TIMER_Msk (0x20UL) /*!< TRIGGER_TIMER (Bitfield-Mask: 0x01) */ +/* =================================================== HUB_IRQ_STAT_ACK ==================================================== */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_RX_TRIGGER_Pos (0UL) /*!< RX_TRIGGER (Bit 0) */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_RX_TRIGGER_Msk (0x7UL) /*!< RX_TRIGGER (Bitfield-Mask: 0x07) */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_CHANGE_DET_Pos (3UL) /*!< CHANGE_DET (Bit 3) */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_CHANGE_DET_Msk (0x8UL) /*!< CHANGE_DET (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_TRIGGER_IMMEDIATE_Pos (4UL) /*!< TRIGGER_IMMEDIATE (Bit 4) */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_TRIGGER_IMMEDIATE_Msk (0x10UL) /*!< TRIGGER_IMMEDIATE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_TRIGGER_TIMER_Pos (5UL) /*!< TRIGGER_TIMER (Bit 5) */ + #define R_ETHSW_HUB_IRQ_STAT_ACK_TRIGGER_TIMER_Msk (0x20UL) /*!< TRIGGER_TIMER (Bitfield-Mask: 0x01) */ +/* ====================================================== HUB_STATUS ======================================================= */ + #define R_ETHSW_HUB_STATUS_PORTS_ACTIVE_Pos (0UL) /*!< PORTS_ACTIVE (Bit 0) */ + #define R_ETHSW_HUB_STATUS_PORTS_ACTIVE_Msk (0x7UL) /*!< PORTS_ACTIVE (Bitfield-Mask: 0x07) */ + #define R_ETHSW_HUB_STATUS_TX_ACTIVE_Pos (9UL) /*!< TX_ACTIVE (Bit 9) */ + #define R_ETHSW_HUB_STATUS_TX_ACTIVE_Msk (0x200UL) /*!< TX_ACTIVE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_STATUS_TX_BUSY_Pos (10UL) /*!< TX_BUSY (Bit 10) */ + #define R_ETHSW_HUB_STATUS_TX_BUSY_Msk (0x400UL) /*!< TX_BUSY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_STATUS_Speed_OK_Pos (11UL) /*!< Speed_OK (Bit 11) */ + #define R_ETHSW_HUB_STATUS_Speed_OK_Msk (0x800UL) /*!< Speed_OK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_HUB_STATUS_TX_Change_Pending_Pos (12UL) /*!< TX_Change_Pending (Bit 12) */ + #define R_ETHSW_HUB_STATUS_TX_Change_Pending_Msk (0x1000UL) /*!< TX_Change_Pending (Bitfield-Mask: 0x01) */ +/* =================================================== HUB_OPORT_STATUS ==================================================== */ + #define R_ETHSW_HUB_OPORT_STATUS_HUB_OPORT_STATUS_Pos (0UL) /*!< HUB_OPORT_STATUS (Bit 0) */ + #define R_ETHSW_HUB_OPORT_STATUS_HUB_OPORT_STATUS_Msk (0x7UL) /*!< HUB_OPORT_STATUS (Bitfield-Mask: 0x07) */ +/* ====================================================== TDMA_CONFIG ====================================================== */ + #define R_ETHSW_TDMA_CONFIG_TDMA_ENA_Pos (0UL) /*!< TDMA_ENA (Bit 0) */ + #define R_ETHSW_TDMA_CONFIG_TDMA_ENA_Msk (0x1UL) /*!< TDMA_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_WAIT_START_Pos (1UL) /*!< WAIT_START (Bit 1) */ + #define R_ETHSW_TDMA_CONFIG_WAIT_START_Msk (0x2UL) /*!< WAIT_START (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_TIMER_SEL_Pos (2UL) /*!< TIMER_SEL (Bit 2) */ + #define R_ETHSW_TDMA_CONFIG_TIMER_SEL_Msk (0x4UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_RED_PERIOD_Pos (4UL) /*!< RED_PERIOD (Bit 4) */ + #define R_ETHSW_TDMA_CONFIG_RED_PERIOD_Msk (0x10UL) /*!< RED_PERIOD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_RED_OVRD_ENA_Pos (5UL) /*!< RED_OVRD_ENA (Bit 5) */ + #define R_ETHSW_TDMA_CONFIG_RED_OVRD_ENA_Msk (0x20UL) /*!< RED_OVRD_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_RED_OVRD_Pos (6UL) /*!< RED_OVRD (Bit 6) */ + #define R_ETHSW_TDMA_CONFIG_RED_OVRD_Msk (0x40UL) /*!< RED_OVRD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_IN_CT_WREN_Pos (7UL) /*!< IN_CT_WREN (Bit 7) */ + #define R_ETHSW_TDMA_CONFIG_IN_CT_WREN_Msk (0x80UL) /*!< IN_CT_WREN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_OUT_CT_WREN_Pos (8UL) /*!< OUT_CT_WREN (Bit 8) */ + #define R_ETHSW_TDMA_CONFIG_OUT_CT_WREN_Msk (0x100UL) /*!< OUT_CT_WREN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_HOLD_REQ_CLR_Pos (9UL) /*!< HOLD_REQ_CLR (Bit 9) */ + #define R_ETHSW_TDMA_CONFIG_HOLD_REQ_CLR_Msk (0x200UL) /*!< HOLD_REQ_CLR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_TIMER_SEL_ACTIVE_Pos (12UL) /*!< TIMER_SEL_ACTIVE (Bit 12) */ + #define R_ETHSW_TDMA_CONFIG_TIMER_SEL_ACTIVE_Msk (0x1000UL) /*!< TIMER_SEL_ACTIVE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CONFIG_IN_CT_ENA_Pos (16UL) /*!< IN_CT_ENA (Bit 16) */ + #define R_ETHSW_TDMA_CONFIG_IN_CT_ENA_Msk (0xf0000UL) /*!< IN_CT_ENA (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_TDMA_CONFIG_OUT_CT_ENA_Pos (24UL) /*!< OUT_CT_ENA (Bit 24) */ + #define R_ETHSW_TDMA_CONFIG_OUT_CT_ENA_Msk (0xf000000UL) /*!< OUT_CT_ENA (Bitfield-Mask: 0x0f) */ +/* ===================================================== TDMA_ENA_CTRL ===================================================== */ + #define R_ETHSW_TDMA_ENA_CTRL_PORT_ENA_Pos (0UL) /*!< PORT_ENA (Bit 0) */ + #define R_ETHSW_TDMA_ENA_CTRL_PORT_ENA_Msk (0xfUL) /*!< PORT_ENA (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_TDMA_ENA_CTRL_QGATE_DIS_Pos (16UL) /*!< QGATE_DIS (Bit 16) */ + #define R_ETHSW_TDMA_ENA_CTRL_QGATE_DIS_Msk (0xff0000UL) /*!< QGATE_DIS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_TDMA_ENA_CTRL_QTRIG_DIS_Pos (24UL) /*!< QTRIG_DIS (Bit 24) */ + #define R_ETHSW_TDMA_ENA_CTRL_QTRIG_DIS_Msk (0xff000000UL) /*!< QTRIG_DIS (Bitfield-Mask: 0xff) */ +/* ====================================================== TDMA_START ======================================================= */ + #define R_ETHSW_TDMA_START_TDMA_START_Pos (0UL) /*!< TDMA_START (Bit 0) */ + #define R_ETHSW_TDMA_START_TDMA_START_Msk (0xffffffffUL) /*!< TDMA_START (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== TDMA_MODULO ====================================================== */ + #define R_ETHSW_TDMA_MODULO_TDMA_MODULO_Pos (0UL) /*!< TDMA_MODULO (Bit 0) */ + #define R_ETHSW_TDMA_MODULO_TDMA_MODULO_Msk (0xffffffffUL) /*!< TDMA_MODULO (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== TDMA_CYCLE ======================================================= */ + #define R_ETHSW_TDMA_CYCLE_TDMA_CYCLE_Pos (0UL) /*!< TDMA_CYCLE (Bit 0) */ + #define R_ETHSW_TDMA_CYCLE_TDMA_CYCLE_Msk (0xffffffffUL) /*!< TDMA_CYCLE (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== TCV_SEQ_ADDR ====================================================== */ + #define R_ETHSW_TCV_SEQ_ADDR_TCV_S_ADDR_Pos (0UL) /*!< TCV_S_ADDR (Bit 0) */ + #define R_ETHSW_TCV_SEQ_ADDR_TCV_S_ADDR_Msk (0xfffUL) /*!< TCV_S_ADDR (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_TCV_SEQ_ADDR_ADDR_AINC_Pos (31UL) /*!< ADDR_AINC (Bit 31) */ + #define R_ETHSW_TCV_SEQ_ADDR_ADDR_AINC_Msk (0x80000000UL) /*!< ADDR_AINC (Bitfield-Mask: 0x01) */ +/* ===================================================== TCV_SEQ_CTRL ====================================================== */ + #define R_ETHSW_TCV_SEQ_CTRL_START_Pos (0UL) /*!< START (Bit 0) */ + #define R_ETHSW_TCV_SEQ_CTRL_START_Msk (0x1UL) /*!< START (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_SEQ_CTRL_INT_Pos (1UL) /*!< INT (Bit 1) */ + #define R_ETHSW_TCV_SEQ_CTRL_INT_Msk (0x2UL) /*!< INT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_SEQ_CTRL_TCV_D_IDX_Pos (2UL) /*!< TCV_D_IDX (Bit 2) */ + #define R_ETHSW_TCV_SEQ_CTRL_TCV_D_IDX_Msk (0x7fcUL) /*!< TCV_D_IDX (Bitfield-Mask: 0x1ff) */ + #define R_ETHSW_TCV_SEQ_CTRL_GPIO_Pos (22UL) /*!< GPIO (Bit 22) */ + #define R_ETHSW_TCV_SEQ_CTRL_GPIO_Msk (0x3fc00000UL) /*!< GPIO (Bitfield-Mask: 0xff) */ + #define R_ETHSW_TCV_SEQ_CTRL_READ_MODE_Pos (31UL) /*!< READ_MODE (Bit 31) */ + #define R_ETHSW_TCV_SEQ_CTRL_READ_MODE_Msk (0x80000000UL) /*!< READ_MODE (Bitfield-Mask: 0x01) */ +/* ===================================================== TCV_SEQ_LAST ====================================================== */ + #define R_ETHSW_TCV_SEQ_LAST_LAST_Pos (0UL) /*!< LAST (Bit 0) */ + #define R_ETHSW_TCV_SEQ_LAST_LAST_Msk (0xfffUL) /*!< LAST (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_TCV_SEQ_LAST_ACTIVE_Pos (16UL) /*!< ACTIVE (Bit 16) */ + #define R_ETHSW_TCV_SEQ_LAST_ACTIVE_Msk (0xfff0000UL) /*!< ACTIVE (Bitfield-Mask: 0xfff) */ +/* ====================================================== TCV_D_ADDR ======================================================= */ + #define R_ETHSW_TCV_D_ADDR_ADDR_Pos (0UL) /*!< ADDR (Bit 0) */ + #define R_ETHSW_TCV_D_ADDR_ADDR_Msk (0x1ffUL) /*!< ADDR (Bitfield-Mask: 0x1ff) */ + #define R_ETHSW_TCV_D_ADDR_AINC_WR_ENA_Pos (31UL) /*!< AINC_WR_ENA (Bit 31) */ + #define R_ETHSW_TCV_D_ADDR_AINC_WR_ENA_Msk (0x80000000UL) /*!< AINC_WR_ENA (Bitfield-Mask: 0x01) */ +/* ===================================================== TCV_D_OFFSET ====================================================== */ + #define R_ETHSW_TCV_D_OFFSET_TCV_D_OFFSET_Pos (0UL) /*!< TCV_D_OFFSET (Bit 0) */ + #define R_ETHSW_TCV_D_OFFSET_TCV_D_OFFSET_Msk (0xffffffffUL) /*!< TCV_D_OFFSET (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== TCV_D_CTRL ======================================================= */ + #define R_ETHSW_TCV_D_CTRL_INC_CTR0_Pos (0UL) /*!< INC_CTR0 (Bit 0) */ + #define R_ETHSW_TCV_D_CTRL_INC_CTR0_Msk (0x1UL) /*!< INC_CTR0 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_INC_CTR1_Pos (1UL) /*!< INC_CTR1 (Bit 1) */ + #define R_ETHSW_TCV_D_CTRL_INC_CTR1_Msk (0x2UL) /*!< INC_CTR1 (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_RED_PERIOD_Pos (2UL) /*!< RED_PERIOD (Bit 2) */ + #define R_ETHSW_TCV_D_CTRL_RED_PERIOD_Msk (0x4UL) /*!< RED_PERIOD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_OUT_CT_ENA_Pos (3UL) /*!< OUT_CT_ENA (Bit 3) */ + #define R_ETHSW_TCV_D_CTRL_OUT_CT_ENA_Msk (0x8UL) /*!< OUT_CT_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_IN_CT_ENA_Pos (4UL) /*!< IN_CT_ENA (Bit 4) */ + #define R_ETHSW_TCV_D_CTRL_IN_CT_ENA_Msk (0x10UL) /*!< IN_CT_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_TRIGGER_MODE_Pos (5UL) /*!< TRIGGER_MODE (Bit 5) */ + #define R_ETHSW_TCV_D_CTRL_TRIGGER_MODE_Msk (0x20UL) /*!< TRIGGER_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_GATE_MODE_Pos (6UL) /*!< GATE_MODE (Bit 6) */ + #define R_ETHSW_TCV_D_CTRL_GATE_MODE_Msk (0x40UL) /*!< GATE_MODE (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_HOLD_REQ_Pos (7UL) /*!< HOLD_REQ (Bit 7) */ + #define R_ETHSW_TCV_D_CTRL_HOLD_REQ_Msk (0x80UL) /*!< HOLD_REQ (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TCV_D_CTRL_QGATE_Pos (8UL) /*!< QGATE (Bit 8) */ + #define R_ETHSW_TCV_D_CTRL_QGATE_Msk (0xff00UL) /*!< QGATE (Bitfield-Mask: 0xff) */ + #define R_ETHSW_TCV_D_CTRL_PMASK_Pos (16UL) /*!< PMASK (Bit 16) */ + #define R_ETHSW_TCV_D_CTRL_PMASK_Msk (0xf0000UL) /*!< PMASK (Bitfield-Mask: 0x0f) */ +/* ======================================================= TDMA_CTR0 ======================================================= */ + #define R_ETHSW_TDMA_CTR0_TDMA_CTR0_Pos (0UL) /*!< TDMA_CTR0 (Bit 0) */ + #define R_ETHSW_TDMA_CTR0_TDMA_CTR0_Msk (0xffffffffUL) /*!< TDMA_CTR0 (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= TDMA_CTR1 ======================================================= */ + #define R_ETHSW_TDMA_CTR1_VALUE_Pos (0UL) /*!< VALUE (Bit 0) */ + #define R_ETHSW_TDMA_CTR1_VALUE_Msk (0xffUL) /*!< VALUE (Bitfield-Mask: 0xff) */ + #define R_ETHSW_TDMA_CTR1_WRITE_ENA_Pos (8UL) /*!< WRITE_ENA (Bit 8) */ + #define R_ETHSW_TDMA_CTR1_WRITE_ENA_Msk (0x100UL) /*!< WRITE_ENA (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_CTR1_MAX_Pos (16UL) /*!< MAX (Bit 16) */ + #define R_ETHSW_TDMA_CTR1_MAX_Msk (0xff0000UL) /*!< MAX (Bitfield-Mask: 0xff) */ + #define R_ETHSW_TDMA_CTR1_INT_VALUE_Pos (24UL) /*!< INT_VALUE (Bit 24) */ + #define R_ETHSW_TDMA_CTR1_INT_VALUE_Msk (0xff000000UL) /*!< INT_VALUE (Bitfield-Mask: 0xff) */ +/* ==================================================== TDMA_TCV_START ===================================================== */ + #define R_ETHSW_TDMA_TCV_START_TDMA_TCV_START_Pos (0UL) /*!< TDMA_TCV_START (Bit 0) */ + #define R_ETHSW_TDMA_TCV_START_TDMA_TCV_START_Msk (0xfffUL) /*!< TDMA_TCV_START (Bitfield-Mask: 0xfff) */ +/* ==================================================== TIME_LOAD_NEXT ===================================================== */ + #define R_ETHSW_TIME_LOAD_NEXT_TIME_LOAD_NEXT_Pos (0UL) /*!< TIME_LOAD_NEXT (Bit 0) */ + #define R_ETHSW_TIME_LOAD_NEXT_TIME_LOAD_NEXT_Msk (0xffffffffUL) /*!< TIME_LOAD_NEXT (Bitfield-Mask: 0xffffffff) */ +/* =================================================== TDMA_IRQ_CONTROL ==================================================== */ + #define R_ETHSW_TDMA_IRQ_CONTROL_TCV_INT_EN_Pos (0UL) /*!< TCV_INT_EN (Bit 0) */ + #define R_ETHSW_TDMA_IRQ_CONTROL_TCV_INT_EN_Msk (0x1UL) /*!< TCV_INT_EN (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_IRQ_CONTROL_CTR1_INT_EN_Pos (13UL) /*!< CTR1_INT_EN (Bit 13) */ + #define R_ETHSW_TDMA_IRQ_CONTROL_CTR1_INT_EN_Msk (0x2000UL) /*!< CTR1_INT_EN (Bitfield-Mask: 0x01) */ +/* =================================================== TDMA_IRQ_STAT_ACK =================================================== */ + #define R_ETHSW_TDMA_IRQ_STAT_ACK_TCV_ACK_Pos (0UL) /*!< TCV_ACK (Bit 0) */ + #define R_ETHSW_TDMA_IRQ_STAT_ACK_TCV_ACK_Msk (0x1UL) /*!< TCV_ACK (Bitfield-Mask: 0x01) */ + #define R_ETHSW_TDMA_IRQ_STAT_ACK_CTR1_ACK_Pos (13UL) /*!< CTR1_ACK (Bit 13) */ + #define R_ETHSW_TDMA_IRQ_STAT_ACK_CTR1_ACK_Msk (0x2000UL) /*!< CTR1_ACK (Bitfield-Mask: 0x01) */ +/* ======================================================= TDMA_GPIO ======================================================= */ + #define R_ETHSW_TDMA_GPIO_GPIO_STATUS_Pos (0UL) /*!< GPIO_STATUS (Bit 0) */ + #define R_ETHSW_TDMA_GPIO_GPIO_STATUS_Msk (0xffUL) /*!< GPIO_STATUS (Bitfield-Mask: 0xff) */ + #define R_ETHSW_TDMA_GPIO_GPIO_MODE_Pos (16UL) /*!< GPIO_MODE (Bit 16) */ + #define R_ETHSW_TDMA_GPIO_GPIO_MODE_Msk (0xffff0000UL) /*!< GPIO_MODE (Bitfield-Mask: 0xffff) */ +/* ==================================================== RXMATCH_CONFIG ===================================================== */ + #define R_ETHSW_RXMATCH_CONFIG_PATTERN_EN_Pos (0UL) /*!< PATTERN_EN (Bit 0) */ + #define R_ETHSW_RXMATCH_CONFIG_PATTERN_EN_Msk (0xfffUL) /*!< PATTERN_EN (Bitfield-Mask: 0xfff) */ +/* ===================================================== PATTERN_CTRL ====================================================== */ + #define R_ETHSW_PATTERN_CTRL_MATCH_NOT_Pos (0UL) /*!< MATCH_NOT (Bit 0) */ + #define R_ETHSW_PATTERN_CTRL_MATCH_NOT_Msk (0x1UL) /*!< MATCH_NOT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_MGMTFWD_Pos (1UL) /*!< MGMTFWD (Bit 1) */ + #define R_ETHSW_PATTERN_CTRL_MGMTFWD_Msk (0x2UL) /*!< MGMTFWD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_DISCARD_Pos (2UL) /*!< DISCARD (Bit 2) */ + #define R_ETHSW_PATTERN_CTRL_DISCARD_Msk (0x4UL) /*!< DISCARD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_SET_PRIO_Pos (3UL) /*!< SET_PRIO (Bit 3) */ + #define R_ETHSW_PATTERN_CTRL_SET_PRIO_Msk (0x8UL) /*!< SET_PRIO (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_MODE_Pos (4UL) /*!< MODE (Bit 4) */ + #define R_ETHSW_PATTERN_CTRL_MODE_Msk (0x30UL) /*!< MODE (Bitfield-Mask: 0x03) */ + #define R_ETHSW_PATTERN_CTRL_TIMER_SEL_OVR_Pos (6UL) /*!< TIMER_SEL_OVR (Bit 6) */ + #define R_ETHSW_PATTERN_CTRL_TIMER_SEL_OVR_Msk (0x40UL) /*!< TIMER_SEL_OVR (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_FORCE_FORWARD_Pos (7UL) /*!< FORCE_FORWARD (Bit 7) */ + #define R_ETHSW_PATTERN_CTRL_FORCE_FORWARD_Msk (0x80UL) /*!< FORCE_FORWARD (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_HUBTRIGGER_Pos (8UL) /*!< HUBTRIGGER (Bit 8) */ + #define R_ETHSW_PATTERN_CTRL_HUBTRIGGER_Msk (0x100UL) /*!< HUBTRIGGER (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_MATCH_RED_Pos (9UL) /*!< MATCH_RED (Bit 9) */ + #define R_ETHSW_PATTERN_CTRL_MATCH_RED_Msk (0x200UL) /*!< MATCH_RED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_MATCH_NOT_RED_Pos (10UL) /*!< MATCH_NOT_RED (Bit 10) */ + #define R_ETHSW_PATTERN_CTRL_MATCH_NOT_RED_Msk (0x400UL) /*!< MATCH_NOT_RED (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_VLAN_SKIP_Pos (11UL) /*!< VLAN_SKIP (Bit 11) */ + #define R_ETHSW_PATTERN_CTRL_VLAN_SKIP_Msk (0x800UL) /*!< VLAN_SKIP (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_PRIORITY_Pos (12UL) /*!< PRIORITY (Bit 12) */ + #define R_ETHSW_PATTERN_CTRL_PRIORITY_Msk (0x7000UL) /*!< PRIORITY (Bitfield-Mask: 0x07) */ + #define R_ETHSW_PATTERN_CTRL_LEARNING_DIS_Pos (15UL) /*!< LEARNING_DIS (Bit 15) */ + #define R_ETHSW_PATTERN_CTRL_LEARNING_DIS_Msk (0x8000UL) /*!< LEARNING_DIS (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_PORTMASK_Pos (16UL) /*!< PORTMASK (Bit 16) */ + #define R_ETHSW_PATTERN_CTRL_PORTMASK_Msk (0xf0000UL) /*!< PORTMASK (Bitfield-Mask: 0x0f) */ + #define R_ETHSW_PATTERN_CTRL_IMC_TRIGGER_Pos (22UL) /*!< IMC_TRIGGER (Bit 22) */ + #define R_ETHSW_PATTERN_CTRL_IMC_TRIGGER_Msk (0x400000UL) /*!< IMC_TRIGGER (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_IMC_TRIGGER_DLY_Pos (23UL) /*!< IMC_TRIGGER_DLY (Bit 23) */ + #define R_ETHSW_PATTERN_CTRL_IMC_TRIGGER_DLY_Msk (0x800000UL) /*!< IMC_TRIGGER_DLY (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_SWAP_BYTES_Pos (24UL) /*!< SWAP_BYTES (Bit 24) */ + #define R_ETHSW_PATTERN_CTRL_SWAP_BYTES_Msk (0x1000000UL) /*!< SWAP_BYTES (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_MATCH_LT_Pos (25UL) /*!< MATCH_LT (Bit 25) */ + #define R_ETHSW_PATTERN_CTRL_MATCH_LT_Msk (0x2000000UL) /*!< MATCH_LT (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_TIMER_SEL_Pos (26UL) /*!< TIMER_SEL (Bit 26) */ + #define R_ETHSW_PATTERN_CTRL_TIMER_SEL_Msk (0x4000000UL) /*!< TIMER_SEL (Bitfield-Mask: 0x01) */ + #define R_ETHSW_PATTERN_CTRL_QUEUESEL_Pos (28UL) /*!< QUEUESEL (Bit 28) */ + #define R_ETHSW_PATTERN_CTRL_QUEUESEL_Msk (0xf0000000UL) /*!< QUEUESEL (Bitfield-Mask: 0x0f) */ +/* ================================================== PATTERN_IRQ_CONTROL ================================================== */ + #define R_ETHSW_PATTERN_IRQ_CONTROL_MATCHINT_Pos (0UL) /*!< MATCHINT (Bit 0) */ + #define R_ETHSW_PATTERN_IRQ_CONTROL_MATCHINT_Msk (0xfffUL) /*!< MATCHINT (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_PATTERN_IRQ_CONTROL_ERROR_INT_Pos (16UL) /*!< ERROR_INT (Bit 16) */ + #define R_ETHSW_PATTERN_IRQ_CONTROL_ERROR_INT_Msk (0xf0000UL) /*!< ERROR_INT (Bitfield-Mask: 0x0f) */ +/* ================================================= PATTERN_IRQ_STAT_ACK ================================================== */ + #define R_ETHSW_PATTERN_IRQ_STAT_ACK_MATCHINT_Pos (0UL) /*!< MATCHINT (Bit 0) */ + #define R_ETHSW_PATTERN_IRQ_STAT_ACK_MATCHINT_Msk (0xfffUL) /*!< MATCHINT (Bitfield-Mask: 0xfff) */ + #define R_ETHSW_PATTERN_IRQ_STAT_ACK_ERROR_INT_Pos (16UL) /*!< ERROR_INT (Bit 16) */ + #define R_ETHSW_PATTERN_IRQ_STAT_ACK_ERROR_INT_Msk (0xf0000UL) /*!< ERROR_INT (Bitfield-Mask: 0x0f) */ +/* ====================================================== PTRN_VLANID ====================================================== */ + #define R_ETHSW_PTRN_VLANID_PTRN_VLANID_Pos (0UL) /*!< PTRN_VLANID (Bit 0) */ + #define R_ETHSW_PTRN_VLANID_PTRN_VLANID_Msk (0xffffUL) /*!< PTRN_VLANID (Bitfield-Mask: 0xffff) */ +/* ====================================================== PATTERN_SEL ====================================================== */ + #define R_ETHSW_PATTERN_SEL_PATTERN_SEL_Pos (0UL) /*!< PATTERN_SEL (Bit 0) */ + #define R_ETHSW_PATTERN_SEL_PATTERN_SEL_Msk (0xfUL) /*!< PATTERN_SEL (Bitfield-Mask: 0x0f) */ +/* ====================================================== PTRN_CMP_30 ====================================================== */ + #define R_ETHSW_PTRN_CMP_30_PTRN_CMP_30_Pos (0UL) /*!< PTRN_CMP_30 (Bit 0) */ + #define R_ETHSW_PTRN_CMP_30_PTRN_CMP_30_Msk (0xffffffffUL) /*!< PTRN_CMP_30 (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== PTRN_CMP_74 ====================================================== */ + #define R_ETHSW_PTRN_CMP_74_PTRN_CMP_74_Pos (0UL) /*!< PTRN_CMP_74 (Bit 0) */ + #define R_ETHSW_PTRN_CMP_74_PTRN_CMP_74_Msk (0xffffffffUL) /*!< PTRN_CMP_74 (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== PTRN_CMP_118 ====================================================== */ + #define R_ETHSW_PTRN_CMP_118_PTRN_CMP_118_Pos (0UL) /*!< PTRN_CMP_118 (Bit 0) */ + #define R_ETHSW_PTRN_CMP_118_PTRN_CMP_118_Msk (0xffffffffUL) /*!< PTRN_CMP_118 (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== PTRN_MSK_30 ====================================================== */ + #define R_ETHSW_PTRN_MSK_30_PTRN_MSK_30_Pos (0UL) /*!< PTRN_MSK_30 (Bit 0) */ + #define R_ETHSW_PTRN_MSK_30_PTRN_MSK_30_Msk (0xffffffffUL) /*!< PTRN_MSK_30 (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== PTRN_MSK_74 ====================================================== */ + #define R_ETHSW_PTRN_MSK_74_PTRN_MSK_74_Pos (0UL) /*!< PTRN_MSK_74 (Bit 0) */ + #define R_ETHSW_PTRN_MSK_74_PTRN_MSK_74_Msk (0xffffffffUL) /*!< PTRN_MSK_74 (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== PTRN_MSK_118 ====================================================== */ + #define R_ETHSW_PTRN_MSK_118_PTRN_MSK_118_Pos (0UL) /*!< PTRN_MSK_118 (Bit 0) */ + #define R_ETHSW_PTRN_MSK_118_PTRN_MSK_118_Msk (0xffffffffUL) /*!< PTRN_MSK_118 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ R_ESC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= TYPE ========================================================== */ + #define R_ESC_TYPE_TYPE_Pos (0UL) /*!< TYPE (Bit 0) */ + #define R_ESC_TYPE_TYPE_Msk (0xffUL) /*!< TYPE (Bitfield-Mask: 0xff) */ +/* ======================================================= REVISION ======================================================== */ + #define R_ESC_REVISION_REV_Pos (0UL) /*!< REV (Bit 0) */ + #define R_ESC_REVISION_REV_Msk (0xffUL) /*!< REV (Bitfield-Mask: 0xff) */ +/* ========================================================= BUILD ========================================================= */ + #define R_ESC_BUILD_BUILD_Pos (0UL) /*!< BUILD (Bit 0) */ + #define R_ESC_BUILD_BUILD_Msk (0xffUL) /*!< BUILD (Bitfield-Mask: 0xff) */ +/* ======================================================= FMMU_NUM ======================================================== */ + #define R_ESC_FMMU_NUM_NUMFMMU_Pos (0UL) /*!< NUMFMMU (Bit 0) */ + #define R_ESC_FMMU_NUM_NUMFMMU_Msk (0xffUL) /*!< NUMFMMU (Bitfield-Mask: 0xff) */ +/* ===================================================== SYNC_MANAGER ====================================================== */ + #define R_ESC_SYNC_MANAGER_NUMSYNC_Pos (0UL) /*!< NUMSYNC (Bit 0) */ + #define R_ESC_SYNC_MANAGER_NUMSYNC_Msk (0xffUL) /*!< NUMSYNC (Bitfield-Mask: 0xff) */ +/* ======================================================= RAM_SIZE ======================================================== */ + #define R_ESC_RAM_SIZE_RAMSIZE_Pos (0UL) /*!< RAMSIZE (Bit 0) */ + #define R_ESC_RAM_SIZE_RAMSIZE_Msk (0xffUL) /*!< RAMSIZE (Bitfield-Mask: 0xff) */ +/* ======================================================= PORT_DESC ======================================================= */ + #define R_ESC_PORT_DESC_P0_Pos (0UL) /*!< P0 (Bit 0) */ + #define R_ESC_PORT_DESC_P0_Msk (0x3UL) /*!< P0 (Bitfield-Mask: 0x03) */ + #define R_ESC_PORT_DESC_P1_Pos (2UL) /*!< P1 (Bit 2) */ + #define R_ESC_PORT_DESC_P1_Msk (0xcUL) /*!< P1 (Bitfield-Mask: 0x03) */ + #define R_ESC_PORT_DESC_P2_Pos (4UL) /*!< P2 (Bit 4) */ + #define R_ESC_PORT_DESC_P2_Msk (0x30UL) /*!< P2 (Bitfield-Mask: 0x03) */ + #define R_ESC_PORT_DESC_P3_Pos (6UL) /*!< P3 (Bit 6) */ + #define R_ESC_PORT_DESC_P3_Msk (0xc0UL) /*!< P3 (Bitfield-Mask: 0x03) */ +/* ======================================================== FEATURE ======================================================== */ + #define R_ESC_FEATURE_FMMU_Pos (0UL) /*!< FMMU (Bit 0) */ + #define R_ESC_FEATURE_FMMU_Msk (0x1UL) /*!< FMMU (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_DC_Pos (2UL) /*!< DC (Bit 2) */ + #define R_ESC_FEATURE_DC_Msk (0x4UL) /*!< DC (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_DCWID_Pos (3UL) /*!< DCWID (Bit 3) */ + #define R_ESC_FEATURE_DCWID_Msk (0x8UL) /*!< DCWID (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_LINKDECMII_Pos (6UL) /*!< LINKDECMII (Bit 6) */ + #define R_ESC_FEATURE_LINKDECMII_Msk (0x40UL) /*!< LINKDECMII (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_FCS_Pos (7UL) /*!< FCS (Bit 7) */ + #define R_ESC_FEATURE_FCS_Msk (0x80UL) /*!< FCS (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_DCSYNC_Pos (8UL) /*!< DCSYNC (Bit 8) */ + #define R_ESC_FEATURE_DCSYNC_Msk (0x100UL) /*!< DCSYNC (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_LRW_Pos (9UL) /*!< LRW (Bit 9) */ + #define R_ESC_FEATURE_LRW_Msk (0x200UL) /*!< LRW (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_RWSUPP_Pos (10UL) /*!< RWSUPP (Bit 10) */ + #define R_ESC_FEATURE_RWSUPP_Msk (0x400UL) /*!< RWSUPP (Bitfield-Mask: 0x01) */ + #define R_ESC_FEATURE_FSCONFIG_Pos (11UL) /*!< FSCONFIG (Bit 11) */ + #define R_ESC_FEATURE_FSCONFIG_Msk (0x800UL) /*!< FSCONFIG (Bitfield-Mask: 0x01) */ +/* ====================================================== STATION_ADR ====================================================== */ + #define R_ESC_STATION_ADR_NODADDR_Pos (0UL) /*!< NODADDR (Bit 0) */ + #define R_ESC_STATION_ADR_NODADDR_Msk (0xffffUL) /*!< NODADDR (Bitfield-Mask: 0xffff) */ +/* ===================================================== STATION_ALIAS ===================================================== */ + #define R_ESC_STATION_ALIAS_NODALIADDR_Pos (0UL) /*!< NODALIADDR (Bit 0) */ + #define R_ESC_STATION_ALIAS_NODALIADDR_Msk (0xffffUL) /*!< NODALIADDR (Bitfield-Mask: 0xffff) */ +/* ===================================================== WR_REG_ENABLE ===================================================== */ + #define R_ESC_WR_REG_ENABLE_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_ESC_WR_REG_ENABLE_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* ==================================================== WR_REG_PROTECT ===================================================== */ + #define R_ESC_WR_REG_PROTECT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_ESC_WR_REG_PROTECT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ +/* ===================================================== ESC_WR_ENABLE ===================================================== */ + #define R_ESC_ESC_WR_ENABLE_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_ESC_ESC_WR_ENABLE_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* ==================================================== ESC_WR_PROTECT ===================================================== */ + #define R_ESC_ESC_WR_PROTECT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_ESC_ESC_WR_PROTECT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ +/* =================================================== ESC_RESET_ECAT_R ==================================================== */ + #define R_ESC_ESC_RESET_ECAT_R_RESET_ECAT_Pos (0UL) /*!< RESET_ECAT (Bit 0) */ + #define R_ESC_ESC_RESET_ECAT_R_RESET_ECAT_Msk (0x3UL) /*!< RESET_ECAT (Bitfield-Mask: 0x03) */ +/* =================================================== ESC_RESET_ECAT_W ==================================================== */ + #define R_ESC_ESC_RESET_ECAT_W_RESET_ECAT_Pos (0UL) /*!< RESET_ECAT (Bit 0) */ + #define R_ESC_ESC_RESET_ECAT_W_RESET_ECAT_Msk (0xffUL) /*!< RESET_ECAT (Bitfield-Mask: 0xff) */ +/* ==================================================== ESC_RESET_PDI_R ==================================================== */ + #define R_ESC_ESC_RESET_PDI_R_RESET_PDI_Pos (0UL) /*!< RESET_PDI (Bit 0) */ + #define R_ESC_ESC_RESET_PDI_R_RESET_PDI_Msk (0x3UL) /*!< RESET_PDI (Bitfield-Mask: 0x03) */ +/* ==================================================== ESC_RESET_PDI_W ==================================================== */ + #define R_ESC_ESC_RESET_PDI_W_RESET_PDI_Pos (0UL) /*!< RESET_PDI (Bit 0) */ + #define R_ESC_ESC_RESET_PDI_W_RESET_PDI_Msk (0xffUL) /*!< RESET_PDI (Bitfield-Mask: 0xff) */ +/* ==================================================== ESC_DL_CONTROL ===================================================== */ + #define R_ESC_ESC_DL_CONTROL_FWDRULE_Pos (0UL) /*!< FWDRULE (Bit 0) */ + #define R_ESC_ESC_DL_CONTROL_FWDRULE_Msk (0x1UL) /*!< FWDRULE (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_CONTROL_TEMPUSE_Pos (1UL) /*!< TEMPUSE (Bit 1) */ + #define R_ESC_ESC_DL_CONTROL_TEMPUSE_Msk (0x2UL) /*!< TEMPUSE (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_CONTROL_LP0_Pos (8UL) /*!< LP0 (Bit 8) */ + #define R_ESC_ESC_DL_CONTROL_LP0_Msk (0x300UL) /*!< LP0 (Bitfield-Mask: 0x03) */ + #define R_ESC_ESC_DL_CONTROL_LP1_Pos (10UL) /*!< LP1 (Bit 10) */ + #define R_ESC_ESC_DL_CONTROL_LP1_Msk (0xc00UL) /*!< LP1 (Bitfield-Mask: 0x03) */ + #define R_ESC_ESC_DL_CONTROL_LP2_Pos (12UL) /*!< LP2 (Bit 12) */ + #define R_ESC_ESC_DL_CONTROL_LP2_Msk (0x3000UL) /*!< LP2 (Bitfield-Mask: 0x03) */ + #define R_ESC_ESC_DL_CONTROL_LP3_Pos (14UL) /*!< LP3 (Bit 14) */ + #define R_ESC_ESC_DL_CONTROL_LP3_Msk (0xc000UL) /*!< LP3 (Bitfield-Mask: 0x03) */ + #define R_ESC_ESC_DL_CONTROL_RXFIFO_Pos (16UL) /*!< RXFIFO (Bit 16) */ + #define R_ESC_ESC_DL_CONTROL_RXFIFO_Msk (0x70000UL) /*!< RXFIFO (Bitfield-Mask: 0x07) */ + #define R_ESC_ESC_DL_CONTROL_STAALIAS_Pos (24UL) /*!< STAALIAS (Bit 24) */ + #define R_ESC_ESC_DL_CONTROL_STAALIAS_Msk (0x1000000UL) /*!< STAALIAS (Bitfield-Mask: 0x01) */ +/* ================================================== PHYSICAL_RW_OFFSET =================================================== */ + #define R_ESC_PHYSICAL_RW_OFFSET_RWOFFSET_Pos (0UL) /*!< RWOFFSET (Bit 0) */ + #define R_ESC_PHYSICAL_RW_OFFSET_RWOFFSET_Msk (0xffffUL) /*!< RWOFFSET (Bitfield-Mask: 0xffff) */ +/* ===================================================== ESC_DL_STATUS ===================================================== */ + #define R_ESC_ESC_DL_STATUS_PDIOPE_Pos (0UL) /*!< PDIOPE (Bit 0) */ + #define R_ESC_ESC_DL_STATUS_PDIOPE_Msk (0x1UL) /*!< PDIOPE (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_PDIWDST_Pos (1UL) /*!< PDIWDST (Bit 1) */ + #define R_ESC_ESC_DL_STATUS_PDIWDST_Msk (0x2UL) /*!< PDIWDST (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_ENHLINKD_Pos (2UL) /*!< ENHLINKD (Bit 2) */ + #define R_ESC_ESC_DL_STATUS_ENHLINKD_Msk (0x4UL) /*!< ENHLINKD (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_PHYP0_Pos (4UL) /*!< PHYP0 (Bit 4) */ + #define R_ESC_ESC_DL_STATUS_PHYP0_Msk (0x10UL) /*!< PHYP0 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_PHYP1_Pos (5UL) /*!< PHYP1 (Bit 5) */ + #define R_ESC_ESC_DL_STATUS_PHYP1_Msk (0x20UL) /*!< PHYP1 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_PHYP2_Pos (6UL) /*!< PHYP2 (Bit 6) */ + #define R_ESC_ESC_DL_STATUS_PHYP2_Msk (0x40UL) /*!< PHYP2 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_PHYP3_Pos (7UL) /*!< PHYP3 (Bit 7) */ + #define R_ESC_ESC_DL_STATUS_PHYP3_Msk (0x80UL) /*!< PHYP3 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_LP0_Pos (8UL) /*!< LP0 (Bit 8) */ + #define R_ESC_ESC_DL_STATUS_LP0_Msk (0x100UL) /*!< LP0 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_COMP0_Pos (9UL) /*!< COMP0 (Bit 9) */ + #define R_ESC_ESC_DL_STATUS_COMP0_Msk (0x200UL) /*!< COMP0 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_LP1_Pos (10UL) /*!< LP1 (Bit 10) */ + #define R_ESC_ESC_DL_STATUS_LP1_Msk (0x400UL) /*!< LP1 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_COMP1_Pos (11UL) /*!< COMP1 (Bit 11) */ + #define R_ESC_ESC_DL_STATUS_COMP1_Msk (0x800UL) /*!< COMP1 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_LP2_Pos (12UL) /*!< LP2 (Bit 12) */ + #define R_ESC_ESC_DL_STATUS_LP2_Msk (0x1000UL) /*!< LP2 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_COMP2_Pos (13UL) /*!< COMP2 (Bit 13) */ + #define R_ESC_ESC_DL_STATUS_COMP2_Msk (0x2000UL) /*!< COMP2 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_LP3_Pos (14UL) /*!< LP3 (Bit 14) */ + #define R_ESC_ESC_DL_STATUS_LP3_Msk (0x4000UL) /*!< LP3 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_DL_STATUS_COMP3_Pos (15UL) /*!< COMP3 (Bit 15) */ + #define R_ESC_ESC_DL_STATUS_COMP3_Msk (0x8000UL) /*!< COMP3 (Bitfield-Mask: 0x01) */ +/* ====================================================== AL_CONTROL ======================================================= */ + #define R_ESC_AL_CONTROL_INISTATE_Pos (0UL) /*!< INISTATE (Bit 0) */ + #define R_ESC_AL_CONTROL_INISTATE_Msk (0xfUL) /*!< INISTATE (Bitfield-Mask: 0x0f) */ + #define R_ESC_AL_CONTROL_ERRINDACK_Pos (4UL) /*!< ERRINDACK (Bit 4) */ + #define R_ESC_AL_CONTROL_ERRINDACK_Msk (0x10UL) /*!< ERRINDACK (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_CONTROL_DEVICEID_Pos (5UL) /*!< DEVICEID (Bit 5) */ + #define R_ESC_AL_CONTROL_DEVICEID_Msk (0x20UL) /*!< DEVICEID (Bitfield-Mask: 0x01) */ +/* ======================================================= AL_STATUS ======================================================= */ + #define R_ESC_AL_STATUS_ACTSTATE_Pos (0UL) /*!< ACTSTATE (Bit 0) */ + #define R_ESC_AL_STATUS_ACTSTATE_Msk (0xfUL) /*!< ACTSTATE (Bitfield-Mask: 0x0f) */ + #define R_ESC_AL_STATUS_ERR_Pos (4UL) /*!< ERR (Bit 4) */ + #define R_ESC_AL_STATUS_ERR_Msk (0x10UL) /*!< ERR (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_STATUS_DEVICEID_Pos (5UL) /*!< DEVICEID (Bit 5) */ + #define R_ESC_AL_STATUS_DEVICEID_Msk (0x20UL) /*!< DEVICEID (Bitfield-Mask: 0x01) */ +/* ==================================================== AL_STATUS_CODE ===================================================== */ + #define R_ESC_AL_STATUS_CODE_STATUSCODE_Pos (0UL) /*!< STATUSCODE (Bit 0) */ + #define R_ESC_AL_STATUS_CODE_STATUSCODE_Msk (0xffffUL) /*!< STATUSCODE (Bitfield-Mask: 0xffff) */ +/* =================================================== RUN_LED_OVERRIDE ==================================================== */ + #define R_ESC_RUN_LED_OVERRIDE_LEDCODE_Pos (0UL) /*!< LEDCODE (Bit 0) */ + #define R_ESC_RUN_LED_OVERRIDE_LEDCODE_Msk (0xfUL) /*!< LEDCODE (Bitfield-Mask: 0x0f) */ + #define R_ESC_RUN_LED_OVERRIDE_OVERRIDEEN_Pos (4UL) /*!< OVERRIDEEN (Bit 4) */ + #define R_ESC_RUN_LED_OVERRIDE_OVERRIDEEN_Msk (0x10UL) /*!< OVERRIDEEN (Bitfield-Mask: 0x01) */ +/* =================================================== ERR_LED_OVERRIDE ==================================================== */ + #define R_ESC_ERR_LED_OVERRIDE_LEDCODE_Pos (0UL) /*!< LEDCODE (Bit 0) */ + #define R_ESC_ERR_LED_OVERRIDE_LEDCODE_Msk (0xfUL) /*!< LEDCODE (Bitfield-Mask: 0x0f) */ + #define R_ESC_ERR_LED_OVERRIDE_OVERRIDEEN_Pos (4UL) /*!< OVERRIDEEN (Bit 4) */ + #define R_ESC_ERR_LED_OVERRIDE_OVERRIDEEN_Msk (0x10UL) /*!< OVERRIDEEN (Bitfield-Mask: 0x01) */ +/* ====================================================== PDI_CONTROL ====================================================== */ + #define R_ESC_PDI_CONTROL_PDI_Pos (0UL) /*!< PDI (Bit 0) */ + #define R_ESC_PDI_CONTROL_PDI_Msk (0xffUL) /*!< PDI (Bitfield-Mask: 0xff) */ +/* ====================================================== ESC_CONFIG ======================================================= */ + #define R_ESC_ESC_CONFIG_DEVEMU_Pos (0UL) /*!< DEVEMU (Bit 0) */ + #define R_ESC_ESC_CONFIG_DEVEMU_Msk (0x1UL) /*!< DEVEMU (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_CONFIG_ENLALLP_Pos (1UL) /*!< ENLALLP (Bit 1) */ + #define R_ESC_ESC_CONFIG_ENLALLP_Msk (0x2UL) /*!< ENLALLP (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_CONFIG_DCSYNC_Pos (2UL) /*!< DCSYNC (Bit 2) */ + #define R_ESC_ESC_CONFIG_DCSYNC_Msk (0x4UL) /*!< DCSYNC (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_CONFIG_DCLATCH_Pos (3UL) /*!< DCLATCH (Bit 3) */ + #define R_ESC_ESC_CONFIG_DCLATCH_Msk (0x8UL) /*!< DCLATCH (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_CONFIG_ENLP0_Pos (4UL) /*!< ENLP0 (Bit 4) */ + #define R_ESC_ESC_CONFIG_ENLP0_Msk (0x10UL) /*!< ENLP0 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_CONFIG_ENLP1_Pos (5UL) /*!< ENLP1 (Bit 5) */ + #define R_ESC_ESC_CONFIG_ENLP1_Msk (0x20UL) /*!< ENLP1 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_CONFIG_ENLP2_Pos (6UL) /*!< ENLP2 (Bit 6) */ + #define R_ESC_ESC_CONFIG_ENLP2_Msk (0x40UL) /*!< ENLP2 (Bitfield-Mask: 0x01) */ + #define R_ESC_ESC_CONFIG_ENLP3_Pos (7UL) /*!< ENLP3 (Bit 7) */ + #define R_ESC_ESC_CONFIG_ENLP3_Msk (0x80UL) /*!< ENLP3 (Bitfield-Mask: 0x01) */ +/* ====================================================== PDI_CONFIG ======================================================= */ + #define R_ESC_PDI_CONFIG_ONCHIPBUSCLK_Pos (0UL) /*!< ONCHIPBUSCLK (Bit 0) */ + #define R_ESC_PDI_CONFIG_ONCHIPBUSCLK_Msk (0x1fUL) /*!< ONCHIPBUSCLK (Bitfield-Mask: 0x1f) */ + #define R_ESC_PDI_CONFIG_ONCHIPBUS_Pos (5UL) /*!< ONCHIPBUS (Bit 5) */ + #define R_ESC_PDI_CONFIG_ONCHIPBUS_Msk (0xe0UL) /*!< ONCHIPBUS (Bitfield-Mask: 0x07) */ +/* =================================================== SYNC_LATCH_CONFIG =================================================== */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC0OUT_Pos (0UL) /*!< SYNC0OUT (Bit 0) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC0OUT_Msk (0x3UL) /*!< SYNC0OUT (Bitfield-Mask: 0x03) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNCLAT0_Pos (2UL) /*!< SYNCLAT0 (Bit 2) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNCLAT0_Msk (0x4UL) /*!< SYNCLAT0 (Bitfield-Mask: 0x01) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC0MAP_Pos (3UL) /*!< SYNC0MAP (Bit 3) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC0MAP_Msk (0x8UL) /*!< SYNC0MAP (Bitfield-Mask: 0x01) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC1OUT_Pos (4UL) /*!< SYNC1OUT (Bit 4) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC1OUT_Msk (0x30UL) /*!< SYNC1OUT (Bitfield-Mask: 0x03) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNCLAT1_Pos (6UL) /*!< SYNCLAT1 (Bit 6) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNCLAT1_Msk (0x40UL) /*!< SYNCLAT1 (Bitfield-Mask: 0x01) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC1MAP_Pos (7UL) /*!< SYNC1MAP (Bit 7) */ + #define R_ESC_SYNC_LATCH_CONFIG_SYNC1MAP_Msk (0x80UL) /*!< SYNC1MAP (Bitfield-Mask: 0x01) */ +/* ==================================================== EXT_PDI_CONFIG ===================================================== */ + #define R_ESC_EXT_PDI_CONFIG_DATABUSWID_Pos (0UL) /*!< DATABUSWID (Bit 0) */ + #define R_ESC_EXT_PDI_CONFIG_DATABUSWID_Msk (0x3UL) /*!< DATABUSWID (Bitfield-Mask: 0x03) */ +/* ==================================================== ECAT_EVENT_MASK ==================================================== */ + #define R_ESC_ECAT_EVENT_MASK_ECATEVMASK_Pos (0UL) /*!< ECATEVMASK (Bit 0) */ + #define R_ESC_ECAT_EVENT_MASK_ECATEVMASK_Msk (0xffffUL) /*!< ECATEVMASK (Bitfield-Mask: 0xffff) */ +/* ===================================================== AL_EVENT_MASK ===================================================== */ + #define R_ESC_AL_EVENT_MASK_ALEVMASK_Pos (0UL) /*!< ALEVMASK (Bit 0) */ + #define R_ESC_AL_EVENT_MASK_ALEVMASK_Msk (0xffffffffUL) /*!< ALEVMASK (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== ECAT_EVENT_REQ ===================================================== */ + #define R_ESC_ECAT_EVENT_REQ_DCLATCH_Pos (0UL) /*!< DCLATCH (Bit 0) */ + #define R_ESC_ECAT_EVENT_REQ_DCLATCH_Msk (0x1UL) /*!< DCLATCH (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_DLSTA_Pos (2UL) /*!< DLSTA (Bit 2) */ + #define R_ESC_ECAT_EVENT_REQ_DLSTA_Msk (0x4UL) /*!< DLSTA (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_ALSTA_Pos (3UL) /*!< ALSTA (Bit 3) */ + #define R_ESC_ECAT_EVENT_REQ_ALSTA_Msk (0x8UL) /*!< ALSTA (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA0_Pos (4UL) /*!< SMSTA0 (Bit 4) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA0_Msk (0x10UL) /*!< SMSTA0 (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA1_Pos (5UL) /*!< SMSTA1 (Bit 5) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA1_Msk (0x20UL) /*!< SMSTA1 (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA2_Pos (6UL) /*!< SMSTA2 (Bit 6) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA2_Msk (0x40UL) /*!< SMSTA2 (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA3_Pos (7UL) /*!< SMSTA3 (Bit 7) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA3_Msk (0x80UL) /*!< SMSTA3 (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA4_Pos (8UL) /*!< SMSTA4 (Bit 8) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA4_Msk (0x100UL) /*!< SMSTA4 (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA5_Pos (9UL) /*!< SMSTA5 (Bit 9) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA5_Msk (0x200UL) /*!< SMSTA5 (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA6_Pos (10UL) /*!< SMSTA6 (Bit 10) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA6_Msk (0x400UL) /*!< SMSTA6 (Bitfield-Mask: 0x01) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA7_Pos (11UL) /*!< SMSTA7 (Bit 11) */ + #define R_ESC_ECAT_EVENT_REQ_SMSTA7_Msk (0x800UL) /*!< SMSTA7 (Bitfield-Mask: 0x01) */ +/* ===================================================== AL_EVENT_REQ ====================================================== */ + #define R_ESC_AL_EVENT_REQ_ALCTRL_Pos (0UL) /*!< ALCTRL (Bit 0) */ + #define R_ESC_AL_EVENT_REQ_ALCTRL_Msk (0x1UL) /*!< ALCTRL (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_DCLATCH_Pos (1UL) /*!< DCLATCH (Bit 1) */ + #define R_ESC_AL_EVENT_REQ_DCLATCH_Msk (0x2UL) /*!< DCLATCH (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_DCSYNC0STA_Pos (2UL) /*!< DCSYNC0STA (Bit 2) */ + #define R_ESC_AL_EVENT_REQ_DCSYNC0STA_Msk (0x4UL) /*!< DCSYNC0STA (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_DCSYNC1STA_Pos (3UL) /*!< DCSYNC1STA (Bit 3) */ + #define R_ESC_AL_EVENT_REQ_DCSYNC1STA_Msk (0x8UL) /*!< DCSYNC1STA (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SYNCACT_Pos (4UL) /*!< SYNCACT (Bit 4) */ + #define R_ESC_AL_EVENT_REQ_SYNCACT_Msk (0x10UL) /*!< SYNCACT (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_WDPD_Pos (6UL) /*!< WDPD (Bit 6) */ + #define R_ESC_AL_EVENT_REQ_WDPD_Msk (0x40UL) /*!< WDPD (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT0_Pos (8UL) /*!< SMINT0 (Bit 8) */ + #define R_ESC_AL_EVENT_REQ_SMINT0_Msk (0x100UL) /*!< SMINT0 (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT1_Pos (9UL) /*!< SMINT1 (Bit 9) */ + #define R_ESC_AL_EVENT_REQ_SMINT1_Msk (0x200UL) /*!< SMINT1 (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT2_Pos (10UL) /*!< SMINT2 (Bit 10) */ + #define R_ESC_AL_EVENT_REQ_SMINT2_Msk (0x400UL) /*!< SMINT2 (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT3_Pos (11UL) /*!< SMINT3 (Bit 11) */ + #define R_ESC_AL_EVENT_REQ_SMINT3_Msk (0x800UL) /*!< SMINT3 (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT4_Pos (12UL) /*!< SMINT4 (Bit 12) */ + #define R_ESC_AL_EVENT_REQ_SMINT4_Msk (0x1000UL) /*!< SMINT4 (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT5_Pos (13UL) /*!< SMINT5 (Bit 13) */ + #define R_ESC_AL_EVENT_REQ_SMINT5_Msk (0x2000UL) /*!< SMINT5 (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT6_Pos (14UL) /*!< SMINT6 (Bit 14) */ + #define R_ESC_AL_EVENT_REQ_SMINT6_Msk (0x4000UL) /*!< SMINT6 (Bitfield-Mask: 0x01) */ + #define R_ESC_AL_EVENT_REQ_SMINT7_Pos (15UL) /*!< SMINT7 (Bit 15) */ + #define R_ESC_AL_EVENT_REQ_SMINT7_Msk (0x8000UL) /*!< SMINT7 (Bitfield-Mask: 0x01) */ +/* ===================================================== RX_ERR_COUNT ====================================================== */ + #define R_ESC_RX_ERR_COUNT_INVFRMCNT_Pos (0UL) /*!< INVFRMCNT (Bit 0) */ + #define R_ESC_RX_ERR_COUNT_INVFRMCNT_Msk (0xffUL) /*!< INVFRMCNT (Bitfield-Mask: 0xff) */ + #define R_ESC_RX_ERR_COUNT_RXERRCNT_Pos (8UL) /*!< RXERRCNT (Bit 8) */ + #define R_ESC_RX_ERR_COUNT_RXERRCNT_Msk (0xff00UL) /*!< RXERRCNT (Bitfield-Mask: 0xff) */ +/* =================================================== FWD_RX_ERR_COUNT ==================================================== */ + #define R_ESC_FWD_RX_ERR_COUNT_FWDERRCNT_Pos (0UL) /*!< FWDERRCNT (Bit 0) */ + #define R_ESC_FWD_RX_ERR_COUNT_FWDERRCNT_Msk (0xffUL) /*!< FWDERRCNT (Bitfield-Mask: 0xff) */ +/* ================================================== ECAT_PROC_ERR_COUNT ================================================== */ + #define R_ESC_ECAT_PROC_ERR_COUNT_EPUERRCNT_Pos (0UL) /*!< EPUERRCNT (Bit 0) */ + #define R_ESC_ECAT_PROC_ERR_COUNT_EPUERRCNT_Msk (0xffUL) /*!< EPUERRCNT (Bitfield-Mask: 0xff) */ +/* ===================================================== PDI_ERR_COUNT ===================================================== */ + #define R_ESC_PDI_ERR_COUNT_PDIERRCNT_Pos (0UL) /*!< PDIERRCNT (Bit 0) */ + #define R_ESC_PDI_ERR_COUNT_PDIERRCNT_Msk (0xffUL) /*!< PDIERRCNT (Bitfield-Mask: 0xff) */ +/* ==================================================== LOST_LINK_COUNT ==================================================== */ + #define R_ESC_LOST_LINK_COUNT_LOSTLINKCNT_Pos (0UL) /*!< LOSTLINKCNT (Bit 0) */ + #define R_ESC_LOST_LINK_COUNT_LOSTLINKCNT_Msk (0xffUL) /*!< LOSTLINKCNT (Bitfield-Mask: 0xff) */ +/* ======================================================= WD_DIVIDE ======================================================= */ + #define R_ESC_WD_DIVIDE_WDDIV_Pos (0UL) /*!< WDDIV (Bit 0) */ + #define R_ESC_WD_DIVIDE_WDDIV_Msk (0xffffUL) /*!< WDDIV (Bitfield-Mask: 0xffff) */ +/* ======================================================== WDT_PDI ======================================================== */ + #define R_ESC_WDT_PDI_WDTIMPDI_Pos (0UL) /*!< WDTIMPDI (Bit 0) */ + #define R_ESC_WDT_PDI_WDTIMPDI_Msk (0xffffUL) /*!< WDTIMPDI (Bitfield-Mask: 0xffff) */ +/* ======================================================= WDT_DATA ======================================================== */ + #define R_ESC_WDT_DATA_WDTIMPD_Pos (0UL) /*!< WDTIMPD (Bit 0) */ + #define R_ESC_WDT_DATA_WDTIMPD_Msk (0xffffUL) /*!< WDTIMPD (Bitfield-Mask: 0xffff) */ +/* ======================================================= WDS_DATA ======================================================== */ + #define R_ESC_WDS_DATA_WDSTAPD_Pos (0UL) /*!< WDSTAPD (Bit 0) */ + #define R_ESC_WDS_DATA_WDSTAPD_Msk (0x1UL) /*!< WDSTAPD (Bitfield-Mask: 0x01) */ +/* ======================================================= WDC_DATA ======================================================== */ + #define R_ESC_WDC_DATA_WDCNTPD_Pos (0UL) /*!< WDCNTPD (Bit 0) */ + #define R_ESC_WDC_DATA_WDCNTPD_Msk (0xffUL) /*!< WDCNTPD (Bitfield-Mask: 0xff) */ +/* ======================================================== WDC_PDI ======================================================== */ + #define R_ESC_WDC_PDI_WDCNTPDI_Pos (0UL) /*!< WDCNTPDI (Bit 0) */ + #define R_ESC_WDC_PDI_WDCNTPDI_Msk (0xffUL) /*!< WDCNTPDI (Bitfield-Mask: 0xff) */ +/* ======================================================= EEP_CONF ======================================================== */ + #define R_ESC_EEP_CONF_CTRLPDI_Pos (0UL) /*!< CTRLPDI (Bit 0) */ + #define R_ESC_EEP_CONF_CTRLPDI_Msk (0x1UL) /*!< CTRLPDI (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONF_FORCEECAT_Pos (1UL) /*!< FORCEECAT (Bit 1) */ + #define R_ESC_EEP_CONF_FORCEECAT_Msk (0x2UL) /*!< FORCEECAT (Bitfield-Mask: 0x01) */ +/* ======================================================= EEP_STATE ======================================================= */ + #define R_ESC_EEP_STATE_PDIACCESS_Pos (0UL) /*!< PDIACCESS (Bit 0) */ + #define R_ESC_EEP_STATE_PDIACCESS_Msk (0x1UL) /*!< PDIACCESS (Bitfield-Mask: 0x01) */ +/* ===================================================== EEP_CONT_STAT ===================================================== */ + #define R_ESC_EEP_CONT_STAT_ECATWREN_Pos (0UL) /*!< ECATWREN (Bit 0) */ + #define R_ESC_EEP_CONT_STAT_ECATWREN_Msk (0x1UL) /*!< ECATWREN (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONT_STAT_READBYTE_Pos (6UL) /*!< READBYTE (Bit 6) */ + #define R_ESC_EEP_CONT_STAT_READBYTE_Msk (0x40UL) /*!< READBYTE (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONT_STAT_PROMSIZE_Pos (7UL) /*!< PROMSIZE (Bit 7) */ + #define R_ESC_EEP_CONT_STAT_PROMSIZE_Msk (0x80UL) /*!< PROMSIZE (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONT_STAT_COMMAND_Pos (8UL) /*!< COMMAND (Bit 8) */ + #define R_ESC_EEP_CONT_STAT_COMMAND_Msk (0x700UL) /*!< COMMAND (Bitfield-Mask: 0x07) */ + #define R_ESC_EEP_CONT_STAT_CKSUMERR_Pos (11UL) /*!< CKSUMERR (Bit 11) */ + #define R_ESC_EEP_CONT_STAT_CKSUMERR_Msk (0x800UL) /*!< CKSUMERR (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONT_STAT_LOADSTA_Pos (12UL) /*!< LOADSTA (Bit 12) */ + #define R_ESC_EEP_CONT_STAT_LOADSTA_Msk (0x1000UL) /*!< LOADSTA (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONT_STAT_ACKCMDERR_Pos (13UL) /*!< ACKCMDERR (Bit 13) */ + #define R_ESC_EEP_CONT_STAT_ACKCMDERR_Msk (0x2000UL) /*!< ACKCMDERR (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONT_STAT_WRENERR_Pos (14UL) /*!< WRENERR (Bit 14) */ + #define R_ESC_EEP_CONT_STAT_WRENERR_Msk (0x4000UL) /*!< WRENERR (Bitfield-Mask: 0x01) */ + #define R_ESC_EEP_CONT_STAT_BUSY_Pos (15UL) /*!< BUSY (Bit 15) */ + #define R_ESC_EEP_CONT_STAT_BUSY_Msk (0x8000UL) /*!< BUSY (Bitfield-Mask: 0x01) */ +/* ======================================================== EEP_ADR ======================================================== */ + #define R_ESC_EEP_ADR_ADDRESS_Pos (0UL) /*!< ADDRESS (Bit 0) */ + #define R_ESC_EEP_ADR_ADDRESS_Msk (0xffffffffUL) /*!< ADDRESS (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= EEP_DATA ======================================================== */ + #define R_ESC_EEP_DATA_LODATA_Pos (0UL) /*!< LODATA (Bit 0) */ + #define R_ESC_EEP_DATA_LODATA_Msk (0xffffUL) /*!< LODATA (Bitfield-Mask: 0xffff) */ + #define R_ESC_EEP_DATA_HIDATA_Pos (16UL) /*!< HIDATA (Bit 16) */ + #define R_ESC_EEP_DATA_HIDATA_Msk (0xffff0000UL) /*!< HIDATA (Bitfield-Mask: 0xffff) */ +/* ===================================================== MII_CONT_STAT ===================================================== */ + #define R_ESC_MII_CONT_STAT_WREN_Pos (0UL) /*!< WREN (Bit 0) */ + #define R_ESC_MII_CONT_STAT_WREN_Msk (0x1UL) /*!< WREN (Bitfield-Mask: 0x01) */ + #define R_ESC_MII_CONT_STAT_PDICTRL_Pos (1UL) /*!< PDICTRL (Bit 1) */ + #define R_ESC_MII_CONT_STAT_PDICTRL_Msk (0x2UL) /*!< PDICTRL (Bitfield-Mask: 0x01) */ + #define R_ESC_MII_CONT_STAT_MILINK_Pos (2UL) /*!< MILINK (Bit 2) */ + #define R_ESC_MII_CONT_STAT_MILINK_Msk (0x4UL) /*!< MILINK (Bitfield-Mask: 0x01) */ + #define R_ESC_MII_CONT_STAT_PHYOFFSET_Pos (3UL) /*!< PHYOFFSET (Bit 3) */ + #define R_ESC_MII_CONT_STAT_PHYOFFSET_Msk (0xf8UL) /*!< PHYOFFSET (Bitfield-Mask: 0x1f) */ + #define R_ESC_MII_CONT_STAT_COMMAND_Pos (8UL) /*!< COMMAND (Bit 8) */ + #define R_ESC_MII_CONT_STAT_COMMAND_Msk (0x300UL) /*!< COMMAND (Bitfield-Mask: 0x03) */ + #define R_ESC_MII_CONT_STAT_READERR_Pos (13UL) /*!< READERR (Bit 13) */ + #define R_ESC_MII_CONT_STAT_READERR_Msk (0x2000UL) /*!< READERR (Bitfield-Mask: 0x01) */ + #define R_ESC_MII_CONT_STAT_CMDERR_Pos (14UL) /*!< CMDERR (Bit 14) */ + #define R_ESC_MII_CONT_STAT_CMDERR_Msk (0x4000UL) /*!< CMDERR (Bitfield-Mask: 0x01) */ + #define R_ESC_MII_CONT_STAT_BUSY_Pos (15UL) /*!< BUSY (Bit 15) */ + #define R_ESC_MII_CONT_STAT_BUSY_Msk (0x8000UL) /*!< BUSY (Bitfield-Mask: 0x01) */ +/* ======================================================== PHY_ADR ======================================================== */ + #define R_ESC_PHY_ADR_PHYADDR_Pos (0UL) /*!< PHYADDR (Bit 0) */ + #define R_ESC_PHY_ADR_PHYADDR_Msk (0x1fUL) /*!< PHYADDR (Bitfield-Mask: 0x1f) */ +/* ====================================================== PHY_REG_ADR ====================================================== */ + #define R_ESC_PHY_REG_ADR_PHYREGADDR_Pos (0UL) /*!< PHYREGADDR (Bit 0) */ + #define R_ESC_PHY_REG_ADR_PHYREGADDR_Msk (0x1fUL) /*!< PHYREGADDR (Bitfield-Mask: 0x1f) */ +/* ======================================================= PHY_DATA ======================================================== */ + #define R_ESC_PHY_DATA_PHYREGDATA_Pos (0UL) /*!< PHYREGDATA (Bit 0) */ + #define R_ESC_PHY_DATA_PHYREGDATA_Msk (0xffffUL) /*!< PHYREGDATA (Bitfield-Mask: 0xffff) */ +/* =================================================== MII_ECAT_ACS_STAT =================================================== */ + #define R_ESC_MII_ECAT_ACS_STAT_ACSMII_Pos (0UL) /*!< ACSMII (Bit 0) */ + #define R_ESC_MII_ECAT_ACS_STAT_ACSMII_Msk (0x1UL) /*!< ACSMII (Bitfield-Mask: 0x01) */ +/* =================================================== MII_PDI_ACS_STAT ==================================================== */ + #define R_ESC_MII_PDI_ACS_STAT_ACSMII_Pos (0UL) /*!< ACSMII (Bit 0) */ + #define R_ESC_MII_PDI_ACS_STAT_ACSMII_Msk (0x1UL) /*!< ACSMII (Bitfield-Mask: 0x01) */ + #define R_ESC_MII_PDI_ACS_STAT_FORPDI_Pos (1UL) /*!< FORPDI (Bit 1) */ + #define R_ESC_MII_PDI_ACS_STAT_FORPDI_Msk (0x2UL) /*!< FORPDI (Bitfield-Mask: 0x01) */ +/* =================================================== DC_RCV_TIME_PORT ==================================================== */ + #define R_ESC_DC_RCV_TIME_PORT_RCVTIME0_Pos (0UL) /*!< RCVTIME0 (Bit 0) */ + #define R_ESC_DC_RCV_TIME_PORT_RCVTIME0_Msk (0xffffffffUL) /*!< RCVTIME0 (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== DC_SYS_TIME_L ===================================================== */ +/* ===================================================== DC_SYS_TIME_H ===================================================== */ +/* ================================================== DC_RCV_TIME_UNIT_L =================================================== */ +/* ================================================== DC_RCV_TIME_UNIT_H =================================================== */ +/* ================================================= DC_SYS_TIME_OFFSET_L ================================================== */ +/* ================================================= DC_SYS_TIME_OFFSET_H ================================================== */ +/* =================================================== DC_SYS_TIME_DELAY =================================================== */ + #define R_ESC_DC_SYS_TIME_DELAY_SYSTIMDLY_Pos (0UL) /*!< SYSTIMDLY (Bit 0) */ + #define R_ESC_DC_SYS_TIME_DELAY_SYSTIMDLY_Msk (0xffffffffUL) /*!< SYSTIMDLY (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DC_SYS_TIME_DIFF ==================================================== */ + #define R_ESC_DC_SYS_TIME_DIFF_DIFF_Pos (0UL) /*!< DIFF (Bit 0) */ + #define R_ESC_DC_SYS_TIME_DIFF_DIFF_Msk (0x7fffffffUL) /*!< DIFF (Bitfield-Mask: 0x7fffffff) */ + #define R_ESC_DC_SYS_TIME_DIFF_LCP_Pos (31UL) /*!< LCP (Bit 31) */ + #define R_ESC_DC_SYS_TIME_DIFF_LCP_Msk (0x80000000UL) /*!< LCP (Bitfield-Mask: 0x01) */ +/* ================================================= DC_SPEED_COUNT_START ================================================== */ + #define R_ESC_DC_SPEED_COUNT_START_SPDCNTSTRT_Pos (0UL) /*!< SPDCNTSTRT (Bit 0) */ + #define R_ESC_DC_SPEED_COUNT_START_SPDCNTSTRT_Msk (0x7fffUL) /*!< SPDCNTSTRT (Bitfield-Mask: 0x7fff) */ +/* ================================================== DC_SPEED_COUNT_DIFF ================================================== */ + #define R_ESC_DC_SPEED_COUNT_DIFF_SPDCNTDIFF_Pos (0UL) /*!< SPDCNTDIFF (Bit 0) */ + #define R_ESC_DC_SPEED_COUNT_DIFF_SPDCNTDIFF_Msk (0xffffUL) /*!< SPDCNTDIFF (Bitfield-Mask: 0xffff) */ +/* ============================================== DC_SYS_TIME_DIFF_FIL_DEPTH =============================================== */ + #define R_ESC_DC_SYS_TIME_DIFF_FIL_DEPTH_SYSTIMDEP_Pos (0UL) /*!< SYSTIMDEP (Bit 0) */ + #define R_ESC_DC_SYS_TIME_DIFF_FIL_DEPTH_SYSTIMDEP_Msk (0xfUL) /*!< SYSTIMDEP (Bitfield-Mask: 0x0f) */ +/* =============================================== DC_SPEED_COUNT_FIL_DEPTH ================================================ */ + #define R_ESC_DC_SPEED_COUNT_FIL_DEPTH_CLKPERDEP_Pos (0UL) /*!< CLKPERDEP (Bit 0) */ + #define R_ESC_DC_SPEED_COUNT_FIL_DEPTH_CLKPERDEP_Msk (0xfUL) /*!< CLKPERDEP (Bitfield-Mask: 0x0f) */ +/* ====================================================== DC_CYC_CONT ====================================================== */ + #define R_ESC_DC_CYC_CONT_SYNCOUT_Pos (0UL) /*!< SYNCOUT (Bit 0) */ + #define R_ESC_DC_CYC_CONT_SYNCOUT_Msk (0x1UL) /*!< SYNCOUT (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_CYC_CONT_LATCH0_Pos (4UL) /*!< LATCH0 (Bit 4) */ + #define R_ESC_DC_CYC_CONT_LATCH0_Msk (0x10UL) /*!< LATCH0 (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_CYC_CONT_LATCH1_Pos (5UL) /*!< LATCH1 (Bit 5) */ + #define R_ESC_DC_CYC_CONT_LATCH1_Msk (0x20UL) /*!< LATCH1 (Bitfield-Mask: 0x01) */ +/* ======================================================== DC_ACT ========================================================= */ + #define R_ESC_DC_ACT_SYNCACT_Pos (0UL) /*!< SYNCACT (Bit 0) */ + #define R_ESC_DC_ACT_SYNCACT_Msk (0x1UL) /*!< SYNCACT (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_SYNC0_Pos (1UL) /*!< SYNC0 (Bit 1) */ + #define R_ESC_DC_ACT_SYNC0_Msk (0x2UL) /*!< SYNC0 (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_SYNC1_Pos (2UL) /*!< SYNC1 (Bit 2) */ + #define R_ESC_DC_ACT_SYNC1_Msk (0x4UL) /*!< SYNC1 (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_AUTOACT_Pos (3UL) /*!< AUTOACT (Bit 3) */ + #define R_ESC_DC_ACT_AUTOACT_Msk (0x8UL) /*!< AUTOACT (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_EXTSTARTTIME_Pos (4UL) /*!< EXTSTARTTIME (Bit 4) */ + #define R_ESC_DC_ACT_EXTSTARTTIME_Msk (0x10UL) /*!< EXTSTARTTIME (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_STARTTIME_Pos (5UL) /*!< STARTTIME (Bit 5) */ + #define R_ESC_DC_ACT_STARTTIME_Msk (0x20UL) /*!< STARTTIME (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_NEARFUTURE_Pos (6UL) /*!< NEARFUTURE (Bit 6) */ + #define R_ESC_DC_ACT_NEARFUTURE_Msk (0x40UL) /*!< NEARFUTURE (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_DBGPULSE_Pos (7UL) /*!< DBGPULSE (Bit 7) */ + #define R_ESC_DC_ACT_DBGPULSE_Msk (0x80UL) /*!< DBGPULSE (Bitfield-Mask: 0x01) */ +/* ===================================================== DC_PULSE_LEN ====================================================== */ + #define R_ESC_DC_PULSE_LEN_PULSELEN_Pos (0UL) /*!< PULSELEN (Bit 0) */ + #define R_ESC_DC_PULSE_LEN_PULSELEN_Msk (0xffffUL) /*!< PULSELEN (Bitfield-Mask: 0xffff) */ +/* ====================================================== DC_ACT_STAT ====================================================== */ + #define R_ESC_DC_ACT_STAT_SYNC0ACT_Pos (0UL) /*!< SYNC0ACT (Bit 0) */ + #define R_ESC_DC_ACT_STAT_SYNC0ACT_Msk (0x1UL) /*!< SYNC0ACT (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_STAT_SYNC1ACT_Pos (1UL) /*!< SYNC1ACT (Bit 1) */ + #define R_ESC_DC_ACT_STAT_SYNC1ACT_Msk (0x2UL) /*!< SYNC1ACT (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_ACT_STAT_STARTTIME_Pos (2UL) /*!< STARTTIME (Bit 2) */ + #define R_ESC_DC_ACT_STAT_STARTTIME_Msk (0x4UL) /*!< STARTTIME (Bitfield-Mask: 0x01) */ +/* ===================================================== DC_SYNC0_STAT ===================================================== */ + #define R_ESC_DC_SYNC0_STAT_SYNC0STA_Pos (0UL) /*!< SYNC0STA (Bit 0) */ + #define R_ESC_DC_SYNC0_STAT_SYNC0STA_Msk (0x1UL) /*!< SYNC0STA (Bitfield-Mask: 0x01) */ +/* ===================================================== DC_SYNC1_STAT ===================================================== */ + #define R_ESC_DC_SYNC1_STAT_SYNC1STA_Pos (0UL) /*!< SYNC1STA (Bit 0) */ + #define R_ESC_DC_SYNC1_STAT_SYNC1STA_Msk (0x1UL) /*!< SYNC1STA (Bitfield-Mask: 0x01) */ +/* ================================================== DC_CYC_START_TIME_L ================================================== */ +/* ================================================== DC_CYC_START_TIME_H ================================================== */ +/* ================================================= DC_NEXT_SYNC1_PULSE_L ================================================= */ +/* ================================================= DC_NEXT_SYNC1_PULSE_H ================================================= */ +/* =================================================== DC_SYNC0_CYC_TIME =================================================== */ + #define R_ESC_DC_SYNC0_CYC_TIME_SYNC0CYC_Pos (0UL) /*!< SYNC0CYC (Bit 0) */ + #define R_ESC_DC_SYNC0_CYC_TIME_SYNC0CYC_Msk (0xffffffffUL) /*!< SYNC0CYC (Bitfield-Mask: 0xffffffff) */ +/* =================================================== DC_SYNC1_CYC_TIME =================================================== */ + #define R_ESC_DC_SYNC1_CYC_TIME_SYNC1CYC_Pos (0UL) /*!< SYNC1CYC (Bit 0) */ + #define R_ESC_DC_SYNC1_CYC_TIME_SYNC1CYC_Msk (0xffffffffUL) /*!< SYNC1CYC (Bitfield-Mask: 0xffffffff) */ +/* ==================================================== DC_LATCH0_CONT ===================================================== */ + #define R_ESC_DC_LATCH0_CONT_POSEDGE_Pos (0UL) /*!< POSEDGE (Bit 0) */ + #define R_ESC_DC_LATCH0_CONT_POSEDGE_Msk (0x1UL) /*!< POSEDGE (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_LATCH0_CONT_NEGEDGE_Pos (1UL) /*!< NEGEDGE (Bit 1) */ + #define R_ESC_DC_LATCH0_CONT_NEGEDGE_Msk (0x2UL) /*!< NEGEDGE (Bitfield-Mask: 0x01) */ +/* ==================================================== DC_LATCH1_CONT ===================================================== */ + #define R_ESC_DC_LATCH1_CONT_POSEDGE_Pos (0UL) /*!< POSEDGE (Bit 0) */ + #define R_ESC_DC_LATCH1_CONT_POSEDGE_Msk (0x1UL) /*!< POSEDGE (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_LATCH1_CONT_NEGEDGE_Pos (1UL) /*!< NEGEDGE (Bit 1) */ + #define R_ESC_DC_LATCH1_CONT_NEGEDGE_Msk (0x2UL) /*!< NEGEDGE (Bitfield-Mask: 0x01) */ +/* ==================================================== DC_LATCH0_STAT ===================================================== */ + #define R_ESC_DC_LATCH0_STAT_EVENTPOS_Pos (0UL) /*!< EVENTPOS (Bit 0) */ + #define R_ESC_DC_LATCH0_STAT_EVENTPOS_Msk (0x1UL) /*!< EVENTPOS (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_LATCH0_STAT_EVENTNEG_Pos (1UL) /*!< EVENTNEG (Bit 1) */ + #define R_ESC_DC_LATCH0_STAT_EVENTNEG_Msk (0x2UL) /*!< EVENTNEG (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_LATCH0_STAT_PINSTATE_Pos (2UL) /*!< PINSTATE (Bit 2) */ + #define R_ESC_DC_LATCH0_STAT_PINSTATE_Msk (0x4UL) /*!< PINSTATE (Bitfield-Mask: 0x01) */ +/* ==================================================== DC_LATCH1_STAT ===================================================== */ + #define R_ESC_DC_LATCH1_STAT_EVENTPOS_Pos (0UL) /*!< EVENTPOS (Bit 0) */ + #define R_ESC_DC_LATCH1_STAT_EVENTPOS_Msk (0x1UL) /*!< EVENTPOS (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_LATCH1_STAT_EVENTNEG_Pos (1UL) /*!< EVENTNEG (Bit 1) */ + #define R_ESC_DC_LATCH1_STAT_EVENTNEG_Msk (0x2UL) /*!< EVENTNEG (Bitfield-Mask: 0x01) */ + #define R_ESC_DC_LATCH1_STAT_PINSTATE_Pos (2UL) /*!< PINSTATE (Bit 2) */ + #define R_ESC_DC_LATCH1_STAT_PINSTATE_Msk (0x4UL) /*!< PINSTATE (Bitfield-Mask: 0x01) */ +/* ================================================= DC_LATCH0_TIME_POS_L ================================================== */ +/* ================================================= DC_LATCH0_TIME_POS_H ================================================== */ +/* ================================================= DC_LATCH0_TIME_NEG_L ================================================== */ +/* ================================================= DC_LATCH0_TIME_NEG_H ================================================== */ +/* ================================================= DC_LATCH1_TIME_POS_L ================================================== */ +/* ================================================= DC_LATCH1_TIME_POS_H ================================================== */ +/* ================================================= DC_LATCH1_TIME_NEG_L ================================================== */ +/* ================================================= DC_LATCH1_TIME_NEG_H ================================================== */ +/* ================================================== DC_ECAT_CNG_EV_TIME ================================================== */ + #define R_ESC_DC_ECAT_CNG_EV_TIME_ECATCHANGE_Pos (0UL) /*!< ECATCHANGE (Bit 0) */ + #define R_ESC_DC_ECAT_CNG_EV_TIME_ECATCHANGE_Msk (0xffffffffUL) /*!< ECATCHANGE (Bitfield-Mask: 0xffffffff) */ +/* ================================================= DC_PDI_START_EV_TIME ================================================== */ + #define R_ESC_DC_PDI_START_EV_TIME_PDISTART_Pos (0UL) /*!< PDISTART (Bit 0) */ + #define R_ESC_DC_PDI_START_EV_TIME_PDISTART_Msk (0xffffffffUL) /*!< PDISTART (Bitfield-Mask: 0xffffffff) */ +/* ================================================== DC_PDI_CNG_EV_TIME =================================================== */ + #define R_ESC_DC_PDI_CNG_EV_TIME_PDICHANGE_Pos (0UL) /*!< PDICHANGE (Bit 0) */ + #define R_ESC_DC_PDI_CNG_EV_TIME_PDICHANGE_Msk (0xffffffffUL) /*!< PDICHANGE (Bitfield-Mask: 0xffffffff) */ +/* ===================================================== PRODUCT_ID_L ====================================================== */ +/* ===================================================== PRODUCT_ID_H ====================================================== */ +/* ====================================================== VENDOR_ID_L ====================================================== */ + #define R_ESC_VENDOR_ID_L_VENDORID_Pos (0UL) /*!< VENDORID (Bit 0) */ + #define R_ESC_VENDOR_ID_L_VENDORID_Msk (0xffffffffUL) /*!< VENDORID (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ R_USBHC ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== HCREVISION ======================================================= */ + #define R_USBHC_HCREVISION_REV_Pos (0UL) /*!< REV (Bit 0) */ + #define R_USBHC_HCREVISION_REV_Msk (0xffUL) /*!< REV (Bitfield-Mask: 0xff) */ +/* ======================================================= HCCONTROL ======================================================= */ + #define R_USBHC_HCCONTROL_CBSR_Pos (0UL) /*!< CBSR (Bit 0) */ + #define R_USBHC_HCCONTROL_CBSR_Msk (0x3UL) /*!< CBSR (Bitfield-Mask: 0x03) */ + #define R_USBHC_HCCONTROL_PLE_Pos (2UL) /*!< PLE (Bit 2) */ + #define R_USBHC_HCCONTROL_PLE_Msk (0x4UL) /*!< PLE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCONTROL_IE_Pos (3UL) /*!< IE (Bit 3) */ + #define R_USBHC_HCCONTROL_IE_Msk (0x8UL) /*!< IE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCONTROL_CLE_Pos (4UL) /*!< CLE (Bit 4) */ + #define R_USBHC_HCCONTROL_CLE_Msk (0x10UL) /*!< CLE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCONTROL_BLE_Pos (5UL) /*!< BLE (Bit 5) */ + #define R_USBHC_HCCONTROL_BLE_Msk (0x20UL) /*!< BLE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCONTROL_HCFS_Pos (6UL) /*!< HCFS (Bit 6) */ + #define R_USBHC_HCCONTROL_HCFS_Msk (0xc0UL) /*!< HCFS (Bitfield-Mask: 0x03) */ + #define R_USBHC_HCCONTROL_IR_Pos (8UL) /*!< IR (Bit 8) */ + #define R_USBHC_HCCONTROL_IR_Msk (0x100UL) /*!< IR (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCONTROL_RWC_Pos (9UL) /*!< RWC (Bit 9) */ + #define R_USBHC_HCCONTROL_RWC_Msk (0x200UL) /*!< RWC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCONTROL_RWE_Pos (10UL) /*!< RWE (Bit 10) */ + #define R_USBHC_HCCONTROL_RWE_Msk (0x400UL) /*!< RWE (Bitfield-Mask: 0x01) */ +/* ==================================================== HCCOMMANDSTATUS ==================================================== */ + #define R_USBHC_HCCOMMANDSTATUS_HCR_Pos (0UL) /*!< HCR (Bit 0) */ + #define R_USBHC_HCCOMMANDSTATUS_HCR_Msk (0x1UL) /*!< HCR (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCOMMANDSTATUS_CLF_Pos (1UL) /*!< CLF (Bit 1) */ + #define R_USBHC_HCCOMMANDSTATUS_CLF_Msk (0x2UL) /*!< CLF (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCOMMANDSTATUS_BLF_Pos (2UL) /*!< BLF (Bit 2) */ + #define R_USBHC_HCCOMMANDSTATUS_BLF_Msk (0x4UL) /*!< BLF (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCOMMANDSTATUS_OCR_Pos (3UL) /*!< OCR (Bit 3) */ + #define R_USBHC_HCCOMMANDSTATUS_OCR_Msk (0x8UL) /*!< OCR (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCOMMANDSTATUS_SOC_Pos (16UL) /*!< SOC (Bit 16) */ + #define R_USBHC_HCCOMMANDSTATUS_SOC_Msk (0x30000UL) /*!< SOC (Bitfield-Mask: 0x03) */ +/* =================================================== HCINTERRUPTSTATUS =================================================== */ + #define R_USBHC_HCINTERRUPTSTATUS_SO_Pos (0UL) /*!< SO (Bit 0) */ + #define R_USBHC_HCINTERRUPTSTATUS_SO_Msk (0x1UL) /*!< SO (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTSTATUS_WDH_Pos (1UL) /*!< WDH (Bit 1) */ + #define R_USBHC_HCINTERRUPTSTATUS_WDH_Msk (0x2UL) /*!< WDH (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTSTATUS_SF_Pos (2UL) /*!< SF (Bit 2) */ + #define R_USBHC_HCINTERRUPTSTATUS_SF_Msk (0x4UL) /*!< SF (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTSTATUS_RD_Pos (3UL) /*!< RD (Bit 3) */ + #define R_USBHC_HCINTERRUPTSTATUS_RD_Msk (0x8UL) /*!< RD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTSTATUS_UE_Pos (4UL) /*!< UE (Bit 4) */ + #define R_USBHC_HCINTERRUPTSTATUS_UE_Msk (0x10UL) /*!< UE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTSTATUS_FNO_Pos (5UL) /*!< FNO (Bit 5) */ + #define R_USBHC_HCINTERRUPTSTATUS_FNO_Msk (0x20UL) /*!< FNO (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTSTATUS_RHSC_Pos (6UL) /*!< RHSC (Bit 6) */ + #define R_USBHC_HCINTERRUPTSTATUS_RHSC_Msk (0x40UL) /*!< RHSC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTSTATUS_OC_Pos (30UL) /*!< OC (Bit 30) */ + #define R_USBHC_HCINTERRUPTSTATUS_OC_Msk (0x40000000UL) /*!< OC (Bitfield-Mask: 0x01) */ +/* =================================================== HCINTERRUPTENABLE =================================================== */ + #define R_USBHC_HCINTERRUPTENABLE_SOE_Pos (0UL) /*!< SOE (Bit 0) */ + #define R_USBHC_HCINTERRUPTENABLE_SOE_Msk (0x1UL) /*!< SOE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_WDHE_Pos (1UL) /*!< WDHE (Bit 1) */ + #define R_USBHC_HCINTERRUPTENABLE_WDHE_Msk (0x2UL) /*!< WDHE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_SFE_Pos (2UL) /*!< SFE (Bit 2) */ + #define R_USBHC_HCINTERRUPTENABLE_SFE_Msk (0x4UL) /*!< SFE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_RDE_Pos (3UL) /*!< RDE (Bit 3) */ + #define R_USBHC_HCINTERRUPTENABLE_RDE_Msk (0x8UL) /*!< RDE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_UEE_Pos (4UL) /*!< UEE (Bit 4) */ + #define R_USBHC_HCINTERRUPTENABLE_UEE_Msk (0x10UL) /*!< UEE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_FNOE_Pos (5UL) /*!< FNOE (Bit 5) */ + #define R_USBHC_HCINTERRUPTENABLE_FNOE_Msk (0x20UL) /*!< FNOE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_RHSCE_Pos (6UL) /*!< RHSCE (Bit 6) */ + #define R_USBHC_HCINTERRUPTENABLE_RHSCE_Msk (0x40UL) /*!< RHSCE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_OCE_Pos (30UL) /*!< OCE (Bit 30) */ + #define R_USBHC_HCINTERRUPTENABLE_OCE_Msk (0x40000000UL) /*!< OCE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTENABLE_MIE_Pos (31UL) /*!< MIE (Bit 31) */ + #define R_USBHC_HCINTERRUPTENABLE_MIE_Msk (0x80000000UL) /*!< MIE (Bitfield-Mask: 0x01) */ +/* ================================================== HCINTERRUPTDISABLE =================================================== */ + #define R_USBHC_HCINTERRUPTDISABLE_SOD_Pos (0UL) /*!< SOD (Bit 0) */ + #define R_USBHC_HCINTERRUPTDISABLE_SOD_Msk (0x1UL) /*!< SOD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_WDHD_Pos (1UL) /*!< WDHD (Bit 1) */ + #define R_USBHC_HCINTERRUPTDISABLE_WDHD_Msk (0x2UL) /*!< WDHD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_SFD_Pos (2UL) /*!< SFD (Bit 2) */ + #define R_USBHC_HCINTERRUPTDISABLE_SFD_Msk (0x4UL) /*!< SFD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_RDD_Pos (3UL) /*!< RDD (Bit 3) */ + #define R_USBHC_HCINTERRUPTDISABLE_RDD_Msk (0x8UL) /*!< RDD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_UED_Pos (4UL) /*!< UED (Bit 4) */ + #define R_USBHC_HCINTERRUPTDISABLE_UED_Msk (0x10UL) /*!< UED (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_FNOD_Pos (5UL) /*!< FNOD (Bit 5) */ + #define R_USBHC_HCINTERRUPTDISABLE_FNOD_Msk (0x20UL) /*!< FNOD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_RHSCD_Pos (6UL) /*!< RHSCD (Bit 6) */ + #define R_USBHC_HCINTERRUPTDISABLE_RHSCD_Msk (0x40UL) /*!< RHSCD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_OCD_Pos (30UL) /*!< OCD (Bit 30) */ + #define R_USBHC_HCINTERRUPTDISABLE_OCD_Msk (0x40000000UL) /*!< OCD (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCINTERRUPTDISABLE_MID_Pos (31UL) /*!< MID (Bit 31) */ + #define R_USBHC_HCINTERRUPTDISABLE_MID_Msk (0x80000000UL) /*!< MID (Bitfield-Mask: 0x01) */ +/* ======================================================== HCHCCA ========================================================= */ + #define R_USBHC_HCHCCA_RAMBA_Pos (8UL) /*!< RAMBA (Bit 8) */ + #define R_USBHC_HCHCCA_RAMBA_Msk (0xffffff00UL) /*!< RAMBA (Bitfield-Mask: 0xffffff) */ +/* ================================================== HCPERIODCCURRENTIED ================================================== */ + #define R_USBHC_HCPERIODCCURRENTIED_PCED_Pos (4UL) /*!< PCED (Bit 4) */ + #define R_USBHC_HCPERIODCCURRENTIED_PCED_Msk (0xfffffff0UL) /*!< PCED (Bitfield-Mask: 0xfffffff) */ +/* ==================================================== HCCONTROLHEADED ==================================================== */ + #define R_USBHC_HCCONTROLHEADED_CHED_Pos (4UL) /*!< CHED (Bit 4) */ + #define R_USBHC_HCCONTROLHEADED_CHED_Msk (0xfffffff0UL) /*!< CHED (Bitfield-Mask: 0xfffffff) */ +/* ================================================== HCCONTROLCURRENTED =================================================== */ + #define R_USBHC_HCCONTROLCURRENTED_CCED_Pos (4UL) /*!< CCED (Bit 4) */ + #define R_USBHC_HCCONTROLCURRENTED_CCED_Msk (0xfffffff0UL) /*!< CCED (Bitfield-Mask: 0xfffffff) */ +/* ===================================================== HCBULKHEADED ====================================================== */ + #define R_USBHC_HCBULKHEADED_BHED_Pos (4UL) /*!< BHED (Bit 4) */ + #define R_USBHC_HCBULKHEADED_BHED_Msk (0xfffffff0UL) /*!< BHED (Bitfield-Mask: 0xfffffff) */ +/* ==================================================== HCBULKCURRENTED ==================================================== */ + #define R_USBHC_HCBULKCURRENTED_BCED_Pos (4UL) /*!< BCED (Bit 4) */ + #define R_USBHC_HCBULKCURRENTED_BCED_Msk (0xfffffff0UL) /*!< BCED (Bitfield-Mask: 0xfffffff) */ +/* ====================================================== HCDONEHEAD ======================================================= */ + #define R_USBHC_HCDONEHEAD_DH_Pos (4UL) /*!< DH (Bit 4) */ + #define R_USBHC_HCDONEHEAD_DH_Msk (0xfffffff0UL) /*!< DH (Bitfield-Mask: 0xfffffff) */ +/* ===================================================== HCFMINTERVAL ====================================================== */ + #define R_USBHC_HCFMINTERVAL_FI_Pos (0UL) /*!< FI (Bit 0) */ + #define R_USBHC_HCFMINTERVAL_FI_Msk (0x3fffUL) /*!< FI (Bitfield-Mask: 0x3fff) */ + #define R_USBHC_HCFMINTERVAL_FSMPS_Pos (16UL) /*!< FSMPS (Bit 16) */ + #define R_USBHC_HCFMINTERVAL_FSMPS_Msk (0x7fff0000UL) /*!< FSMPS (Bitfield-Mask: 0x7fff) */ + #define R_USBHC_HCFMINTERVAL_FIT_Pos (31UL) /*!< FIT (Bit 31) */ + #define R_USBHC_HCFMINTERVAL_FIT_Msk (0x80000000UL) /*!< FIT (Bitfield-Mask: 0x01) */ +/* ===================================================== HCFNREMAINING ===================================================== */ + #define R_USBHC_HCFNREMAINING_FR_Pos (0UL) /*!< FR (Bit 0) */ + #define R_USBHC_HCFNREMAINING_FR_Msk (0x3fffUL) /*!< FR (Bitfield-Mask: 0x3fff) */ + #define R_USBHC_HCFNREMAINING_FRT_Pos (31UL) /*!< FRT (Bit 31) */ + #define R_USBHC_HCFNREMAINING_FRT_Msk (0x80000000UL) /*!< FRT (Bitfield-Mask: 0x01) */ +/* ====================================================== HCFMNUMBER ======================================================= */ + #define R_USBHC_HCFMNUMBER_FN_Pos (0UL) /*!< FN (Bit 0) */ + #define R_USBHC_HCFMNUMBER_FN_Msk (0xffffUL) /*!< FN (Bitfield-Mask: 0xffff) */ +/* ===================================================== HCPERIODSTART ===================================================== */ + #define R_USBHC_HCPERIODSTART_PS_Pos (0UL) /*!< PS (Bit 0) */ + #define R_USBHC_HCPERIODSTART_PS_Msk (0x3fffUL) /*!< PS (Bitfield-Mask: 0x3fff) */ +/* ===================================================== HCLSTHRESHOLD ===================================================== */ + #define R_USBHC_HCLSTHRESHOLD_LS_Pos (0UL) /*!< LS (Bit 0) */ + #define R_USBHC_HCLSTHRESHOLD_LS_Msk (0xfffUL) /*!< LS (Bitfield-Mask: 0xfff) */ +/* ==================================================== HCRHDESCRIPTORA ==================================================== */ + #define R_USBHC_HCRHDESCRIPTORA_NDP_Pos (0UL) /*!< NDP (Bit 0) */ + #define R_USBHC_HCRHDESCRIPTORA_NDP_Msk (0xffUL) /*!< NDP (Bitfield-Mask: 0xff) */ + #define R_USBHC_HCRHDESCRIPTORA_PSM_Pos (8UL) /*!< PSM (Bit 8) */ + #define R_USBHC_HCRHDESCRIPTORA_PSM_Msk (0x100UL) /*!< PSM (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHDESCRIPTORA_NPS_Pos (9UL) /*!< NPS (Bit 9) */ + #define R_USBHC_HCRHDESCRIPTORA_NPS_Msk (0x200UL) /*!< NPS (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHDESCRIPTORA_DT_Pos (10UL) /*!< DT (Bit 10) */ + #define R_USBHC_HCRHDESCRIPTORA_DT_Msk (0x400UL) /*!< DT (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHDESCRIPTORA_OCPM_Pos (11UL) /*!< OCPM (Bit 11) */ + #define R_USBHC_HCRHDESCRIPTORA_OCPM_Msk (0x800UL) /*!< OCPM (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHDESCRIPTORA_NOCP_Pos (12UL) /*!< NOCP (Bit 12) */ + #define R_USBHC_HCRHDESCRIPTORA_NOCP_Msk (0x1000UL) /*!< NOCP (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHDESCRIPTORA_POTPGT_Pos (24UL) /*!< POTPGT (Bit 24) */ + #define R_USBHC_HCRHDESCRIPTORA_POTPGT_Msk (0xff000000UL) /*!< POTPGT (Bitfield-Mask: 0xff) */ +/* ==================================================== HCRHDESCRIPTORB ==================================================== */ + #define R_USBHC_HCRHDESCRIPTORB_DR_Pos (0UL) /*!< DR (Bit 0) */ + #define R_USBHC_HCRHDESCRIPTORB_DR_Msk (0xffffUL) /*!< DR (Bitfield-Mask: 0xffff) */ + #define R_USBHC_HCRHDESCRIPTORB_PPCM_Pos (16UL) /*!< PPCM (Bit 16) */ + #define R_USBHC_HCRHDESCRIPTORB_PPCM_Msk (0xffff0000UL) /*!< PPCM (Bitfield-Mask: 0xffff) */ +/* ====================================================== HCRHSTATUS ======================================================= */ + #define R_USBHC_HCRHSTATUS_LPS_Pos (0UL) /*!< LPS (Bit 0) */ + #define R_USBHC_HCRHSTATUS_LPS_Msk (0x1UL) /*!< LPS (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHSTATUS_OCI_Pos (1UL) /*!< OCI (Bit 1) */ + #define R_USBHC_HCRHSTATUS_OCI_Msk (0x2UL) /*!< OCI (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHSTATUS_DRWE_Pos (15UL) /*!< DRWE (Bit 15) */ + #define R_USBHC_HCRHSTATUS_DRWE_Msk (0x8000UL) /*!< DRWE (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHSTATUS_LPSC_Pos (16UL) /*!< LPSC (Bit 16) */ + #define R_USBHC_HCRHSTATUS_LPSC_Msk (0x10000UL) /*!< LPSC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHSTATUS_OCIC_Pos (17UL) /*!< OCIC (Bit 17) */ + #define R_USBHC_HCRHSTATUS_OCIC_Msk (0x20000UL) /*!< OCIC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHSTATUS_CRWE_Pos (31UL) /*!< CRWE (Bit 31) */ + #define R_USBHC_HCRHSTATUS_CRWE_Msk (0x80000000UL) /*!< CRWE (Bitfield-Mask: 0x01) */ +/* ==================================================== HCRHPORTSTATUS1 ==================================================== */ + #define R_USBHC_HCRHPORTSTATUS1_CCS_Pos (0UL) /*!< CCS (Bit 0) */ + #define R_USBHC_HCRHPORTSTATUS1_CCS_Msk (0x1UL) /*!< CCS (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_PES_Pos (1UL) /*!< PES (Bit 1) */ + #define R_USBHC_HCRHPORTSTATUS1_PES_Msk (0x2UL) /*!< PES (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_PSS_Pos (2UL) /*!< PSS (Bit 2) */ + #define R_USBHC_HCRHPORTSTATUS1_PSS_Msk (0x4UL) /*!< PSS (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_POCI_Pos (3UL) /*!< POCI (Bit 3) */ + #define R_USBHC_HCRHPORTSTATUS1_POCI_Msk (0x8UL) /*!< POCI (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_PRS_Pos (4UL) /*!< PRS (Bit 4) */ + #define R_USBHC_HCRHPORTSTATUS1_PRS_Msk (0x10UL) /*!< PRS (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_PPS_Pos (8UL) /*!< PPS (Bit 8) */ + #define R_USBHC_HCRHPORTSTATUS1_PPS_Msk (0x100UL) /*!< PPS (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_LSDA_Pos (9UL) /*!< LSDA (Bit 9) */ + #define R_USBHC_HCRHPORTSTATUS1_LSDA_Msk (0x200UL) /*!< LSDA (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_CSC_Pos (16UL) /*!< CSC (Bit 16) */ + #define R_USBHC_HCRHPORTSTATUS1_CSC_Msk (0x10000UL) /*!< CSC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_PESC_Pos (17UL) /*!< PESC (Bit 17) */ + #define R_USBHC_HCRHPORTSTATUS1_PESC_Msk (0x20000UL) /*!< PESC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_PSSC_Pos (18UL) /*!< PSSC (Bit 18) */ + #define R_USBHC_HCRHPORTSTATUS1_PSSC_Msk (0x40000UL) /*!< PSSC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_OCIC_Pos (19UL) /*!< OCIC (Bit 19) */ + #define R_USBHC_HCRHPORTSTATUS1_OCIC_Msk (0x80000UL) /*!< OCIC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCRHPORTSTATUS1_PRSC_Pos (20UL) /*!< PRSC (Bit 20) */ + #define R_USBHC_HCRHPORTSTATUS1_PRSC_Msk (0x100000UL) /*!< PRSC (Bitfield-Mask: 0x01) */ +/* ===================================================== CAPL_VERSION ====================================================== */ + #define R_USBHC_CAPL_VERSION_CRL_Pos (0UL) /*!< CRL (Bit 0) */ + #define R_USBHC_CAPL_VERSION_CRL_Msk (0xffUL) /*!< CRL (Bitfield-Mask: 0xff) */ + #define R_USBHC_CAPL_VERSION_HCIVN_Pos (16UL) /*!< HCIVN (Bit 16) */ + #define R_USBHC_CAPL_VERSION_HCIVN_Msk (0xffff0000UL) /*!< HCIVN (Bitfield-Mask: 0xffff) */ +/* ======================================================= HCSPARAMS ======================================================= */ + #define R_USBHC_HCSPARAMS_N_PORTS_Pos (0UL) /*!< N_PORTS (Bit 0) */ + #define R_USBHC_HCSPARAMS_N_PORTS_Msk (0xfUL) /*!< N_PORTS (Bitfield-Mask: 0x0f) */ + #define R_USBHC_HCSPARAMS_PPC_Pos (4UL) /*!< PPC (Bit 4) */ + #define R_USBHC_HCSPARAMS_PPC_Msk (0x10UL) /*!< PPC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCSPARAMS_PTRR_Pos (7UL) /*!< PTRR (Bit 7) */ + #define R_USBHC_HCSPARAMS_PTRR_Msk (0x80UL) /*!< PTRR (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCSPARAMS_N_PCC_Pos (8UL) /*!< N_PCC (Bit 8) */ + #define R_USBHC_HCSPARAMS_N_PCC_Msk (0xf00UL) /*!< N_PCC (Bitfield-Mask: 0x0f) */ + #define R_USBHC_HCSPARAMS_N_CC_Pos (12UL) /*!< N_CC (Bit 12) */ + #define R_USBHC_HCSPARAMS_N_CC_Msk (0xf000UL) /*!< N_CC (Bitfield-Mask: 0x0f) */ + #define R_USBHC_HCSPARAMS_P_INDICATOR_Pos (16UL) /*!< P_INDICATOR (Bit 16) */ + #define R_USBHC_HCSPARAMS_P_INDICATOR_Msk (0x10000UL) /*!< P_INDICATOR (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCSPARAMS_DBGPTNUM_Pos (20UL) /*!< DBGPTNUM (Bit 20) */ + #define R_USBHC_HCSPARAMS_DBGPTNUM_Msk (0xf00000UL) /*!< DBGPTNUM (Bitfield-Mask: 0x0f) */ +/* ======================================================= HCCPARAMS ======================================================= */ + #define R_USBHC_HCCPARAMS_AC64_Pos (0UL) /*!< AC64 (Bit 0) */ + #define R_USBHC_HCCPARAMS_AC64_Msk (0x1UL) /*!< AC64 (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCPARAMS_PFLF_Pos (1UL) /*!< PFLF (Bit 1) */ + #define R_USBHC_HCCPARAMS_PFLF_Msk (0x2UL) /*!< PFLF (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCPARAMS_ASPC_Pos (2UL) /*!< ASPC (Bit 2) */ + #define R_USBHC_HCCPARAMS_ASPC_Msk (0x4UL) /*!< ASPC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCPARAMS_IST_Pos (4UL) /*!< IST (Bit 4) */ + #define R_USBHC_HCCPARAMS_IST_Msk (0xf0UL) /*!< IST (Bitfield-Mask: 0x0f) */ + #define R_USBHC_HCCPARAMS_EECP_Pos (8UL) /*!< EECP (Bit 8) */ + #define R_USBHC_HCCPARAMS_EECP_Msk (0xff00UL) /*!< EECP (Bitfield-Mask: 0xff) */ + #define R_USBHC_HCCPARAMS_HP_Pos (16UL) /*!< HP (Bit 16) */ + #define R_USBHC_HCCPARAMS_HP_Msk (0x10000UL) /*!< HP (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCPARAMS_LPMC_Pos (17UL) /*!< LPMC (Bit 17) */ + #define R_USBHC_HCCPARAMS_LPMC_Msk (0x20000UL) /*!< LPMC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCPARAMS_PCEC_Pos (18UL) /*!< PCEC (Bit 18) */ + #define R_USBHC_HCCPARAMS_PCEC_Msk (0x40000UL) /*!< PCEC (Bitfield-Mask: 0x01) */ + #define R_USBHC_HCCPARAMS_PL32_Pos (19UL) /*!< PL32 (Bit 19) */ + #define R_USBHC_HCCPARAMS_PL32_Msk (0x80000UL) /*!< PL32 (Bitfield-Mask: 0x01) */ +/* ==================================================== HCSP_PORTROUTE ===================================================== */ +/* ======================================================== USBCMD ========================================================= */ + #define R_USBHC_USBCMD_RS_Pos (0UL) /*!< RS (Bit 0) */ + #define R_USBHC_USBCMD_RS_Msk (0x1UL) /*!< RS (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_HCRESET_Pos (1UL) /*!< HCRESET (Bit 1) */ + #define R_USBHC_USBCMD_HCRESET_Msk (0x2UL) /*!< HCRESET (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_FLS_Pos (2UL) /*!< FLS (Bit 2) */ + #define R_USBHC_USBCMD_FLS_Msk (0xcUL) /*!< FLS (Bitfield-Mask: 0x03) */ + #define R_USBHC_USBCMD_PSE_Pos (4UL) /*!< PSE (Bit 4) */ + #define R_USBHC_USBCMD_PSE_Msk (0x10UL) /*!< PSE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_ASYNSE_Pos (5UL) /*!< ASYNSE (Bit 5) */ + #define R_USBHC_USBCMD_ASYNSE_Msk (0x20UL) /*!< ASYNSE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_IAAD_Pos (6UL) /*!< IAAD (Bit 6) */ + #define R_USBHC_USBCMD_IAAD_Msk (0x40UL) /*!< IAAD (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_LHCR_Pos (7UL) /*!< LHCR (Bit 7) */ + #define R_USBHC_USBCMD_LHCR_Msk (0x80UL) /*!< LHCR (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_ASPMC_Pos (8UL) /*!< ASPMC (Bit 8) */ + #define R_USBHC_USBCMD_ASPMC_Msk (0x300UL) /*!< ASPMC (Bitfield-Mask: 0x03) */ + #define R_USBHC_USBCMD_ASPME_Pos (11UL) /*!< ASPME (Bit 11) */ + #define R_USBHC_USBCMD_ASPME_Msk (0x800UL) /*!< ASPME (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_PPCEE_Pos (15UL) /*!< PPCEE (Bit 15) */ + #define R_USBHC_USBCMD_PPCEE_Msk (0x8000UL) /*!< PPCEE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCMD_ITC_Pos (16UL) /*!< ITC (Bit 16) */ + #define R_USBHC_USBCMD_ITC_Msk (0xff0000UL) /*!< ITC (Bitfield-Mask: 0xff) */ + #define R_USBHC_USBCMD_HIRD_Pos (24UL) /*!< HIRD (Bit 24) */ + #define R_USBHC_USBCMD_HIRD_Msk (0xf000000UL) /*!< HIRD (Bitfield-Mask: 0x0f) */ +/* ======================================================== USBSTS ========================================================= */ + #define R_USBHC_USBSTS_USBINT_Pos (0UL) /*!< USBINT (Bit 0) */ + #define R_USBHC_USBSTS_USBINT_Msk (0x1UL) /*!< USBINT (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_USBERRINT_Pos (1UL) /*!< USBERRINT (Bit 1) */ + #define R_USBHC_USBSTS_USBERRINT_Msk (0x2UL) /*!< USBERRINT (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_PTCGDET_Pos (2UL) /*!< PTCGDET (Bit 2) */ + #define R_USBHC_USBSTS_PTCGDET_Msk (0x4UL) /*!< PTCGDET (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_FLROV_Pos (3UL) /*!< FLROV (Bit 3) */ + #define R_USBHC_USBSTS_FLROV_Msk (0x8UL) /*!< FLROV (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_HSYSE_Pos (4UL) /*!< HSYSE (Bit 4) */ + #define R_USBHC_USBSTS_HSYSE_Msk (0x10UL) /*!< HSYSE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_IAAIS_Pos (5UL) /*!< IAAIS (Bit 5) */ + #define R_USBHC_USBSTS_IAAIS_Msk (0x20UL) /*!< IAAIS (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_EHCSTS_Pos (12UL) /*!< EHCSTS (Bit 12) */ + #define R_USBHC_USBSTS_EHCSTS_Msk (0x1000UL) /*!< EHCSTS (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_RECLAM_Pos (13UL) /*!< RECLAM (Bit 13) */ + #define R_USBHC_USBSTS_RECLAM_Msk (0x2000UL) /*!< RECLAM (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_PSCHSTS_Pos (14UL) /*!< PSCHSTS (Bit 14) */ + #define R_USBHC_USBSTS_PSCHSTS_Msk (0x4000UL) /*!< PSCHSTS (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_ASS_Pos (15UL) /*!< ASS (Bit 15) */ + #define R_USBHC_USBSTS_ASS_Msk (0x8000UL) /*!< ASS (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBSTS_PTCGDETC_Pos (16UL) /*!< PTCGDETC (Bit 16) */ + #define R_USBHC_USBSTS_PTCGDETC_Msk (0xffff0000UL) /*!< PTCGDETC (Bitfield-Mask: 0xffff) */ +/* ======================================================== USBINTR ======================================================== */ + #define R_USBHC_USBINTR_USBIE_Pos (0UL) /*!< USBIE (Bit 0) */ + #define R_USBHC_USBINTR_USBIE_Msk (0x1UL) /*!< USBIE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBINTR_USBEIE_Pos (1UL) /*!< USBEIE (Bit 1) */ + #define R_USBHC_USBINTR_USBEIE_Msk (0x2UL) /*!< USBEIE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBINTR_PTCGIE_Pos (2UL) /*!< PTCGIE (Bit 2) */ + #define R_USBHC_USBINTR_PTCGIE_Msk (0x4UL) /*!< PTCGIE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBINTR_FMLSTROE_Pos (3UL) /*!< FMLSTROE (Bit 3) */ + #define R_USBHC_USBINTR_FMLSTROE_Msk (0x8UL) /*!< FMLSTROE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBINTR_HSEE_Pos (4UL) /*!< HSEE (Bit 4) */ + #define R_USBHC_USBINTR_HSEE_Msk (0x10UL) /*!< HSEE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBINTR_INTAADVE_Pos (5UL) /*!< INTAADVE (Bit 5) */ + #define R_USBHC_USBINTR_INTAADVE_Msk (0x20UL) /*!< INTAADVE (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBINTR_PCGIE_Pos (16UL) /*!< PCGIE (Bit 16) */ + #define R_USBHC_USBINTR_PCGIE_Msk (0xffff0000UL) /*!< PCGIE (Bitfield-Mask: 0xffff) */ +/* ======================================================== FRINDEX ======================================================== */ + #define R_USBHC_FRINDEX_FRAMEINDEX_Pos (0UL) /*!< FRAMEINDEX (Bit 0) */ + #define R_USBHC_FRINDEX_FRAMEINDEX_Msk (0x3fffUL) /*!< FRAMEINDEX (Bitfield-Mask: 0x3fff) */ +/* ===================================================== CTRLDSSEGMENT ===================================================== */ +/* =================================================== PERIODICLISTBASE ==================================================== */ + #define R_USBHC_PERIODICLISTBASE_PFLSA_Pos (12UL) /*!< PFLSA (Bit 12) */ + #define R_USBHC_PERIODICLISTBASE_PFLSA_Msk (0xfffff000UL) /*!< PFLSA (Bitfield-Mask: 0xfffff) */ +/* ===================================================== ASYNCLISTADDR ===================================================== */ + #define R_USBHC_ASYNCLISTADDR_LPL_Pos (5UL) /*!< LPL (Bit 5) */ + #define R_USBHC_ASYNCLISTADDR_LPL_Msk (0xffffffe0UL) /*!< LPL (Bitfield-Mask: 0x7ffffff) */ +/* ====================================================== CONFIGFLAG ======================================================= */ + #define R_USBHC_CONFIGFLAG_CF_Pos (0UL) /*!< CF (Bit 0) */ + #define R_USBHC_CONFIGFLAG_CF_Msk (0x1UL) /*!< CF (Bitfield-Mask: 0x01) */ +/* ======================================================== PORTSC1 ======================================================== */ + #define R_USBHC_PORTSC1_CCSTS_Pos (0UL) /*!< CCSTS (Bit 0) */ + #define R_USBHC_PORTSC1_CCSTS_Msk (0x1UL) /*!< CCSTS (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_CSC_Pos (1UL) /*!< CSC (Bit 1) */ + #define R_USBHC_PORTSC1_CSC_Msk (0x2UL) /*!< CSC (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_PTE_Pos (2UL) /*!< PTE (Bit 2) */ + #define R_USBHC_PORTSC1_PTE_Msk (0x4UL) /*!< PTE (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_PTESC_Pos (3UL) /*!< PTESC (Bit 3) */ + #define R_USBHC_PORTSC1_PTESC_Msk (0x8UL) /*!< PTESC (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_OVCACT_Pos (4UL) /*!< OVCACT (Bit 4) */ + #define R_USBHC_PORTSC1_OVCACT_Msk (0x10UL) /*!< OVCACT (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_OVCC_Pos (5UL) /*!< OVCC (Bit 5) */ + #define R_USBHC_PORTSC1_OVCC_Msk (0x20UL) /*!< OVCC (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_FRCPTRSM_Pos (6UL) /*!< FRCPTRSM (Bit 6) */ + #define R_USBHC_PORTSC1_FRCPTRSM_Msk (0x40UL) /*!< FRCPTRSM (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_SUSPEND_Pos (7UL) /*!< SUSPEND (Bit 7) */ + #define R_USBHC_PORTSC1_SUSPEND_Msk (0x80UL) /*!< SUSPEND (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_PTRST_Pos (8UL) /*!< PTRST (Bit 8) */ + #define R_USBHC_PORTSC1_PTRST_Msk (0x100UL) /*!< PTRST (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_LPMCTL_Pos (9UL) /*!< LPMCTL (Bit 9) */ + #define R_USBHC_PORTSC1_LPMCTL_Msk (0x200UL) /*!< LPMCTL (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_LINESTS_Pos (10UL) /*!< LINESTS (Bit 10) */ + #define R_USBHC_PORTSC1_LINESTS_Msk (0xc00UL) /*!< LINESTS (Bitfield-Mask: 0x03) */ + #define R_USBHC_PORTSC1_PP_Pos (12UL) /*!< PP (Bit 12) */ + #define R_USBHC_PORTSC1_PP_Msk (0x1000UL) /*!< PP (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_PTOWNR_Pos (13UL) /*!< PTOWNR (Bit 13) */ + #define R_USBHC_PORTSC1_PTOWNR_Msk (0x2000UL) /*!< PTOWNR (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_PTINDCTL_Pos (14UL) /*!< PTINDCTL (Bit 14) */ + #define R_USBHC_PORTSC1_PTINDCTL_Msk (0xc000UL) /*!< PTINDCTL (Bitfield-Mask: 0x03) */ + #define R_USBHC_PORTSC1_PTTST_Pos (16UL) /*!< PTTST (Bit 16) */ + #define R_USBHC_PORTSC1_PTTST_Msk (0xf0000UL) /*!< PTTST (Bitfield-Mask: 0x0f) */ + #define R_USBHC_PORTSC1_WKCNNT_E_Pos (20UL) /*!< WKCNNT_E (Bit 20) */ + #define R_USBHC_PORTSC1_WKCNNT_E_Msk (0x100000UL) /*!< WKCNNT_E (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_WKDSCNNT_E_Pos (21UL) /*!< WKDSCNNT_E (Bit 21) */ + #define R_USBHC_PORTSC1_WKDSCNNT_E_Msk (0x200000UL) /*!< WKDSCNNT_E (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_WKOC_E_Pos (22UL) /*!< WKOC_E (Bit 22) */ + #define R_USBHC_PORTSC1_WKOC_E_Msk (0x400000UL) /*!< WKOC_E (Bitfield-Mask: 0x01) */ + #define R_USBHC_PORTSC1_SUSPSTS_Pos (23UL) /*!< SUSPSTS (Bit 23) */ + #define R_USBHC_PORTSC1_SUSPSTS_Msk (0x1800000UL) /*!< SUSPSTS (Bitfield-Mask: 0x03) */ + #define R_USBHC_PORTSC1_DVADDR_Pos (25UL) /*!< DVADDR (Bit 25) */ + #define R_USBHC_PORTSC1_DVADDR_Msk (0xfe000000UL) /*!< DVADDR (Bitfield-Mask: 0x7f) */ +/* ======================================================= INTENABLE ======================================================= */ + #define R_USBHC_INTENABLE_AHB_INTEN_Pos (0UL) /*!< AHB_INTEN (Bit 0) */ + #define R_USBHC_INTENABLE_AHB_INTEN_Msk (0x1UL) /*!< AHB_INTEN (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTENABLE_USBH_INTAEN_Pos (1UL) /*!< USBH_INTAEN (Bit 1) */ + #define R_USBHC_INTENABLE_USBH_INTAEN_Msk (0x2UL) /*!< USBH_INTAEN (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTENABLE_USBH_INTBEN_Pos (2UL) /*!< USBH_INTBEN (Bit 2) */ + #define R_USBHC_INTENABLE_USBH_INTBEN_Msk (0x4UL) /*!< USBH_INTBEN (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTENABLE_UCOM_INTEN_Pos (3UL) /*!< UCOM_INTEN (Bit 3) */ + #define R_USBHC_INTENABLE_UCOM_INTEN_Msk (0x8UL) /*!< UCOM_INTEN (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTENABLE_WAKEON_INTEN_Pos (4UL) /*!< WAKEON_INTEN (Bit 4) */ + #define R_USBHC_INTENABLE_WAKEON_INTEN_Msk (0x10UL) /*!< WAKEON_INTEN (Bitfield-Mask: 0x01) */ +/* ======================================================= INTSTATUS ======================================================= */ + #define R_USBHC_INTSTATUS_AHB_INT_Pos (0UL) /*!< AHB_INT (Bit 0) */ + #define R_USBHC_INTSTATUS_AHB_INT_Msk (0x1UL) /*!< AHB_INT (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTSTATUS_USBH_INTA_Pos (1UL) /*!< USBH_INTA (Bit 1) */ + #define R_USBHC_INTSTATUS_USBH_INTA_Msk (0x2UL) /*!< USBH_INTA (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTSTATUS_USBH_INTB_Pos (2UL) /*!< USBH_INTB (Bit 2) */ + #define R_USBHC_INTSTATUS_USBH_INTB_Msk (0x4UL) /*!< USBH_INTB (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTSTATUS_UCOM_INT_Pos (3UL) /*!< UCOM_INT (Bit 3) */ + #define R_USBHC_INTSTATUS_UCOM_INT_Msk (0x8UL) /*!< UCOM_INT (Bitfield-Mask: 0x01) */ + #define R_USBHC_INTSTATUS_WAKEON_INT_Pos (4UL) /*!< WAKEON_INT (Bit 4) */ + #define R_USBHC_INTSTATUS_WAKEON_INT_Msk (0x10UL) /*!< WAKEON_INT (Bitfield-Mask: 0x01) */ +/* ======================================================= AHBBUSCTR ======================================================= */ + #define R_USBHC_AHBBUSCTR_MAX_BURST_LEN_Pos (0UL) /*!< MAX_BURST_LEN (Bit 0) */ + #define R_USBHC_AHBBUSCTR_MAX_BURST_LEN_Msk (0x3UL) /*!< MAX_BURST_LEN (Bitfield-Mask: 0x03) */ + #define R_USBHC_AHBBUSCTR_ALIGN_ADDRESS_Pos (4UL) /*!< ALIGN_ADDRESS (Bit 4) */ + #define R_USBHC_AHBBUSCTR_ALIGN_ADDRESS_Msk (0x30UL) /*!< ALIGN_ADDRESS (Bitfield-Mask: 0x03) */ + #define R_USBHC_AHBBUSCTR_PROT_MODE_Pos (8UL) /*!< PROT_MODE (Bit 8) */ + #define R_USBHC_AHBBUSCTR_PROT_MODE_Msk (0x100UL) /*!< PROT_MODE (Bitfield-Mask: 0x01) */ + #define R_USBHC_AHBBUSCTR_PROT_TYPE_Pos (12UL) /*!< PROT_TYPE (Bit 12) */ + #define R_USBHC_AHBBUSCTR_PROT_TYPE_Msk (0xf000UL) /*!< PROT_TYPE (Bitfield-Mask: 0x0f) */ +/* ======================================================== USBCTR ========================================================= */ + #define R_USBHC_USBCTR_USBH_RST_Pos (0UL) /*!< USBH_RST (Bit 0) */ + #define R_USBHC_USBCTR_USBH_RST_Msk (0x1UL) /*!< USBH_RST (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCTR_PLL_RST_Pos (1UL) /*!< PLL_RST (Bit 1) */ + #define R_USBHC_USBCTR_PLL_RST_Msk (0x2UL) /*!< PLL_RST (Bitfield-Mask: 0x01) */ + #define R_USBHC_USBCTR_DIRPD_Pos (2UL) /*!< DIRPD (Bit 2) */ + #define R_USBHC_USBCTR_DIRPD_Msk (0x4UL) /*!< DIRPD (Bitfield-Mask: 0x01) */ +/* ========================================================= REVID ========================================================= */ + #define R_USBHC_REVID_MINV_Pos (0UL) /*!< MINV (Bit 0) */ + #define R_USBHC_REVID_MINV_Msk (0xffUL) /*!< MINV (Bitfield-Mask: 0xff) */ + #define R_USBHC_REVID_MAJV_Pos (8UL) /*!< MAJV (Bit 8) */ + #define R_USBHC_REVID_MAJV_Msk (0xff00UL) /*!< MAJV (Bitfield-Mask: 0xff) */ + #define R_USBHC_REVID_COREID_Pos (24UL) /*!< COREID (Bit 24) */ + #define R_USBHC_REVID_COREID_Msk (0xff000000UL) /*!< COREID (Bitfield-Mask: 0xff) */ +/* ====================================================== OCSLPTIMSET ====================================================== */ + #define R_USBHC_OCSLPTIMSET_TIMER_OC_Pos (0UL) /*!< TIMER_OC (Bit 0) */ + #define R_USBHC_OCSLPTIMSET_TIMER_OC_Msk (0xfffffUL) /*!< TIMER_OC (Bitfield-Mask: 0xfffff) */ + #define R_USBHC_OCSLPTIMSET_TIMER_SLEEP_Pos (20UL) /*!< TIMER_SLEEP (Bit 20) */ + #define R_USBHC_OCSLPTIMSET_TIMER_SLEEP_Msk (0x1ff00000UL) /*!< TIMER_SLEEP (Bitfield-Mask: 0x1ff) */ +/* ======================================================= COMMCTRL ======================================================== */ + #define R_USBHC_COMMCTRL_PERI_Pos (31UL) /*!< PERI (Bit 31) */ + #define R_USBHC_COMMCTRL_PERI_Msk (0x80000000UL) /*!< PERI (Bitfield-Mask: 0x01) */ +/* ======================================================= OBINTSTA ======================================================== */ + #define R_USBHC_OBINTSTA_IDCHG_STA_Pos (0UL) /*!< IDCHG_STA (Bit 0) */ + #define R_USBHC_OBINTSTA_IDCHG_STA_Msk (0x1UL) /*!< IDCHG_STA (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTSTA_OCINT_STA_Pos (1UL) /*!< OCINT_STA (Bit 1) */ + #define R_USBHC_OBINTSTA_OCINT_STA_Msk (0x2UL) /*!< OCINT_STA (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTSTA_VBSTACHG_STA_Pos (2UL) /*!< VBSTACHG_STA (Bit 2) */ + #define R_USBHC_OBINTSTA_VBSTACHG_STA_Msk (0x4UL) /*!< VBSTACHG_STA (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTSTA_VBSTAINT_STA_Pos (3UL) /*!< VBSTAINT_STA (Bit 3) */ + #define R_USBHC_OBINTSTA_VBSTAINT_STA_Msk (0x8UL) /*!< VBSTAINT_STA (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTSTA_DMMONCHG_STA_Pos (16UL) /*!< DMMONCHG_STA (Bit 16) */ + #define R_USBHC_OBINTSTA_DMMONCHG_STA_Msk (0x10000UL) /*!< DMMONCHG_STA (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTSTA_DPMONCHG_STA_Pos (17UL) /*!< DPMONCHG_STA (Bit 17) */ + #define R_USBHC_OBINTSTA_DPMONCHG_STA_Msk (0x20000UL) /*!< DPMONCHG_STA (Bitfield-Mask: 0x01) */ +/* ======================================================== OBINTEN ======================================================== */ + #define R_USBHC_OBINTEN_IDCHG_EN_Pos (0UL) /*!< IDCHG_EN (Bit 0) */ + #define R_USBHC_OBINTEN_IDCHG_EN_Msk (0x1UL) /*!< IDCHG_EN (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTEN_OCINT_EN_Pos (1UL) /*!< OCINT_EN (Bit 1) */ + #define R_USBHC_OBINTEN_OCINT_EN_Msk (0x2UL) /*!< OCINT_EN (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTEN_VBSTACHG_EN_Pos (2UL) /*!< VBSTACHG_EN (Bit 2) */ + #define R_USBHC_OBINTEN_VBSTACHG_EN_Msk (0x4UL) /*!< VBSTACHG_EN (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTEN_VBSTAINT_EN_Pos (3UL) /*!< VBSTAINT_EN (Bit 3) */ + #define R_USBHC_OBINTEN_VBSTAINT_EN_Msk (0x8UL) /*!< VBSTAINT_EN (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTEN_DMMONCHG_EN_Pos (16UL) /*!< DMMONCHG_EN (Bit 16) */ + #define R_USBHC_OBINTEN_DMMONCHG_EN_Msk (0x10000UL) /*!< DMMONCHG_EN (Bitfield-Mask: 0x01) */ + #define R_USBHC_OBINTEN_DPMONCHG_EN_Pos (17UL) /*!< DPMONCHG_EN (Bit 17) */ + #define R_USBHC_OBINTEN_DPMONCHG_EN_Msk (0x20000UL) /*!< DPMONCHG_EN (Bitfield-Mask: 0x01) */ +/* ======================================================== VBCTRL ========================================================= */ + #define R_USBHC_VBCTRL_VBOUT_Pos (0UL) /*!< VBOUT (Bit 0) */ + #define R_USBHC_VBCTRL_VBOUT_Msk (0x1UL) /*!< VBOUT (Bitfield-Mask: 0x01) */ + #define R_USBHC_VBCTRL_VBUSENSEL_Pos (1UL) /*!< VBUSENSEL (Bit 1) */ + #define R_USBHC_VBCTRL_VBUSENSEL_Msk (0x2UL) /*!< VBUSENSEL (Bitfield-Mask: 0x01) */ + #define R_USBHC_VBCTRL_VGPUO_Pos (4UL) /*!< VGPUO (Bit 4) */ + #define R_USBHC_VBCTRL_VGPUO_Msk (0x10UL) /*!< VGPUO (Bitfield-Mask: 0x01) */ + #define R_USBHC_VBCTRL_OCCLRIEN_Pos (16UL) /*!< OCCLRIEN (Bit 16) */ + #define R_USBHC_VBCTRL_OCCLRIEN_Msk (0x10000UL) /*!< OCCLRIEN (Bitfield-Mask: 0x01) */ + #define R_USBHC_VBCTRL_OCISEL_Pos (17UL) /*!< OCISEL (Bit 17) */ + #define R_USBHC_VBCTRL_OCISEL_Msk (0x20000UL) /*!< OCISEL (Bitfield-Mask: 0x01) */ + #define R_USBHC_VBCTRL_VBLVL_Pos (20UL) /*!< VBLVL (Bit 20) */ + #define R_USBHC_VBCTRL_VBLVL_Msk (0xf00000UL) /*!< VBLVL (Bitfield-Mask: 0x0f) */ + #define R_USBHC_VBCTRL_VBSTA_Pos (28UL) /*!< VBSTA (Bit 28) */ + #define R_USBHC_VBCTRL_VBSTA_Msk (0xf0000000UL) /*!< VBSTA (Bitfield-Mask: 0x0f) */ +/* ======================================================= LINECTRL1 ======================================================= */ + #define R_USBHC_LINECTRL1_IDMON_Pos (0UL) /*!< IDMON (Bit 0) */ + #define R_USBHC_LINECTRL1_IDMON_Msk (0x1UL) /*!< IDMON (Bitfield-Mask: 0x01) */ + #define R_USBHC_LINECTRL1_DMMON_Pos (2UL) /*!< DMMON (Bit 2) */ + #define R_USBHC_LINECTRL1_DMMON_Msk (0x4UL) /*!< DMMON (Bitfield-Mask: 0x01) */ + #define R_USBHC_LINECTRL1_DPMON_Pos (3UL) /*!< DPMON (Bit 3) */ + #define R_USBHC_LINECTRL1_DPMON_Msk (0x8UL) /*!< DPMON (Bitfield-Mask: 0x01) */ + #define R_USBHC_LINECTRL1_DM_RPD_Pos (16UL) /*!< DM_RPD (Bit 16) */ + #define R_USBHC_LINECTRL1_DM_RPD_Msk (0x10000UL) /*!< DM_RPD (Bitfield-Mask: 0x01) */ + #define R_USBHC_LINECTRL1_DMRPD_EN_Pos (17UL) /*!< DMRPD_EN (Bit 17) */ + #define R_USBHC_LINECTRL1_DMRPD_EN_Msk (0x20000UL) /*!< DMRPD_EN (Bitfield-Mask: 0x01) */ + #define R_USBHC_LINECTRL1_DP_RPD_Pos (18UL) /*!< DP_RPD (Bit 18) */ + #define R_USBHC_LINECTRL1_DP_RPD_Msk (0x40000UL) /*!< DP_RPD (Bitfield-Mask: 0x01) */ + #define R_USBHC_LINECTRL1_DPRPD_EN_Pos (19UL) /*!< DPRPD_EN (Bit 19) */ + #define R_USBHC_LINECTRL1_DPRPD_EN_Msk (0x80000UL) /*!< DPRPD_EN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_USBF ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== SYSCFG0 ======================================================== */ + #define R_USBF_SYSCFG0_USBE_Pos (0UL) /*!< USBE (Bit 0) */ + #define R_USBF_SYSCFG0_USBE_Msk (0x1UL) /*!< USBE (Bitfield-Mask: 0x01) */ + #define R_USBF_SYSCFG0_DPRPU_Pos (4UL) /*!< DPRPU (Bit 4) */ + #define R_USBF_SYSCFG0_DPRPU_Msk (0x10UL) /*!< DPRPU (Bitfield-Mask: 0x01) */ + #define R_USBF_SYSCFG0_DRPD_Pos (5UL) /*!< DRPD (Bit 5) */ + #define R_USBF_SYSCFG0_DRPD_Msk (0x20UL) /*!< DRPD (Bitfield-Mask: 0x01) */ + #define R_USBF_SYSCFG0_HSE_Pos (7UL) /*!< HSE (Bit 7) */ + #define R_USBF_SYSCFG0_HSE_Msk (0x80UL) /*!< HSE (Bitfield-Mask: 0x01) */ + #define R_USBF_SYSCFG0_CNEN_Pos (8UL) /*!< CNEN (Bit 8) */ + #define R_USBF_SYSCFG0_CNEN_Msk (0x100UL) /*!< CNEN (Bitfield-Mask: 0x01) */ +/* ======================================================== SYSCFG1 ======================================================== */ + #define R_USBF_SYSCFG1_BWAIT_Pos (0UL) /*!< BWAIT (Bit 0) */ + #define R_USBF_SYSCFG1_BWAIT_Msk (0x3fUL) /*!< BWAIT (Bitfield-Mask: 0x3f) */ + #define R_USBF_SYSCFG1_AWAIT_Pos (8UL) /*!< AWAIT (Bit 8) */ + #define R_USBF_SYSCFG1_AWAIT_Msk (0x3f00UL) /*!< AWAIT (Bitfield-Mask: 0x3f) */ +/* ======================================================== SYSSTS0 ======================================================== */ + #define R_USBF_SYSSTS0_LNST_Pos (0UL) /*!< LNST (Bit 0) */ + #define R_USBF_SYSSTS0_LNST_Msk (0x3UL) /*!< LNST (Bitfield-Mask: 0x03) */ +/* ======================================================= DVSTCTR0 ======================================================== */ + #define R_USBF_DVSTCTR0_RHST_Pos (0UL) /*!< RHST (Bit 0) */ + #define R_USBF_DVSTCTR0_RHST_Msk (0x7UL) /*!< RHST (Bitfield-Mask: 0x07) */ + #define R_USBF_DVSTCTR0_WKUP_Pos (8UL) /*!< WKUP (Bit 8) */ + #define R_USBF_DVSTCTR0_WKUP_Msk (0x100UL) /*!< WKUP (Bitfield-Mask: 0x01) */ +/* ======================================================= TESTMODE ======================================================== */ + #define R_USBF_TESTMODE_UTST_Pos (0UL) /*!< UTST (Bit 0) */ + #define R_USBF_TESTMODE_UTST_Msk (0xfUL) /*!< UTST (Bitfield-Mask: 0x0f) */ +/* ========================================================= CFIFO ========================================================= */ + #define R_USBF_CFIFO_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_CFIFO_FIFOPORT_Msk (0xffffffffUL) /*!< FIFOPORT (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CFIFOL ========================================================= */ +/* ======================================================== CFIFOLL ======================================================== */ +/* ======================================================== CFIFOH ========================================================= */ + #define R_USBF_CFIFOH_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_CFIFOH_FIFOPORT_Msk (0xffffUL) /*!< FIFOPORT (Bitfield-Mask: 0xffff) */ +/* ======================================================== CFIFOHH ======================================================== */ + #define R_USBF_CFIFOHH_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_CFIFOHH_FIFOPORT_Msk (0xffUL) /*!< FIFOPORT (Bitfield-Mask: 0xff) */ +/* ======================================================== D0FIFO ========================================================= */ + #define R_USBF_D0FIFO_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_D0FIFO_FIFOPORT_Msk (0xffffffffUL) /*!< FIFOPORT (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== D0FIFOL ======================================================== */ +/* ======================================================= D0FIFOLL ======================================================== */ +/* ======================================================== D0FIFOH ======================================================== */ + #define R_USBF_D0FIFOH_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_D0FIFOH_FIFOPORT_Msk (0xffffUL) /*!< FIFOPORT (Bitfield-Mask: 0xffff) */ +/* ======================================================= D0FIFOHH ======================================================== */ + #define R_USBF_D0FIFOHH_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_D0FIFOHH_FIFOPORT_Msk (0xffUL) /*!< FIFOPORT (Bitfield-Mask: 0xff) */ +/* ======================================================== D1FIFO ========================================================= */ + #define R_USBF_D1FIFO_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_D1FIFO_FIFOPORT_Msk (0xffffffffUL) /*!< FIFOPORT (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== D1FIFOL ======================================================== */ +/* ======================================================= D1FIFOLL ======================================================== */ +/* ======================================================== D1FIFOH ======================================================== */ + #define R_USBF_D1FIFOH_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_D1FIFOH_FIFOPORT_Msk (0xffffUL) /*!< FIFOPORT (Bitfield-Mask: 0xffff) */ +/* ======================================================= D1FIFOHH ======================================================== */ + #define R_USBF_D1FIFOHH_FIFOPORT_Pos (0UL) /*!< FIFOPORT (Bit 0) */ + #define R_USBF_D1FIFOHH_FIFOPORT_Msk (0xffUL) /*!< FIFOPORT (Bitfield-Mask: 0xff) */ +/* ======================================================= CFIFOSEL ======================================================== */ + #define R_USBF_CFIFOSEL_CURPIPE_Pos (0UL) /*!< CURPIPE (Bit 0) */ + #define R_USBF_CFIFOSEL_CURPIPE_Msk (0xfUL) /*!< CURPIPE (Bitfield-Mask: 0x0f) */ + #define R_USBF_CFIFOSEL_ISEL_Pos (5UL) /*!< ISEL (Bit 5) */ + #define R_USBF_CFIFOSEL_ISEL_Msk (0x20UL) /*!< ISEL (Bitfield-Mask: 0x01) */ + #define R_USBF_CFIFOSEL_BIGEND_Pos (8UL) /*!< BIGEND (Bit 8) */ + #define R_USBF_CFIFOSEL_BIGEND_Msk (0x100UL) /*!< BIGEND (Bitfield-Mask: 0x01) */ + #define R_USBF_CFIFOSEL_MBW_Pos (10UL) /*!< MBW (Bit 10) */ + #define R_USBF_CFIFOSEL_MBW_Msk (0xc00UL) /*!< MBW (Bitfield-Mask: 0x03) */ + #define R_USBF_CFIFOSEL_REW_Pos (14UL) /*!< REW (Bit 14) */ + #define R_USBF_CFIFOSEL_REW_Msk (0x4000UL) /*!< REW (Bitfield-Mask: 0x01) */ + #define R_USBF_CFIFOSEL_RCNT_Pos (15UL) /*!< RCNT (Bit 15) */ + #define R_USBF_CFIFOSEL_RCNT_Msk (0x8000UL) /*!< RCNT (Bitfield-Mask: 0x01) */ +/* ======================================================= CFIFOCTR ======================================================== */ + #define R_USBF_CFIFOCTR_DTLN_Pos (0UL) /*!< DTLN (Bit 0) */ + #define R_USBF_CFIFOCTR_DTLN_Msk (0xfffUL) /*!< DTLN (Bitfield-Mask: 0xfff) */ + #define R_USBF_CFIFOCTR_FRDY_Pos (13UL) /*!< FRDY (Bit 13) */ + #define R_USBF_CFIFOCTR_FRDY_Msk (0x2000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_USBF_CFIFOCTR_BCLR_Pos (14UL) /*!< BCLR (Bit 14) */ + #define R_USBF_CFIFOCTR_BCLR_Msk (0x4000UL) /*!< BCLR (Bitfield-Mask: 0x01) */ + #define R_USBF_CFIFOCTR_BVAL_Pos (15UL) /*!< BVAL (Bit 15) */ + #define R_USBF_CFIFOCTR_BVAL_Msk (0x8000UL) /*!< BVAL (Bitfield-Mask: 0x01) */ +/* ======================================================= D0FIFOSEL ======================================================= */ + #define R_USBF_D0FIFOSEL_CURPIPE_Pos (0UL) /*!< CURPIPE (Bit 0) */ + #define R_USBF_D0FIFOSEL_CURPIPE_Msk (0xfUL) /*!< CURPIPE (Bitfield-Mask: 0x0f) */ + #define R_USBF_D0FIFOSEL_BIGEND_Pos (8UL) /*!< BIGEND (Bit 8) */ + #define R_USBF_D0FIFOSEL_BIGEND_Msk (0x100UL) /*!< BIGEND (Bitfield-Mask: 0x01) */ + #define R_USBF_D0FIFOSEL_MBW_Pos (10UL) /*!< MBW (Bit 10) */ + #define R_USBF_D0FIFOSEL_MBW_Msk (0xc00UL) /*!< MBW (Bitfield-Mask: 0x03) */ + #define R_USBF_D0FIFOSEL_DREQE_Pos (12UL) /*!< DREQE (Bit 12) */ + #define R_USBF_D0FIFOSEL_DREQE_Msk (0x1000UL) /*!< DREQE (Bitfield-Mask: 0x01) */ + #define R_USBF_D0FIFOSEL_DCLRM_Pos (13UL) /*!< DCLRM (Bit 13) */ + #define R_USBF_D0FIFOSEL_DCLRM_Msk (0x2000UL) /*!< DCLRM (Bitfield-Mask: 0x01) */ + #define R_USBF_D0FIFOSEL_REW_Pos (14UL) /*!< REW (Bit 14) */ + #define R_USBF_D0FIFOSEL_REW_Msk (0x4000UL) /*!< REW (Bitfield-Mask: 0x01) */ + #define R_USBF_D0FIFOSEL_RCNT_Pos (15UL) /*!< RCNT (Bit 15) */ + #define R_USBF_D0FIFOSEL_RCNT_Msk (0x8000UL) /*!< RCNT (Bitfield-Mask: 0x01) */ +/* ======================================================= D1FIFOSEL ======================================================= */ + #define R_USBF_D1FIFOSEL_CURPIPE_Pos (0UL) /*!< CURPIPE (Bit 0) */ + #define R_USBF_D1FIFOSEL_CURPIPE_Msk (0xfUL) /*!< CURPIPE (Bitfield-Mask: 0x0f) */ + #define R_USBF_D1FIFOSEL_BIGEND_Pos (8UL) /*!< BIGEND (Bit 8) */ + #define R_USBF_D1FIFOSEL_BIGEND_Msk (0x100UL) /*!< BIGEND (Bitfield-Mask: 0x01) */ + #define R_USBF_D1FIFOSEL_MBW_Pos (10UL) /*!< MBW (Bit 10) */ + #define R_USBF_D1FIFOSEL_MBW_Msk (0xc00UL) /*!< MBW (Bitfield-Mask: 0x03) */ + #define R_USBF_D1FIFOSEL_DREQE_Pos (12UL) /*!< DREQE (Bit 12) */ + #define R_USBF_D1FIFOSEL_DREQE_Msk (0x1000UL) /*!< DREQE (Bitfield-Mask: 0x01) */ + #define R_USBF_D1FIFOSEL_DCLRM_Pos (13UL) /*!< DCLRM (Bit 13) */ + #define R_USBF_D1FIFOSEL_DCLRM_Msk (0x2000UL) /*!< DCLRM (Bitfield-Mask: 0x01) */ + #define R_USBF_D1FIFOSEL_REW_Pos (14UL) /*!< REW (Bit 14) */ + #define R_USBF_D1FIFOSEL_REW_Msk (0x4000UL) /*!< REW (Bitfield-Mask: 0x01) */ + #define R_USBF_D1FIFOSEL_RCNT_Pos (15UL) /*!< RCNT (Bit 15) */ + #define R_USBF_D1FIFOSEL_RCNT_Msk (0x8000UL) /*!< RCNT (Bitfield-Mask: 0x01) */ +/* ======================================================= D0FIFOCTR ======================================================= */ + #define R_USBF_D0FIFOCTR_DTLN_Pos (0UL) /*!< DTLN (Bit 0) */ + #define R_USBF_D0FIFOCTR_DTLN_Msk (0xfffUL) /*!< DTLN (Bitfield-Mask: 0xfff) */ + #define R_USBF_D0FIFOCTR_FRDY_Pos (13UL) /*!< FRDY (Bit 13) */ + #define R_USBF_D0FIFOCTR_FRDY_Msk (0x2000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_USBF_D0FIFOCTR_BCLR_Pos (14UL) /*!< BCLR (Bit 14) */ + #define R_USBF_D0FIFOCTR_BCLR_Msk (0x4000UL) /*!< BCLR (Bitfield-Mask: 0x01) */ + #define R_USBF_D0FIFOCTR_BVAL_Pos (15UL) /*!< BVAL (Bit 15) */ + #define R_USBF_D0FIFOCTR_BVAL_Msk (0x8000UL) /*!< BVAL (Bitfield-Mask: 0x01) */ +/* ======================================================= D1FIFOCTR ======================================================= */ + #define R_USBF_D1FIFOCTR_DTLN_Pos (0UL) /*!< DTLN (Bit 0) */ + #define R_USBF_D1FIFOCTR_DTLN_Msk (0xfffUL) /*!< DTLN (Bitfield-Mask: 0xfff) */ + #define R_USBF_D1FIFOCTR_FRDY_Pos (13UL) /*!< FRDY (Bit 13) */ + #define R_USBF_D1FIFOCTR_FRDY_Msk (0x2000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_USBF_D1FIFOCTR_BCLR_Pos (14UL) /*!< BCLR (Bit 14) */ + #define R_USBF_D1FIFOCTR_BCLR_Msk (0x4000UL) /*!< BCLR (Bitfield-Mask: 0x01) */ + #define R_USBF_D1FIFOCTR_BVAL_Pos (15UL) /*!< BVAL (Bit 15) */ + #define R_USBF_D1FIFOCTR_BVAL_Msk (0x8000UL) /*!< BVAL (Bitfield-Mask: 0x01) */ +/* ======================================================== INTENB0 ======================================================== */ + #define R_USBF_INTENB0_BRDYE_Pos (8UL) /*!< BRDYE (Bit 8) */ + #define R_USBF_INTENB0_BRDYE_Msk (0x100UL) /*!< BRDYE (Bitfield-Mask: 0x01) */ + #define R_USBF_INTENB0_NRDYE_Pos (9UL) /*!< NRDYE (Bit 9) */ + #define R_USBF_INTENB0_NRDYE_Msk (0x200UL) /*!< NRDYE (Bitfield-Mask: 0x01) */ + #define R_USBF_INTENB0_BEMPE_Pos (10UL) /*!< BEMPE (Bit 10) */ + #define R_USBF_INTENB0_BEMPE_Msk (0x400UL) /*!< BEMPE (Bitfield-Mask: 0x01) */ + #define R_USBF_INTENB0_CTRE_Pos (11UL) /*!< CTRE (Bit 11) */ + #define R_USBF_INTENB0_CTRE_Msk (0x800UL) /*!< CTRE (Bitfield-Mask: 0x01) */ + #define R_USBF_INTENB0_DVSE_Pos (12UL) /*!< DVSE (Bit 12) */ + #define R_USBF_INTENB0_DVSE_Msk (0x1000UL) /*!< DVSE (Bitfield-Mask: 0x01) */ + #define R_USBF_INTENB0_SOFE_Pos (13UL) /*!< SOFE (Bit 13) */ + #define R_USBF_INTENB0_SOFE_Msk (0x2000UL) /*!< SOFE (Bitfield-Mask: 0x01) */ + #define R_USBF_INTENB0_RSME_Pos (14UL) /*!< RSME (Bit 14) */ + #define R_USBF_INTENB0_RSME_Msk (0x4000UL) /*!< RSME (Bitfield-Mask: 0x01) */ + #define R_USBF_INTENB0_VBSE_Pos (15UL) /*!< VBSE (Bit 15) */ + #define R_USBF_INTENB0_VBSE_Msk (0x8000UL) /*!< VBSE (Bitfield-Mask: 0x01) */ +/* ======================================================== INTENB1 ======================================================== */ + #define R_USBF_INTENB1_PDDETINTE_Pos (0UL) /*!< PDDETINTE (Bit 0) */ + #define R_USBF_INTENB1_PDDETINTE_Msk (0x1UL) /*!< PDDETINTE (Bitfield-Mask: 0x01) */ +/* ======================================================== BRDYENB ======================================================== */ + #define R_USBF_BRDYENB_PIPEBRDYE_Pos (0UL) /*!< PIPEBRDYE (Bit 0) */ + #define R_USBF_BRDYENB_PIPEBRDYE_Msk (0x3ffUL) /*!< PIPEBRDYE (Bitfield-Mask: 0x3ff) */ +/* ======================================================== NRDYENB ======================================================== */ + #define R_USBF_NRDYENB_PIPENRDYE_Pos (0UL) /*!< PIPENRDYE (Bit 0) */ + #define R_USBF_NRDYENB_PIPENRDYE_Msk (0x3ffUL) /*!< PIPENRDYE (Bitfield-Mask: 0x3ff) */ +/* ======================================================== BEMPENB ======================================================== */ + #define R_USBF_BEMPENB_PIPEBEMPE_Pos (0UL) /*!< PIPEBEMPE (Bit 0) */ + #define R_USBF_BEMPENB_PIPEBEMPE_Msk (0x3ffUL) /*!< PIPEBEMPE (Bitfield-Mask: 0x3ff) */ +/* ======================================================== SOFCFG ========================================================= */ + #define R_USBF_SOFCFG_EDGESTS_Pos (4UL) /*!< EDGESTS (Bit 4) */ + #define R_USBF_SOFCFG_EDGESTS_Msk (0x10UL) /*!< EDGESTS (Bitfield-Mask: 0x01) */ + #define R_USBF_SOFCFG_INTL_Pos (5UL) /*!< INTL (Bit 5) */ + #define R_USBF_SOFCFG_INTL_Msk (0x20UL) /*!< INTL (Bitfield-Mask: 0x01) */ + #define R_USBF_SOFCFG_BRDYM_Pos (6UL) /*!< BRDYM (Bit 6) */ + #define R_USBF_SOFCFG_BRDYM_Msk (0x40UL) /*!< BRDYM (Bitfield-Mask: 0x01) */ +/* ======================================================== INTSTS0 ======================================================== */ + #define R_USBF_INTSTS0_CTSQ_Pos (0UL) /*!< CTSQ (Bit 0) */ + #define R_USBF_INTSTS0_CTSQ_Msk (0x7UL) /*!< CTSQ (Bitfield-Mask: 0x07) */ + #define R_USBF_INTSTS0_VALID_Pos (3UL) /*!< VALID (Bit 3) */ + #define R_USBF_INTSTS0_VALID_Msk (0x8UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_DVSQ_Pos (4UL) /*!< DVSQ (Bit 4) */ + #define R_USBF_INTSTS0_DVSQ_Msk (0x70UL) /*!< DVSQ (Bitfield-Mask: 0x07) */ + #define R_USBF_INTSTS0_VBSTS_Pos (7UL) /*!< VBSTS (Bit 7) */ + #define R_USBF_INTSTS0_VBSTS_Msk (0x80UL) /*!< VBSTS (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_BRDY_Pos (8UL) /*!< BRDY (Bit 8) */ + #define R_USBF_INTSTS0_BRDY_Msk (0x100UL) /*!< BRDY (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_NRDY_Pos (9UL) /*!< NRDY (Bit 9) */ + #define R_USBF_INTSTS0_NRDY_Msk (0x200UL) /*!< NRDY (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_BEMP_Pos (10UL) /*!< BEMP (Bit 10) */ + #define R_USBF_INTSTS0_BEMP_Msk (0x400UL) /*!< BEMP (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_CTRT_Pos (11UL) /*!< CTRT (Bit 11) */ + #define R_USBF_INTSTS0_CTRT_Msk (0x800UL) /*!< CTRT (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_DVST_Pos (12UL) /*!< DVST (Bit 12) */ + #define R_USBF_INTSTS0_DVST_Msk (0x1000UL) /*!< DVST (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_SOFR_Pos (13UL) /*!< SOFR (Bit 13) */ + #define R_USBF_INTSTS0_SOFR_Msk (0x2000UL) /*!< SOFR (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_RESM_Pos (14UL) /*!< RESM (Bit 14) */ + #define R_USBF_INTSTS0_RESM_Msk (0x4000UL) /*!< RESM (Bitfield-Mask: 0x01) */ + #define R_USBF_INTSTS0_VBINT_Pos (15UL) /*!< VBINT (Bit 15) */ + #define R_USBF_INTSTS0_VBINT_Msk (0x8000UL) /*!< VBINT (Bitfield-Mask: 0x01) */ +/* ======================================================== INTSTS1 ======================================================== */ + #define R_USBF_INTSTS1_PDDETINT_Pos (0UL) /*!< PDDETINT (Bit 0) */ + #define R_USBF_INTSTS1_PDDETINT_Msk (0x1UL) /*!< PDDETINT (Bitfield-Mask: 0x01) */ +/* ======================================================== BRDYSTS ======================================================== */ + #define R_USBF_BRDYSTS_PIPEBRDY_Pos (0UL) /*!< PIPEBRDY (Bit 0) */ + #define R_USBF_BRDYSTS_PIPEBRDY_Msk (0x3ffUL) /*!< PIPEBRDY (Bitfield-Mask: 0x3ff) */ +/* ======================================================== NRDYSTS ======================================================== */ + #define R_USBF_NRDYSTS_PIPENRDY_Pos (0UL) /*!< PIPENRDY (Bit 0) */ + #define R_USBF_NRDYSTS_PIPENRDY_Msk (0x3ffUL) /*!< PIPENRDY (Bitfield-Mask: 0x3ff) */ +/* ======================================================== BEMPSTS ======================================================== */ + #define R_USBF_BEMPSTS_PIPEBEMP_Pos (0UL) /*!< PIPEBEMP (Bit 0) */ + #define R_USBF_BEMPSTS_PIPEBEMP_Msk (0x3ffUL) /*!< PIPEBEMP (Bitfield-Mask: 0x3ff) */ +/* ======================================================== FRMNUM ========================================================= */ + #define R_USBF_FRMNUM_FRNM_Pos (0UL) /*!< FRNM (Bit 0) */ + #define R_USBF_FRMNUM_FRNM_Msk (0x7ffUL) /*!< FRNM (Bitfield-Mask: 0x7ff) */ + #define R_USBF_FRMNUM_CRCE_Pos (14UL) /*!< CRCE (Bit 14) */ + #define R_USBF_FRMNUM_CRCE_Msk (0x4000UL) /*!< CRCE (Bitfield-Mask: 0x01) */ + #define R_USBF_FRMNUM_OVRN_Pos (15UL) /*!< OVRN (Bit 15) */ + #define R_USBF_FRMNUM_OVRN_Msk (0x8000UL) /*!< OVRN (Bitfield-Mask: 0x01) */ +/* ======================================================== UFRMNUM ======================================================== */ + #define R_USBF_UFRMNUM_UFRNM_Pos (0UL) /*!< UFRNM (Bit 0) */ + #define R_USBF_UFRMNUM_UFRNM_Msk (0x7UL) /*!< UFRNM (Bitfield-Mask: 0x07) */ +/* ======================================================== USBADDR ======================================================== */ + #define R_USBF_USBADDR_USBADDR_Pos (0UL) /*!< USBADDR (Bit 0) */ + #define R_USBF_USBADDR_USBADDR_Msk (0x7fUL) /*!< USBADDR (Bitfield-Mask: 0x7f) */ +/* ======================================================== USBREQ ========================================================= */ + #define R_USBF_USBREQ_BMREQUESTTYPE_Pos (0UL) /*!< BMREQUESTTYPE (Bit 0) */ + #define R_USBF_USBREQ_BMREQUESTTYPE_Msk (0xffUL) /*!< BMREQUESTTYPE (Bitfield-Mask: 0xff) */ + #define R_USBF_USBREQ_BREQUEST_Pos (8UL) /*!< BREQUEST (Bit 8) */ + #define R_USBF_USBREQ_BREQUEST_Msk (0xff00UL) /*!< BREQUEST (Bitfield-Mask: 0xff) */ +/* ======================================================== USBVAL ========================================================= */ + #define R_USBF_USBVAL_WVALUE_Pos (0UL) /*!< WVALUE (Bit 0) */ + #define R_USBF_USBVAL_WVALUE_Msk (0xffffUL) /*!< WVALUE (Bitfield-Mask: 0xffff) */ +/* ======================================================== USBINDX ======================================================== */ + #define R_USBF_USBINDX_WINDEX_Pos (0UL) /*!< WINDEX (Bit 0) */ + #define R_USBF_USBINDX_WINDEX_Msk (0xffffUL) /*!< WINDEX (Bitfield-Mask: 0xffff) */ +/* ======================================================== USBLENG ======================================================== */ + #define R_USBF_USBLENG_WLENGTH_Pos (0UL) /*!< WLENGTH (Bit 0) */ + #define R_USBF_USBLENG_WLENGTH_Msk (0xffffUL) /*!< WLENGTH (Bitfield-Mask: 0xffff) */ +/* ======================================================== DCPCFG ========================================================= */ + #define R_USBF_DCPCFG_SHTNAK_Pos (7UL) /*!< SHTNAK (Bit 7) */ + #define R_USBF_DCPCFG_SHTNAK_Msk (0x80UL) /*!< SHTNAK (Bitfield-Mask: 0x01) */ + #define R_USBF_DCPCFG_CNTMD_Pos (8UL) /*!< CNTMD (Bit 8) */ + #define R_USBF_DCPCFG_CNTMD_Msk (0x100UL) /*!< CNTMD (Bitfield-Mask: 0x01) */ +/* ======================================================== DCPMAXP ======================================================== */ + #define R_USBF_DCPMAXP_MXPS_Pos (0UL) /*!< MXPS (Bit 0) */ + #define R_USBF_DCPMAXP_MXPS_Msk (0x7fUL) /*!< MXPS (Bitfield-Mask: 0x7f) */ +/* ======================================================== DCPCTR ========================================================= */ + #define R_USBF_DCPCTR_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define R_USBF_DCPCTR_PID_Msk (0x3UL) /*!< PID (Bitfield-Mask: 0x03) */ + #define R_USBF_DCPCTR_CCPL_Pos (2UL) /*!< CCPL (Bit 2) */ + #define R_USBF_DCPCTR_CCPL_Msk (0x4UL) /*!< CCPL (Bitfield-Mask: 0x01) */ + #define R_USBF_DCPCTR_PBUSY_Pos (5UL) /*!< PBUSY (Bit 5) */ + #define R_USBF_DCPCTR_PBUSY_Msk (0x20UL) /*!< PBUSY (Bitfield-Mask: 0x01) */ + #define R_USBF_DCPCTR_SQMON_Pos (6UL) /*!< SQMON (Bit 6) */ + #define R_USBF_DCPCTR_SQMON_Msk (0x40UL) /*!< SQMON (Bitfield-Mask: 0x01) */ + #define R_USBF_DCPCTR_SQSET_Pos (7UL) /*!< SQSET (Bit 7) */ + #define R_USBF_DCPCTR_SQSET_Msk (0x80UL) /*!< SQSET (Bitfield-Mask: 0x01) */ + #define R_USBF_DCPCTR_SQCLR_Pos (8UL) /*!< SQCLR (Bit 8) */ + #define R_USBF_DCPCTR_SQCLR_Msk (0x100UL) /*!< SQCLR (Bitfield-Mask: 0x01) */ + #define R_USBF_DCPCTR_BSTS_Pos (15UL) /*!< BSTS (Bit 15) */ + #define R_USBF_DCPCTR_BSTS_Msk (0x8000UL) /*!< BSTS (Bitfield-Mask: 0x01) */ +/* ======================================================== PIPESEL ======================================================== */ + #define R_USBF_PIPESEL_PIPESEL_Pos (0UL) /*!< PIPESEL (Bit 0) */ + #define R_USBF_PIPESEL_PIPESEL_Msk (0xfUL) /*!< PIPESEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== PIPECFG ======================================================== */ + #define R_USBF_PIPECFG_EPNUM_Pos (0UL) /*!< EPNUM (Bit 0) */ + #define R_USBF_PIPECFG_EPNUM_Msk (0xfUL) /*!< EPNUM (Bitfield-Mask: 0x0f) */ + #define R_USBF_PIPECFG_DIR_Pos (4UL) /*!< DIR (Bit 4) */ + #define R_USBF_PIPECFG_DIR_Msk (0x10UL) /*!< DIR (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPECFG_SHTNAK_Pos (7UL) /*!< SHTNAK (Bit 7) */ + #define R_USBF_PIPECFG_SHTNAK_Msk (0x80UL) /*!< SHTNAK (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPECFG_CNTMD_Pos (8UL) /*!< CNTMD (Bit 8) */ + #define R_USBF_PIPECFG_CNTMD_Msk (0x100UL) /*!< CNTMD (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPECFG_DBLB_Pos (9UL) /*!< DBLB (Bit 9) */ + #define R_USBF_PIPECFG_DBLB_Msk (0x200UL) /*!< DBLB (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPECFG_BFRE_Pos (10UL) /*!< BFRE (Bit 10) */ + #define R_USBF_PIPECFG_BFRE_Msk (0x400UL) /*!< BFRE (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPECFG_TYPE_Pos (14UL) /*!< TYPE (Bit 14) */ + #define R_USBF_PIPECFG_TYPE_Msk (0xc000UL) /*!< TYPE (Bitfield-Mask: 0x03) */ +/* ======================================================== PIPEBUF ======================================================== */ + #define R_USBF_PIPEBUF_BUFNMB_Pos (0UL) /*!< BUFNMB (Bit 0) */ + #define R_USBF_PIPEBUF_BUFNMB_Msk (0xffUL) /*!< BUFNMB (Bitfield-Mask: 0xff) */ + #define R_USBF_PIPEBUF_BUFSIZE_Pos (10UL) /*!< BUFSIZE (Bit 10) */ + #define R_USBF_PIPEBUF_BUFSIZE_Msk (0x7c00UL) /*!< BUFSIZE (Bitfield-Mask: 0x1f) */ +/* ======================================================= PIPEMAXP ======================================================== */ + #define R_USBF_PIPEMAXP_MXPS_Pos (0UL) /*!< MXPS (Bit 0) */ + #define R_USBF_PIPEMAXP_MXPS_Msk (0x7ffUL) /*!< MXPS (Bitfield-Mask: 0x7ff) */ +/* ======================================================= PIPEPERI ======================================================== */ + #define R_USBF_PIPEPERI_IITV_Pos (0UL) /*!< IITV (Bit 0) */ + #define R_USBF_PIPEPERI_IITV_Msk (0x7UL) /*!< IITV (Bitfield-Mask: 0x07) */ + #define R_USBF_PIPEPERI_IFIS_Pos (12UL) /*!< IFIS (Bit 12) */ + #define R_USBF_PIPEPERI_IFIS_Msk (0x1000UL) /*!< IFIS (Bitfield-Mask: 0x01) */ +/* ======================================================= PIPE_CTR ======================================================== */ + #define R_USBF_PIPE_CTR_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define R_USBF_PIPE_CTR_PID_Msk (0x3UL) /*!< PID (Bitfield-Mask: 0x03) */ + #define R_USBF_PIPE_CTR_PBUSY_Pos (5UL) /*!< PBUSY (Bit 5) */ + #define R_USBF_PIPE_CTR_PBUSY_Msk (0x20UL) /*!< PBUSY (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_CTR_SQMON_Pos (6UL) /*!< SQMON (Bit 6) */ + #define R_USBF_PIPE_CTR_SQMON_Msk (0x40UL) /*!< SQMON (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_CTR_SQSET_Pos (7UL) /*!< SQSET (Bit 7) */ + #define R_USBF_PIPE_CTR_SQSET_Msk (0x80UL) /*!< SQSET (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_CTR_SQCLR_Pos (8UL) /*!< SQCLR (Bit 8) */ + #define R_USBF_PIPE_CTR_SQCLR_Msk (0x100UL) /*!< SQCLR (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_CTR_ACLRM_Pos (9UL) /*!< ACLRM (Bit 9) */ + #define R_USBF_PIPE_CTR_ACLRM_Msk (0x200UL) /*!< ACLRM (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_CTR_ATREPM_Pos (10UL) /*!< ATREPM (Bit 10) */ + #define R_USBF_PIPE_CTR_ATREPM_Msk (0x400UL) /*!< ATREPM (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_CTR_INBUFM_Pos (14UL) /*!< INBUFM (Bit 14) */ + #define R_USBF_PIPE_CTR_INBUFM_Msk (0x4000UL) /*!< INBUFM (Bitfield-Mask: 0x01) */ + #define R_USBF_PIPE_CTR_BSTS_Pos (15UL) /*!< BSTS (Bit 15) */ + #define R_USBF_PIPE_CTR_BSTS_Msk (0x8000UL) /*!< BSTS (Bitfield-Mask: 0x01) */ +/* ========================================================= LPSTS ========================================================= */ + #define R_USBF_LPSTS_SUSPM_Pos (14UL) /*!< SUSPM (Bit 14) */ + #define R_USBF_LPSTS_SUSPM_Msk (0x4000UL) /*!< SUSPM (Bitfield-Mask: 0x01) */ +/* ========================================================= DCTRL ========================================================= */ + #define R_USBF_DCTRL_PR_Pos (0UL) /*!< PR (Bit 0) */ + #define R_USBF_DCTRL_PR_Msk (0x1UL) /*!< PR (Bitfield-Mask: 0x01) */ + #define R_USBF_DCTRL_LDPR_Pos (16UL) /*!< LDPR (Bit 16) */ + #define R_USBF_DCTRL_LDPR_Msk (0xf0000UL) /*!< LDPR (Bitfield-Mask: 0x0f) */ + #define R_USBF_DCTRL_LWPR_Pos (24UL) /*!< LWPR (Bit 24) */ + #define R_USBF_DCTRL_LWPR_Msk (0xf000000UL) /*!< LWPR (Bitfield-Mask: 0x0f) */ +/* ======================================================== DSCITVL ======================================================== */ + #define R_USBF_DSCITVL_DITVL_Pos (8UL) /*!< DITVL (Bit 8) */ + #define R_USBF_DSCITVL_DITVL_Msk (0xff00UL) /*!< DITVL (Bitfield-Mask: 0xff) */ +/* ======================================================= DSTAT_EN ======================================================== */ + #define R_USBF_DSTAT_EN_EN0_Pos (0UL) /*!< EN0 (Bit 0) */ + #define R_USBF_DSTAT_EN_EN0_Msk (0x1UL) /*!< EN0 (Bitfield-Mask: 0x01) */ + #define R_USBF_DSTAT_EN_EN1_Pos (1UL) /*!< EN1 (Bit 1) */ + #define R_USBF_DSTAT_EN_EN1_Msk (0x2UL) /*!< EN1 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_ER ======================================================== */ + #define R_USBF_DSTAT_ER_ER0_Pos (0UL) /*!< ER0 (Bit 0) */ + #define R_USBF_DSTAT_ER_ER0_Msk (0x1UL) /*!< ER0 (Bitfield-Mask: 0x01) */ + #define R_USBF_DSTAT_ER_ER1_Pos (1UL) /*!< ER1 (Bit 1) */ + #define R_USBF_DSTAT_ER_ER1_Msk (0x2UL) /*!< ER1 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_END ======================================================= */ + #define R_USBF_DSTAT_END_END0_Pos (0UL) /*!< END0 (Bit 0) */ + #define R_USBF_DSTAT_END_END0_Msk (0x1UL) /*!< END0 (Bitfield-Mask: 0x01) */ + #define R_USBF_DSTAT_END_END1_Pos (1UL) /*!< END1 (Bit 1) */ + #define R_USBF_DSTAT_END_END1_Msk (0x2UL) /*!< END1 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_TC ======================================================== */ + #define R_USBF_DSTAT_TC_TC0_Pos (0UL) /*!< TC0 (Bit 0) */ + #define R_USBF_DSTAT_TC_TC0_Msk (0x1UL) /*!< TC0 (Bitfield-Mask: 0x01) */ + #define R_USBF_DSTAT_TC_TC1_Pos (1UL) /*!< TC1 (Bit 1) */ + #define R_USBF_DSTAT_TC_TC1_Msk (0x2UL) /*!< TC1 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSTAT_SUS ======================================================= */ + #define R_USBF_DSTAT_SUS_SUS0_Pos (0UL) /*!< SUS0 (Bit 0) */ + #define R_USBF_DSTAT_SUS_SUS0_Msk (0x1UL) /*!< SUS0 (Bitfield-Mask: 0x01) */ + #define R_USBF_DSTAT_SUS_SUS1_Pos (1UL) /*!< SUS1 (Bit 1) */ + #define R_USBF_DSTAT_SUS_SUS1_Msk (0x2UL) /*!< SUS1 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_BSC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CMNCR ========================================================= */ + #define R_BSC_CMNCR_DPRTY_Pos (9UL) /*!< DPRTY (Bit 9) */ + #define R_BSC_CMNCR_DPRTY_Msk (0x600UL) /*!< DPRTY (Bitfield-Mask: 0x03) */ + #define R_BSC_CMNCR_AL_Pos (24UL) /*!< AL (Bit 24) */ + #define R_BSC_CMNCR_AL_Msk (0x1000000UL) /*!< AL (Bitfield-Mask: 0x01) */ + #define R_BSC_CMNCR_TL_Pos (28UL) /*!< TL (Bit 28) */ + #define R_BSC_CMNCR_TL_Msk (0x10000000UL) /*!< TL (Bitfield-Mask: 0x01) */ +/* ======================================================== CSnBCR ========================================================= */ + #define R_BSC_CSnBCR_BSZ_Pos (9UL) /*!< BSZ (Bit 9) */ + #define R_BSC_CSnBCR_BSZ_Msk (0x600UL) /*!< BSZ (Bitfield-Mask: 0x03) */ + #define R_BSC_CSnBCR_TYPE_Pos (12UL) /*!< TYPE (Bit 12) */ + #define R_BSC_CSnBCR_TYPE_Msk (0x7000UL) /*!< TYPE (Bitfield-Mask: 0x07) */ + #define R_BSC_CSnBCR_IWRRS_Pos (16UL) /*!< IWRRS (Bit 16) */ + #define R_BSC_CSnBCR_IWRRS_Msk (0x70000UL) /*!< IWRRS (Bitfield-Mask: 0x07) */ + #define R_BSC_CSnBCR_IWRRD_Pos (19UL) /*!< IWRRD (Bit 19) */ + #define R_BSC_CSnBCR_IWRRD_Msk (0x380000UL) /*!< IWRRD (Bitfield-Mask: 0x07) */ + #define R_BSC_CSnBCR_IWRWS_Pos (22UL) /*!< IWRWS (Bit 22) */ + #define R_BSC_CSnBCR_IWRWS_Msk (0x1c00000UL) /*!< IWRWS (Bitfield-Mask: 0x07) */ + #define R_BSC_CSnBCR_IWRWD_Pos (25UL) /*!< IWRWD (Bit 25) */ + #define R_BSC_CSnBCR_IWRWD_Msk (0xe000000UL) /*!< IWRWD (Bitfield-Mask: 0x07) */ + #define R_BSC_CSnBCR_IWW_Pos (28UL) /*!< IWW (Bit 28) */ + #define R_BSC_CSnBCR_IWW_Msk (0x70000000UL) /*!< IWW (Bitfield-Mask: 0x07) */ +/* ======================================================= CS0WCR_0 ======================================================== */ + #define R_BSC_CS0WCR_0_HW_Pos (0UL) /*!< HW (Bit 0) */ + #define R_BSC_CS0WCR_0_HW_Msk (0x3UL) /*!< HW (Bitfield-Mask: 0x03) */ + #define R_BSC_CS0WCR_0_WM_Pos (6UL) /*!< WM (Bit 6) */ + #define R_BSC_CS0WCR_0_WM_Msk (0x40UL) /*!< WM (Bitfield-Mask: 0x01) */ + #define R_BSC_CS0WCR_0_WR_Pos (7UL) /*!< WR (Bit 7) */ + #define R_BSC_CS0WCR_0_WR_Msk (0x780UL) /*!< WR (Bitfield-Mask: 0x0f) */ + #define R_BSC_CS0WCR_0_SW_Pos (11UL) /*!< SW (Bit 11) */ + #define R_BSC_CS0WCR_0_SW_Msk (0x1800UL) /*!< SW (Bitfield-Mask: 0x03) */ + #define R_BSC_CS0WCR_0_BAS_Pos (20UL) /*!< BAS (Bit 20) */ + #define R_BSC_CS0WCR_0_BAS_Msk (0x100000UL) /*!< BAS (Bitfield-Mask: 0x01) */ +/* ======================================================= CS0WCR_1 ======================================================== */ + #define R_BSC_CS0WCR_1_WM_Pos (6UL) /*!< WM (Bit 6) */ + #define R_BSC_CS0WCR_1_WM_Msk (0x40UL) /*!< WM (Bitfield-Mask: 0x01) */ + #define R_BSC_CS0WCR_1_W_Pos (7UL) /*!< W (Bit 7) */ + #define R_BSC_CS0WCR_1_W_Msk (0x780UL) /*!< W (Bitfield-Mask: 0x0f) */ + #define R_BSC_CS0WCR_1_BW_Pos (16UL) /*!< BW (Bit 16) */ + #define R_BSC_CS0WCR_1_BW_Msk (0x30000UL) /*!< BW (Bitfield-Mask: 0x03) */ + #define R_BSC_CS0WCR_1_BST_Pos (20UL) /*!< BST (Bit 20) */ + #define R_BSC_CS0WCR_1_BST_Msk (0x300000UL) /*!< BST (Bitfield-Mask: 0x03) */ +/* ======================================================= CS0WCR_2 ======================================================== */ + #define R_BSC_CS0WCR_2_WM_Pos (6UL) /*!< WM (Bit 6) */ + #define R_BSC_CS0WCR_2_WM_Msk (0x40UL) /*!< WM (Bitfield-Mask: 0x01) */ + #define R_BSC_CS0WCR_2_W_Pos (7UL) /*!< W (Bit 7) */ + #define R_BSC_CS0WCR_2_W_Msk (0x780UL) /*!< W (Bitfield-Mask: 0x0f) */ + #define R_BSC_CS0WCR_2_BW_Pos (16UL) /*!< BW (Bit 16) */ + #define R_BSC_CS0WCR_2_BW_Msk (0x30000UL) /*!< BW (Bitfield-Mask: 0x03) */ +/* ======================================================= CS2WCR_0 ======================================================== */ + #define R_BSC_CS2WCR_0_WM_Pos (6UL) /*!< WM (Bit 6) */ + #define R_BSC_CS2WCR_0_WM_Msk (0x40UL) /*!< WM (Bitfield-Mask: 0x01) */ + #define R_BSC_CS2WCR_0_WR_Pos (7UL) /*!< WR (Bit 7) */ + #define R_BSC_CS2WCR_0_WR_Msk (0x780UL) /*!< WR (Bitfield-Mask: 0x0f) */ + #define R_BSC_CS2WCR_0_BAS_Pos (20UL) /*!< BAS (Bit 20) */ + #define R_BSC_CS2WCR_0_BAS_Msk (0x100000UL) /*!< BAS (Bitfield-Mask: 0x01) */ +/* ======================================================= CS2WCR_1 ======================================================== */ + #define R_BSC_CS2WCR_1_A2CL_Pos (7UL) /*!< A2CL (Bit 7) */ + #define R_BSC_CS2WCR_1_A2CL_Msk (0x180UL) /*!< A2CL (Bitfield-Mask: 0x03) */ +/* ======================================================= CS3WCR_0 ======================================================== */ + #define R_BSC_CS3WCR_0_WM_Pos (6UL) /*!< WM (Bit 6) */ + #define R_BSC_CS3WCR_0_WM_Msk (0x40UL) /*!< WM (Bitfield-Mask: 0x01) */ + #define R_BSC_CS3WCR_0_WR_Pos (7UL) /*!< WR (Bit 7) */ + #define R_BSC_CS3WCR_0_WR_Msk (0x780UL) /*!< WR (Bitfield-Mask: 0x0f) */ + #define R_BSC_CS3WCR_0_BAS_Pos (20UL) /*!< BAS (Bit 20) */ + #define R_BSC_CS3WCR_0_BAS_Msk (0x100000UL) /*!< BAS (Bitfield-Mask: 0x01) */ +/* ======================================================= CS3WCR_1 ======================================================== */ + #define R_BSC_CS3WCR_1_WTRC_Pos (0UL) /*!< WTRC (Bit 0) */ + #define R_BSC_CS3WCR_1_WTRC_Msk (0x3UL) /*!< WTRC (Bitfield-Mask: 0x03) */ + #define R_BSC_CS3WCR_1_TRWL_Pos (3UL) /*!< TRWL (Bit 3) */ + #define R_BSC_CS3WCR_1_TRWL_Msk (0x18UL) /*!< TRWL (Bitfield-Mask: 0x03) */ + #define R_BSC_CS3WCR_1_A3CL_Pos (7UL) /*!< A3CL (Bit 7) */ + #define R_BSC_CS3WCR_1_A3CL_Msk (0x180UL) /*!< A3CL (Bitfield-Mask: 0x03) */ + #define R_BSC_CS3WCR_1_WTRCD_Pos (10UL) /*!< WTRCD (Bit 10) */ + #define R_BSC_CS3WCR_1_WTRCD_Msk (0xc00UL) /*!< WTRCD (Bitfield-Mask: 0x03) */ + #define R_BSC_CS3WCR_1_WTRP_Pos (13UL) /*!< WTRP (Bit 13) */ + #define R_BSC_CS3WCR_1_WTRP_Msk (0x6000UL) /*!< WTRP (Bitfield-Mask: 0x03) */ +/* ======================================================== CS5WCR ========================================================= */ + #define R_BSC_CS5WCR_HW_Pos (0UL) /*!< HW (Bit 0) */ + #define R_BSC_CS5WCR_HW_Msk (0x3UL) /*!< HW (Bitfield-Mask: 0x03) */ + #define R_BSC_CS5WCR_WM_Pos (6UL) /*!< WM (Bit 6) */ + #define R_BSC_CS5WCR_WM_Msk (0x40UL) /*!< WM (Bitfield-Mask: 0x01) */ + #define R_BSC_CS5WCR_WR_Pos (7UL) /*!< WR (Bit 7) */ + #define R_BSC_CS5WCR_WR_Msk (0x780UL) /*!< WR (Bitfield-Mask: 0x0f) */ + #define R_BSC_CS5WCR_SW_Pos (11UL) /*!< SW (Bit 11) */ + #define R_BSC_CS5WCR_SW_Msk (0x1800UL) /*!< SW (Bitfield-Mask: 0x03) */ + #define R_BSC_CS5WCR_WW_Pos (16UL) /*!< WW (Bit 16) */ + #define R_BSC_CS5WCR_WW_Msk (0x70000UL) /*!< WW (Bitfield-Mask: 0x07) */ + #define R_BSC_CS5WCR_MPXWSBAS_Pos (20UL) /*!< MPXWSBAS (Bit 20) */ + #define R_BSC_CS5WCR_MPXWSBAS_Msk (0x100000UL) /*!< MPXWSBAS (Bitfield-Mask: 0x01) */ + #define R_BSC_CS5WCR_SZSEL_Pos (21UL) /*!< SZSEL (Bit 21) */ + #define R_BSC_CS5WCR_SZSEL_Msk (0x200000UL) /*!< SZSEL (Bitfield-Mask: 0x01) */ +/* ========================================================= SDCR ========================================================== */ + #define R_BSC_SDCR_A3COL_Pos (0UL) /*!< A3COL (Bit 0) */ + #define R_BSC_SDCR_A3COL_Msk (0x3UL) /*!< A3COL (Bitfield-Mask: 0x03) */ + #define R_BSC_SDCR_A3ROW_Pos (3UL) /*!< A3ROW (Bit 3) */ + #define R_BSC_SDCR_A3ROW_Msk (0x18UL) /*!< A3ROW (Bitfield-Mask: 0x03) */ + #define R_BSC_SDCR_BACTV_Pos (8UL) /*!< BACTV (Bit 8) */ + #define R_BSC_SDCR_BACTV_Msk (0x100UL) /*!< BACTV (Bitfield-Mask: 0x01) */ + #define R_BSC_SDCR_PDOWN_Pos (9UL) /*!< PDOWN (Bit 9) */ + #define R_BSC_SDCR_PDOWN_Msk (0x200UL) /*!< PDOWN (Bitfield-Mask: 0x01) */ + #define R_BSC_SDCR_RMODE_Pos (10UL) /*!< RMODE (Bit 10) */ + #define R_BSC_SDCR_RMODE_Msk (0x400UL) /*!< RMODE (Bitfield-Mask: 0x01) */ + #define R_BSC_SDCR_RFSH_Pos (11UL) /*!< RFSH (Bit 11) */ + #define R_BSC_SDCR_RFSH_Msk (0x800UL) /*!< RFSH (Bitfield-Mask: 0x01) */ + #define R_BSC_SDCR_DEEP_Pos (13UL) /*!< DEEP (Bit 13) */ + #define R_BSC_SDCR_DEEP_Msk (0x2000UL) /*!< DEEP (Bitfield-Mask: 0x01) */ + #define R_BSC_SDCR_A2COL_Pos (16UL) /*!< A2COL (Bit 16) */ + #define R_BSC_SDCR_A2COL_Msk (0x30000UL) /*!< A2COL (Bitfield-Mask: 0x03) */ + #define R_BSC_SDCR_A2ROW_Pos (19UL) /*!< A2ROW (Bit 19) */ + #define R_BSC_SDCR_A2ROW_Msk (0x180000UL) /*!< A2ROW (Bitfield-Mask: 0x03) */ +/* ========================================================= RTCSR ========================================================= */ +/* ========================================================= RTCNT ========================================================= */ +/* ========================================================= RTCOR ========================================================= */ +/* ======================================================== TOSCOR ========================================================= */ + #define R_BSC_TOSCOR_TOCNUM_Pos (0UL) /*!< TOCNUM (Bit 0) */ + #define R_BSC_TOSCOR_TOCNUM_Msk (0xffffUL) /*!< TOCNUM (Bitfield-Mask: 0xffff) */ +/* ========================================================= TOSTR ========================================================= */ + #define R_BSC_TOSTR_CS0TOSTF_Pos (0UL) /*!< CS0TOSTF (Bit 0) */ + #define R_BSC_TOSTR_CS0TOSTF_Msk (0x1UL) /*!< CS0TOSTF (Bitfield-Mask: 0x01) */ + #define R_BSC_TOSTR_CS2TOSTF_Pos (2UL) /*!< CS2TOSTF (Bit 2) */ + #define R_BSC_TOSTR_CS2TOSTF_Msk (0x4UL) /*!< CS2TOSTF (Bitfield-Mask: 0x01) */ + #define R_BSC_TOSTR_CS3TOSTF_Pos (3UL) /*!< CS3TOSTF (Bit 3) */ + #define R_BSC_TOSTR_CS3TOSTF_Msk (0x8UL) /*!< CS3TOSTF (Bitfield-Mask: 0x01) */ + #define R_BSC_TOSTR_CS5TOSTF_Pos (5UL) /*!< CS5TOSTF (Bit 5) */ + #define R_BSC_TOSTR_CS5TOSTF_Msk (0x20UL) /*!< CS5TOSTF (Bitfield-Mask: 0x01) */ +/* ========================================================= TOENR ========================================================= */ + #define R_BSC_TOENR_CS0TOEN_Pos (0UL) /*!< CS0TOEN (Bit 0) */ + #define R_BSC_TOENR_CS0TOEN_Msk (0x1UL) /*!< CS0TOEN (Bitfield-Mask: 0x01) */ + #define R_BSC_TOENR_CS2TOEN_Pos (2UL) /*!< CS2TOEN (Bit 2) */ + #define R_BSC_TOENR_CS2TOEN_Msk (0x4UL) /*!< CS2TOEN (Bitfield-Mask: 0x01) */ + #define R_BSC_TOENR_CS3TOEN_Pos (3UL) /*!< CS3TOEN (Bit 3) */ + #define R_BSC_TOENR_CS3TOEN_Msk (0x8UL) /*!< CS3TOEN (Bitfield-Mask: 0x01) */ + #define R_BSC_TOENR_CS5TOEN_Pos (5UL) /*!< CS5TOEN (Bit 5) */ + #define R_BSC_TOENR_CS5TOEN_Msk (0x20UL) /*!< CS5TOEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_XSPI0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== WRAPCFG ======================================================== */ + #define R_XSPI0_WRAPCFG_DSSFTCS0_Pos (8UL) /*!< DSSFTCS0 (Bit 8) */ + #define R_XSPI0_WRAPCFG_DSSFTCS0_Msk (0x1f00UL) /*!< DSSFTCS0 (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_WRAPCFG_DSSFTCS1_Pos (24UL) /*!< DSSFTCS1 (Bit 24) */ + #define R_XSPI0_WRAPCFG_DSSFTCS1_Msk (0x1f000000UL) /*!< DSSFTCS1 (Bitfield-Mask: 0x1f) */ +/* ======================================================== COMCFG ========================================================= */ + #define R_XSPI0_COMCFG_OEASTEX_Pos (16UL) /*!< OEASTEX (Bit 16) */ + #define R_XSPI0_COMCFG_OEASTEX_Msk (0x10000UL) /*!< OEASTEX (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMCFG_OENEGEX_Pos (17UL) /*!< OENEGEX (Bit 17) */ + #define R_XSPI0_COMCFG_OENEGEX_Msk (0x20000UL) /*!< OENEGEX (Bitfield-Mask: 0x01) */ +/* ========================================================= BMCFG ========================================================= */ + #define R_XSPI0_BMCFG_WRMD_Pos (0UL) /*!< WRMD (Bit 0) */ + #define R_XSPI0_BMCFG_WRMD_Msk (0x1UL) /*!< WRMD (Bitfield-Mask: 0x01) */ + #define R_XSPI0_BMCFG_MWRCOMB_Pos (7UL) /*!< MWRCOMB (Bit 7) */ + #define R_XSPI0_BMCFG_MWRCOMB_Msk (0x80UL) /*!< MWRCOMB (Bitfield-Mask: 0x01) */ + #define R_XSPI0_BMCFG_MWRSIZE_Pos (8UL) /*!< MWRSIZE (Bit 8) */ + #define R_XSPI0_BMCFG_MWRSIZE_Msk (0xff00UL) /*!< MWRSIZE (Bitfield-Mask: 0xff) */ + #define R_XSPI0_BMCFG_PREEN_Pos (16UL) /*!< PREEN (Bit 16) */ + #define R_XSPI0_BMCFG_PREEN_Msk (0x10000UL) /*!< PREEN (Bitfield-Mask: 0x01) */ +/* ======================================================= LIOCFGCS ======================================================== */ + #define R_XSPI0_LIOCFGCS_PRTMD_Pos (0UL) /*!< PRTMD (Bit 0) */ + #define R_XSPI0_LIOCFGCS_PRTMD_Msk (0x3ffUL) /*!< PRTMD (Bitfield-Mask: 0x3ff) */ + #define R_XSPI0_LIOCFGCS_LATEMD_Pos (10UL) /*!< LATEMD (Bit 10) */ + #define R_XSPI0_LIOCFGCS_LATEMD_Msk (0x400UL) /*!< LATEMD (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCFGCS_WRMSKMD_Pos (11UL) /*!< WRMSKMD (Bit 11) */ + #define R_XSPI0_LIOCFGCS_WRMSKMD_Msk (0x800UL) /*!< WRMSKMD (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCFGCS_CSMIN_Pos (16UL) /*!< CSMIN (Bit 16) */ + #define R_XSPI0_LIOCFGCS_CSMIN_Msk (0xf0000UL) /*!< CSMIN (Bitfield-Mask: 0x0f) */ + #define R_XSPI0_LIOCFGCS_CSASTEX_Pos (20UL) /*!< CSASTEX (Bit 20) */ + #define R_XSPI0_LIOCFGCS_CSASTEX_Msk (0x100000UL) /*!< CSASTEX (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCFGCS_CSNEGEX_Pos (21UL) /*!< CSNEGEX (Bit 21) */ + #define R_XSPI0_LIOCFGCS_CSNEGEX_Msk (0x200000UL) /*!< CSNEGEX (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCFGCS_SDRDRV_Pos (22UL) /*!< SDRDRV (Bit 22) */ + #define R_XSPI0_LIOCFGCS_SDRDRV_Msk (0x400000UL) /*!< SDRDRV (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCFGCS_SDRSMPMD_Pos (23UL) /*!< SDRSMPMD (Bit 23) */ + #define R_XSPI0_LIOCFGCS_SDRSMPMD_Msk (0x800000UL) /*!< SDRSMPMD (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCFGCS_SDRSMPSFT_Pos (24UL) /*!< SDRSMPSFT (Bit 24) */ + #define R_XSPI0_LIOCFGCS_SDRSMPSFT_Msk (0xf000000UL) /*!< SDRSMPSFT (Bitfield-Mask: 0x0f) */ + #define R_XSPI0_LIOCFGCS_DDRSMPEX_Pos (28UL) /*!< DDRSMPEX (Bit 28) */ + #define R_XSPI0_LIOCFGCS_DDRSMPEX_Msk (0xf0000000UL) /*!< DDRSMPEX (Bitfield-Mask: 0x0f) */ +/* ======================================================== BMCTL0 ========================================================= */ + #define R_XSPI0_BMCTL0_CS0ACC_Pos (0UL) /*!< CS0ACC (Bit 0) */ + #define R_XSPI0_BMCTL0_CS0ACC_Msk (0x3UL) /*!< CS0ACC (Bitfield-Mask: 0x03) */ + #define R_XSPI0_BMCTL0_CS1ACC_Pos (2UL) /*!< CS1ACC (Bit 2) */ + #define R_XSPI0_BMCTL0_CS1ACC_Msk (0xcUL) /*!< CS1ACC (Bitfield-Mask: 0x03) */ +/* ======================================================== BMCTL1 ========================================================= */ + #define R_XSPI0_BMCTL1_MWRPUSH_Pos (8UL) /*!< MWRPUSH (Bit 8) */ + #define R_XSPI0_BMCTL1_MWRPUSH_Msk (0x100UL) /*!< MWRPUSH (Bitfield-Mask: 0x01) */ + #define R_XSPI0_BMCTL1_PBUFCLR_Pos (10UL) /*!< PBUFCLR (Bit 10) */ + #define R_XSPI0_BMCTL1_PBUFCLR_Msk (0x400UL) /*!< PBUFCLR (Bitfield-Mask: 0x01) */ +/* ========================================================= CMCTL ========================================================= */ + #define R_XSPI0_CMCTL_XIPENCODE_Pos (0UL) /*!< XIPENCODE (Bit 0) */ + #define R_XSPI0_CMCTL_XIPENCODE_Msk (0xffUL) /*!< XIPENCODE (Bitfield-Mask: 0xff) */ + #define R_XSPI0_CMCTL_XIPEXCODE_Pos (8UL) /*!< XIPEXCODE (Bit 8) */ + #define R_XSPI0_CMCTL_XIPEXCODE_Msk (0xff00UL) /*!< XIPEXCODE (Bitfield-Mask: 0xff) */ + #define R_XSPI0_CMCTL_XIPEN_Pos (16UL) /*!< XIPEN (Bit 16) */ + #define R_XSPI0_CMCTL_XIPEN_Msk (0x10000UL) /*!< XIPEN (Bitfield-Mask: 0x01) */ +/* ======================================================== CSSCTL ========================================================= */ + #define R_XSPI0_CSSCTL_CS0SIZE_Pos (0UL) /*!< CS0SIZE (Bit 0) */ + #define R_XSPI0_CSSCTL_CS0SIZE_Msk (0x3fUL) /*!< CS0SIZE (Bitfield-Mask: 0x3f) */ + #define R_XSPI0_CSSCTL_CS1SIZE_Pos (8UL) /*!< CS1SIZE (Bit 8) */ + #define R_XSPI0_CSSCTL_CS1SIZE_Msk (0x3f00UL) /*!< CS1SIZE (Bitfield-Mask: 0x3f) */ +/* ======================================================== CDCTL0 ========================================================= */ + #define R_XSPI0_CDCTL0_TRREQ_Pos (0UL) /*!< TRREQ (Bit 0) */ + #define R_XSPI0_CDCTL0_TRREQ_Msk (0x1UL) /*!< TRREQ (Bitfield-Mask: 0x01) */ + #define R_XSPI0_CDCTL0_PERMD_Pos (1UL) /*!< PERMD (Bit 1) */ + #define R_XSPI0_CDCTL0_PERMD_Msk (0x2UL) /*!< PERMD (Bitfield-Mask: 0x01) */ + #define R_XSPI0_CDCTL0_CSSEL_Pos (3UL) /*!< CSSEL (Bit 3) */ + #define R_XSPI0_CDCTL0_CSSEL_Msk (0x8UL) /*!< CSSEL (Bitfield-Mask: 0x01) */ + #define R_XSPI0_CDCTL0_TRNUM_Pos (4UL) /*!< TRNUM (Bit 4) */ + #define R_XSPI0_CDCTL0_TRNUM_Msk (0x30UL) /*!< TRNUM (Bitfield-Mask: 0x03) */ + #define R_XSPI0_CDCTL0_PERITV_Pos (16UL) /*!< PERITV (Bit 16) */ + #define R_XSPI0_CDCTL0_PERITV_Msk (0x1f0000UL) /*!< PERITV (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_CDCTL0_PERREP_Pos (24UL) /*!< PERREP (Bit 24) */ + #define R_XSPI0_CDCTL0_PERREP_Msk (0xf000000UL) /*!< PERREP (Bitfield-Mask: 0x0f) */ +/* ======================================================== CDCTL1 ========================================================= */ + #define R_XSPI0_CDCTL1_PEREXP_Pos (0UL) /*!< PEREXP (Bit 0) */ + #define R_XSPI0_CDCTL1_PEREXP_Msk (0xffffffffUL) /*!< PEREXP (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CDCTL2 ========================================================= */ + #define R_XSPI0_CDCTL2_PERMSK_Pos (0UL) /*!< PERMSK (Bit 0) */ + #define R_XSPI0_CDCTL2_PERMSK_Msk (0xffffffffUL) /*!< PERMSK (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== LPCTL0 ========================================================= */ + #define R_XSPI0_LPCTL0_PATREQ_Pos (0UL) /*!< PATREQ (Bit 0) */ + #define R_XSPI0_LPCTL0_PATREQ_Msk (0x1UL) /*!< PATREQ (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LPCTL0_CSSEL_Pos (3UL) /*!< CSSEL (Bit 3) */ + #define R_XSPI0_LPCTL0_CSSEL_Msk (0x8UL) /*!< CSSEL (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LPCTL0_XDPIN_Pos (4UL) /*!< XDPIN (Bit 4) */ + #define R_XSPI0_LPCTL0_XDPIN_Msk (0x30UL) /*!< XDPIN (Bitfield-Mask: 0x03) */ + #define R_XSPI0_LPCTL0_XD1LEN_Pos (16UL) /*!< XD1LEN (Bit 16) */ + #define R_XSPI0_LPCTL0_XD1LEN_Msk (0x1f0000UL) /*!< XD1LEN (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_LPCTL0_XD1VAL_Pos (23UL) /*!< XD1VAL (Bit 23) */ + #define R_XSPI0_LPCTL0_XD1VAL_Msk (0x800000UL) /*!< XD1VAL (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LPCTL0_XD2LEN_Pos (24UL) /*!< XD2LEN (Bit 24) */ + #define R_XSPI0_LPCTL0_XD2LEN_Msk (0x1f000000UL) /*!< XD2LEN (Bitfield-Mask: 0x1f) */ + #define R_XSPI0_LPCTL0_XD2VAL_Pos (31UL) /*!< XD2VAL (Bit 31) */ + #define R_XSPI0_LPCTL0_XD2VAL_Msk (0x80000000UL) /*!< XD2VAL (Bitfield-Mask: 0x01) */ +/* ======================================================== LPCTL1 ========================================================= */ + #define R_XSPI0_LPCTL1_PATREQ_Pos (0UL) /*!< PATREQ (Bit 0) */ + #define R_XSPI0_LPCTL1_PATREQ_Msk (0x3UL) /*!< PATREQ (Bitfield-Mask: 0x03) */ + #define R_XSPI0_LPCTL1_CSSEL_Pos (3UL) /*!< CSSEL (Bit 3) */ + #define R_XSPI0_LPCTL1_CSSEL_Msk (0x8UL) /*!< CSSEL (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LPCTL1_RSTREP_Pos (4UL) /*!< RSTREP (Bit 4) */ + #define R_XSPI0_LPCTL1_RSTREP_Msk (0x30UL) /*!< RSTREP (Bitfield-Mask: 0x03) */ + #define R_XSPI0_LPCTL1_RSTWID_Pos (8UL) /*!< RSTWID (Bit 8) */ + #define R_XSPI0_LPCTL1_RSTWID_Msk (0x700UL) /*!< RSTWID (Bitfield-Mask: 0x07) */ + #define R_XSPI0_LPCTL1_RSTSU_Pos (12UL) /*!< RSTSU (Bit 12) */ + #define R_XSPI0_LPCTL1_RSTSU_Msk (0x7000UL) /*!< RSTSU (Bitfield-Mask: 0x07) */ +/* ======================================================== LIOCTL ========================================================= */ + #define R_XSPI0_LIOCTL_WPCS0_Pos (0UL) /*!< WPCS0 (Bit 0) */ + #define R_XSPI0_LIOCTL_WPCS0_Msk (0x1UL) /*!< WPCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCTL_WPCS1_Pos (1UL) /*!< WPCS1 (Bit 1) */ + #define R_XSPI0_LIOCTL_WPCS1_Msk (0x2UL) /*!< WPCS1 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCTL_RSTCS0_Pos (16UL) /*!< RSTCS0 (Bit 16) */ + #define R_XSPI0_LIOCTL_RSTCS0_Msk (0x10000UL) /*!< RSTCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_LIOCTL_RSTCS1_Pos (17UL) /*!< RSTCS1 (Bit 17) */ + #define R_XSPI0_LIOCTL_RSTCS1_Msk (0x20000UL) /*!< RSTCS1 (Bitfield-Mask: 0x01) */ +/* ======================================================== VERSTT ========================================================= */ + #define R_XSPI0_VERSTT_VER_Pos (0UL) /*!< VER (Bit 0) */ + #define R_XSPI0_VERSTT_VER_Msk (0xffffffffUL) /*!< VER (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== COMSTT ========================================================= */ + #define R_XSPI0_COMSTT_MEMACC_Pos (0UL) /*!< MEMACC (Bit 0) */ + #define R_XSPI0_COMSTT_MEMACC_Msk (0x1UL) /*!< MEMACC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_PBUFNE_Pos (4UL) /*!< PBUFNE (Bit 4) */ + #define R_XSPI0_COMSTT_PBUFNE_Msk (0x10UL) /*!< PBUFNE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_WRBUFNE_Pos (6UL) /*!< WRBUFNE (Bit 6) */ + #define R_XSPI0_COMSTT_WRBUFNE_Msk (0x40UL) /*!< WRBUFNE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_ECSCS0_Pos (16UL) /*!< ECSCS0 (Bit 16) */ + #define R_XSPI0_COMSTT_ECSCS0_Msk (0x10000UL) /*!< ECSCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_INTCS0_Pos (17UL) /*!< INTCS0 (Bit 17) */ + #define R_XSPI0_COMSTT_INTCS0_Msk (0x20000UL) /*!< INTCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_RSTOCS0_Pos (18UL) /*!< RSTOCS0 (Bit 18) */ + #define R_XSPI0_COMSTT_RSTOCS0_Msk (0x40000UL) /*!< RSTOCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_ECSCS1_Pos (20UL) /*!< ECSCS1 (Bit 20) */ + #define R_XSPI0_COMSTT_ECSCS1_Msk (0x100000UL) /*!< ECSCS1 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_INTCS1_Pos (21UL) /*!< INTCS1 (Bit 21) */ + #define R_XSPI0_COMSTT_INTCS1_Msk (0x200000UL) /*!< INTCS1 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_COMSTT_RSTOCS1_Pos (22UL) /*!< RSTOCS1 (Bit 22) */ + #define R_XSPI0_COMSTT_RSTOCS1_Msk (0x400000UL) /*!< RSTOCS1 (Bitfield-Mask: 0x01) */ +/* ======================================================== CASTTCS ======================================================== */ + #define R_XSPI0_CASTTCS_CASUC_Pos (0UL) /*!< CASUC (Bit 0) */ + #define R_XSPI0_CASTTCS_CASUC_Msk (0xffffffffUL) /*!< CASUC (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= INTS ========================================================== */ + #define R_XSPI0_INTS_CMDCMP_Pos (0UL) /*!< CMDCMP (Bit 0) */ + #define R_XSPI0_INTS_CMDCMP_Msk (0x1UL) /*!< CMDCMP (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_PATCMP_Pos (1UL) /*!< PATCMP (Bit 1) */ + #define R_XSPI0_INTS_PATCMP_Msk (0x2UL) /*!< PATCMP (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_INICMP_Pos (2UL) /*!< INICMP (Bit 2) */ + #define R_XSPI0_INTS_INICMP_Msk (0x4UL) /*!< INICMP (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_PERTO_Pos (3UL) /*!< PERTO (Bit 3) */ + #define R_XSPI0_INTS_PERTO_Msk (0x8UL) /*!< PERTO (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_DSTOCS0_Pos (4UL) /*!< DSTOCS0 (Bit 4) */ + #define R_XSPI0_INTS_DSTOCS0_Msk (0x10UL) /*!< DSTOCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_DSTOCS1_Pos (5UL) /*!< DSTOCS1 (Bit 5) */ + #define R_XSPI0_INTS_DSTOCS1_Msk (0x20UL) /*!< DSTOCS1 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_ECSCS0_Pos (8UL) /*!< ECSCS0 (Bit 8) */ + #define R_XSPI0_INTS_ECSCS0_Msk (0x100UL) /*!< ECSCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_ECSCS1_Pos (9UL) /*!< ECSCS1 (Bit 9) */ + #define R_XSPI0_INTS_ECSCS1_Msk (0x200UL) /*!< ECSCS1 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_INTCS0_Pos (12UL) /*!< INTCS0 (Bit 12) */ + #define R_XSPI0_INTS_INTCS0_Msk (0x1000UL) /*!< INTCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_INTCS1_Pos (13UL) /*!< INTCS1 (Bit 13) */ + #define R_XSPI0_INTS_INTCS1_Msk (0x2000UL) /*!< INTCS1 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_BRGOF_Pos (16UL) /*!< BRGOF (Bit 16) */ + #define R_XSPI0_INTS_BRGOF_Msk (0x10000UL) /*!< BRGOF (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_BRGUF_Pos (18UL) /*!< BRGUF (Bit 18) */ + #define R_XSPI0_INTS_BRGUF_Msk (0x40000UL) /*!< BRGUF (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_BUSERR_Pos (20UL) /*!< BUSERR (Bit 20) */ + #define R_XSPI0_INTS_BUSERR_Msk (0x100000UL) /*!< BUSERR (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_CAFAILCS0_Pos (28UL) /*!< CAFAILCS0 (Bit 28) */ + #define R_XSPI0_INTS_CAFAILCS0_Msk (0x10000000UL) /*!< CAFAILCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_CAFAILCS1_Pos (29UL) /*!< CAFAILCS1 (Bit 29) */ + #define R_XSPI0_INTS_CAFAILCS1_Msk (0x20000000UL) /*!< CAFAILCS1 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_CASUCCS0_Pos (30UL) /*!< CASUCCS0 (Bit 30) */ + #define R_XSPI0_INTS_CASUCCS0_Msk (0x40000000UL) /*!< CASUCCS0 (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTS_CASUCCS1_Pos (31UL) /*!< CASUCCS1 (Bit 31) */ + #define R_XSPI0_INTS_CASUCCS1_Msk (0x80000000UL) /*!< CASUCCS1 (Bitfield-Mask: 0x01) */ +/* ========================================================= INTC ========================================================== */ + #define R_XSPI0_INTC_CMDCMPC_Pos (0UL) /*!< CMDCMPC (Bit 0) */ + #define R_XSPI0_INTC_CMDCMPC_Msk (0x1UL) /*!< CMDCMPC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_PATCMPC_Pos (1UL) /*!< PATCMPC (Bit 1) */ + #define R_XSPI0_INTC_PATCMPC_Msk (0x2UL) /*!< PATCMPC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_INICMPC_Pos (2UL) /*!< INICMPC (Bit 2) */ + #define R_XSPI0_INTC_INICMPC_Msk (0x4UL) /*!< INICMPC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_PERTOC_Pos (3UL) /*!< PERTOC (Bit 3) */ + #define R_XSPI0_INTC_PERTOC_Msk (0x8UL) /*!< PERTOC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_DSTOCS0C_Pos (4UL) /*!< DSTOCS0C (Bit 4) */ + #define R_XSPI0_INTC_DSTOCS0C_Msk (0x10UL) /*!< DSTOCS0C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_DSTOCS1C_Pos (5UL) /*!< DSTOCS1C (Bit 5) */ + #define R_XSPI0_INTC_DSTOCS1C_Msk (0x20UL) /*!< DSTOCS1C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_ECSCS0C_Pos (8UL) /*!< ECSCS0C (Bit 8) */ + #define R_XSPI0_INTC_ECSCS0C_Msk (0x100UL) /*!< ECSCS0C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_ECSCS1C_Pos (9UL) /*!< ECSCS1C (Bit 9) */ + #define R_XSPI0_INTC_ECSCS1C_Msk (0x200UL) /*!< ECSCS1C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_INTCS0C_Pos (12UL) /*!< INTCS0C (Bit 12) */ + #define R_XSPI0_INTC_INTCS0C_Msk (0x1000UL) /*!< INTCS0C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_INTCS1C_Pos (13UL) /*!< INTCS1C (Bit 13) */ + #define R_XSPI0_INTC_INTCS1C_Msk (0x2000UL) /*!< INTCS1C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_BRGOFC_Pos (16UL) /*!< BRGOFC (Bit 16) */ + #define R_XSPI0_INTC_BRGOFC_Msk (0x10000UL) /*!< BRGOFC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_BRGUFC_Pos (18UL) /*!< BRGUFC (Bit 18) */ + #define R_XSPI0_INTC_BRGUFC_Msk (0x40000UL) /*!< BRGUFC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_BUSERRC_Pos (20UL) /*!< BUSERRC (Bit 20) */ + #define R_XSPI0_INTC_BUSERRC_Msk (0x100000UL) /*!< BUSERRC (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_CAFAILCS0C_Pos (28UL) /*!< CAFAILCS0C (Bit 28) */ + #define R_XSPI0_INTC_CAFAILCS0C_Msk (0x10000000UL) /*!< CAFAILCS0C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_CAFAILCS1C_Pos (29UL) /*!< CAFAILCS1C (Bit 29) */ + #define R_XSPI0_INTC_CAFAILCS1C_Msk (0x20000000UL) /*!< CAFAILCS1C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_CASUCCS0C_Pos (30UL) /*!< CASUCCS0C (Bit 30) */ + #define R_XSPI0_INTC_CASUCCS0C_Msk (0x40000000UL) /*!< CASUCCS0C (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTC_CASUCCS1C_Pos (31UL) /*!< CASUCCS1C (Bit 31) */ + #define R_XSPI0_INTC_CASUCCS1C_Msk (0x80000000UL) /*!< CASUCCS1C (Bitfield-Mask: 0x01) */ +/* ========================================================= INTE ========================================================== */ + #define R_XSPI0_INTE_CMDCMPE_Pos (0UL) /*!< CMDCMPE (Bit 0) */ + #define R_XSPI0_INTE_CMDCMPE_Msk (0x1UL) /*!< CMDCMPE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_PATCMPE_Pos (1UL) /*!< PATCMPE (Bit 1) */ + #define R_XSPI0_INTE_PATCMPE_Msk (0x2UL) /*!< PATCMPE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_INICMPE_Pos (2UL) /*!< INICMPE (Bit 2) */ + #define R_XSPI0_INTE_INICMPE_Msk (0x4UL) /*!< INICMPE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_PERTOE_Pos (3UL) /*!< PERTOE (Bit 3) */ + #define R_XSPI0_INTE_PERTOE_Msk (0x8UL) /*!< PERTOE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_DSTOCS0E_Pos (4UL) /*!< DSTOCS0E (Bit 4) */ + #define R_XSPI0_INTE_DSTOCS0E_Msk (0x10UL) /*!< DSTOCS0E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_DSTOCS1E_Pos (5UL) /*!< DSTOCS1E (Bit 5) */ + #define R_XSPI0_INTE_DSTOCS1E_Msk (0x20UL) /*!< DSTOCS1E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_ECSCS0E_Pos (8UL) /*!< ECSCS0E (Bit 8) */ + #define R_XSPI0_INTE_ECSCS0E_Msk (0x100UL) /*!< ECSCS0E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_ECSCS1E_Pos (9UL) /*!< ECSCS1E (Bit 9) */ + #define R_XSPI0_INTE_ECSCS1E_Msk (0x200UL) /*!< ECSCS1E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_INTCS0E_Pos (12UL) /*!< INTCS0E (Bit 12) */ + #define R_XSPI0_INTE_INTCS0E_Msk (0x1000UL) /*!< INTCS0E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_INTCS1E_Pos (13UL) /*!< INTCS1E (Bit 13) */ + #define R_XSPI0_INTE_INTCS1E_Msk (0x2000UL) /*!< INTCS1E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_BRGOFE_Pos (16UL) /*!< BRGOFE (Bit 16) */ + #define R_XSPI0_INTE_BRGOFE_Msk (0x10000UL) /*!< BRGOFE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_BRGUFE_Pos (18UL) /*!< BRGUFE (Bit 18) */ + #define R_XSPI0_INTE_BRGUFE_Msk (0x40000UL) /*!< BRGUFE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_BUSERRE_Pos (20UL) /*!< BUSERRE (Bit 20) */ + #define R_XSPI0_INTE_BUSERRE_Msk (0x100000UL) /*!< BUSERRE (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_CAFAILCS0E_Pos (28UL) /*!< CAFAILCS0E (Bit 28) */ + #define R_XSPI0_INTE_CAFAILCS0E_Msk (0x10000000UL) /*!< CAFAILCS0E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_CAFAILCS1E_Pos (29UL) /*!< CAFAILCS1E (Bit 29) */ + #define R_XSPI0_INTE_CAFAILCS1E_Msk (0x20000000UL) /*!< CAFAILCS1E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_CASUCCS0E_Pos (30UL) /*!< CASUCCS0E (Bit 30) */ + #define R_XSPI0_INTE_CASUCCS0E_Msk (0x40000000UL) /*!< CASUCCS0E (Bitfield-Mask: 0x01) */ + #define R_XSPI0_INTE_CASUCCS1E_Pos (31UL) /*!< CASUCCS1E (Bit 31) */ + #define R_XSPI0_INTE_CASUCCS1E_Msk (0x80000000UL) /*!< CASUCCS1E (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_MBXSEM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== SEM ========================================================== */ + #define R_MBXSEM_SEM_SEM_Pos (0UL) /*!< SEM (Bit 0) */ + #define R_MBXSEM_SEM_SEM_Msk (0x1UL) /*!< SEM (Bitfield-Mask: 0x01) */ +/* ======================================================== SEMRCEN ======================================================== */ + #define R_MBXSEM_SEMRCEN_SEMRCEN0_Pos (0UL) /*!< SEMRCEN0 (Bit 0) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN0_Msk (0x1UL) /*!< SEMRCEN0 (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN1_Pos (1UL) /*!< SEMRCEN1 (Bit 1) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN1_Msk (0x2UL) /*!< SEMRCEN1 (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN2_Pos (2UL) /*!< SEMRCEN2 (Bit 2) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN2_Msk (0x4UL) /*!< SEMRCEN2 (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN3_Pos (3UL) /*!< SEMRCEN3 (Bit 3) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN3_Msk (0x8UL) /*!< SEMRCEN3 (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN4_Pos (4UL) /*!< SEMRCEN4 (Bit 4) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN4_Msk (0x10UL) /*!< SEMRCEN4 (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN5_Pos (5UL) /*!< SEMRCEN5 (Bit 5) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN5_Msk (0x20UL) /*!< SEMRCEN5 (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN6_Pos (6UL) /*!< SEMRCEN6 (Bit 6) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN6_Msk (0x40UL) /*!< SEMRCEN6 (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN7_Pos (7UL) /*!< SEMRCEN7 (Bit 7) */ + #define R_MBXSEM_SEMRCEN_SEMRCEN7_Msk (0x80UL) /*!< SEMRCEN7 (Bitfield-Mask: 0x01) */ +/* ======================================================== MBXH2C ========================================================= */ + #define R_MBXSEM_MBXH2C_MBX_Pos (0UL) /*!< MBX (Bit 0) */ + #define R_MBXSEM_MBXH2C_MBX_Msk (0xffffffffUL) /*!< MBX (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== MBXISETH2C ======================================================= */ + #define R_MBXSEM_MBXISETH2C_MBX_INT0S_Pos (0UL) /*!< MBX_INT0S (Bit 0) */ + #define R_MBXSEM_MBXISETH2C_MBX_INT0S_Msk (0x1UL) /*!< MBX_INT0S (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXISETH2C_MBX_INT1S_Pos (1UL) /*!< MBX_INT1S (Bit 1) */ + #define R_MBXSEM_MBXISETH2C_MBX_INT1S_Msk (0x2UL) /*!< MBX_INT1S (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXISETH2C_MBX_INT2S_Pos (2UL) /*!< MBX_INT2S (Bit 2) */ + #define R_MBXSEM_MBXISETH2C_MBX_INT2S_Msk (0x4UL) /*!< MBX_INT2S (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXISETH2C_MBX_INT3S_Pos (3UL) /*!< MBX_INT3S (Bit 3) */ + #define R_MBXSEM_MBXISETH2C_MBX_INT3S_Msk (0x8UL) /*!< MBX_INT3S (Bitfield-Mask: 0x01) */ +/* ====================================================== MBXICLRH2C ======================================================= */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT0C_Pos (0UL) /*!< MBX_INT0C (Bit 0) */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT0C_Msk (0x1UL) /*!< MBX_INT0C (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT1C_Pos (1UL) /*!< MBX_INT1C (Bit 1) */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT1C_Msk (0x2UL) /*!< MBX_INT1C (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT2C_Pos (2UL) /*!< MBX_INT2C (Bit 2) */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT2C_Msk (0x4UL) /*!< MBX_INT2C (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT3C_Pos (3UL) /*!< MBX_INT3C (Bit 3) */ + #define R_MBXSEM_MBXICLRH2C_MBX_INT3C_Msk (0x8UL) /*!< MBX_INT3C (Bitfield-Mask: 0x01) */ +/* ======================================================== MBXC2H ========================================================= */ + #define R_MBXSEM_MBXC2H_MBX_Pos (0UL) /*!< MBX (Bit 0) */ + #define R_MBXSEM_MBXC2H_MBX_Msk (0xffffffffUL) /*!< MBX (Bitfield-Mask: 0xffffffff) */ +/* ====================================================== MBXISETC2H ======================================================= */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT0S_Pos (0UL) /*!< MBX_HINT0S (Bit 0) */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT0S_Msk (0x1UL) /*!< MBX_HINT0S (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT1S_Pos (1UL) /*!< MBX_HINT1S (Bit 1) */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT1S_Msk (0x2UL) /*!< MBX_HINT1S (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT2S_Pos (2UL) /*!< MBX_HINT2S (Bit 2) */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT2S_Msk (0x4UL) /*!< MBX_HINT2S (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT3S_Pos (3UL) /*!< MBX_HINT3S (Bit 3) */ + #define R_MBXSEM_MBXISETC2H_MBX_HINT3S_Msk (0x8UL) /*!< MBX_HINT3S (Bitfield-Mask: 0x01) */ +/* ====================================================== MBXICLRC2H ======================================================= */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT0C_Pos (0UL) /*!< MBX_HINT0C (Bit 0) */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT0C_Msk (0x1UL) /*!< MBX_HINT0C (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT1C_Pos (1UL) /*!< MBX_HINT1C (Bit 1) */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT1C_Msk (0x2UL) /*!< MBX_HINT1C (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT2C_Pos (2UL) /*!< MBX_HINT2C (Bit 2) */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT2C_Msk (0x4UL) /*!< MBX_HINT2C (Bitfield-Mask: 0x01) */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT3C_Pos (3UL) /*!< MBX_HINT3C (Bit 3) */ + #define R_MBXSEM_MBXICLRC2H_MBX_HINT3C_Msk (0x8UL) /*!< MBX_HINT3C (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_SHOSTIF ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CTRLR0 ========================================================= */ + #define R_SHOSTIF_CTRLR0_SCPH_Pos (8UL) /*!< SCPH (Bit 8) */ + #define R_SHOSTIF_CTRLR0_SCPH_Msk (0x100UL) /*!< SCPH (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_CTRLR0_SCPOL_Pos (9UL) /*!< SCPOL (Bit 9) */ + #define R_SHOSTIF_CTRLR0_SCPOL_Msk (0x200UL) /*!< SCPOL (Bitfield-Mask: 0x01) */ +/* ========================================================== ENR ========================================================== */ + #define R_SHOSTIF_ENR_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_SHOSTIF_ENR_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* ======================================================== RXFBTR ========================================================= */ + #define R_SHOSTIF_RXFBTR_RXFBTL_Pos (0UL) /*!< RXFBTL (Bit 0) */ + #define R_SHOSTIF_RXFBTR_RXFBTL_Msk (0x3fUL) /*!< RXFBTL (Bitfield-Mask: 0x3f) */ +/* ======================================================== TXFTLR ========================================================= */ + #define R_SHOSTIF_TXFTLR_TFT_Pos (0UL) /*!< TFT (Bit 0) */ + #define R_SHOSTIF_TXFTLR_TFT_Msk (0x3fUL) /*!< TFT (Bitfield-Mask: 0x3f) */ +/* ======================================================== RXFTLR ========================================================= */ + #define R_SHOSTIF_RXFTLR_RFT_Pos (0UL) /*!< RFT (Bit 0) */ + #define R_SHOSTIF_RXFTLR_RFT_Msk (0x3fUL) /*!< RFT (Bitfield-Mask: 0x3f) */ +/* ========================================================== SR =========================================================== */ + #define R_SHOSTIF_SR_BUSY_Pos (0UL) /*!< BUSY (Bit 0) */ + #define R_SHOSTIF_SR_BUSY_Msk (0x1UL) /*!< BUSY (Bitfield-Mask: 0x01) */ +/* ========================================================== IMR ========================================================== */ + #define R_SHOSTIF_IMR_TXEIM_Pos (0UL) /*!< TXEIM (Bit 0) */ + #define R_SHOSTIF_IMR_TXEIM_Msk (0x1UL) /*!< TXEIM (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_IMR_RXOIM_Pos (3UL) /*!< RXOIM (Bit 3) */ + #define R_SHOSTIF_IMR_RXOIM_Msk (0x8UL) /*!< RXOIM (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_IMR_RXFIM_Pos (4UL) /*!< RXFIM (Bit 4) */ + #define R_SHOSTIF_IMR_RXFIM_Msk (0x10UL) /*!< RXFIM (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_IMR_TXUIM_Pos (7UL) /*!< TXUIM (Bit 7) */ + #define R_SHOSTIF_IMR_TXUIM_Msk (0x80UL) /*!< TXUIM (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_IMR_AHBEM_Pos (8UL) /*!< AHBEM (Bit 8) */ + #define R_SHOSTIF_IMR_AHBEM_Msk (0x100UL) /*!< AHBEM (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_IMR_SPIMEM_Pos (9UL) /*!< SPIMEM (Bit 9) */ + #define R_SHOSTIF_IMR_SPIMEM_Msk (0x200UL) /*!< SPIMEM (Bitfield-Mask: 0x01) */ +/* ========================================================== ISR ========================================================== */ + #define R_SHOSTIF_ISR_TXEIS_Pos (0UL) /*!< TXEIS (Bit 0) */ + #define R_SHOSTIF_ISR_TXEIS_Msk (0x1UL) /*!< TXEIS (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_ISR_RXOIS_Pos (3UL) /*!< RXOIS (Bit 3) */ + #define R_SHOSTIF_ISR_RXOIS_Msk (0x8UL) /*!< RXOIS (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_ISR_RXFIS_Pos (4UL) /*!< RXFIS (Bit 4) */ + #define R_SHOSTIF_ISR_RXFIS_Msk (0x10UL) /*!< RXFIS (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_ISR_TXUIS_Pos (7UL) /*!< TXUIS (Bit 7) */ + #define R_SHOSTIF_ISR_TXUIS_Msk (0x80UL) /*!< TXUIS (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_ISR_AHBES_Pos (8UL) /*!< AHBES (Bit 8) */ + #define R_SHOSTIF_ISR_AHBES_Msk (0x100UL) /*!< AHBES (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_ISR_SPIMES_Pos (9UL) /*!< SPIMES (Bit 9) */ + #define R_SHOSTIF_ISR_SPIMES_Msk (0x200UL) /*!< SPIMES (Bitfield-Mask: 0x01) */ +/* ========================================================= RISR ========================================================== */ + #define R_SHOSTIF_RISR_TXEIR_Pos (0UL) /*!< TXEIR (Bit 0) */ + #define R_SHOSTIF_RISR_TXEIR_Msk (0x1UL) /*!< TXEIR (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_RISR_RXOIR_Pos (3UL) /*!< RXOIR (Bit 3) */ + #define R_SHOSTIF_RISR_RXOIR_Msk (0x8UL) /*!< RXOIR (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_RISR_RXFIR_Pos (4UL) /*!< RXFIR (Bit 4) */ + #define R_SHOSTIF_RISR_RXFIR_Msk (0x10UL) /*!< RXFIR (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_RISR_TXUIR_Pos (7UL) /*!< TXUIR (Bit 7) */ + #define R_SHOSTIF_RISR_TXUIR_Msk (0x80UL) /*!< TXUIR (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_RISR_AHBER_Pos (8UL) /*!< AHBER (Bit 8) */ + #define R_SHOSTIF_RISR_AHBER_Msk (0x100UL) /*!< AHBER (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_RISR_SPIMER_Pos (9UL) /*!< SPIMER (Bit 9) */ + #define R_SHOSTIF_RISR_SPIMER_Msk (0x200UL) /*!< SPIMER (Bitfield-Mask: 0x01) */ +/* ======================================================== TXUICR ========================================================= */ + #define R_SHOSTIF_TXUICR_TXUICR_Pos (0UL) /*!< TXUICR (Bit 0) */ + #define R_SHOSTIF_TXUICR_TXUICR_Msk (0x1UL) /*!< TXUICR (Bitfield-Mask: 0x01) */ +/* ======================================================== RXOICR ========================================================= */ + #define R_SHOSTIF_RXOICR_RXOICR_Pos (0UL) /*!< RXOICR (Bit 0) */ + #define R_SHOSTIF_RXOICR_RXOICR_Msk (0x1UL) /*!< RXOICR (Bitfield-Mask: 0x01) */ +/* ======================================================== SPIMECR ======================================================== */ + #define R_SHOSTIF_SPIMECR_SPIMECR_Pos (0UL) /*!< SPIMECR (Bit 0) */ + #define R_SHOSTIF_SPIMECR_SPIMECR_Msk (0x1UL) /*!< SPIMECR (Bitfield-Mask: 0x01) */ +/* ======================================================== AHBECR ========================================================= */ + #define R_SHOSTIF_AHBECR_AHBECR_Pos (0UL) /*!< AHBECR (Bit 0) */ + #define R_SHOSTIF_AHBECR_AHBECR_Msk (0x1UL) /*!< AHBECR (Bitfield-Mask: 0x01) */ +/* ========================================================== ICR ========================================================== */ + #define R_SHOSTIF_ICR_ICR_Pos (0UL) /*!< ICR (Bit 0) */ + #define R_SHOSTIF_ICR_ICR_Msk (0x1UL) /*!< ICR (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_PHOSTIF ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== HIFBCC ========================================================= */ + #define R_PHOSTIF_HIFBCC_RBUFON0_Pos (0UL) /*!< RBUFON0 (Bit 0) */ + #define R_PHOSTIF_HIFBCC_RBUFON0_Msk (0x1UL) /*!< RBUFON0 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_RBUFON1_Pos (1UL) /*!< RBUFON1 (Bit 1) */ + #define R_PHOSTIF_HIFBCC_RBUFON1_Msk (0x2UL) /*!< RBUFON1 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_RBUFON2_Pos (2UL) /*!< RBUFON2 (Bit 2) */ + #define R_PHOSTIF_HIFBCC_RBUFON2_Msk (0x4UL) /*!< RBUFON2 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_RBUFON3_Pos (3UL) /*!< RBUFON3 (Bit 3) */ + #define R_PHOSTIF_HIFBCC_RBUFON3_Msk (0x8UL) /*!< RBUFON3 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_RBUFON4_Pos (4UL) /*!< RBUFON4 (Bit 4) */ + #define R_PHOSTIF_HIFBCC_RBUFON4_Msk (0x10UL) /*!< RBUFON4 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_RBUFON5_Pos (5UL) /*!< RBUFON5 (Bit 5) */ + #define R_PHOSTIF_HIFBCC_RBUFON5_Msk (0x20UL) /*!< RBUFON5 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_RBUFONX_Pos (8UL) /*!< RBUFONX (Bit 8) */ + #define R_PHOSTIF_HIFBCC_RBUFONX_Msk (0x100UL) /*!< RBUFONX (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_BSTON_Pos (12UL) /*!< BSTON (Bit 12) */ + #define R_PHOSTIF_HIFBCC_BSTON_Msk (0x1000UL) /*!< BSTON (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFBCC_WRPON_Pos (13UL) /*!< WRPON (Bit 13) */ + #define R_PHOSTIF_HIFBCC_WRPON_Msk (0x2000UL) /*!< WRPON (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFBTC ========================================================= */ + #define R_PHOSTIF_HIFBTC_WRSTD_Pos (0UL) /*!< WRSTD (Bit 0) */ + #define R_PHOSTIF_HIFBTC_WRSTD_Msk (0x7UL) /*!< WRSTD (Bitfield-Mask: 0x07) */ + #define R_PHOSTIF_HIFBTC_RDSTD_Pos (4UL) /*!< RDSTD (Bit 4) */ + #define R_PHOSTIF_HIFBTC_RDSTD_Msk (0x30UL) /*!< RDSTD (Bitfield-Mask: 0x03) */ + #define R_PHOSTIF_HIFBTC_PASTD_Pos (8UL) /*!< PASTD (Bit 8) */ + #define R_PHOSTIF_HIFBTC_PASTD_Msk (0x700UL) /*!< PASTD (Bitfield-Mask: 0x07) */ + #define R_PHOSTIF_HIFBTC_RDDTS_Pos (12UL) /*!< RDDTS (Bit 12) */ + #define R_PHOSTIF_HIFBTC_RDDTS_Msk (0x3000UL) /*!< RDDTS (Bitfield-Mask: 0x03) */ +/* ======================================================== HIFPRC ========================================================= */ + #define R_PHOSTIF_HIFPRC_PAGEON0_Pos (0UL) /*!< PAGEON0 (Bit 0) */ + #define R_PHOSTIF_HIFPRC_PAGEON0_Msk (0x1UL) /*!< PAGEON0 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFPRC_PAGEON1_Pos (1UL) /*!< PAGEON1 (Bit 1) */ + #define R_PHOSTIF_HIFPRC_PAGEON1_Msk (0x2UL) /*!< PAGEON1 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFPRC_PAGEON2_Pos (2UL) /*!< PAGEON2 (Bit 2) */ + #define R_PHOSTIF_HIFPRC_PAGEON2_Msk (0x4UL) /*!< PAGEON2 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFPRC_PAGEON3_Pos (3UL) /*!< PAGEON3 (Bit 3) */ + #define R_PHOSTIF_HIFPRC_PAGEON3_Msk (0x8UL) /*!< PAGEON3 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFPRC_PAGEON4_Pos (4UL) /*!< PAGEON4 (Bit 4) */ + #define R_PHOSTIF_HIFPRC_PAGEON4_Msk (0x10UL) /*!< PAGEON4 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFPRC_PAGEON5_Pos (5UL) /*!< PAGEON5 (Bit 5) */ + #define R_PHOSTIF_HIFPRC_PAGEON5_Msk (0x20UL) /*!< PAGEON5 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFPRC_PAGEONX_Pos (8UL) /*!< PAGEONX (Bit 8) */ + #define R_PHOSTIF_HIFPRC_PAGEONX_Msk (0x100UL) /*!< PAGEONX (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFPRC_PAGESZ_Pos (12UL) /*!< PAGESZ (Bit 12) */ + #define R_PHOSTIF_HIFPRC_PAGESZ_Msk (0x1000UL) /*!< PAGESZ (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFIRC ========================================================= */ + #define R_PHOSTIF_HIFIRC_ERRRSP_Pos (0UL) /*!< ERRRSP (Bit 0) */ + #define R_PHOSTIF_HIFIRC_ERRRSP_Msk (0x1UL) /*!< ERRRSP (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFECR0 ======================================================== */ + #define R_PHOSTIF_HIFECR0_ERRADDR_Pos (0UL) /*!< ERRADDR (Bit 0) */ + #define R_PHOSTIF_HIFECR0_ERRADDR_Msk (0xffffffffUL) /*!< ERRADDR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== HIFECR1 ======================================================== */ + #define R_PHOSTIF_HIFECR1_ERRSZ_Pos (0UL) /*!< ERRSZ (Bit 0) */ + #define R_PHOSTIF_HIFECR1_ERRSZ_Msk (0x7UL) /*!< ERRSZ (Bitfield-Mask: 0x07) */ + #define R_PHOSTIF_HIFECR1_ERRWR_Pos (3UL) /*!< ERRWR (Bit 3) */ + #define R_PHOSTIF_HIFECR1_ERRWR_Msk (0x8UL) /*!< ERRWR (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFMON1 ======================================================== */ + #define R_PHOSTIF_HIFMON1_HIFRDY_Pos (0UL) /*!< HIFRDY (Bit 0) */ + #define R_PHOSTIF_HIFMON1_HIFRDY_Msk (0x1UL) /*!< HIFRDY (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON1_BUSSEL_Pos (1UL) /*!< BUSSEL (Bit 1) */ + #define R_PHOSTIF_HIFMON1_BUSSEL_Msk (0x2UL) /*!< BUSSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON1_HIFSYNC_Pos (3UL) /*!< HIFSYNC (Bit 3) */ + #define R_PHOSTIF_HIFMON1_HIFSYNC_Msk (0x8UL) /*!< HIFSYNC (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFMON2 ======================================================== */ + #define R_PHOSTIF_HIFMON2_HIFBCC_Pos (0UL) /*!< HIFBCC (Bit 0) */ + #define R_PHOSTIF_HIFMON2_HIFBCC_Msk (0x1UL) /*!< HIFBCC (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON2_HIFBTC_Pos (1UL) /*!< HIFBTC (Bit 1) */ + #define R_PHOSTIF_HIFMON2_HIFBTC_Msk (0x2UL) /*!< HIFBTC (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON2_HIFPRC_Pos (2UL) /*!< HIFPRC (Bit 2) */ + #define R_PHOSTIF_HIFMON2_HIFPRC_Msk (0x4UL) /*!< HIFPRC (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON2_HIFIRC_Pos (3UL) /*!< HIFIRC (Bit 3) */ + #define R_PHOSTIF_HIFMON2_HIFIRC_Msk (0x8UL) /*!< HIFIRC (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON2_HIFXAL_Pos (4UL) /*!< HIFXAL (Bit 4) */ + #define R_PHOSTIF_HIFMON2_HIFXAL_Msk (0x10UL) /*!< HIFXAL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON2_HIFXAH_Pos (5UL) /*!< HIFXAH (Bit 5) */ + #define R_PHOSTIF_HIFMON2_HIFXAH_Msk (0x20UL) /*!< HIFXAH (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFMON3 ======================================================== */ + #define R_PHOSTIF_HIFMON3_HIFEXT0_Pos (0UL) /*!< HIFEXT0 (Bit 0) */ + #define R_PHOSTIF_HIFMON3_HIFEXT0_Msk (0x1UL) /*!< HIFEXT0 (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFMON3_HIFEXT1_Pos (1UL) /*!< HIFEXT1 (Bit 1) */ + #define R_PHOSTIF_HIFMON3_HIFEXT1_Msk (0x2UL) /*!< HIFEXT1 (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFXAL ========================================================= */ + #define R_PHOSTIF_HIFXAL_XADDRL_Pos (0UL) /*!< XADDRL (Bit 0) */ + #define R_PHOSTIF_HIFXAL_XADDRL_Msk (0x1ffUL) /*!< XADDRL (Bitfield-Mask: 0x1ff) */ +/* ======================================================== HIFXAH ========================================================= */ + #define R_PHOSTIF_HIFXAH_XADDRH_Pos (0UL) /*!< XADDRH (Bit 0) */ + #define R_PHOSTIF_HIFXAH_XADDRH_Msk (0x1ffUL) /*!< XADDRH (Bitfield-Mask: 0x1ff) */ +/* ======================================================== HIFEXT0 ======================================================== */ + #define R_PHOSTIF_HIFEXT0_KESSBI_Pos (0UL) /*!< KESSBI (Bit 0) */ + #define R_PHOSTIF_HIFEXT0_KESSBI_Msk (0x1UL) /*!< KESSBI (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFEXT0_KESDTI_Pos (2UL) /*!< KESDTI (Bit 2) */ + #define R_PHOSTIF_HIFEXT0_KESDTI_Msk (0x4UL) /*!< KESDTI (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFEXT0_KESAVI_Pos (3UL) /*!< KESAVI (Bit 3) */ + #define R_PHOSTIF_HIFEXT0_KESAVI_Msk (0x8UL) /*!< KESAVI (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFEXT0_KESDTO_Pos (4UL) /*!< KESDTO (Bit 4) */ + #define R_PHOSTIF_HIFEXT0_KESDTO_Msk (0x10UL) /*!< KESDTO (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFEXT0_KESWTO_Pos (5UL) /*!< KESWTO (Bit 5) */ + #define R_PHOSTIF_HIFEXT0_KESWTO_Msk (0x20UL) /*!< KESWTO (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFEXT0_CNDWEO_Pos (9UL) /*!< CNDWEO (Bit 9) */ + #define R_PHOSTIF_HIFEXT0_CNDWEO_Msk (0x200UL) /*!< CNDWEO (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_HIFEXT0_MODTRN_Pos (15UL) /*!< MODTRN (Bit 15) */ + #define R_PHOSTIF_HIFEXT0_MODTRN_Msk (0x8000UL) /*!< MODTRN (Bitfield-Mask: 0x01) */ +/* ======================================================== HIFEXT1 ======================================================== */ + #define R_PHOSTIF_HIFEXT1_DLYWA_Pos (0UL) /*!< DLYWA (Bit 0) */ + #define R_PHOSTIF_HIFEXT1_DLYWA_Msk (0xfUL) /*!< DLYWA (Bitfield-Mask: 0x0f) */ + #define R_PHOSTIF_HIFEXT1_DLYRA_Pos (8UL) /*!< DLYRA (Bit 8) */ + #define R_PHOSTIF_HIFEXT1_DLYRA_Msk (0xf00UL) /*!< DLYRA (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSC_NS ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SCKCR ========================================================= */ + #define R_SYSC_NS_SCKCR_FSELXSPI0_Pos (0UL) /*!< FSELXSPI0 (Bit 0) */ + #define R_SYSC_NS_SCKCR_FSELXSPI0_Msk (0x7UL) /*!< FSELXSPI0 (Bitfield-Mask: 0x07) */ + #define R_SYSC_NS_SCKCR_DIVSELXSPI0_Pos (6UL) /*!< DIVSELXSPI0 (Bit 6) */ + #define R_SYSC_NS_SCKCR_DIVSELXSPI0_Msk (0x40UL) /*!< DIVSELXSPI0 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_FSELXSPI1_Pos (8UL) /*!< FSELXSPI1 (Bit 8) */ + #define R_SYSC_NS_SCKCR_FSELXSPI1_Msk (0x700UL) /*!< FSELXSPI1 (Bitfield-Mask: 0x07) */ + #define R_SYSC_NS_SCKCR_DIVSELXSPI1_Pos (14UL) /*!< DIVSELXSPI1 (Bit 14) */ + #define R_SYSC_NS_SCKCR_DIVSELXSPI1_Msk (0x4000UL) /*!< DIVSELXSPI1 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_CKIO_Pos (16UL) /*!< CKIO (Bit 16) */ + #define R_SYSC_NS_SCKCR_CKIO_Msk (0x70000UL) /*!< CKIO (Bitfield-Mask: 0x07) */ + #define R_SYSC_NS_SCKCR_FSELCANFD_Pos (20UL) /*!< FSELCANFD (Bit 20) */ + #define R_SYSC_NS_SCKCR_FSELCANFD_Msk (0x100000UL) /*!< FSELCANFD (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_PHYSEL_Pos (21UL) /*!< PHYSEL (Bit 21) */ + #define R_SYSC_NS_SCKCR_PHYSEL_Msk (0x200000UL) /*!< PHYSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_CLMASEL_Pos (22UL) /*!< CLMASEL (Bit 22) */ + #define R_SYSC_NS_SCKCR_CLMASEL_Msk (0x400000UL) /*!< CLMASEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SPI0ASYNCSEL_Pos (24UL) /*!< SPI0ASYNCSEL (Bit 24) */ + #define R_SYSC_NS_SCKCR_SPI0ASYNCSEL_Msk (0x1000000UL) /*!< SPI0ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SPI1ASYNCSEL_Pos (25UL) /*!< SPI1ASYNCSEL (Bit 25) */ + #define R_SYSC_NS_SCKCR_SPI1ASYNCSEL_Msk (0x2000000UL) /*!< SPI1ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SPI2ASYNCSEL_Pos (26UL) /*!< SPI2ASYNCSEL (Bit 26) */ + #define R_SYSC_NS_SCKCR_SPI2ASYNCSEL_Msk (0x4000000UL) /*!< SPI2ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SCI0ASYNCSEL_Pos (27UL) /*!< SCI0ASYNCSEL (Bit 27) */ + #define R_SYSC_NS_SCKCR_SCI0ASYNCSEL_Msk (0x8000000UL) /*!< SCI0ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SCI1ASYNCSEL_Pos (28UL) /*!< SCI1ASYNCSEL (Bit 28) */ + #define R_SYSC_NS_SCKCR_SCI1ASYNCSEL_Msk (0x10000000UL) /*!< SCI1ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SCI2ASYNCSEL_Pos (29UL) /*!< SCI2ASYNCSEL (Bit 29) */ + #define R_SYSC_NS_SCKCR_SCI2ASYNCSEL_Msk (0x20000000UL) /*!< SCI2ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SCI3ASYNCSEL_Pos (30UL) /*!< SCI3ASYNCSEL (Bit 30) */ + #define R_SYSC_NS_SCKCR_SCI3ASYNCSEL_Msk (0x40000000UL) /*!< SCI3ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_SCKCR_SCI4ASYNCSEL_Pos (31UL) /*!< SCI4ASYNCSEL (Bit 31) */ + #define R_SYSC_NS_SCKCR_SCI4ASYNCSEL_Msk (0x80000000UL) /*!< SCI4ASYNCSEL (Bitfield-Mask: 0x01) */ +/* ======================================================== RSTSR0 ========================================================= */ + #define R_SYSC_NS_RSTSR0_TRF_Pos (1UL) /*!< TRF (Bit 1) */ + #define R_SYSC_NS_RSTSR0_TRF_Msk (0x2UL) /*!< TRF (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_RSTSR0_ERRF_Pos (2UL) /*!< ERRF (Bit 2) */ + #define R_SYSC_NS_RSTSR0_ERRF_Msk (0x4UL) /*!< ERRF (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_RSTSR0_SWRSF_Pos (3UL) /*!< SWRSF (Bit 3) */ + #define R_SYSC_NS_RSTSR0_SWRSF_Msk (0x8UL) /*!< SWRSF (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_RSTSR0_SWR0F_Pos (4UL) /*!< SWR0F (Bit 4) */ + #define R_SYSC_NS_RSTSR0_SWR0F_Msk (0x10UL) /*!< SWR0F (Bitfield-Mask: 0x01) */ +/* ======================================================== MRCTLA ========================================================= */ + #define R_SYSC_NS_MRCTLA_MRCTLA04_Pos (4UL) /*!< MRCTLA04 (Bit 4) */ + #define R_SYSC_NS_MRCTLA_MRCTLA04_Msk (0x10UL) /*!< MRCTLA04 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MRCTLA_MRCTLA05_Pos (5UL) /*!< MRCTLA05 (Bit 5) */ + #define R_SYSC_NS_MRCTLA_MRCTLA05_Msk (0x20UL) /*!< MRCTLA05 (Bitfield-Mask: 0x01) */ +/* ======================================================== MRCTLE ========================================================= */ + #define R_SYSC_NS_MRCTLE_MRCTLE00_Pos (0UL) /*!< MRCTLE00 (Bit 0) */ + #define R_SYSC_NS_MRCTLE_MRCTLE00_Msk (0x1UL) /*!< MRCTLE00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MRCTLE_MRCTLE01_Pos (1UL) /*!< MRCTLE01 (Bit 1) */ + #define R_SYSC_NS_MRCTLE_MRCTLE01_Msk (0x2UL) /*!< MRCTLE01 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MRCTLE_MRCTLE02_Pos (2UL) /*!< MRCTLE02 (Bit 2) */ + #define R_SYSC_NS_MRCTLE_MRCTLE02_Msk (0x4UL) /*!< MRCTLE02 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MRCTLE_MRCTLE03_Pos (3UL) /*!< MRCTLE03 (Bit 3) */ + #define R_SYSC_NS_MRCTLE_MRCTLE03_Msk (0x8UL) /*!< MRCTLE03 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MRCTLE_MRCTLE04_Pos (4UL) /*!< MRCTLE04 (Bit 4) */ + #define R_SYSC_NS_MRCTLE_MRCTLE04_Msk (0x10UL) /*!< MRCTLE04 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MRCTLE_MRCTLE05_Pos (5UL) /*!< MRCTLE05 (Bit 5) */ + #define R_SYSC_NS_MRCTLE_MRCTLE05_Msk (0x20UL) /*!< MRCTLE05 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MRCTLE_MRCTLE06_Pos (6UL) /*!< MRCTLE06 (Bit 6) */ + #define R_SYSC_NS_MRCTLE_MRCTLE06_Msk (0x40UL) /*!< MRCTLE06 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRA ======================================================== */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA00_Pos (0UL) /*!< MSTPCRA00 (Bit 0) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA00_Msk (0x1UL) /*!< MSTPCRA00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA04_Pos (4UL) /*!< MSTPCRA04 (Bit 4) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA04_Msk (0x10UL) /*!< MSTPCRA04 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA05_Pos (5UL) /*!< MSTPCRA05 (Bit 5) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA05_Msk (0x20UL) /*!< MSTPCRA05 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA08_Pos (8UL) /*!< MSTPCRA08 (Bit 8) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA08_Msk (0x100UL) /*!< MSTPCRA08 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA09_Pos (9UL) /*!< MSTPCRA09 (Bit 9) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA09_Msk (0x200UL) /*!< MSTPCRA09 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA10_Pos (10UL) /*!< MSTPCRA10 (Bit 10) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA10_Msk (0x400UL) /*!< MSTPCRA10 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA11_Pos (11UL) /*!< MSTPCRA11 (Bit 11) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA11_Msk (0x800UL) /*!< MSTPCRA11 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA12_Pos (12UL) /*!< MSTPCRA12 (Bit 12) */ + #define R_SYSC_NS_MSTPCRA_MSTPCRA12_Msk (0x1000UL) /*!< MSTPCRA12 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRB ======================================================== */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB00_Pos (0UL) /*!< MSTPCRB00 (Bit 0) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB00_Msk (0x1UL) /*!< MSTPCRB00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB01_Pos (1UL) /*!< MSTPCRB01 (Bit 1) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB01_Msk (0x2UL) /*!< MSTPCRB01 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB04_Pos (4UL) /*!< MSTPCRB04 (Bit 4) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB04_Msk (0x10UL) /*!< MSTPCRB04 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB05_Pos (5UL) /*!< MSTPCRB05 (Bit 5) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB05_Msk (0x20UL) /*!< MSTPCRB05 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB06_Pos (6UL) /*!< MSTPCRB06 (Bit 6) */ + #define R_SYSC_NS_MSTPCRB_MSTPCRB06_Msk (0x40UL) /*!< MSTPCRB06 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRC ======================================================== */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC00_Pos (0UL) /*!< MSTPCRC00 (Bit 0) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC00_Msk (0x1UL) /*!< MSTPCRC00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC01_Pos (1UL) /*!< MSTPCRC01 (Bit 1) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC01_Msk (0x2UL) /*!< MSTPCRC01 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC02_Pos (2UL) /*!< MSTPCRC02 (Bit 2) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC02_Msk (0x4UL) /*!< MSTPCRC02 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC05_Pos (5UL) /*!< MSTPCRC05 (Bit 5) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC05_Msk (0x20UL) /*!< MSTPCRC05 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC06_Pos (6UL) /*!< MSTPCRC06 (Bit 6) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC06_Msk (0x40UL) /*!< MSTPCRC06 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC07_Pos (7UL) /*!< MSTPCRC07 (Bit 7) */ + #define R_SYSC_NS_MSTPCRC_MSTPCRC07_Msk (0x80UL) /*!< MSTPCRC07 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRD ======================================================== */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD00_Pos (0UL) /*!< MSTPCRD00 (Bit 0) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD00_Msk (0x1UL) /*!< MSTPCRD00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD01_Pos (1UL) /*!< MSTPCRD01 (Bit 1) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD01_Msk (0x2UL) /*!< MSTPCRD01 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD02_Pos (2UL) /*!< MSTPCRD02 (Bit 2) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD02_Msk (0x4UL) /*!< MSTPCRD02 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD03_Pos (3UL) /*!< MSTPCRD03 (Bit 3) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD03_Msk (0x8UL) /*!< MSTPCRD03 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD04_Pos (4UL) /*!< MSTPCRD04 (Bit 4) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD04_Msk (0x10UL) /*!< MSTPCRD04 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD05_Pos (5UL) /*!< MSTPCRD05 (Bit 5) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD05_Msk (0x20UL) /*!< MSTPCRD05 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD06_Pos (6UL) /*!< MSTPCRD06 (Bit 6) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD06_Msk (0x40UL) /*!< MSTPCRD06 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD07_Pos (7UL) /*!< MSTPCRD07 (Bit 7) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD07_Msk (0x80UL) /*!< MSTPCRD07 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD08_Pos (8UL) /*!< MSTPCRD08 (Bit 8) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD08_Msk (0x100UL) /*!< MSTPCRD08 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD09_Pos (9UL) /*!< MSTPCRD09 (Bit 9) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD09_Msk (0x200UL) /*!< MSTPCRD09 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD10_Pos (10UL) /*!< MSTPCRD10 (Bit 10) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD10_Msk (0x400UL) /*!< MSTPCRD10 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD11_Pos (11UL) /*!< MSTPCRD11 (Bit 11) */ + #define R_SYSC_NS_MSTPCRD_MSTPCRD11_Msk (0x800UL) /*!< MSTPCRD11 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRE ======================================================== */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE00_Pos (0UL) /*!< MSTPCRE00 (Bit 0) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE00_Msk (0x1UL) /*!< MSTPCRE00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE01_Pos (1UL) /*!< MSTPCRE01 (Bit 1) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE01_Msk (0x2UL) /*!< MSTPCRE01 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE02_Pos (2UL) /*!< MSTPCRE02 (Bit 2) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE02_Msk (0x4UL) /*!< MSTPCRE02 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE03_Pos (3UL) /*!< MSTPCRE03 (Bit 3) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE03_Msk (0x8UL) /*!< MSTPCRE03 (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE08_Pos (8UL) /*!< MSTPCRE08 (Bit 8) */ + #define R_SYSC_NS_MSTPCRE_MSTPCRE08_Msk (0x100UL) /*!< MSTPCRE08 (Bitfield-Mask: 0x01) */ +/* ======================================================== MD_MON ========================================================= */ + #define R_SYSC_NS_MD_MON_MDDMON_Pos (0UL) /*!< MDDMON (Bit 0) */ + #define R_SYSC_NS_MD_MON_MDDMON_Msk (0x1UL) /*!< MDDMON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MDP_Pos (8UL) /*!< MDP (Bit 8) */ + #define R_SYSC_NS_MD_MON_MDP_Msk (0x100UL) /*!< MDP (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MD0MON_Pos (12UL) /*!< MD0MON (Bit 12) */ + #define R_SYSC_NS_MD_MON_MD0MON_Msk (0x1000UL) /*!< MD0MON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MD1MON_Pos (13UL) /*!< MD1MON (Bit 13) */ + #define R_SYSC_NS_MD_MON_MD1MON_Msk (0x2000UL) /*!< MD1MON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MD2MON_Pos (14UL) /*!< MD2MON (Bit 14) */ + #define R_SYSC_NS_MD_MON_MD2MON_Msk (0x4000UL) /*!< MD2MON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MDV0MON_Pos (16UL) /*!< MDV0MON (Bit 16) */ + #define R_SYSC_NS_MD_MON_MDV0MON_Msk (0x10000UL) /*!< MDV0MON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MDV1MON_Pos (17UL) /*!< MDV1MON (Bit 17) */ + #define R_SYSC_NS_MD_MON_MDV1MON_Msk (0x20000UL) /*!< MDV1MON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MDV2MON_Pos (18UL) /*!< MDV2MON (Bit 18) */ + #define R_SYSC_NS_MD_MON_MDV2MON_Msk (0x40000UL) /*!< MDV2MON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MDV3MON_Pos (19UL) /*!< MDV3MON (Bit 19) */ + #define R_SYSC_NS_MD_MON_MDV3MON_Msk (0x80000UL) /*!< MDV3MON (Bitfield-Mask: 0x01) */ + #define R_SYSC_NS_MD_MON_MDV4MON_Pos (20UL) /*!< MDV4MON (Bit 20) */ + #define R_SYSC_NS_MD_MON_MDV4MON_Msk (0x100000UL) /*!< MDV4MON (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_ELO ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ELOPA ========================================================= */ + #define R_ELO_ELOPA_MTU0MD_Pos (0UL) /*!< MTU0MD (Bit 0) */ + #define R_ELO_ELOPA_MTU0MD_Msk (0x3UL) /*!< MTU0MD (Bitfield-Mask: 0x03) */ + #define R_ELO_ELOPA_MTU3MD_Pos (6UL) /*!< MTU3MD (Bit 6) */ + #define R_ELO_ELOPA_MTU3MD_Msk (0xc0UL) /*!< MTU3MD (Bitfield-Mask: 0x03) */ +/* ========================================================= ELOPB ========================================================= */ + #define R_ELO_ELOPB_MTU4MD_Pos (0UL) /*!< MTU4MD (Bit 0) */ + #define R_ELO_ELOPB_MTU4MD_Msk (0x3UL) /*!< MTU4MD (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_RWP_NS ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PRCRN ========================================================= */ + #define R_RWP_NS_PRCRN_PRC0_Pos (0UL) /*!< PRC0 (Bit 0) */ + #define R_RWP_NS_PRCRN_PRC0_Msk (0x1UL) /*!< PRC0 (Bitfield-Mask: 0x01) */ + #define R_RWP_NS_PRCRN_PRC1_Pos (1UL) /*!< PRC1 (Bit 1) */ + #define R_RWP_NS_PRCRN_PRC1_Msk (0x2UL) /*!< PRC1 (Bitfield-Mask: 0x01) */ + #define R_RWP_NS_PRCRN_PRC2_Pos (2UL) /*!< PRC2 (Bit 2) */ + #define R_RWP_NS_PRCRN_PRC2_Msk (0x4UL) /*!< PRC2 (Bitfield-Mask: 0x01) */ + #define R_RWP_NS_PRCRN_PRKEY_Pos (8UL) /*!< PRKEY (Bit 8) */ + #define R_RWP_NS_PRCRN_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ R_RTC ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= RTCA0CTL0 ======================================================= */ + #define R_RTC_RTCA0CTL0_RTCA0SLSB_Pos (4UL) /*!< RTCA0SLSB (Bit 4) */ + #define R_RTC_RTCA0CTL0_RTCA0SLSB_Msk (0x10UL) /*!< RTCA0SLSB (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL0_RTCA0AMPM_Pos (5UL) /*!< RTCA0AMPM (Bit 5) */ + #define R_RTC_RTCA0CTL0_RTCA0AMPM_Msk (0x20UL) /*!< RTCA0AMPM (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL0_RTCA0CEST_Pos (6UL) /*!< RTCA0CEST (Bit 6) */ + #define R_RTC_RTCA0CTL0_RTCA0CEST_Msk (0x40UL) /*!< RTCA0CEST (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL0_RTCA0CE_Pos (7UL) /*!< RTCA0CE (Bit 7) */ + #define R_RTC_RTCA0CTL0_RTCA0CE_Msk (0x80UL) /*!< RTCA0CE (Bitfield-Mask: 0x01) */ +/* ======================================================= RTCA0CTL1 ======================================================= */ + #define R_RTC_RTCA0CTL1_RTCA0CT_Pos (0UL) /*!< RTCA0CT (Bit 0) */ + #define R_RTC_RTCA0CTL1_RTCA0CT_Msk (0x7UL) /*!< RTCA0CT (Bitfield-Mask: 0x07) */ + #define R_RTC_RTCA0CTL1_RTCA01SE_Pos (3UL) /*!< RTCA01SE (Bit 3) */ + #define R_RTC_RTCA0CTL1_RTCA01SE_Msk (0x8UL) /*!< RTCA01SE (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL1_RTCA0ALME_Pos (4UL) /*!< RTCA0ALME (Bit 4) */ + #define R_RTC_RTCA0CTL1_RTCA0ALME_Msk (0x10UL) /*!< RTCA0ALME (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL1_RTCA01HZE_Pos (5UL) /*!< RTCA01HZE (Bit 5) */ + #define R_RTC_RTCA0CTL1_RTCA01HZE_Msk (0x20UL) /*!< RTCA01HZE (Bitfield-Mask: 0x01) */ +/* ======================================================= RTCA0CTL2 ======================================================= */ + #define R_RTC_RTCA0CTL2_RTCA0WAIT_Pos (0UL) /*!< RTCA0WAIT (Bit 0) */ + #define R_RTC_RTCA0CTL2_RTCA0WAIT_Msk (0x1UL) /*!< RTCA0WAIT (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL2_RTCA0WST_Pos (1UL) /*!< RTCA0WST (Bit 1) */ + #define R_RTC_RTCA0CTL2_RTCA0WST_Msk (0x2UL) /*!< RTCA0WST (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL2_RTCA0RSUB_Pos (2UL) /*!< RTCA0RSUB (Bit 2) */ + #define R_RTC_RTCA0CTL2_RTCA0RSUB_Msk (0x4UL) /*!< RTCA0RSUB (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL2_RTCA0RSST_Pos (3UL) /*!< RTCA0RSST (Bit 3) */ + #define R_RTC_RTCA0CTL2_RTCA0RSST_Msk (0x8UL) /*!< RTCA0RSST (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0CTL2_RTCA0WSST_Pos (4UL) /*!< RTCA0WSST (Bit 4) */ + #define R_RTC_RTCA0CTL2_RTCA0WSST_Msk (0x10UL) /*!< RTCA0WSST (Bitfield-Mask: 0x01) */ +/* ======================================================= RTCA0SUBC ======================================================= */ + #define R_RTC_RTCA0SUBC_RTCA0SUBC_Pos (0UL) /*!< RTCA0SUBC (Bit 0) */ + #define R_RTC_RTCA0SUBC_RTCA0SUBC_Msk (0x3fffffUL) /*!< RTCA0SUBC (Bitfield-Mask: 0x3fffff) */ +/* ======================================================= RTCA0SRBU ======================================================= */ + #define R_RTC_RTCA0SRBU_RTCA0SRBU_Pos (0UL) /*!< RTCA0SRBU (Bit 0) */ + #define R_RTC_RTCA0SRBU_RTCA0SRBU_Msk (0x3fffffUL) /*!< RTCA0SRBU (Bitfield-Mask: 0x3fffff) */ +/* ======================================================= RTCA0SEC ======================================================== */ + #define R_RTC_RTCA0SEC_RTCA0SEC_Pos (0UL) /*!< RTCA0SEC (Bit 0) */ + #define R_RTC_RTCA0SEC_RTCA0SEC_Msk (0x7fUL) /*!< RTCA0SEC (Bitfield-Mask: 0x7f) */ +/* ======================================================= RTCA0MIN ======================================================== */ + #define R_RTC_RTCA0MIN_RTCA0MIN_Pos (0UL) /*!< RTCA0MIN (Bit 0) */ + #define R_RTC_RTCA0MIN_RTCA0MIN_Msk (0x7fUL) /*!< RTCA0MIN (Bitfield-Mask: 0x7f) */ +/* ======================================================= RTCA0HOUR ======================================================= */ + #define R_RTC_RTCA0HOUR_RTCA0HOUR_Pos (0UL) /*!< RTCA0HOUR (Bit 0) */ + #define R_RTC_RTCA0HOUR_RTCA0HOUR_Msk (0x3fUL) /*!< RTCA0HOUR (Bitfield-Mask: 0x3f) */ +/* ======================================================= RTCA0WEEK ======================================================= */ + #define R_RTC_RTCA0WEEK_RTCA0WEEK_Pos (0UL) /*!< RTCA0WEEK (Bit 0) */ + #define R_RTC_RTCA0WEEK_RTCA0WEEK_Msk (0x7UL) /*!< RTCA0WEEK (Bitfield-Mask: 0x07) */ +/* ======================================================= RTCA0DAY ======================================================== */ + #define R_RTC_RTCA0DAY_RTCA0DAY_Pos (0UL) /*!< RTCA0DAY (Bit 0) */ + #define R_RTC_RTCA0DAY_RTCA0DAY_Msk (0x3fUL) /*!< RTCA0DAY (Bitfield-Mask: 0x3f) */ +/* ====================================================== RTCA0MONTH ======================================================= */ + #define R_RTC_RTCA0MONTH_RTCA0MONTH_Pos (0UL) /*!< RTCA0MONTH (Bit 0) */ + #define R_RTC_RTCA0MONTH_RTCA0MONTH_Msk (0x1fUL) /*!< RTCA0MONTH (Bitfield-Mask: 0x1f) */ +/* ======================================================= RTCA0YEAR ======================================================= */ + #define R_RTC_RTCA0YEAR_RTCA0YEAR_Pos (0UL) /*!< RTCA0YEAR (Bit 0) */ + #define R_RTC_RTCA0YEAR_RTCA0YEAR_Msk (0xffUL) /*!< RTCA0YEAR (Bitfield-Mask: 0xff) */ +/* ======================================================= RTCA0TIME ======================================================= */ + #define R_RTC_RTCA0TIME_RTCA0SEC_Pos (0UL) /*!< RTCA0SEC (Bit 0) */ + #define R_RTC_RTCA0TIME_RTCA0SEC_Msk (0xffUL) /*!< RTCA0SEC (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0TIME_RTCA0MIN_Pos (8UL) /*!< RTCA0MIN (Bit 8) */ + #define R_RTC_RTCA0TIME_RTCA0MIN_Msk (0xff00UL) /*!< RTCA0MIN (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0TIME_RTCA0HOUR_Pos (16UL) /*!< RTCA0HOUR (Bit 16) */ + #define R_RTC_RTCA0TIME_RTCA0HOUR_Msk (0xff0000UL) /*!< RTCA0HOUR (Bitfield-Mask: 0xff) */ +/* ======================================================= RTCA0CAL ======================================================== */ + #define R_RTC_RTCA0CAL_RTCA0WEEK_Pos (0UL) /*!< RTCA0WEEK (Bit 0) */ + #define R_RTC_RTCA0CAL_RTCA0WEEK_Msk (0xffUL) /*!< RTCA0WEEK (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0CAL_RTCA0DAY_Pos (8UL) /*!< RTCA0DAY (Bit 8) */ + #define R_RTC_RTCA0CAL_RTCA0DAY_Msk (0xff00UL) /*!< RTCA0DAY (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0CAL_RTCA0MONTH_Pos (16UL) /*!< RTCA0MONTH (Bit 16) */ + #define R_RTC_RTCA0CAL_RTCA0MONTH_Msk (0xff0000UL) /*!< RTCA0MONTH (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0CAL_RTCA0YEAR_Pos (24UL) /*!< RTCA0YEAR (Bit 24) */ + #define R_RTC_RTCA0CAL_RTCA0YEAR_Msk (0xff000000UL) /*!< RTCA0YEAR (Bitfield-Mask: 0xff) */ +/* ======================================================= RTCA0SCMP ======================================================= */ + #define R_RTC_RTCA0SCMP_RTCA0SCMP_Pos (0UL) /*!< RTCA0SCMP (Bit 0) */ + #define R_RTC_RTCA0SCMP_RTCA0SCMP_Msk (0x3fffffUL) /*!< RTCA0SCMP (Bitfield-Mask: 0x3fffff) */ +/* ======================================================= RTCA0ALM ======================================================== */ + #define R_RTC_RTCA0ALM_RTCA0ALM_Pos (0UL) /*!< RTCA0ALM (Bit 0) */ + #define R_RTC_RTCA0ALM_RTCA0ALM_Msk (0x7fUL) /*!< RTCA0ALM (Bitfield-Mask: 0x7f) */ +/* ======================================================= RTCA0ALH ======================================================== */ + #define R_RTC_RTCA0ALH_RTCA0ALH_Pos (0UL) /*!< RTCA0ALH (Bit 0) */ + #define R_RTC_RTCA0ALH_RTCA0ALH_Msk (0x3fUL) /*!< RTCA0ALH (Bitfield-Mask: 0x3f) */ +/* ======================================================= RTCA0ALW ======================================================== */ + #define R_RTC_RTCA0ALW_RTCA0ALW0_Pos (0UL) /*!< RTCA0ALW0 (Bit 0) */ + #define R_RTC_RTCA0ALW_RTCA0ALW0_Msk (0x1UL) /*!< RTCA0ALW0 (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0ALW_RTCA0ALW1_Pos (1UL) /*!< RTCA0ALW1 (Bit 1) */ + #define R_RTC_RTCA0ALW_RTCA0ALW1_Msk (0x2UL) /*!< RTCA0ALW1 (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0ALW_RTCA0ALW2_Pos (2UL) /*!< RTCA0ALW2 (Bit 2) */ + #define R_RTC_RTCA0ALW_RTCA0ALW2_Msk (0x4UL) /*!< RTCA0ALW2 (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0ALW_RTCA0ALW3_Pos (3UL) /*!< RTCA0ALW3 (Bit 3) */ + #define R_RTC_RTCA0ALW_RTCA0ALW3_Msk (0x8UL) /*!< RTCA0ALW3 (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0ALW_RTCA0ALW4_Pos (4UL) /*!< RTCA0ALW4 (Bit 4) */ + #define R_RTC_RTCA0ALW_RTCA0ALW4_Msk (0x10UL) /*!< RTCA0ALW4 (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0ALW_RTCA0ALW5_Pos (5UL) /*!< RTCA0ALW5 (Bit 5) */ + #define R_RTC_RTCA0ALW_RTCA0ALW5_Msk (0x20UL) /*!< RTCA0ALW5 (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCA0ALW_RTCA0ALW6_Pos (6UL) /*!< RTCA0ALW6 (Bit 6) */ + #define R_RTC_RTCA0ALW_RTCA0ALW6_Msk (0x40UL) /*!< RTCA0ALW6 (Bitfield-Mask: 0x01) */ +/* ======================================================= RTCA0SECC ======================================================= */ + #define R_RTC_RTCA0SECC_RTCA0SECC_Pos (0UL) /*!< RTCA0SECC (Bit 0) */ + #define R_RTC_RTCA0SECC_RTCA0SECC_Msk (0x7fUL) /*!< RTCA0SECC (Bitfield-Mask: 0x7f) */ +/* ======================================================= RTCA0MINC ======================================================= */ + #define R_RTC_RTCA0MINC_RTCA0MINC_Pos (0UL) /*!< RTCA0MINC (Bit 0) */ + #define R_RTC_RTCA0MINC_RTCA0MINC_Msk (0x7fUL) /*!< RTCA0MINC (Bitfield-Mask: 0x7f) */ +/* ====================================================== RTCA0HOURC ======================================================= */ + #define R_RTC_RTCA0HOURC_RTCA0HOURC_Pos (0UL) /*!< RTCA0HOURC (Bit 0) */ + #define R_RTC_RTCA0HOURC_RTCA0HOURC_Msk (0x3fUL) /*!< RTCA0HOURC (Bitfield-Mask: 0x3f) */ +/* ====================================================== RTCA0WEEKC ======================================================= */ + #define R_RTC_RTCA0WEEKC_RTCA0WEEKC_Pos (0UL) /*!< RTCA0WEEKC (Bit 0) */ + #define R_RTC_RTCA0WEEKC_RTCA0WEEKC_Msk (0x7UL) /*!< RTCA0WEEKC (Bitfield-Mask: 0x07) */ +/* ======================================================= RTCA0DAYC ======================================================= */ + #define R_RTC_RTCA0DAYC_RTCA0DAYC_Pos (0UL) /*!< RTCA0DAYC (Bit 0) */ + #define R_RTC_RTCA0DAYC_RTCA0DAYC_Msk (0x3fUL) /*!< RTCA0DAYC (Bitfield-Mask: 0x3f) */ +/* ======================================================= RTCA0MONC ======================================================= */ + #define R_RTC_RTCA0MONC_RTCA0MONC_Pos (0UL) /*!< RTCA0MONC (Bit 0) */ + #define R_RTC_RTCA0MONC_RTCA0MONC_Msk (0x1fUL) /*!< RTCA0MONC (Bitfield-Mask: 0x1f) */ +/* ====================================================== RTCA0YEARC ======================================================= */ + #define R_RTC_RTCA0YEARC_RTCA0YEARC_Pos (0UL) /*!< RTCA0YEARC (Bit 0) */ + #define R_RTC_RTCA0YEARC_RTCA0YEARC_Msk (0xffUL) /*!< RTCA0YEARC (Bitfield-Mask: 0xff) */ +/* ====================================================== RTCA0TIMEC ======================================================= */ + #define R_RTC_RTCA0TIMEC_RTCA0SECC_Pos (0UL) /*!< RTCA0SECC (Bit 0) */ + #define R_RTC_RTCA0TIMEC_RTCA0SECC_Msk (0xffUL) /*!< RTCA0SECC (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0TIMEC_RTCA0MINC_Pos (8UL) /*!< RTCA0MINC (Bit 8) */ + #define R_RTC_RTCA0TIMEC_RTCA0MINC_Msk (0xff00UL) /*!< RTCA0MINC (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0TIMEC_RTCA0HOURC_Pos (16UL) /*!< RTCA0HOURC (Bit 16) */ + #define R_RTC_RTCA0TIMEC_RTCA0HOURC_Msk (0xff0000UL) /*!< RTCA0HOURC (Bitfield-Mask: 0xff) */ +/* ======================================================= RTCA0CALC ======================================================= */ + #define R_RTC_RTCA0CALC_RTCA0WEEKC_Pos (0UL) /*!< RTCA0WEEKC (Bit 0) */ + #define R_RTC_RTCA0CALC_RTCA0WEEKC_Msk (0xffUL) /*!< RTCA0WEEKC (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0CALC_RTCA0DAYC_Pos (8UL) /*!< RTCA0DAYC (Bit 8) */ + #define R_RTC_RTCA0CALC_RTCA0DAYC_Msk (0xff00UL) /*!< RTCA0DAYC (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0CALC_RTCA0MONC_Pos (16UL) /*!< RTCA0MONC (Bit 16) */ + #define R_RTC_RTCA0CALC_RTCA0MONC_Msk (0xff0000UL) /*!< RTCA0MONC (Bitfield-Mask: 0xff) */ + #define R_RTC_RTCA0CALC_RTCA0YEARC_Pos (24UL) /*!< RTCA0YEARC (Bit 24) */ + #define R_RTC_RTCA0CALC_RTCA0YEARC_Msk (0xff000000UL) /*!< RTCA0YEARC (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ R_POEG2 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== POEG2GA ======================================================== */ + #define R_POEG2_POEG2GA_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG2_POEG2GA_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG2_POEG2GA_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG2_POEG2GA_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG2_POEG2GA_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG2_POEG2GA_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG2_POEG2GA_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG2_POEG2GA_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG2_POEG2GA_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG2_POEG2GA_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG2_POEG2GA_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GA_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG2_POEG2GA_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG2GB ======================================================== */ + #define R_POEG2_POEG2GB_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG2_POEG2GB_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG2_POEG2GB_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG2_POEG2GB_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG2_POEG2GB_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG2_POEG2GB_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG2_POEG2GB_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG2_POEG2GB_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG2_POEG2GB_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG2_POEG2GB_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG2_POEG2GB_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GB_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG2_POEG2GB_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG2GC ======================================================== */ + #define R_POEG2_POEG2GC_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG2_POEG2GC_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG2_POEG2GC_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG2_POEG2GC_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG2_POEG2GC_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG2_POEG2GC_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG2_POEG2GC_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG2_POEG2GC_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG2_POEG2GC_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG2_POEG2GC_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG2_POEG2GC_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GC_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG2_POEG2GC_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG2GD ======================================================== */ + #define R_POEG2_POEG2GD_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG2_POEG2GD_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG2_POEG2GD_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG2_POEG2GD_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG2_POEG2GD_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG2_POEG2GD_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG2_POEG2GD_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG2_POEG2GD_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG2_POEG2GD_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG2_POEG2GD_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG2_POEG2GD_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG2_POEG2GD_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG2_POEG2GD_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_OTP ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== OTPPWR ========================================================= */ + #define R_OTP_OTPPWR_PWR_Pos (0UL) /*!< PWR (Bit 0) */ + #define R_OTP_OTPPWR_PWR_Msk (0x1UL) /*!< PWR (Bitfield-Mask: 0x01) */ + #define R_OTP_OTPPWR_ACCL_Pos (4UL) /*!< ACCL (Bit 4) */ + #define R_OTP_OTPPWR_ACCL_Msk (0x10UL) /*!< ACCL (Bitfield-Mask: 0x01) */ +/* ======================================================== OTPSTR ========================================================= */ + #define R_OTP_OTPSTR_CMD_RDY_Pos (0UL) /*!< CMD_RDY (Bit 0) */ + #define R_OTP_OTPSTR_CMD_RDY_Msk (0x1UL) /*!< CMD_RDY (Bitfield-Mask: 0x01) */ + #define R_OTP_OTPSTR_ERR_WR_Pos (1UL) /*!< ERR_WR (Bit 1) */ + #define R_OTP_OTPSTR_ERR_WR_Msk (0x6UL) /*!< ERR_WR (Bitfield-Mask: 0x03) */ + #define R_OTP_OTPSTR_ERR_WP_Pos (3UL) /*!< ERR_WP (Bit 3) */ + #define R_OTP_OTPSTR_ERR_WP_Msk (0x8UL) /*!< ERR_WP (Bitfield-Mask: 0x01) */ + #define R_OTP_OTPSTR_ERR_RP_Pos (4UL) /*!< ERR_RP (Bit 4) */ + #define R_OTP_OTPSTR_ERR_RP_Msk (0x10UL) /*!< ERR_RP (Bitfield-Mask: 0x01) */ + #define R_OTP_OTPSTR_ERR_RDY_WR_Pos (8UL) /*!< ERR_RDY_WR (Bit 8) */ + #define R_OTP_OTPSTR_ERR_RDY_WR_Msk (0x100UL) /*!< ERR_RDY_WR (Bitfield-Mask: 0x01) */ + #define R_OTP_OTPSTR_ERR_RDY_RD_Pos (9UL) /*!< ERR_RDY_RD (Bit 9) */ + #define R_OTP_OTPSTR_ERR_RDY_RD_Msk (0x200UL) /*!< ERR_RDY_RD (Bitfield-Mask: 0x01) */ + #define R_OTP_OTPSTR_CNT_ST_IDLE_Pos (15UL) /*!< CNT_ST_IDLE (Bit 15) */ + #define R_OTP_OTPSTR_CNT_ST_IDLE_Msk (0x8000UL) /*!< CNT_ST_IDLE (Bitfield-Mask: 0x01) */ +/* ======================================================= OTPSTAWR ======================================================== */ + #define R_OTP_OTPSTAWR_STAWR_Pos (0UL) /*!< STAWR (Bit 0) */ + #define R_OTP_OTPSTAWR_STAWR_Msk (0x1UL) /*!< STAWR (Bitfield-Mask: 0x01) */ +/* ======================================================= OTPADRWR ======================================================== */ + #define R_OTP_OTPADRWR_ADRWR_Pos (0UL) /*!< ADRWR (Bit 0) */ + #define R_OTP_OTPADRWR_ADRWR_Msk (0x1ffUL) /*!< ADRWR (Bitfield-Mask: 0x1ff) */ +/* ======================================================= OTPDATAWR ======================================================= */ + #define R_OTP_OTPDATAWR_DATAWR_Pos (0UL) /*!< DATAWR (Bit 0) */ + #define R_OTP_OTPDATAWR_DATAWR_Msk (0xffffUL) /*!< DATAWR (Bitfield-Mask: 0xffff) */ +/* ======================================================= OTPADRRD ======================================================== */ + #define R_OTP_OTPADRRD_ADRRD_Pos (0UL) /*!< ADRRD (Bit 0) */ + #define R_OTP_OTPADRRD_ADRRD_Msk (0x1ffUL) /*!< ADRRD (Bitfield-Mask: 0x1ff) */ +/* ======================================================= OTPDATARD ======================================================= */ + #define R_OTP_OTPDATARD_DATARD_Pos (0UL) /*!< DATARD (Bit 0) */ + #define R_OTP_OTPDATARD_DATARD_Msk (0xffffUL) /*!< DATARD (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ R_PTADR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= RSELP ========================================================= */ + #define R_PTADR_RSELP_RS0_Pos (0UL) /*!< RS0 (Bit 0) */ + #define R_PTADR_RSELP_RS0_Msk (0x1UL) /*!< RS0 (Bitfield-Mask: 0x01) */ + #define R_PTADR_RSELP_RS1_Pos (1UL) /*!< RS1 (Bit 1) */ + #define R_PTADR_RSELP_RS1_Msk (0x2UL) /*!< RS1 (Bitfield-Mask: 0x01) */ + #define R_PTADR_RSELP_RS2_Pos (2UL) /*!< RS2 (Bit 2) */ + #define R_PTADR_RSELP_RS2_Msk (0x4UL) /*!< RS2 (Bitfield-Mask: 0x01) */ + #define R_PTADR_RSELP_RS3_Pos (3UL) /*!< RS3 (Bit 3) */ + #define R_PTADR_RSELP_RS3_Msk (0x8UL) /*!< RS3 (Bitfield-Mask: 0x01) */ + #define R_PTADR_RSELP_RS4_Pos (4UL) /*!< RS4 (Bit 4) */ + #define R_PTADR_RSELP_RS4_Msk (0x10UL) /*!< RS4 (Bitfield-Mask: 0x01) */ + #define R_PTADR_RSELP_RS5_Pos (5UL) /*!< RS5 (Bit 5) */ + #define R_PTADR_RSELP_RS5_Msk (0x20UL) /*!< RS5 (Bitfield-Mask: 0x01) */ + #define R_PTADR_RSELP_RS6_Pos (6UL) /*!< RS6 (Bit 6) */ + #define R_PTADR_RSELP_RS6_Msk (0x40UL) /*!< RS6 (Bitfield-Mask: 0x01) */ + #define R_PTADR_RSELP_RS7_Pos (7UL) /*!< RS7 (Bit 7) */ + #define R_PTADR_RSELP_RS7_Msk (0x80UL) /*!< RS7 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSRAM0 ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_ICU ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== S_SWINT ======================================================== */ + #define R_ICU_S_SWINT_IC6_Pos (0UL) /*!< IC6 (Bit 0) */ + #define R_ICU_S_SWINT_IC6_Msk (0x1UL) /*!< IC6 (Bitfield-Mask: 0x01) */ + #define R_ICU_S_SWINT_IC7_Pos (1UL) /*!< IC7 (Bit 1) */ + #define R_ICU_S_SWINT_IC7_Msk (0x2UL) /*!< IC7 (Bitfield-Mask: 0x01) */ +/* ==================================================== S_PORTNF_FLTSEL ==================================================== */ + #define R_ICU_S_PORTNF_FLTSEL_FLT14_Pos (0UL) /*!< FLT14 (Bit 0) */ + #define R_ICU_S_PORTNF_FLTSEL_FLT14_Msk (0x1UL) /*!< FLT14 (Bitfield-Mask: 0x01) */ + #define R_ICU_S_PORTNF_FLTSEL_FLT15_Pos (1UL) /*!< FLT15 (Bit 1) */ + #define R_ICU_S_PORTNF_FLTSEL_FLT15_Msk (0x2UL) /*!< FLT15 (Bitfield-Mask: 0x01) */ + #define R_ICU_S_PORTNF_FLTSEL_FLTNMI_Pos (2UL) /*!< FLTNMI (Bit 2) */ + #define R_ICU_S_PORTNF_FLTSEL_FLTNMI_Msk (0x4UL) /*!< FLTNMI (Bitfield-Mask: 0x01) */ +/* ==================================================== S_PORTNF_CLKSEL ==================================================== */ + #define R_ICU_S_PORTNF_CLKSEL_CKSEL14_Pos (0UL) /*!< CKSEL14 (Bit 0) */ + #define R_ICU_S_PORTNF_CLKSEL_CKSEL14_Msk (0x3UL) /*!< CKSEL14 (Bitfield-Mask: 0x03) */ + #define R_ICU_S_PORTNF_CLKSEL_CKSEL15_Pos (2UL) /*!< CKSEL15 (Bit 2) */ + #define R_ICU_S_PORTNF_CLKSEL_CKSEL15_Msk (0xcUL) /*!< CKSEL15 (Bitfield-Mask: 0x03) */ + #define R_ICU_S_PORTNF_CLKSEL_CKSELNMI_Pos (4UL) /*!< CKSELNMI (Bit 4) */ + #define R_ICU_S_PORTNF_CLKSEL_CKSELNMI_Msk (0x30UL) /*!< CKSELNMI (Bitfield-Mask: 0x03) */ +/* ====================================================== S_PORTNF_MD ====================================================== */ + #define R_ICU_S_PORTNF_MD_MD14_Pos (0UL) /*!< MD14 (Bit 0) */ + #define R_ICU_S_PORTNF_MD_MD14_Msk (0x3UL) /*!< MD14 (Bitfield-Mask: 0x03) */ + #define R_ICU_S_PORTNF_MD_MD15_Pos (2UL) /*!< MD15 (Bit 2) */ + #define R_ICU_S_PORTNF_MD_MD15_Msk (0xcUL) /*!< MD15 (Bitfield-Mask: 0x03) */ + #define R_ICU_S_PORTNF_MD_MDNMI_Pos (4UL) /*!< MDNMI (Bit 4) */ + #define R_ICU_S_PORTNF_MD_MDNMI_Msk (0x30UL) /*!< MDNMI (Bitfield-Mask: 0x03) */ +/* ===================================================== CPU0ERR_STAT ====================================================== */ + #define R_ICU_CPU0ERR_STAT_ER_ST0_Pos (0UL) /*!< ER_ST0 (Bit 0) */ + #define R_ICU_CPU0ERR_STAT_ER_ST0_Msk (0x1UL) /*!< ER_ST0 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST1_Pos (1UL) /*!< ER_ST1 (Bit 1) */ + #define R_ICU_CPU0ERR_STAT_ER_ST1_Msk (0x2UL) /*!< ER_ST1 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST2_Pos (2UL) /*!< ER_ST2 (Bit 2) */ + #define R_ICU_CPU0ERR_STAT_ER_ST2_Msk (0x4UL) /*!< ER_ST2 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST3_Pos (3UL) /*!< ER_ST3 (Bit 3) */ + #define R_ICU_CPU0ERR_STAT_ER_ST3_Msk (0x8UL) /*!< ER_ST3 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST4_Pos (4UL) /*!< ER_ST4 (Bit 4) */ + #define R_ICU_CPU0ERR_STAT_ER_ST4_Msk (0x10UL) /*!< ER_ST4 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST5_Pos (5UL) /*!< ER_ST5 (Bit 5) */ + #define R_ICU_CPU0ERR_STAT_ER_ST5_Msk (0x20UL) /*!< ER_ST5 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST6_Pos (6UL) /*!< ER_ST6 (Bit 6) */ + #define R_ICU_CPU0ERR_STAT_ER_ST6_Msk (0x40UL) /*!< ER_ST6 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST7_Pos (7UL) /*!< ER_ST7 (Bit 7) */ + #define R_ICU_CPU0ERR_STAT_ER_ST7_Msk (0x80UL) /*!< ER_ST7 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST8_Pos (8UL) /*!< ER_ST8 (Bit 8) */ + #define R_ICU_CPU0ERR_STAT_ER_ST8_Msk (0x100UL) /*!< ER_ST8 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST9_Pos (9UL) /*!< ER_ST9 (Bit 9) */ + #define R_ICU_CPU0ERR_STAT_ER_ST9_Msk (0x200UL) /*!< ER_ST9 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST10_Pos (10UL) /*!< ER_ST10 (Bit 10) */ + #define R_ICU_CPU0ERR_STAT_ER_ST10_Msk (0x400UL) /*!< ER_ST10 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST11_Pos (11UL) /*!< ER_ST11 (Bit 11) */ + #define R_ICU_CPU0ERR_STAT_ER_ST11_Msk (0x800UL) /*!< ER_ST11 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST12_Pos (12UL) /*!< ER_ST12 (Bit 12) */ + #define R_ICU_CPU0ERR_STAT_ER_ST12_Msk (0x1000UL) /*!< ER_ST12 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST13_Pos (13UL) /*!< ER_ST13 (Bit 13) */ + #define R_ICU_CPU0ERR_STAT_ER_ST13_Msk (0x2000UL) /*!< ER_ST13 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST14_Pos (14UL) /*!< ER_ST14 (Bit 14) */ + #define R_ICU_CPU0ERR_STAT_ER_ST14_Msk (0x4000UL) /*!< ER_ST14 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST15_Pos (15UL) /*!< ER_ST15 (Bit 15) */ + #define R_ICU_CPU0ERR_STAT_ER_ST15_Msk (0x8000UL) /*!< ER_ST15 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST16_Pos (16UL) /*!< ER_ST16 (Bit 16) */ + #define R_ICU_CPU0ERR_STAT_ER_ST16_Msk (0x10000UL) /*!< ER_ST16 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST17_Pos (17UL) /*!< ER_ST17 (Bit 17) */ + #define R_ICU_CPU0ERR_STAT_ER_ST17_Msk (0x20000UL) /*!< ER_ST17 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST18_Pos (18UL) /*!< ER_ST18 (Bit 18) */ + #define R_ICU_CPU0ERR_STAT_ER_ST18_Msk (0x40000UL) /*!< ER_ST18 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST19_Pos (19UL) /*!< ER_ST19 (Bit 19) */ + #define R_ICU_CPU0ERR_STAT_ER_ST19_Msk (0x80000UL) /*!< ER_ST19 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST20_Pos (20UL) /*!< ER_ST20 (Bit 20) */ + #define R_ICU_CPU0ERR_STAT_ER_ST20_Msk (0x100000UL) /*!< ER_ST20 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST21_Pos (21UL) /*!< ER_ST21 (Bit 21) */ + #define R_ICU_CPU0ERR_STAT_ER_ST21_Msk (0x200000UL) /*!< ER_ST21 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST22_Pos (22UL) /*!< ER_ST22 (Bit 22) */ + #define R_ICU_CPU0ERR_STAT_ER_ST22_Msk (0x400000UL) /*!< ER_ST22 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST23_Pos (23UL) /*!< ER_ST23 (Bit 23) */ + #define R_ICU_CPU0ERR_STAT_ER_ST23_Msk (0x800000UL) /*!< ER_ST23 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST24_Pos (24UL) /*!< ER_ST24 (Bit 24) */ + #define R_ICU_CPU0ERR_STAT_ER_ST24_Msk (0x1000000UL) /*!< ER_ST24 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_STAT_ER_ST25_Pos (25UL) /*!< ER_ST25 (Bit 25) */ + #define R_ICU_CPU0ERR_STAT_ER_ST25_Msk (0x2000000UL) /*!< ER_ST25 (Bitfield-Mask: 0x01) */ +/* ===================================================== PERIERR_STAT0 ===================================================== */ + #define R_ICU_PERIERR_STAT0_ER_ST0_Pos (0UL) /*!< ER_ST0 (Bit 0) */ + #define R_ICU_PERIERR_STAT0_ER_ST0_Msk (0x1UL) /*!< ER_ST0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST1_Pos (1UL) /*!< ER_ST1 (Bit 1) */ + #define R_ICU_PERIERR_STAT0_ER_ST1_Msk (0x2UL) /*!< ER_ST1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST2_Pos (2UL) /*!< ER_ST2 (Bit 2) */ + #define R_ICU_PERIERR_STAT0_ER_ST2_Msk (0x4UL) /*!< ER_ST2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST3_Pos (3UL) /*!< ER_ST3 (Bit 3) */ + #define R_ICU_PERIERR_STAT0_ER_ST3_Msk (0x8UL) /*!< ER_ST3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST4_Pos (4UL) /*!< ER_ST4 (Bit 4) */ + #define R_ICU_PERIERR_STAT0_ER_ST4_Msk (0x10UL) /*!< ER_ST4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST5_Pos (5UL) /*!< ER_ST5 (Bit 5) */ + #define R_ICU_PERIERR_STAT0_ER_ST5_Msk (0x20UL) /*!< ER_ST5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST6_Pos (6UL) /*!< ER_ST6 (Bit 6) */ + #define R_ICU_PERIERR_STAT0_ER_ST6_Msk (0x40UL) /*!< ER_ST6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST7_Pos (7UL) /*!< ER_ST7 (Bit 7) */ + #define R_ICU_PERIERR_STAT0_ER_ST7_Msk (0x80UL) /*!< ER_ST7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST9_Pos (9UL) /*!< ER_ST9 (Bit 9) */ + #define R_ICU_PERIERR_STAT0_ER_ST9_Msk (0x200UL) /*!< ER_ST9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST10_Pos (10UL) /*!< ER_ST10 (Bit 10) */ + #define R_ICU_PERIERR_STAT0_ER_ST10_Msk (0x400UL) /*!< ER_ST10 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST11_Pos (11UL) /*!< ER_ST11 (Bit 11) */ + #define R_ICU_PERIERR_STAT0_ER_ST11_Msk (0x800UL) /*!< ER_ST11 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST12_Pos (12UL) /*!< ER_ST12 (Bit 12) */ + #define R_ICU_PERIERR_STAT0_ER_ST12_Msk (0x1000UL) /*!< ER_ST12 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST13_Pos (13UL) /*!< ER_ST13 (Bit 13) */ + #define R_ICU_PERIERR_STAT0_ER_ST13_Msk (0x2000UL) /*!< ER_ST13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST14_Pos (14UL) /*!< ER_ST14 (Bit 14) */ + #define R_ICU_PERIERR_STAT0_ER_ST14_Msk (0x4000UL) /*!< ER_ST14 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST15_Pos (15UL) /*!< ER_ST15 (Bit 15) */ + #define R_ICU_PERIERR_STAT0_ER_ST15_Msk (0x8000UL) /*!< ER_ST15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST16_Pos (16UL) /*!< ER_ST16 (Bit 16) */ + #define R_ICU_PERIERR_STAT0_ER_ST16_Msk (0x10000UL) /*!< ER_ST16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST17_Pos (17UL) /*!< ER_ST17 (Bit 17) */ + #define R_ICU_PERIERR_STAT0_ER_ST17_Msk (0x20000UL) /*!< ER_ST17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST18_Pos (18UL) /*!< ER_ST18 (Bit 18) */ + #define R_ICU_PERIERR_STAT0_ER_ST18_Msk (0x40000UL) /*!< ER_ST18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST19_Pos (19UL) /*!< ER_ST19 (Bit 19) */ + #define R_ICU_PERIERR_STAT0_ER_ST19_Msk (0x80000UL) /*!< ER_ST19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST20_Pos (20UL) /*!< ER_ST20 (Bit 20) */ + #define R_ICU_PERIERR_STAT0_ER_ST20_Msk (0x100000UL) /*!< ER_ST20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST21_Pos (21UL) /*!< ER_ST21 (Bit 21) */ + #define R_ICU_PERIERR_STAT0_ER_ST21_Msk (0x200000UL) /*!< ER_ST21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST22_Pos (22UL) /*!< ER_ST22 (Bit 22) */ + #define R_ICU_PERIERR_STAT0_ER_ST22_Msk (0x400000UL) /*!< ER_ST22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST23_Pos (23UL) /*!< ER_ST23 (Bit 23) */ + #define R_ICU_PERIERR_STAT0_ER_ST23_Msk (0x800000UL) /*!< ER_ST23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST24_Pos (24UL) /*!< ER_ST24 (Bit 24) */ + #define R_ICU_PERIERR_STAT0_ER_ST24_Msk (0x1000000UL) /*!< ER_ST24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST25_Pos (25UL) /*!< ER_ST25 (Bit 25) */ + #define R_ICU_PERIERR_STAT0_ER_ST25_Msk (0x2000000UL) /*!< ER_ST25 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST26_Pos (26UL) /*!< ER_ST26 (Bit 26) */ + #define R_ICU_PERIERR_STAT0_ER_ST26_Msk (0x4000000UL) /*!< ER_ST26 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST27_Pos (27UL) /*!< ER_ST27 (Bit 27) */ + #define R_ICU_PERIERR_STAT0_ER_ST27_Msk (0x8000000UL) /*!< ER_ST27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST28_Pos (28UL) /*!< ER_ST28 (Bit 28) */ + #define R_ICU_PERIERR_STAT0_ER_ST28_Msk (0x10000000UL) /*!< ER_ST28 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST29_Pos (29UL) /*!< ER_ST29 (Bit 29) */ + #define R_ICU_PERIERR_STAT0_ER_ST29_Msk (0x20000000UL) /*!< ER_ST29 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST30_Pos (30UL) /*!< ER_ST30 (Bit 30) */ + #define R_ICU_PERIERR_STAT0_ER_ST30_Msk (0x40000000UL) /*!< ER_ST30 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT0_ER_ST31_Pos (31UL) /*!< ER_ST31 (Bit 31) */ + #define R_ICU_PERIERR_STAT0_ER_ST31_Msk (0x80000000UL) /*!< ER_ST31 (Bitfield-Mask: 0x01) */ +/* ===================================================== PERIERR_STAT1 ===================================================== */ + #define R_ICU_PERIERR_STAT1_ER_ST0_Pos (0UL) /*!< ER_ST0 (Bit 0) */ + #define R_ICU_PERIERR_STAT1_ER_ST0_Msk (0x1UL) /*!< ER_ST0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST1_Pos (1UL) /*!< ER_ST1 (Bit 1) */ + #define R_ICU_PERIERR_STAT1_ER_ST1_Msk (0x2UL) /*!< ER_ST1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST2_Pos (2UL) /*!< ER_ST2 (Bit 2) */ + #define R_ICU_PERIERR_STAT1_ER_ST2_Msk (0x4UL) /*!< ER_ST2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST3_Pos (3UL) /*!< ER_ST3 (Bit 3) */ + #define R_ICU_PERIERR_STAT1_ER_ST3_Msk (0x8UL) /*!< ER_ST3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST4_Pos (4UL) /*!< ER_ST4 (Bit 4) */ + #define R_ICU_PERIERR_STAT1_ER_ST4_Msk (0x10UL) /*!< ER_ST4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST5_Pos (5UL) /*!< ER_ST5 (Bit 5) */ + #define R_ICU_PERIERR_STAT1_ER_ST5_Msk (0x20UL) /*!< ER_ST5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST6_Pos (6UL) /*!< ER_ST6 (Bit 6) */ + #define R_ICU_PERIERR_STAT1_ER_ST6_Msk (0x40UL) /*!< ER_ST6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST7_Pos (7UL) /*!< ER_ST7 (Bit 7) */ + #define R_ICU_PERIERR_STAT1_ER_ST7_Msk (0x80UL) /*!< ER_ST7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST8_Pos (8UL) /*!< ER_ST8 (Bit 8) */ + #define R_ICU_PERIERR_STAT1_ER_ST8_Msk (0x100UL) /*!< ER_ST8 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST9_Pos (9UL) /*!< ER_ST9 (Bit 9) */ + #define R_ICU_PERIERR_STAT1_ER_ST9_Msk (0x200UL) /*!< ER_ST9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST13_Pos (13UL) /*!< ER_ST13 (Bit 13) */ + #define R_ICU_PERIERR_STAT1_ER_ST13_Msk (0x2000UL) /*!< ER_ST13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST15_Pos (15UL) /*!< ER_ST15 (Bit 15) */ + #define R_ICU_PERIERR_STAT1_ER_ST15_Msk (0x8000UL) /*!< ER_ST15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST16_Pos (16UL) /*!< ER_ST16 (Bit 16) */ + #define R_ICU_PERIERR_STAT1_ER_ST16_Msk (0x10000UL) /*!< ER_ST16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST17_Pos (17UL) /*!< ER_ST17 (Bit 17) */ + #define R_ICU_PERIERR_STAT1_ER_ST17_Msk (0x20000UL) /*!< ER_ST17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST18_Pos (18UL) /*!< ER_ST18 (Bit 18) */ + #define R_ICU_PERIERR_STAT1_ER_ST18_Msk (0x40000UL) /*!< ER_ST18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST19_Pos (19UL) /*!< ER_ST19 (Bit 19) */ + #define R_ICU_PERIERR_STAT1_ER_ST19_Msk (0x80000UL) /*!< ER_ST19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST20_Pos (20UL) /*!< ER_ST20 (Bit 20) */ + #define R_ICU_PERIERR_STAT1_ER_ST20_Msk (0x100000UL) /*!< ER_ST20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST21_Pos (21UL) /*!< ER_ST21 (Bit 21) */ + #define R_ICU_PERIERR_STAT1_ER_ST21_Msk (0x200000UL) /*!< ER_ST21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST22_Pos (22UL) /*!< ER_ST22 (Bit 22) */ + #define R_ICU_PERIERR_STAT1_ER_ST22_Msk (0x400000UL) /*!< ER_ST22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST23_Pos (23UL) /*!< ER_ST23 (Bit 23) */ + #define R_ICU_PERIERR_STAT1_ER_ST23_Msk (0x800000UL) /*!< ER_ST23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST24_Pos (24UL) /*!< ER_ST24 (Bit 24) */ + #define R_ICU_PERIERR_STAT1_ER_ST24_Msk (0x1000000UL) /*!< ER_ST24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST27_Pos (27UL) /*!< ER_ST27 (Bit 27) */ + #define R_ICU_PERIERR_STAT1_ER_ST27_Msk (0x8000000UL) /*!< ER_ST27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_STAT1_ER_ST28_Pos (28UL) /*!< ER_ST28 (Bit 28) */ + #define R_ICU_PERIERR_STAT1_ER_ST28_Msk (0x10000000UL) /*!< ER_ST28 (Bitfield-Mask: 0x01) */ +/* ====================================================== CPU0ERR_CLR ====================================================== */ + #define R_ICU_CPU0ERR_CLR_ER_CL0_Pos (0UL) /*!< ER_CL0 (Bit 0) */ + #define R_ICU_CPU0ERR_CLR_ER_CL0_Msk (0x1UL) /*!< ER_CL0 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL1_Pos (1UL) /*!< ER_CL1 (Bit 1) */ + #define R_ICU_CPU0ERR_CLR_ER_CL1_Msk (0x2UL) /*!< ER_CL1 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL2_Pos (2UL) /*!< ER_CL2 (Bit 2) */ + #define R_ICU_CPU0ERR_CLR_ER_CL2_Msk (0x4UL) /*!< ER_CL2 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL3_Pos (3UL) /*!< ER_CL3 (Bit 3) */ + #define R_ICU_CPU0ERR_CLR_ER_CL3_Msk (0x8UL) /*!< ER_CL3 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL4_Pos (4UL) /*!< ER_CL4 (Bit 4) */ + #define R_ICU_CPU0ERR_CLR_ER_CL4_Msk (0x10UL) /*!< ER_CL4 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL5_Pos (5UL) /*!< ER_CL5 (Bit 5) */ + #define R_ICU_CPU0ERR_CLR_ER_CL5_Msk (0x20UL) /*!< ER_CL5 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL6_Pos (6UL) /*!< ER_CL6 (Bit 6) */ + #define R_ICU_CPU0ERR_CLR_ER_CL6_Msk (0x40UL) /*!< ER_CL6 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL7_Pos (7UL) /*!< ER_CL7 (Bit 7) */ + #define R_ICU_CPU0ERR_CLR_ER_CL7_Msk (0x80UL) /*!< ER_CL7 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL8_Pos (8UL) /*!< ER_CL8 (Bit 8) */ + #define R_ICU_CPU0ERR_CLR_ER_CL8_Msk (0x100UL) /*!< ER_CL8 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL9_Pos (9UL) /*!< ER_CL9 (Bit 9) */ + #define R_ICU_CPU0ERR_CLR_ER_CL9_Msk (0x200UL) /*!< ER_CL9 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL10_Pos (10UL) /*!< ER_CL10 (Bit 10) */ + #define R_ICU_CPU0ERR_CLR_ER_CL10_Msk (0x400UL) /*!< ER_CL10 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL11_Pos (11UL) /*!< ER_CL11 (Bit 11) */ + #define R_ICU_CPU0ERR_CLR_ER_CL11_Msk (0x800UL) /*!< ER_CL11 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL12_Pos (12UL) /*!< ER_CL12 (Bit 12) */ + #define R_ICU_CPU0ERR_CLR_ER_CL12_Msk (0x1000UL) /*!< ER_CL12 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL13_Pos (13UL) /*!< ER_CL13 (Bit 13) */ + #define R_ICU_CPU0ERR_CLR_ER_CL13_Msk (0x2000UL) /*!< ER_CL13 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL14_Pos (14UL) /*!< ER_CL14 (Bit 14) */ + #define R_ICU_CPU0ERR_CLR_ER_CL14_Msk (0x4000UL) /*!< ER_CL14 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL15_Pos (15UL) /*!< ER_CL15 (Bit 15) */ + #define R_ICU_CPU0ERR_CLR_ER_CL15_Msk (0x8000UL) /*!< ER_CL15 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL16_Pos (16UL) /*!< ER_CL16 (Bit 16) */ + #define R_ICU_CPU0ERR_CLR_ER_CL16_Msk (0x10000UL) /*!< ER_CL16 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL17_Pos (17UL) /*!< ER_CL17 (Bit 17) */ + #define R_ICU_CPU0ERR_CLR_ER_CL17_Msk (0x20000UL) /*!< ER_CL17 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL18_Pos (18UL) /*!< ER_CL18 (Bit 18) */ + #define R_ICU_CPU0ERR_CLR_ER_CL18_Msk (0x40000UL) /*!< ER_CL18 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL19_Pos (19UL) /*!< ER_CL19 (Bit 19) */ + #define R_ICU_CPU0ERR_CLR_ER_CL19_Msk (0x80000UL) /*!< ER_CL19 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL20_Pos (20UL) /*!< ER_CL20 (Bit 20) */ + #define R_ICU_CPU0ERR_CLR_ER_CL20_Msk (0x100000UL) /*!< ER_CL20 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL21_Pos (21UL) /*!< ER_CL21 (Bit 21) */ + #define R_ICU_CPU0ERR_CLR_ER_CL21_Msk (0x200000UL) /*!< ER_CL21 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL22_Pos (22UL) /*!< ER_CL22 (Bit 22) */ + #define R_ICU_CPU0ERR_CLR_ER_CL22_Msk (0x400000UL) /*!< ER_CL22 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL23_Pos (23UL) /*!< ER_CL23 (Bit 23) */ + #define R_ICU_CPU0ERR_CLR_ER_CL23_Msk (0x800000UL) /*!< ER_CL23 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL24_Pos (24UL) /*!< ER_CL24 (Bit 24) */ + #define R_ICU_CPU0ERR_CLR_ER_CL24_Msk (0x1000000UL) /*!< ER_CL24 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_CLR_ER_CL25_Pos (25UL) /*!< ER_CL25 (Bit 25) */ + #define R_ICU_CPU0ERR_CLR_ER_CL25_Msk (0x2000000UL) /*!< ER_CL25 (Bitfield-Mask: 0x01) */ +/* ===================================================== PERIERR_CLR0 ====================================================== */ + #define R_ICU_PERIERR_CLR0_ER_CL0_Pos (0UL) /*!< ER_CL0 (Bit 0) */ + #define R_ICU_PERIERR_CLR0_ER_CL0_Msk (0x1UL) /*!< ER_CL0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL1_Pos (1UL) /*!< ER_CL1 (Bit 1) */ + #define R_ICU_PERIERR_CLR0_ER_CL1_Msk (0x2UL) /*!< ER_CL1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL2_Pos (2UL) /*!< ER_CL2 (Bit 2) */ + #define R_ICU_PERIERR_CLR0_ER_CL2_Msk (0x4UL) /*!< ER_CL2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL3_Pos (3UL) /*!< ER_CL3 (Bit 3) */ + #define R_ICU_PERIERR_CLR0_ER_CL3_Msk (0x8UL) /*!< ER_CL3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL4_Pos (4UL) /*!< ER_CL4 (Bit 4) */ + #define R_ICU_PERIERR_CLR0_ER_CL4_Msk (0x10UL) /*!< ER_CL4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL5_Pos (5UL) /*!< ER_CL5 (Bit 5) */ + #define R_ICU_PERIERR_CLR0_ER_CL5_Msk (0x20UL) /*!< ER_CL5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL6_Pos (6UL) /*!< ER_CL6 (Bit 6) */ + #define R_ICU_PERIERR_CLR0_ER_CL6_Msk (0x40UL) /*!< ER_CL6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL7_Pos (7UL) /*!< ER_CL7 (Bit 7) */ + #define R_ICU_PERIERR_CLR0_ER_CL7_Msk (0x80UL) /*!< ER_CL7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL9_Pos (9UL) /*!< ER_CL9 (Bit 9) */ + #define R_ICU_PERIERR_CLR0_ER_CL9_Msk (0x200UL) /*!< ER_CL9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL10_Pos (10UL) /*!< ER_CL10 (Bit 10) */ + #define R_ICU_PERIERR_CLR0_ER_CL10_Msk (0x400UL) /*!< ER_CL10 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL11_Pos (11UL) /*!< ER_CL11 (Bit 11) */ + #define R_ICU_PERIERR_CLR0_ER_CL11_Msk (0x800UL) /*!< ER_CL11 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL12_Pos (12UL) /*!< ER_CL12 (Bit 12) */ + #define R_ICU_PERIERR_CLR0_ER_CL12_Msk (0x1000UL) /*!< ER_CL12 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL13_Pos (13UL) /*!< ER_CL13 (Bit 13) */ + #define R_ICU_PERIERR_CLR0_ER_CL13_Msk (0x2000UL) /*!< ER_CL13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL14_Pos (14UL) /*!< ER_CL14 (Bit 14) */ + #define R_ICU_PERIERR_CLR0_ER_CL14_Msk (0x4000UL) /*!< ER_CL14 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL15_Pos (15UL) /*!< ER_CL15 (Bit 15) */ + #define R_ICU_PERIERR_CLR0_ER_CL15_Msk (0x8000UL) /*!< ER_CL15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL16_Pos (16UL) /*!< ER_CL16 (Bit 16) */ + #define R_ICU_PERIERR_CLR0_ER_CL16_Msk (0x10000UL) /*!< ER_CL16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL17_Pos (17UL) /*!< ER_CL17 (Bit 17) */ + #define R_ICU_PERIERR_CLR0_ER_CL17_Msk (0x20000UL) /*!< ER_CL17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL18_Pos (18UL) /*!< ER_CL18 (Bit 18) */ + #define R_ICU_PERIERR_CLR0_ER_CL18_Msk (0x40000UL) /*!< ER_CL18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL19_Pos (19UL) /*!< ER_CL19 (Bit 19) */ + #define R_ICU_PERIERR_CLR0_ER_CL19_Msk (0x80000UL) /*!< ER_CL19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL20_Pos (20UL) /*!< ER_CL20 (Bit 20) */ + #define R_ICU_PERIERR_CLR0_ER_CL20_Msk (0x100000UL) /*!< ER_CL20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL21_Pos (21UL) /*!< ER_CL21 (Bit 21) */ + #define R_ICU_PERIERR_CLR0_ER_CL21_Msk (0x200000UL) /*!< ER_CL21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL22_Pos (22UL) /*!< ER_CL22 (Bit 22) */ + #define R_ICU_PERIERR_CLR0_ER_CL22_Msk (0x400000UL) /*!< ER_CL22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL23_Pos (23UL) /*!< ER_CL23 (Bit 23) */ + #define R_ICU_PERIERR_CLR0_ER_CL23_Msk (0x800000UL) /*!< ER_CL23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL24_Pos (24UL) /*!< ER_CL24 (Bit 24) */ + #define R_ICU_PERIERR_CLR0_ER_CL24_Msk (0x1000000UL) /*!< ER_CL24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL25_Pos (25UL) /*!< ER_CL25 (Bit 25) */ + #define R_ICU_PERIERR_CLR0_ER_CL25_Msk (0x2000000UL) /*!< ER_CL25 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL26_Pos (26UL) /*!< ER_CL26 (Bit 26) */ + #define R_ICU_PERIERR_CLR0_ER_CL26_Msk (0x4000000UL) /*!< ER_CL26 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL27_Pos (27UL) /*!< ER_CL27 (Bit 27) */ + #define R_ICU_PERIERR_CLR0_ER_CL27_Msk (0x8000000UL) /*!< ER_CL27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL28_Pos (28UL) /*!< ER_CL28 (Bit 28) */ + #define R_ICU_PERIERR_CLR0_ER_CL28_Msk (0x10000000UL) /*!< ER_CL28 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL29_Pos (29UL) /*!< ER_CL29 (Bit 29) */ + #define R_ICU_PERIERR_CLR0_ER_CL29_Msk (0x20000000UL) /*!< ER_CL29 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL30_Pos (30UL) /*!< ER_CL30 (Bit 30) */ + #define R_ICU_PERIERR_CLR0_ER_CL30_Msk (0x40000000UL) /*!< ER_CL30 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR0_ER_CL31_Pos (31UL) /*!< ER_CL31 (Bit 31) */ + #define R_ICU_PERIERR_CLR0_ER_CL31_Msk (0x80000000UL) /*!< ER_CL31 (Bitfield-Mask: 0x01) */ +/* ===================================================== PERIERR_CLR1 ====================================================== */ + #define R_ICU_PERIERR_CLR1_ER_CL0_Pos (0UL) /*!< ER_CL0 (Bit 0) */ + #define R_ICU_PERIERR_CLR1_ER_CL0_Msk (0x1UL) /*!< ER_CL0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL1_Pos (1UL) /*!< ER_CL1 (Bit 1) */ + #define R_ICU_PERIERR_CLR1_ER_CL1_Msk (0x2UL) /*!< ER_CL1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL2_Pos (2UL) /*!< ER_CL2 (Bit 2) */ + #define R_ICU_PERIERR_CLR1_ER_CL2_Msk (0x4UL) /*!< ER_CL2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL3_Pos (3UL) /*!< ER_CL3 (Bit 3) */ + #define R_ICU_PERIERR_CLR1_ER_CL3_Msk (0x8UL) /*!< ER_CL3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL4_Pos (4UL) /*!< ER_CL4 (Bit 4) */ + #define R_ICU_PERIERR_CLR1_ER_CL4_Msk (0x10UL) /*!< ER_CL4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL5_Pos (5UL) /*!< ER_CL5 (Bit 5) */ + #define R_ICU_PERIERR_CLR1_ER_CL5_Msk (0x20UL) /*!< ER_CL5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL6_Pos (6UL) /*!< ER_CL6 (Bit 6) */ + #define R_ICU_PERIERR_CLR1_ER_CL6_Msk (0x40UL) /*!< ER_CL6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL7_Pos (7UL) /*!< ER_CL7 (Bit 7) */ + #define R_ICU_PERIERR_CLR1_ER_CL7_Msk (0x80UL) /*!< ER_CL7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL8_Pos (8UL) /*!< ER_CL8 (Bit 8) */ + #define R_ICU_PERIERR_CLR1_ER_CL8_Msk (0x100UL) /*!< ER_CL8 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL9_Pos (9UL) /*!< ER_CL9 (Bit 9) */ + #define R_ICU_PERIERR_CLR1_ER_CL9_Msk (0x200UL) /*!< ER_CL9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL13_Pos (13UL) /*!< ER_CL13 (Bit 13) */ + #define R_ICU_PERIERR_CLR1_ER_CL13_Msk (0x2000UL) /*!< ER_CL13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL15_Pos (15UL) /*!< ER_CL15 (Bit 15) */ + #define R_ICU_PERIERR_CLR1_ER_CL15_Msk (0x8000UL) /*!< ER_CL15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL16_Pos (16UL) /*!< ER_CL16 (Bit 16) */ + #define R_ICU_PERIERR_CLR1_ER_CL16_Msk (0x10000UL) /*!< ER_CL16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL17_Pos (17UL) /*!< ER_CL17 (Bit 17) */ + #define R_ICU_PERIERR_CLR1_ER_CL17_Msk (0x20000UL) /*!< ER_CL17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL18_Pos (18UL) /*!< ER_CL18 (Bit 18) */ + #define R_ICU_PERIERR_CLR1_ER_CL18_Msk (0x40000UL) /*!< ER_CL18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL19_Pos (19UL) /*!< ER_CL19 (Bit 19) */ + #define R_ICU_PERIERR_CLR1_ER_CL19_Msk (0x80000UL) /*!< ER_CL19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL20_Pos (20UL) /*!< ER_CL20 (Bit 20) */ + #define R_ICU_PERIERR_CLR1_ER_CL20_Msk (0x100000UL) /*!< ER_CL20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL21_Pos (21UL) /*!< ER_CL21 (Bit 21) */ + #define R_ICU_PERIERR_CLR1_ER_CL21_Msk (0x200000UL) /*!< ER_CL21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL22_Pos (22UL) /*!< ER_CL22 (Bit 22) */ + #define R_ICU_PERIERR_CLR1_ER_CL22_Msk (0x400000UL) /*!< ER_CL22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL23_Pos (23UL) /*!< ER_CL23 (Bit 23) */ + #define R_ICU_PERIERR_CLR1_ER_CL23_Msk (0x800000UL) /*!< ER_CL23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL24_Pos (24UL) /*!< ER_CL24 (Bit 24) */ + #define R_ICU_PERIERR_CLR1_ER_CL24_Msk (0x1000000UL) /*!< ER_CL24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL27_Pos (27UL) /*!< ER_CL27 (Bit 27) */ + #define R_ICU_PERIERR_CLR1_ER_CL27_Msk (0x8000000UL) /*!< ER_CL27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_CLR1_ER_CL28_Pos (28UL) /*!< ER_CL28 (Bit 28) */ + #define R_ICU_PERIERR_CLR1_ER_CL28_Msk (0x10000000UL) /*!< ER_CL28 (Bitfield-Mask: 0x01) */ +/* ==================================================== CPU0ERR_RSTMSK ===================================================== */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK0_Pos (0UL) /*!< RS_MK0 (Bit 0) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK0_Msk (0x1UL) /*!< RS_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK1_Pos (1UL) /*!< RS_MK1 (Bit 1) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK1_Msk (0x2UL) /*!< RS_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK2_Pos (2UL) /*!< RS_MK2 (Bit 2) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK2_Msk (0x4UL) /*!< RS_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK3_Pos (3UL) /*!< RS_MK3 (Bit 3) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK3_Msk (0x8UL) /*!< RS_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK4_Pos (4UL) /*!< RS_MK4 (Bit 4) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK4_Msk (0x10UL) /*!< RS_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK5_Pos (5UL) /*!< RS_MK5 (Bit 5) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK5_Msk (0x20UL) /*!< RS_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK6_Pos (6UL) /*!< RS_MK6 (Bit 6) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK6_Msk (0x40UL) /*!< RS_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK7_Pos (7UL) /*!< RS_MK7 (Bit 7) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK7_Msk (0x80UL) /*!< RS_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK8_Pos (8UL) /*!< RS_MK8 (Bit 8) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK8_Msk (0x100UL) /*!< RS_MK8 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK9_Pos (9UL) /*!< RS_MK9 (Bit 9) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK9_Msk (0x200UL) /*!< RS_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK10_Pos (10UL) /*!< RS_MK10 (Bit 10) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK10_Msk (0x400UL) /*!< RS_MK10 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK11_Pos (11UL) /*!< RS_MK11 (Bit 11) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK11_Msk (0x800UL) /*!< RS_MK11 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK12_Pos (12UL) /*!< RS_MK12 (Bit 12) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK12_Msk (0x1000UL) /*!< RS_MK12 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK13_Pos (13UL) /*!< RS_MK13 (Bit 13) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK13_Msk (0x2000UL) /*!< RS_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK14_Pos (14UL) /*!< RS_MK14 (Bit 14) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK14_Msk (0x4000UL) /*!< RS_MK14 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK15_Pos (15UL) /*!< RS_MK15 (Bit 15) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK15_Msk (0x8000UL) /*!< RS_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK16_Pos (16UL) /*!< RS_MK16 (Bit 16) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK16_Msk (0x10000UL) /*!< RS_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK17_Pos (17UL) /*!< RS_MK17 (Bit 17) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK17_Msk (0x20000UL) /*!< RS_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK18_Pos (18UL) /*!< RS_MK18 (Bit 18) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK18_Msk (0x40000UL) /*!< RS_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK19_Pos (19UL) /*!< RS_MK19 (Bit 19) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK19_Msk (0x80000UL) /*!< RS_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK20_Pos (20UL) /*!< RS_MK20 (Bit 20) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK20_Msk (0x100000UL) /*!< RS_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK21_Pos (21UL) /*!< RS_MK21 (Bit 21) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK21_Msk (0x200000UL) /*!< RS_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK22_Pos (22UL) /*!< RS_MK22 (Bit 22) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK22_Msk (0x400000UL) /*!< RS_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK23_Pos (23UL) /*!< RS_MK23 (Bit 23) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK23_Msk (0x800000UL) /*!< RS_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK24_Pos (24UL) /*!< RS_MK24 (Bit 24) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK24_Msk (0x1000000UL) /*!< RS_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK25_Pos (25UL) /*!< RS_MK25 (Bit 25) */ + #define R_ICU_CPU0ERR_RSTMSK_RS_MK25_Msk (0x2000000UL) /*!< RS_MK25 (Bitfield-Mask: 0x01) */ +/* ==================================================== PERIERR_RSTMSK0 ==================================================== */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK0_Pos (0UL) /*!< RS_MK0 (Bit 0) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK0_Msk (0x1UL) /*!< RS_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK1_Pos (1UL) /*!< RS_MK1 (Bit 1) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK1_Msk (0x2UL) /*!< RS_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK2_Pos (2UL) /*!< RS_MK2 (Bit 2) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK2_Msk (0x4UL) /*!< RS_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK3_Pos (3UL) /*!< RS_MK3 (Bit 3) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK3_Msk (0x8UL) /*!< RS_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK4_Pos (4UL) /*!< RS_MK4 (Bit 4) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK4_Msk (0x10UL) /*!< RS_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK5_Pos (5UL) /*!< RS_MK5 (Bit 5) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK5_Msk (0x20UL) /*!< RS_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK6_Pos (6UL) /*!< RS_MK6 (Bit 6) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK6_Msk (0x40UL) /*!< RS_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK7_Pos (7UL) /*!< RS_MK7 (Bit 7) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK7_Msk (0x80UL) /*!< RS_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK9_Pos (9UL) /*!< RS_MK9 (Bit 9) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK9_Msk (0x200UL) /*!< RS_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK10_Pos (10UL) /*!< RS_MK10 (Bit 10) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK10_Msk (0x400UL) /*!< RS_MK10 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK11_Pos (11UL) /*!< RS_MK11 (Bit 11) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK11_Msk (0x800UL) /*!< RS_MK11 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK12_Pos (12UL) /*!< RS_MK12 (Bit 12) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK12_Msk (0x1000UL) /*!< RS_MK12 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK13_Pos (13UL) /*!< RS_MK13 (Bit 13) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK13_Msk (0x2000UL) /*!< RS_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK14_Pos (14UL) /*!< RS_MK14 (Bit 14) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK14_Msk (0x4000UL) /*!< RS_MK14 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK15_Pos (15UL) /*!< RS_MK15 (Bit 15) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK15_Msk (0x8000UL) /*!< RS_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK16_Pos (16UL) /*!< RS_MK16 (Bit 16) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK16_Msk (0x10000UL) /*!< RS_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK17_Pos (17UL) /*!< RS_MK17 (Bit 17) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK17_Msk (0x20000UL) /*!< RS_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK18_Pos (18UL) /*!< RS_MK18 (Bit 18) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK18_Msk (0x40000UL) /*!< RS_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK19_Pos (19UL) /*!< RS_MK19 (Bit 19) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK19_Msk (0x80000UL) /*!< RS_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK20_Pos (20UL) /*!< RS_MK20 (Bit 20) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK20_Msk (0x100000UL) /*!< RS_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK21_Pos (21UL) /*!< RS_MK21 (Bit 21) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK21_Msk (0x200000UL) /*!< RS_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK22_Pos (22UL) /*!< RS_MK22 (Bit 22) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK22_Msk (0x400000UL) /*!< RS_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK23_Pos (23UL) /*!< RS_MK23 (Bit 23) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK23_Msk (0x800000UL) /*!< RS_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK24_Pos (24UL) /*!< RS_MK24 (Bit 24) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK24_Msk (0x1000000UL) /*!< RS_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK25_Pos (25UL) /*!< RS_MK25 (Bit 25) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK25_Msk (0x2000000UL) /*!< RS_MK25 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK26_Pos (26UL) /*!< RS_MK26 (Bit 26) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK26_Msk (0x4000000UL) /*!< RS_MK26 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK27_Pos (27UL) /*!< RS_MK27 (Bit 27) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK27_Msk (0x8000000UL) /*!< RS_MK27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK28_Pos (28UL) /*!< RS_MK28 (Bit 28) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK28_Msk (0x10000000UL) /*!< RS_MK28 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK29_Pos (29UL) /*!< RS_MK29 (Bit 29) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK29_Msk (0x20000000UL) /*!< RS_MK29 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK30_Pos (30UL) /*!< RS_MK30 (Bit 30) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK30_Msk (0x40000000UL) /*!< RS_MK30 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK31_Pos (31UL) /*!< RS_MK31 (Bit 31) */ + #define R_ICU_PERIERR_RSTMSK0_RS_MK31_Msk (0x80000000UL) /*!< RS_MK31 (Bitfield-Mask: 0x01) */ +/* ==================================================== PERIERR_RSTMSK1 ==================================================== */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK0_Pos (0UL) /*!< RS_MK0 (Bit 0) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK0_Msk (0x1UL) /*!< RS_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK1_Pos (1UL) /*!< RS_MK1 (Bit 1) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK1_Msk (0x2UL) /*!< RS_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK2_Pos (2UL) /*!< RS_MK2 (Bit 2) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK2_Msk (0x4UL) /*!< RS_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK3_Pos (3UL) /*!< RS_MK3 (Bit 3) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK3_Msk (0x8UL) /*!< RS_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK4_Pos (4UL) /*!< RS_MK4 (Bit 4) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK4_Msk (0x10UL) /*!< RS_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK5_Pos (5UL) /*!< RS_MK5 (Bit 5) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK5_Msk (0x20UL) /*!< RS_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK6_Pos (6UL) /*!< RS_MK6 (Bit 6) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK6_Msk (0x40UL) /*!< RS_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK7_Pos (7UL) /*!< RS_MK7 (Bit 7) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK7_Msk (0x80UL) /*!< RS_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK8_Pos (8UL) /*!< RS_MK8 (Bit 8) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK8_Msk (0x100UL) /*!< RS_MK8 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK9_Pos (9UL) /*!< RS_MK9 (Bit 9) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK9_Msk (0x200UL) /*!< RS_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK13_Pos (13UL) /*!< RS_MK13 (Bit 13) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK13_Msk (0x2000UL) /*!< RS_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK15_Pos (15UL) /*!< RS_MK15 (Bit 15) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK15_Msk (0x8000UL) /*!< RS_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK16_Pos (16UL) /*!< RS_MK16 (Bit 16) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK16_Msk (0x10000UL) /*!< RS_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK17_Pos (17UL) /*!< RS_MK17 (Bit 17) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK17_Msk (0x20000UL) /*!< RS_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK18_Pos (18UL) /*!< RS_MK18 (Bit 18) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK18_Msk (0x40000UL) /*!< RS_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK19_Pos (19UL) /*!< RS_MK19 (Bit 19) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK19_Msk (0x80000UL) /*!< RS_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK20_Pos (20UL) /*!< RS_MK20 (Bit 20) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK20_Msk (0x100000UL) /*!< RS_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK21_Pos (21UL) /*!< RS_MK21 (Bit 21) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK21_Msk (0x200000UL) /*!< RS_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK22_Pos (22UL) /*!< RS_MK22 (Bit 22) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK22_Msk (0x400000UL) /*!< RS_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK23_Pos (23UL) /*!< RS_MK23 (Bit 23) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK23_Msk (0x800000UL) /*!< RS_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK24_Pos (24UL) /*!< RS_MK24 (Bit 24) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK24_Msk (0x1000000UL) /*!< RS_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK27_Pos (27UL) /*!< RS_MK27 (Bit 27) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK27_Msk (0x8000000UL) /*!< RS_MK27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK28_Pos (28UL) /*!< RS_MK28 (Bit 28) */ + #define R_ICU_PERIERR_RSTMSK1_RS_MK28_Msk (0x10000000UL) /*!< RS_MK28 (Bitfield-Mask: 0x01) */ +/* ===================================================== CPU0ERR_E0MSK ===================================================== */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK0_Pos (0UL) /*!< E0_MK0 (Bit 0) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK0_Msk (0x1UL) /*!< E0_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK1_Pos (1UL) /*!< E0_MK1 (Bit 1) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK1_Msk (0x2UL) /*!< E0_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK2_Pos (2UL) /*!< E0_MK2 (Bit 2) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK2_Msk (0x4UL) /*!< E0_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK3_Pos (3UL) /*!< E0_MK3 (Bit 3) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK3_Msk (0x8UL) /*!< E0_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK4_Pos (4UL) /*!< E0_MK4 (Bit 4) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK4_Msk (0x10UL) /*!< E0_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK5_Pos (5UL) /*!< E0_MK5 (Bit 5) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK5_Msk (0x20UL) /*!< E0_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK6_Pos (6UL) /*!< E0_MK6 (Bit 6) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK6_Msk (0x40UL) /*!< E0_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK7_Pos (7UL) /*!< E0_MK7 (Bit 7) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK7_Msk (0x80UL) /*!< E0_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK8_Pos (8UL) /*!< E0_MK8 (Bit 8) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK8_Msk (0x100UL) /*!< E0_MK8 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK9_Pos (9UL) /*!< E0_MK9 (Bit 9) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK9_Msk (0x200UL) /*!< E0_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK10_Pos (10UL) /*!< E0_MK10 (Bit 10) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK10_Msk (0x400UL) /*!< E0_MK10 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK11_Pos (11UL) /*!< E0_MK11 (Bit 11) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK11_Msk (0x800UL) /*!< E0_MK11 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK12_Pos (12UL) /*!< E0_MK12 (Bit 12) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK12_Msk (0x1000UL) /*!< E0_MK12 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK13_Pos (13UL) /*!< E0_MK13 (Bit 13) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK13_Msk (0x2000UL) /*!< E0_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK14_Pos (14UL) /*!< E0_MK14 (Bit 14) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK14_Msk (0x4000UL) /*!< E0_MK14 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK15_Pos (15UL) /*!< E0_MK15 (Bit 15) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK15_Msk (0x8000UL) /*!< E0_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK16_Pos (16UL) /*!< E0_MK16 (Bit 16) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK16_Msk (0x10000UL) /*!< E0_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK17_Pos (17UL) /*!< E0_MK17 (Bit 17) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK17_Msk (0x20000UL) /*!< E0_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK18_Pos (18UL) /*!< E0_MK18 (Bit 18) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK18_Msk (0x40000UL) /*!< E0_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK19_Pos (19UL) /*!< E0_MK19 (Bit 19) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK19_Msk (0x80000UL) /*!< E0_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK20_Pos (20UL) /*!< E0_MK20 (Bit 20) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK20_Msk (0x100000UL) /*!< E0_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK21_Pos (21UL) /*!< E0_MK21 (Bit 21) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK21_Msk (0x200000UL) /*!< E0_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK22_Pos (22UL) /*!< E0_MK22 (Bit 22) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK22_Msk (0x400000UL) /*!< E0_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK23_Pos (23UL) /*!< E0_MK23 (Bit 23) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK23_Msk (0x800000UL) /*!< E0_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK24_Pos (24UL) /*!< E0_MK24 (Bit 24) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK24_Msk (0x1000000UL) /*!< E0_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK25_Pos (25UL) /*!< E0_MK25 (Bit 25) */ + #define R_ICU_CPU0ERR_E0MSK_E0_MK25_Msk (0x2000000UL) /*!< E0_MK25 (Bitfield-Mask: 0x01) */ +/* ==================================================== PERIERR_E0MSK0 ===================================================== */ + #define R_ICU_PERIERR_E0MSK0_E0_MK0_Pos (0UL) /*!< E0_MK0 (Bit 0) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK0_Msk (0x1UL) /*!< E0_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK1_Pos (1UL) /*!< E0_MK1 (Bit 1) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK1_Msk (0x2UL) /*!< E0_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK2_Pos (2UL) /*!< E0_MK2 (Bit 2) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK2_Msk (0x4UL) /*!< E0_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK3_Pos (3UL) /*!< E0_MK3 (Bit 3) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK3_Msk (0x8UL) /*!< E0_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK4_Pos (4UL) /*!< E0_MK4 (Bit 4) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK4_Msk (0x10UL) /*!< E0_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK5_Pos (5UL) /*!< E0_MK5 (Bit 5) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK5_Msk (0x20UL) /*!< E0_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK6_Pos (6UL) /*!< E0_MK6 (Bit 6) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK6_Msk (0x40UL) /*!< E0_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK7_Pos (7UL) /*!< E0_MK7 (Bit 7) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK7_Msk (0x80UL) /*!< E0_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK9_Pos (9UL) /*!< E0_MK9 (Bit 9) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK9_Msk (0x200UL) /*!< E0_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK10_Pos (10UL) /*!< E0_MK10 (Bit 10) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK10_Msk (0x400UL) /*!< E0_MK10 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK11_Pos (11UL) /*!< E0_MK11 (Bit 11) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK11_Msk (0x800UL) /*!< E0_MK11 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK12_Pos (12UL) /*!< E0_MK12 (Bit 12) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK12_Msk (0x1000UL) /*!< E0_MK12 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK13_Pos (13UL) /*!< E0_MK13 (Bit 13) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK13_Msk (0x2000UL) /*!< E0_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK14_Pos (14UL) /*!< E0_MK14 (Bit 14) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK14_Msk (0x4000UL) /*!< E0_MK14 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK15_Pos (15UL) /*!< E0_MK15 (Bit 15) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK15_Msk (0x8000UL) /*!< E0_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK16_Pos (16UL) /*!< E0_MK16 (Bit 16) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK16_Msk (0x10000UL) /*!< E0_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK17_Pos (17UL) /*!< E0_MK17 (Bit 17) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK17_Msk (0x20000UL) /*!< E0_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK18_Pos (18UL) /*!< E0_MK18 (Bit 18) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK18_Msk (0x40000UL) /*!< E0_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK19_Pos (19UL) /*!< E0_MK19 (Bit 19) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK19_Msk (0x80000UL) /*!< E0_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK20_Pos (20UL) /*!< E0_MK20 (Bit 20) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK20_Msk (0x100000UL) /*!< E0_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK21_Pos (21UL) /*!< E0_MK21 (Bit 21) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK21_Msk (0x200000UL) /*!< E0_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK22_Pos (22UL) /*!< E0_MK22 (Bit 22) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK22_Msk (0x400000UL) /*!< E0_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK23_Pos (23UL) /*!< E0_MK23 (Bit 23) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK23_Msk (0x800000UL) /*!< E0_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK24_Pos (24UL) /*!< E0_MK24 (Bit 24) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK24_Msk (0x1000000UL) /*!< E0_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK25_Pos (25UL) /*!< E0_MK25 (Bit 25) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK25_Msk (0x2000000UL) /*!< E0_MK25 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK26_Pos (26UL) /*!< E0_MK26 (Bit 26) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK26_Msk (0x4000000UL) /*!< E0_MK26 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK27_Pos (27UL) /*!< E0_MK27 (Bit 27) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK27_Msk (0x8000000UL) /*!< E0_MK27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK28_Pos (28UL) /*!< E0_MK28 (Bit 28) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK28_Msk (0x10000000UL) /*!< E0_MK28 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK29_Pos (29UL) /*!< E0_MK29 (Bit 29) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK29_Msk (0x20000000UL) /*!< E0_MK29 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK30_Pos (30UL) /*!< E0_MK30 (Bit 30) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK30_Msk (0x40000000UL) /*!< E0_MK30 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK31_Pos (31UL) /*!< E0_MK31 (Bit 31) */ + #define R_ICU_PERIERR_E0MSK0_E0_MK31_Msk (0x80000000UL) /*!< E0_MK31 (Bitfield-Mask: 0x01) */ +/* ==================================================== PERIERR_E0MSK1 ===================================================== */ + #define R_ICU_PERIERR_E0MSK1_E0_MK0_Pos (0UL) /*!< E0_MK0 (Bit 0) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK0_Msk (0x1UL) /*!< E0_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK1_Pos (1UL) /*!< E0_MK1 (Bit 1) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK1_Msk (0x2UL) /*!< E0_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK2_Pos (2UL) /*!< E0_MK2 (Bit 2) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK2_Msk (0x4UL) /*!< E0_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK3_Pos (3UL) /*!< E0_MK3 (Bit 3) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK3_Msk (0x8UL) /*!< E0_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK4_Pos (4UL) /*!< E0_MK4 (Bit 4) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK4_Msk (0x10UL) /*!< E0_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK5_Pos (5UL) /*!< E0_MK5 (Bit 5) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK5_Msk (0x20UL) /*!< E0_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK6_Pos (6UL) /*!< E0_MK6 (Bit 6) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK6_Msk (0x40UL) /*!< E0_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK7_Pos (7UL) /*!< E0_MK7 (Bit 7) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK7_Msk (0x80UL) /*!< E0_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK8_Pos (8UL) /*!< E0_MK8 (Bit 8) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK8_Msk (0x100UL) /*!< E0_MK8 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK9_Pos (9UL) /*!< E0_MK9 (Bit 9) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK9_Msk (0x200UL) /*!< E0_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK13_Pos (13UL) /*!< E0_MK13 (Bit 13) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK13_Msk (0x2000UL) /*!< E0_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK15_Pos (15UL) /*!< E0_MK15 (Bit 15) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK15_Msk (0x8000UL) /*!< E0_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK16_Pos (16UL) /*!< E0_MK16 (Bit 16) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK16_Msk (0x10000UL) /*!< E0_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK17_Pos (17UL) /*!< E0_MK17 (Bit 17) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK17_Msk (0x20000UL) /*!< E0_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK18_Pos (18UL) /*!< E0_MK18 (Bit 18) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK18_Msk (0x40000UL) /*!< E0_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK19_Pos (19UL) /*!< E0_MK19 (Bit 19) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK19_Msk (0x80000UL) /*!< E0_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK20_Pos (20UL) /*!< E0_MK20 (Bit 20) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK20_Msk (0x100000UL) /*!< E0_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK21_Pos (21UL) /*!< E0_MK21 (Bit 21) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK21_Msk (0x200000UL) /*!< E0_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK22_Pos (22UL) /*!< E0_MK22 (Bit 22) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK22_Msk (0x400000UL) /*!< E0_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK23_Pos (23UL) /*!< E0_MK23 (Bit 23) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK23_Msk (0x800000UL) /*!< E0_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK24_Pos (24UL) /*!< E0_MK24 (Bit 24) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK24_Msk (0x1000000UL) /*!< E0_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK27_Pos (27UL) /*!< E0_MK27 (Bit 27) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK27_Msk (0x8000000UL) /*!< E0_MK27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK28_Pos (28UL) /*!< E0_MK28 (Bit 28) */ + #define R_ICU_PERIERR_E0MSK1_E0_MK28_Msk (0x10000000UL) /*!< E0_MK28 (Bitfield-Mask: 0x01) */ +/* ===================================================== CPU0ERR_E1MSK ===================================================== */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK0_Pos (0UL) /*!< E1_MK0 (Bit 0) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK0_Msk (0x1UL) /*!< E1_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK1_Pos (1UL) /*!< E1_MK1 (Bit 1) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK1_Msk (0x2UL) /*!< E1_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK2_Pos (2UL) /*!< E1_MK2 (Bit 2) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK2_Msk (0x4UL) /*!< E1_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK3_Pos (3UL) /*!< E1_MK3 (Bit 3) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK3_Msk (0x8UL) /*!< E1_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK4_Pos (4UL) /*!< E1_MK4 (Bit 4) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK4_Msk (0x10UL) /*!< E1_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK5_Pos (5UL) /*!< E1_MK5 (Bit 5) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK5_Msk (0x20UL) /*!< E1_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK6_Pos (6UL) /*!< E1_MK6 (Bit 6) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK6_Msk (0x40UL) /*!< E1_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK7_Pos (7UL) /*!< E1_MK7 (Bit 7) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK7_Msk (0x80UL) /*!< E1_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK8_Pos (8UL) /*!< E1_MK8 (Bit 8) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK8_Msk (0x100UL) /*!< E1_MK8 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK9_Pos (9UL) /*!< E1_MK9 (Bit 9) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK9_Msk (0x200UL) /*!< E1_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK10_Pos (10UL) /*!< E1_MK10 (Bit 10) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK10_Msk (0x400UL) /*!< E1_MK10 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK11_Pos (11UL) /*!< E1_MK11 (Bit 11) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK11_Msk (0x800UL) /*!< E1_MK11 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK12_Pos (12UL) /*!< E1_MK12 (Bit 12) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK12_Msk (0x1000UL) /*!< E1_MK12 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK13_Pos (13UL) /*!< E1_MK13 (Bit 13) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK13_Msk (0x2000UL) /*!< E1_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK14_Pos (14UL) /*!< E1_MK14 (Bit 14) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK14_Msk (0x4000UL) /*!< E1_MK14 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK15_Pos (15UL) /*!< E1_MK15 (Bit 15) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK15_Msk (0x8000UL) /*!< E1_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK16_Pos (16UL) /*!< E1_MK16 (Bit 16) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK16_Msk (0x10000UL) /*!< E1_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK17_Pos (17UL) /*!< E1_MK17 (Bit 17) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK17_Msk (0x20000UL) /*!< E1_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK18_Pos (18UL) /*!< E1_MK18 (Bit 18) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK18_Msk (0x40000UL) /*!< E1_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK19_Pos (19UL) /*!< E1_MK19 (Bit 19) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK19_Msk (0x80000UL) /*!< E1_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK20_Pos (20UL) /*!< E1_MK20 (Bit 20) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK20_Msk (0x100000UL) /*!< E1_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK21_Pos (21UL) /*!< E1_MK21 (Bit 21) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK21_Msk (0x200000UL) /*!< E1_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK22_Pos (22UL) /*!< E1_MK22 (Bit 22) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK22_Msk (0x400000UL) /*!< E1_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK23_Pos (23UL) /*!< E1_MK23 (Bit 23) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK23_Msk (0x800000UL) /*!< E1_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK24_Pos (24UL) /*!< E1_MK24 (Bit 24) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK24_Msk (0x1000000UL) /*!< E1_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK25_Pos (25UL) /*!< E1_MK25 (Bit 25) */ + #define R_ICU_CPU0ERR_E1MSK_E1_MK25_Msk (0x2000000UL) /*!< E1_MK25 (Bitfield-Mask: 0x01) */ +/* ==================================================== PERIERR_E1MSK0 ===================================================== */ + #define R_ICU_PERIERR_E1MSK0_E1_MK0_Pos (0UL) /*!< E1_MK0 (Bit 0) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK0_Msk (0x1UL) /*!< E1_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK1_Pos (1UL) /*!< E1_MK1 (Bit 1) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK1_Msk (0x2UL) /*!< E1_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK2_Pos (2UL) /*!< E1_MK2 (Bit 2) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK2_Msk (0x4UL) /*!< E1_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK3_Pos (3UL) /*!< E1_MK3 (Bit 3) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK3_Msk (0x8UL) /*!< E1_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK4_Pos (4UL) /*!< E1_MK4 (Bit 4) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK4_Msk (0x10UL) /*!< E1_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK5_Pos (5UL) /*!< E1_MK5 (Bit 5) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK5_Msk (0x20UL) /*!< E1_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK6_Pos (6UL) /*!< E1_MK6 (Bit 6) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK6_Msk (0x40UL) /*!< E1_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK7_Pos (7UL) /*!< E1_MK7 (Bit 7) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK7_Msk (0x80UL) /*!< E1_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK9_Pos (9UL) /*!< E1_MK9 (Bit 9) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK9_Msk (0x200UL) /*!< E1_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK10_Pos (10UL) /*!< E1_MK10 (Bit 10) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK10_Msk (0x400UL) /*!< E1_MK10 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK11_Pos (11UL) /*!< E1_MK11 (Bit 11) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK11_Msk (0x800UL) /*!< E1_MK11 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK12_Pos (12UL) /*!< E1_MK12 (Bit 12) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK12_Msk (0x1000UL) /*!< E1_MK12 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK13_Pos (13UL) /*!< E1_MK13 (Bit 13) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK13_Msk (0x2000UL) /*!< E1_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK14_Pos (14UL) /*!< E1_MK14 (Bit 14) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK14_Msk (0x4000UL) /*!< E1_MK14 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK15_Pos (15UL) /*!< E1_MK15 (Bit 15) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK15_Msk (0x8000UL) /*!< E1_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK16_Pos (16UL) /*!< E1_MK16 (Bit 16) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK16_Msk (0x10000UL) /*!< E1_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK17_Pos (17UL) /*!< E1_MK17 (Bit 17) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK17_Msk (0x20000UL) /*!< E1_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK18_Pos (18UL) /*!< E1_MK18 (Bit 18) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK18_Msk (0x40000UL) /*!< E1_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK19_Pos (19UL) /*!< E1_MK19 (Bit 19) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK19_Msk (0x80000UL) /*!< E1_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK20_Pos (20UL) /*!< E1_MK20 (Bit 20) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK20_Msk (0x100000UL) /*!< E1_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK21_Pos (21UL) /*!< E1_MK21 (Bit 21) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK21_Msk (0x200000UL) /*!< E1_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK22_Pos (22UL) /*!< E1_MK22 (Bit 22) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK22_Msk (0x400000UL) /*!< E1_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK23_Pos (23UL) /*!< E1_MK23 (Bit 23) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK23_Msk (0x800000UL) /*!< E1_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK24_Pos (24UL) /*!< E1_MK24 (Bit 24) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK24_Msk (0x1000000UL) /*!< E1_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK25_Pos (25UL) /*!< E1_MK25 (Bit 25) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK25_Msk (0x2000000UL) /*!< E1_MK25 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK26_Pos (26UL) /*!< E1_MK26 (Bit 26) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK26_Msk (0x4000000UL) /*!< E1_MK26 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK27_Pos (27UL) /*!< E1_MK27 (Bit 27) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK27_Msk (0x8000000UL) /*!< E1_MK27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK28_Pos (28UL) /*!< E1_MK28 (Bit 28) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK28_Msk (0x10000000UL) /*!< E1_MK28 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK29_Pos (29UL) /*!< E1_MK29 (Bit 29) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK29_Msk (0x20000000UL) /*!< E1_MK29 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK30_Pos (30UL) /*!< E1_MK30 (Bit 30) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK30_Msk (0x40000000UL) /*!< E1_MK30 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK31_Pos (31UL) /*!< E1_MK31 (Bit 31) */ + #define R_ICU_PERIERR_E1MSK0_E1_MK31_Msk (0x80000000UL) /*!< E1_MK31 (Bitfield-Mask: 0x01) */ +/* ==================================================== PERIERR_E1MSK1 ===================================================== */ + #define R_ICU_PERIERR_E1MSK1_E1_MK0_Pos (0UL) /*!< E1_MK0 (Bit 0) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK0_Msk (0x1UL) /*!< E1_MK0 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK1_Pos (1UL) /*!< E1_MK1 (Bit 1) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK1_Msk (0x2UL) /*!< E1_MK1 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK2_Pos (2UL) /*!< E1_MK2 (Bit 2) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK2_Msk (0x4UL) /*!< E1_MK2 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK3_Pos (3UL) /*!< E1_MK3 (Bit 3) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK3_Msk (0x8UL) /*!< E1_MK3 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK4_Pos (4UL) /*!< E1_MK4 (Bit 4) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK4_Msk (0x10UL) /*!< E1_MK4 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK5_Pos (5UL) /*!< E1_MK5 (Bit 5) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK5_Msk (0x20UL) /*!< E1_MK5 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK6_Pos (6UL) /*!< E1_MK6 (Bit 6) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK6_Msk (0x40UL) /*!< E1_MK6 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK7_Pos (7UL) /*!< E1_MK7 (Bit 7) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK7_Msk (0x80UL) /*!< E1_MK7 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK8_Pos (8UL) /*!< E1_MK8 (Bit 8) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK8_Msk (0x100UL) /*!< E1_MK8 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK9_Pos (9UL) /*!< E1_MK9 (Bit 9) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK9_Msk (0x200UL) /*!< E1_MK9 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK13_Pos (13UL) /*!< E1_MK13 (Bit 13) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK13_Msk (0x2000UL) /*!< E1_MK13 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK15_Pos (15UL) /*!< E1_MK15 (Bit 15) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK15_Msk (0x8000UL) /*!< E1_MK15 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK16_Pos (16UL) /*!< E1_MK16 (Bit 16) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK16_Msk (0x10000UL) /*!< E1_MK16 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK17_Pos (17UL) /*!< E1_MK17 (Bit 17) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK17_Msk (0x20000UL) /*!< E1_MK17 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK18_Pos (18UL) /*!< E1_MK18 (Bit 18) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK18_Msk (0x40000UL) /*!< E1_MK18 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK19_Pos (19UL) /*!< E1_MK19 (Bit 19) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK19_Msk (0x80000UL) /*!< E1_MK19 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK20_Pos (20UL) /*!< E1_MK20 (Bit 20) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK20_Msk (0x100000UL) /*!< E1_MK20 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK21_Pos (21UL) /*!< E1_MK21 (Bit 21) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK21_Msk (0x200000UL) /*!< E1_MK21 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK22_Pos (22UL) /*!< E1_MK22 (Bit 22) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK22_Msk (0x400000UL) /*!< E1_MK22 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK23_Pos (23UL) /*!< E1_MK23 (Bit 23) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK23_Msk (0x800000UL) /*!< E1_MK23 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK24_Pos (24UL) /*!< E1_MK24 (Bit 24) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK24_Msk (0x1000000UL) /*!< E1_MK24 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK27_Pos (27UL) /*!< E1_MK27 (Bit 27) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK27_Msk (0x8000000UL) /*!< E1_MK27 (Bitfield-Mask: 0x01) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK28_Pos (28UL) /*!< E1_MK28 (Bit 28) */ + #define R_ICU_PERIERR_E1MSK1_E1_MK28_Msk (0x10000000UL) /*!< E1_MK28 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSC_S ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== SCKCR2 ========================================================= */ + #define R_SYSC_S_SCKCR2_FSELCPU0_Pos (0UL) /*!< FSELCPU0 (Bit 0) */ + #define R_SYSC_S_SCKCR2_FSELCPU0_Msk (0x1UL) /*!< FSELCPU0 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_SCKCR2_DIVSELSUB_Pos (5UL) /*!< DIVSELSUB (Bit 5) */ + #define R_SYSC_S_SCKCR2_DIVSELSUB_Msk (0x20UL) /*!< DIVSELSUB (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_SCKCR2_SPI3ASYNCSEL_Pos (24UL) /*!< SPI3ASYNCSEL (Bit 24) */ + #define R_SYSC_S_SCKCR2_SPI3ASYNCSEL_Msk (0x1000000UL) /*!< SPI3ASYNCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_SCKCR2_SCI5ASYNCSEL_Pos (25UL) /*!< SCI5ASYNCSEL (Bit 25) */ + #define R_SYSC_S_SCKCR2_SCI5ASYNCSEL_Msk (0x2000000UL) /*!< SCI5ASYNCSEL (Bitfield-Mask: 0x01) */ +/* ======================================================== PLL0MON ======================================================== */ + #define R_SYSC_S_PLL0MON_PLL0MON_Pos (0UL) /*!< PLL0MON (Bit 0) */ + #define R_SYSC_S_PLL0MON_PLL0MON_Msk (0x1UL) /*!< PLL0MON (Bitfield-Mask: 0x01) */ +/* ======================================================== PLL1MON ======================================================== */ + #define R_SYSC_S_PLL1MON_PLL1MON_Pos (0UL) /*!< PLL1MON (Bit 0) */ + #define R_SYSC_S_PLL1MON_PLL1MON_Msk (0x1UL) /*!< PLL1MON (Bitfield-Mask: 0x01) */ +/* ======================================================== PLL1EN ========================================================= */ + #define R_SYSC_S_PLL1EN_PLL1EN_Pos (0UL) /*!< PLL1EN (Bit 0) */ + #define R_SYSC_S_PLL1EN_PLL1EN_Msk (0x1UL) /*!< PLL1EN (Bitfield-Mask: 0x01) */ +/* ======================================================== LOCOCR ========================================================= */ + #define R_SYSC_S_LOCOCR_LCSTP_Pos (0UL) /*!< LCSTP (Bit 0) */ + #define R_SYSC_S_LOCOCR_LCSTP_Msk (0x1UL) /*!< LCSTP (Bitfield-Mask: 0x01) */ +/* ======================================================= HIZCTRLEN ======================================================= */ + #define R_SYSC_S_HIZCTRLEN_CLMA3MASK_Pos (0UL) /*!< CLMA3MASK (Bit 0) */ + #define R_SYSC_S_HIZCTRLEN_CLMA3MASK_Msk (0x1UL) /*!< CLMA3MASK (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_HIZCTRLEN_CLMA0MASK_Pos (1UL) /*!< CLMA0MASK (Bit 1) */ + #define R_SYSC_S_HIZCTRLEN_CLMA0MASK_Msk (0x2UL) /*!< CLMA0MASK (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_HIZCTRLEN_CLMA1MASK_Pos (2UL) /*!< CLMA1MASK (Bit 2) */ + #define R_SYSC_S_HIZCTRLEN_CLMA1MASK_Msk (0x4UL) /*!< CLMA1MASK (Bitfield-Mask: 0x01) */ +/* ======================================================== SWRSYS ========================================================= */ + #define R_SYSC_S_SWRSYS_SWR_Pos (0UL) /*!< SWR (Bit 0) */ + #define R_SYSC_S_SWRSYS_SWR_Msk (0xffffffffUL) /*!< SWR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== SWRCPU0 ======================================================== */ + #define R_SYSC_S_SWRCPU0_SWR_Pos (0UL) /*!< SWR (Bit 0) */ + #define R_SYSC_S_SWRCPU0_SWR_Msk (0xffffffffUL) /*!< SWR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== MRCTLI ========================================================= */ + #define R_SYSC_S_MRCTLI_MRCTLI00_Pos (0UL) /*!< MRCTLI00 (Bit 0) */ + #define R_SYSC_S_MRCTLI_MRCTLI00_Msk (0x1UL) /*!< MRCTLI00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MRCTLI_MRCTLI01_Pos (1UL) /*!< MRCTLI01 (Bit 1) */ + #define R_SYSC_S_MRCTLI_MRCTLI01_Msk (0x2UL) /*!< MRCTLI01 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MRCTLI_MRCTLI02_Pos (2UL) /*!< MRCTLI02 (Bit 2) */ + #define R_SYSC_S_MRCTLI_MRCTLI02_Msk (0x4UL) /*!< MRCTLI02 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MRCTLI_MRCTLI03_Pos (3UL) /*!< MRCTLI03 (Bit 3) */ + #define R_SYSC_S_MRCTLI_MRCTLI03_Msk (0x8UL) /*!< MRCTLI03 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRF ======================================================== */ + #define R_SYSC_S_MSTPCRF_MSTPCRF00_Pos (0UL) /*!< MSTPCRF00 (Bit 0) */ + #define R_SYSC_S_MSTPCRF_MSTPCRF00_Msk (0x1UL) /*!< MSTPCRF00 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRG ======================================================== */ + #define R_SYSC_S_MSTPCRG_MSTPCRG00_Pos (0UL) /*!< MSTPCRG00 (Bit 0) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG00_Msk (0x1UL) /*!< MSTPCRG00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG01_Pos (1UL) /*!< MSTPCRG01 (Bit 1) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG01_Msk (0x2UL) /*!< MSTPCRG01 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG02_Pos (2UL) /*!< MSTPCRG02 (Bit 2) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG02_Msk (0x4UL) /*!< MSTPCRG02 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG03_Pos (3UL) /*!< MSTPCRG03 (Bit 3) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG03_Msk (0x8UL) /*!< MSTPCRG03 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG04_Pos (4UL) /*!< MSTPCRG04 (Bit 4) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG04_Msk (0x10UL) /*!< MSTPCRG04 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG05_Pos (5UL) /*!< MSTPCRG05 (Bit 5) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG05_Msk (0x20UL) /*!< MSTPCRG05 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG08_Pos (8UL) /*!< MSTPCRG08 (Bit 8) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG08_Msk (0x100UL) /*!< MSTPCRG08 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG09_Pos (9UL) /*!< MSTPCRG09 (Bit 9) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG09_Msk (0x200UL) /*!< MSTPCRG09 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG10_Pos (10UL) /*!< MSTPCRG10 (Bit 10) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG10_Msk (0x400UL) /*!< MSTPCRG10 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG11_Pos (11UL) /*!< MSTPCRG11 (Bit 11) */ + #define R_SYSC_S_MSTPCRG_MSTPCRG11_Msk (0x800UL) /*!< MSTPCRG11 (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRI ======================================================== */ + #define R_SYSC_S_MSTPCRI_MSTPCRI00_Pos (0UL) /*!< MSTPCRI00 (Bit 0) */ + #define R_SYSC_S_MSTPCRI_MSTPCRI00_Msk (0x1UL) /*!< MSTPCRI00 (Bitfield-Mask: 0x01) */ + #define R_SYSC_S_MSTPCRI_MSTPCRI01_Pos (1UL) /*!< MSTPCRI01 (Bit 1) */ + #define R_SYSC_S_MSTPCRI_MSTPCRI01_Msk (0x2UL) /*!< MSTPCRI01 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_CLMA0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CTL0 ========================================================== */ + #define R_CLMA0_CTL0_CLME_Pos (0UL) /*!< CLME (Bit 0) */ + #define R_CLMA0_CTL0_CLME_Msk (0x1UL) /*!< CLME (Bitfield-Mask: 0x01) */ +/* ========================================================= CMPL ========================================================== */ + #define R_CLMA0_CMPL_CMPL_Pos (0UL) /*!< CMPL (Bit 0) */ + #define R_CLMA0_CMPL_CMPL_Msk (0xfffUL) /*!< CMPL (Bitfield-Mask: 0xfff) */ +/* ========================================================= CMPH ========================================================== */ + #define R_CLMA0_CMPH_CMPH_Pos (0UL) /*!< CMPH (Bit 0) */ + #define R_CLMA0_CMPH_CMPH_Msk (0xfffUL) /*!< CMPH (Bitfield-Mask: 0xfff) */ +/* ========================================================= PCMD ========================================================== */ +/* ======================================================== PROTSR ========================================================= */ + #define R_CLMA0_PROTSR_PRERR_Pos (0UL) /*!< PRERR (Bit 0) */ + #define R_CLMA0_PROTSR_PRERR_Msk (0x1UL) /*!< PRERR (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= ERRINF_R ======================================================== */ + #define R_MPU0_ERRINF_R_VALID_Pos (0UL) /*!< VALID (Bit 0) */ + #define R_MPU0_ERRINF_R_VALID_Msk (0x1UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_MPU0_ERRINF_R_RW_Pos (1UL) /*!< RW (Bit 1) */ + #define R_MPU0_ERRINF_R_RW_Msk (0x2UL) /*!< RW (Bitfield-Mask: 0x01) */ + #define R_MPU0_ERRINF_R_ERRADDR_Pos (2UL) /*!< ERRADDR (Bit 2) */ + #define R_MPU0_ERRINF_R_ERRADDR_Msk (0xfffffffcUL) /*!< ERRADDR (Bitfield-Mask: 0x3fffffff) */ +/* ======================================================= ERRINF_W ======================================================== */ + #define R_MPU0_ERRINF_W_VALID_Pos (0UL) /*!< VALID (Bit 0) */ + #define R_MPU0_ERRINF_W_VALID_Msk (0x1UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_MPU0_ERRINF_W_RW_Pos (1UL) /*!< RW (Bit 1) */ + #define R_MPU0_ERRINF_W_RW_Msk (0x2UL) /*!< RW (Bitfield-Mask: 0x01) */ + #define R_MPU0_ERRINF_W_ERRADDR_Pos (2UL) /*!< ERRADDR (Bit 2) */ + #define R_MPU0_ERRINF_W_ERRADDR_Msk (0xfffffffcUL) /*!< ERRADDR (Bitfield-Mask: 0x3fffffff) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU3 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== ERRINF ========================================================= */ + #define R_MPU3_ERRINF_VALID_Pos (0UL) /*!< VALID (Bit 0) */ + #define R_MPU3_ERRINF_VALID_Msk (0x1UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_MPU3_ERRINF_RW_Pos (1UL) /*!< RW (Bit 1) */ + #define R_MPU3_ERRINF_RW_Msk (0x2UL) /*!< RW (Bitfield-Mask: 0x01) */ + #define R_MPU3_ERRINF_ERRADDR_Pos (2UL) /*!< ERRADDR (Bit 2) */ + #define R_MPU3_ERRINF_ERRADDR_Msk (0xfffffffcUL) /*!< ERRADDR (Bitfield-Mask: 0x3fffffff) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSRAM_CTL ================ */ +/* =========================================================================================================================== */ + +/* ===================================================== SYSRAM_CTRL0 ====================================================== */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VECEN_Pos (0UL) /*!< VECEN (Bit 0) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VECEN_Msk (0x1UL) /*!< VECEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VRWEN_Pos (16UL) /*!< VRWEN (Bit 16) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VRWEN_Msk (0xf0000UL) /*!< VRWEN (Bitfield-Mask: 0x0f) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VCEN_Pos (20UL) /*!< VCEN (Bit 20) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VCEN_Msk (0x100000UL) /*!< VCEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VLWEN_Pos (21UL) /*!< VLWEN (Bit 21) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_VLWEN_Msk (0x200000UL) /*!< VLWEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_MKICCAXIERR_Pos (24UL) /*!< MKICCAXIERR (Bit 24) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL0_MKICCAXIERR_Msk (0x1000000UL) /*!< MKICCAXIERR (Bitfield-Mask: 0x01) */ +/* ===================================================== SYSRAM_CTRL1 ====================================================== */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VECEN_Pos (0UL) /*!< VECEN (Bit 0) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VECEN_Msk (0x1UL) /*!< VECEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VRWEN_Pos (16UL) /*!< VRWEN (Bit 16) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VRWEN_Msk (0xf0000UL) /*!< VRWEN (Bitfield-Mask: 0x0f) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VCEN_Pos (20UL) /*!< VCEN (Bit 20) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VCEN_Msk (0x100000UL) /*!< VCEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VLWEN_Pos (21UL) /*!< VLWEN (Bit 21) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_VLWEN_Msk (0x200000UL) /*!< VLWEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_MKICCAXIERR_Pos (24UL) /*!< MKICCAXIERR (Bit 24) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL1_MKICCAXIERR_Msk (0x1000000UL) /*!< MKICCAXIERR (Bitfield-Mask: 0x01) */ +/* ===================================================== SYSRAM_CTRL2 ====================================================== */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VECEN_Pos (0UL) /*!< VECEN (Bit 0) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VECEN_Msk (0x1UL) /*!< VECEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VRWEN_Pos (16UL) /*!< VRWEN (Bit 16) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VRWEN_Msk (0xf0000UL) /*!< VRWEN (Bitfield-Mask: 0x0f) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VCEN_Pos (20UL) /*!< VCEN (Bit 20) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VCEN_Msk (0x100000UL) /*!< VCEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VLWEN_Pos (21UL) /*!< VLWEN (Bit 21) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_VLWEN_Msk (0x200000UL) /*!< VLWEN (Bitfield-Mask: 0x01) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_MKICCAXIERR_Pos (24UL) /*!< MKICCAXIERR (Bit 24) */ + #define R_SYSRAM_CTL_SYSRAM_CTRL2_MKICCAXIERR_Msk (0x1000000UL) /*!< MKICCAXIERR (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_SHOSTIF_CFG ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SHCFG ========================================================= */ + #define R_SHOSTIF_CFG_SHCFG_SPIMODE_Pos (0UL) /*!< SPIMODE (Bit 0) */ + #define R_SHOSTIF_CFG_SHCFG_SPIMODE_Msk (0x3UL) /*!< SPIMODE (Bitfield-Mask: 0x03) */ + #define R_SHOSTIF_CFG_SHCFG_BYTESWAP_Pos (2UL) /*!< BYTESWAP (Bit 2) */ + #define R_SHOSTIF_CFG_SHCFG_BYTESWAP_Msk (0x4UL) /*!< BYTESWAP (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_CFG_SHCFG_ADDRESSING_Pos (3UL) /*!< ADDRESSING (Bit 3) */ + #define R_SHOSTIF_CFG_SHCFG_ADDRESSING_Msk (0x8UL) /*!< ADDRESSING (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_CFG_SHCFG_SLEEP_Pos (4UL) /*!< SLEEP (Bit 4) */ + #define R_SHOSTIF_CFG_SHCFG_SLEEP_Msk (0x10UL) /*!< SLEEP (Bitfield-Mask: 0x01) */ + #define R_SHOSTIF_CFG_SHCFG_INTMASKI_Pos (16UL) /*!< INTMASKI (Bit 16) */ + #define R_SHOSTIF_CFG_SHCFG_INTMASKI_Msk (0x3f0000UL) /*!< INTMASKI (Bitfield-Mask: 0x3f) */ + #define R_SHOSTIF_CFG_SHCFG_INTMASKE_Pos (24UL) /*!< INTMASKE (Bit 24) */ + #define R_SHOSTIF_CFG_SHCFG_INTMASKE_Msk (0x3f000000UL) /*!< INTMASKE (Bitfield-Mask: 0x3f) */ + +/* =========================================================================================================================== */ +/* ================ R_PHOSTIF_CFG ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PHCFG ========================================================= */ + #define R_PHOSTIF_CFG_PHCFG_MEMIFSEL_Pos (0UL) /*!< MEMIFSEL (Bit 0) */ + #define R_PHOSTIF_CFG_PHCFG_MEMIFSEL_Msk (0x1UL) /*!< MEMIFSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHCFG_BUSSSEL_Pos (4UL) /*!< BUSSSEL (Bit 4) */ + #define R_PHOSTIF_CFG_PHCFG_BUSSSEL_Msk (0x10UL) /*!< BUSSSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHCFG_HIFSYNC_Pos (8UL) /*!< HIFSYNC (Bit 8) */ + #define R_PHOSTIF_CFG_PHCFG_HIFSYNC_Msk (0x100UL) /*!< HIFSYNC (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHCFG_MEMCSEL_Pos (12UL) /*!< MEMCSEL (Bit 12) */ + #define R_PHOSTIF_CFG_PHCFG_MEMCSEL_Msk (0x1000UL) /*!< MEMCSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHCFG_HWRZSEL_Pos (16UL) /*!< HWRZSEL (Bit 16) */ + #define R_PHOSTIF_CFG_PHCFG_HWRZSEL_Msk (0x10000UL) /*!< HWRZSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHCFG_ADMUXMODE_Pos (20UL) /*!< ADMUXMODE (Bit 20) */ + #define R_PHOSTIF_CFG_PHCFG_ADMUXMODE_Msk (0x100000UL) /*!< ADMUXMODE (Bitfield-Mask: 0x01) */ +/* ========================================================= PHACC ========================================================= */ + #define R_PHOSTIF_CFG_PHACC_HIFRDYSEL_Pos (0UL) /*!< HIFRDYSEL (Bit 0) */ + #define R_PHOSTIF_CFG_PHACC_HIFRDYSEL_Msk (0x1UL) /*!< HIFRDYSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFBCCSEL_Pos (8UL) /*!< HIFBCCSEL (Bit 8) */ + #define R_PHOSTIF_CFG_PHACC_HIFBCCSEL_Msk (0x100UL) /*!< HIFBCCSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFBTCSEL_Pos (9UL) /*!< HIFBTCSEL (Bit 9) */ + #define R_PHOSTIF_CFG_PHACC_HIFBTCSEL_Msk (0x200UL) /*!< HIFBTCSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFPRCSEL_Pos (10UL) /*!< HIFPRCSEL (Bit 10) */ + #define R_PHOSTIF_CFG_PHACC_HIFPRCSEL_Msk (0x400UL) /*!< HIFPRCSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFIRCSEL_Pos (11UL) /*!< HIFIRCSEL (Bit 11) */ + #define R_PHOSTIF_CFG_PHACC_HIFIRCSEL_Msk (0x800UL) /*!< HIFIRCSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFXALSEL_Pos (12UL) /*!< HIFXALSEL (Bit 12) */ + #define R_PHOSTIF_CFG_PHACC_HIFXALSEL_Msk (0x1000UL) /*!< HIFXALSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFXAHSEL_Pos (13UL) /*!< HIFXAHSEL (Bit 13) */ + #define R_PHOSTIF_CFG_PHACC_HIFXAHSEL_Msk (0x2000UL) /*!< HIFXAHSEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFEXT0SEL_Pos (14UL) /*!< HIFEXT0SEL (Bit 14) */ + #define R_PHOSTIF_CFG_PHACC_HIFEXT0SEL_Msk (0x4000UL) /*!< HIFEXT0SEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_HIFEXT1SEL_Pos (15UL) /*!< HIFEXT1SEL (Bit 15) */ + #define R_PHOSTIF_CFG_PHACC_HIFEXT1SEL_Msk (0x8000UL) /*!< HIFEXT1SEL (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_CSSWAP_Pos (16UL) /*!< CSSWAP (Bit 16) */ + #define R_PHOSTIF_CFG_PHACC_CSSWAP_Msk (0x10000UL) /*!< CSSWAP (Bitfield-Mask: 0x01) */ + #define R_PHOSTIF_CFG_PHACC_BSCADMUX_Pos (17UL) /*!< BSCADMUX (Bit 17) */ + #define R_PHOSTIF_CFG_PHACC_BSCADMUX_Msk (0x20000UL) /*!< BSCADMUX (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_RWP_S ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PRCRS ========================================================= */ + #define R_RWP_S_PRCRS_PRC0_Pos (0UL) /*!< PRC0 (Bit 0) */ + #define R_RWP_S_PRCRS_PRC0_Msk (0x1UL) /*!< PRC0 (Bitfield-Mask: 0x01) */ + #define R_RWP_S_PRCRS_PRC1_Pos (1UL) /*!< PRC1 (Bit 1) */ + #define R_RWP_S_PRCRS_PRC1_Msk (0x2UL) /*!< PRC1 (Bitfield-Mask: 0x01) */ + #define R_RWP_S_PRCRS_PRC2_Pos (2UL) /*!< PRC2 (Bit 2) */ + #define R_RWP_S_PRCRS_PRC2_Msk (0x4UL) /*!< PRC2 (Bitfield-Mask: 0x01) */ + #define R_RWP_S_PRCRS_PRC3_Pos (3UL) /*!< PRC3 (Bit 3) */ + #define R_RWP_S_PRCRS_PRC3_Msk (0x8UL) /*!< PRC3 (Bitfield-Mask: 0x01) */ + #define R_RWP_S_PRCRS_PRKEY_Pos (8UL) /*!< PRKEY (Bit 8) */ + #define R_RWP_S_PRCRS_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= TOERA ========================================================= */ + #define R_MTU_TOERA_OE3B_Pos (0UL) /*!< OE3B (Bit 0) */ + #define R_MTU_TOERA_OE3B_Msk (0x1UL) /*!< OE3B (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERA_OE4A_Pos (1UL) /*!< OE4A (Bit 1) */ + #define R_MTU_TOERA_OE4A_Msk (0x2UL) /*!< OE4A (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERA_OE4B_Pos (2UL) /*!< OE4B (Bit 2) */ + #define R_MTU_TOERA_OE4B_Msk (0x4UL) /*!< OE4B (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERA_OE3D_Pos (3UL) /*!< OE3D (Bit 3) */ + #define R_MTU_TOERA_OE3D_Msk (0x8UL) /*!< OE3D (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERA_OE4C_Pos (4UL) /*!< OE4C (Bit 4) */ + #define R_MTU_TOERA_OE4C_Msk (0x10UL) /*!< OE4C (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERA_OE4D_Pos (5UL) /*!< OE4D (Bit 5) */ + #define R_MTU_TOERA_OE4D_Msk (0x20UL) /*!< OE4D (Bitfield-Mask: 0x01) */ +/* ========================================================= TGCRA ========================================================= */ + #define R_MTU_TGCRA_UF_Pos (0UL) /*!< UF (Bit 0) */ + #define R_MTU_TGCRA_UF_Msk (0x1UL) /*!< UF (Bitfield-Mask: 0x01) */ + #define R_MTU_TGCRA_VF_Pos (1UL) /*!< VF (Bit 1) */ + #define R_MTU_TGCRA_VF_Msk (0x2UL) /*!< VF (Bitfield-Mask: 0x01) */ + #define R_MTU_TGCRA_WF_Pos (2UL) /*!< WF (Bit 2) */ + #define R_MTU_TGCRA_WF_Msk (0x4UL) /*!< WF (Bitfield-Mask: 0x01) */ + #define R_MTU_TGCRA_FB_Pos (3UL) /*!< FB (Bit 3) */ + #define R_MTU_TGCRA_FB_Msk (0x8UL) /*!< FB (Bitfield-Mask: 0x01) */ + #define R_MTU_TGCRA_P_Pos (4UL) /*!< P (Bit 4) */ + #define R_MTU_TGCRA_P_Msk (0x10UL) /*!< P (Bitfield-Mask: 0x01) */ + #define R_MTU_TGCRA_N_Pos (5UL) /*!< N (Bit 5) */ + #define R_MTU_TGCRA_N_Msk (0x20UL) /*!< N (Bitfield-Mask: 0x01) */ + #define R_MTU_TGCRA_BDC_Pos (6UL) /*!< BDC (Bit 6) */ + #define R_MTU_TGCRA_BDC_Msk (0x40UL) /*!< BDC (Bitfield-Mask: 0x01) */ +/* ======================================================== TOCR1A ========================================================= */ + #define R_MTU_TOCR1A_OLSP_Pos (0UL) /*!< OLSP (Bit 0) */ + #define R_MTU_TOCR1A_OLSP_Msk (0x1UL) /*!< OLSP (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1A_OLSN_Pos (1UL) /*!< OLSN (Bit 1) */ + #define R_MTU_TOCR1A_OLSN_Msk (0x2UL) /*!< OLSN (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1A_TOCS_Pos (2UL) /*!< TOCS (Bit 2) */ + #define R_MTU_TOCR1A_TOCS_Msk (0x4UL) /*!< TOCS (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1A_TOCL_Pos (3UL) /*!< TOCL (Bit 3) */ + #define R_MTU_TOCR1A_TOCL_Msk (0x8UL) /*!< TOCL (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1A_PSYE_Pos (6UL) /*!< PSYE (Bit 6) */ + #define R_MTU_TOCR1A_PSYE_Msk (0x40UL) /*!< PSYE (Bitfield-Mask: 0x01) */ +/* ======================================================== TOCR2A ========================================================= */ + #define R_MTU_TOCR2A_OLS1P_Pos (0UL) /*!< OLS1P (Bit 0) */ + #define R_MTU_TOCR2A_OLS1P_Msk (0x1UL) /*!< OLS1P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2A_OLS1N_Pos (1UL) /*!< OLS1N (Bit 1) */ + #define R_MTU_TOCR2A_OLS1N_Msk (0x2UL) /*!< OLS1N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2A_OLS2P_Pos (2UL) /*!< OLS2P (Bit 2) */ + #define R_MTU_TOCR2A_OLS2P_Msk (0x4UL) /*!< OLS2P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2A_OLS2N_Pos (3UL) /*!< OLS2N (Bit 3) */ + #define R_MTU_TOCR2A_OLS2N_Msk (0x8UL) /*!< OLS2N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2A_OLS3P_Pos (4UL) /*!< OLS3P (Bit 4) */ + #define R_MTU_TOCR2A_OLS3P_Msk (0x10UL) /*!< OLS3P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2A_OLS3N_Pos (5UL) /*!< OLS3N (Bit 5) */ + #define R_MTU_TOCR2A_OLS3N_Msk (0x20UL) /*!< OLS3N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2A_BF_Pos (6UL) /*!< BF (Bit 6) */ + #define R_MTU_TOCR2A_BF_Msk (0xc0UL) /*!< BF (Bitfield-Mask: 0x03) */ +/* ========================================================= TCDRA ========================================================= */ +/* ========================================================= TDDRA ========================================================= */ +/* ======================================================== TCNTSA ========================================================= */ +/* ========================================================= TCBRA ========================================================= */ +/* ======================================================== TITCR1A ======================================================== */ + #define R_MTU_TITCR1A_T4VCOR_Pos (0UL) /*!< T4VCOR (Bit 0) */ + #define R_MTU_TITCR1A_T4VCOR_Msk (0x7UL) /*!< T4VCOR (Bitfield-Mask: 0x07) */ + #define R_MTU_TITCR1A_T4VEN_Pos (3UL) /*!< T4VEN (Bit 3) */ + #define R_MTU_TITCR1A_T4VEN_Msk (0x8UL) /*!< T4VEN (Bitfield-Mask: 0x01) */ + #define R_MTU_TITCR1A_T3ACOR_Pos (4UL) /*!< T3ACOR (Bit 4) */ + #define R_MTU_TITCR1A_T3ACOR_Msk (0x70UL) /*!< T3ACOR (Bitfield-Mask: 0x07) */ + #define R_MTU_TITCR1A_T3AEN_Pos (7UL) /*!< T3AEN (Bit 7) */ + #define R_MTU_TITCR1A_T3AEN_Msk (0x80UL) /*!< T3AEN (Bitfield-Mask: 0x01) */ +/* ======================================================= TITCNT1A ======================================================== */ + #define R_MTU_TITCNT1A_T4VCNT_Pos (0UL) /*!< T4VCNT (Bit 0) */ + #define R_MTU_TITCNT1A_T4VCNT_Msk (0x7UL) /*!< T4VCNT (Bitfield-Mask: 0x07) */ + #define R_MTU_TITCNT1A_T3ACNT_Pos (4UL) /*!< T3ACNT (Bit 4) */ + #define R_MTU_TITCNT1A_T3ACNT_Msk (0x70UL) /*!< T3ACNT (Bitfield-Mask: 0x07) */ +/* ======================================================== TBTERA ========================================================= */ + #define R_MTU_TBTERA_BTE_Pos (0UL) /*!< BTE (Bit 0) */ + #define R_MTU_TBTERA_BTE_Msk (0x3UL) /*!< BTE (Bitfield-Mask: 0x03) */ +/* ========================================================= TDERA ========================================================= */ + #define R_MTU_TDERA_TDER_Pos (0UL) /*!< TDER (Bit 0) */ + #define R_MTU_TDERA_TDER_Msk (0x1UL) /*!< TDER (Bitfield-Mask: 0x01) */ +/* ======================================================== TOLBRA ========================================================= */ + #define R_MTU_TOLBRA_OLS1P_Pos (0UL) /*!< OLS1P (Bit 0) */ + #define R_MTU_TOLBRA_OLS1P_Msk (0x1UL) /*!< OLS1P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRA_OLS1N_Pos (1UL) /*!< OLS1N (Bit 1) */ + #define R_MTU_TOLBRA_OLS1N_Msk (0x2UL) /*!< OLS1N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRA_OLS2P_Pos (2UL) /*!< OLS2P (Bit 2) */ + #define R_MTU_TOLBRA_OLS2P_Msk (0x4UL) /*!< OLS2P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRA_OLS2N_Pos (3UL) /*!< OLS2N (Bit 3) */ + #define R_MTU_TOLBRA_OLS2N_Msk (0x8UL) /*!< OLS2N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRA_OLS3P_Pos (4UL) /*!< OLS3P (Bit 4) */ + #define R_MTU_TOLBRA_OLS3P_Msk (0x10UL) /*!< OLS3P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRA_OLS3N_Pos (5UL) /*!< OLS3N (Bit 5) */ + #define R_MTU_TOLBRA_OLS3N_Msk (0x20UL) /*!< OLS3N (Bitfield-Mask: 0x01) */ +/* ======================================================== TITMRA ========================================================= */ + #define R_MTU_TITMRA_TITM_Pos (0UL) /*!< TITM (Bit 0) */ + #define R_MTU_TITMRA_TITM_Msk (0x1UL) /*!< TITM (Bitfield-Mask: 0x01) */ +/* ======================================================== TITCR2A ======================================================== */ + #define R_MTU_TITCR2A_TRG4COR_Pos (0UL) /*!< TRG4COR (Bit 0) */ + #define R_MTU_TITCR2A_TRG4COR_Msk (0x7UL) /*!< TRG4COR (Bitfield-Mask: 0x07) */ +/* ======================================================= TITCNT2A ======================================================== */ + #define R_MTU_TITCNT2A_TRG4CNT_Pos (0UL) /*!< TRG4CNT (Bit 0) */ + #define R_MTU_TITCNT2A_TRG4CNT_Msk (0x7UL) /*!< TRG4CNT (Bitfield-Mask: 0x07) */ +/* ========================================================= TWCRA ========================================================= */ + #define R_MTU_TWCRA_WRE_Pos (0UL) /*!< WRE (Bit 0) */ + #define R_MTU_TWCRA_WRE_Msk (0x1UL) /*!< WRE (Bitfield-Mask: 0x01) */ + #define R_MTU_TWCRA_SCC_Pos (1UL) /*!< SCC (Bit 1) */ + #define R_MTU_TWCRA_SCC_Msk (0x2UL) /*!< SCC (Bitfield-Mask: 0x01) */ + #define R_MTU_TWCRA_CCE_Pos (7UL) /*!< CCE (Bit 7) */ + #define R_MTU_TWCRA_CCE_Msk (0x80UL) /*!< CCE (Bitfield-Mask: 0x01) */ +/* ======================================================== TMDR2A ========================================================= */ + #define R_MTU_TMDR2A_DRS_Pos (0UL) /*!< DRS (Bit 0) */ + #define R_MTU_TMDR2A_DRS_Msk (0x1UL) /*!< DRS (Bitfield-Mask: 0x01) */ +/* ========================================================= TSTRA ========================================================= */ + #define R_MTU_TSTRA_CST0_Pos (0UL) /*!< CST0 (Bit 0) */ + #define R_MTU_TSTRA_CST0_Msk (0x1UL) /*!< CST0 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSTRA_CST1_Pos (1UL) /*!< CST1 (Bit 1) */ + #define R_MTU_TSTRA_CST1_Msk (0x2UL) /*!< CST1 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSTRA_CST2_Pos (2UL) /*!< CST2 (Bit 2) */ + #define R_MTU_TSTRA_CST2_Msk (0x4UL) /*!< CST2 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSTRA_CST8_Pos (3UL) /*!< CST8 (Bit 3) */ + #define R_MTU_TSTRA_CST8_Msk (0x8UL) /*!< CST8 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSTRA_CST3_Pos (6UL) /*!< CST3 (Bit 6) */ + #define R_MTU_TSTRA_CST3_Msk (0x40UL) /*!< CST3 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSTRA_CST4_Pos (7UL) /*!< CST4 (Bit 7) */ + #define R_MTU_TSTRA_CST4_Msk (0x80UL) /*!< CST4 (Bitfield-Mask: 0x01) */ +/* ========================================================= TSYRA ========================================================= */ + #define R_MTU_TSYRA_SYNC0_Pos (0UL) /*!< SYNC0 (Bit 0) */ + #define R_MTU_TSYRA_SYNC0_Msk (0x1UL) /*!< SYNC0 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSYRA_SYNC1_Pos (1UL) /*!< SYNC1 (Bit 1) */ + #define R_MTU_TSYRA_SYNC1_Msk (0x2UL) /*!< SYNC1 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSYRA_SYNC2_Pos (2UL) /*!< SYNC2 (Bit 2) */ + #define R_MTU_TSYRA_SYNC2_Msk (0x4UL) /*!< SYNC2 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSYRA_SYNC3_Pos (6UL) /*!< SYNC3 (Bit 6) */ + #define R_MTU_TSYRA_SYNC3_Msk (0x40UL) /*!< SYNC3 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSYRA_SYNC4_Pos (7UL) /*!< SYNC4 (Bit 7) */ + #define R_MTU_TSYRA_SYNC4_Msk (0x80UL) /*!< SYNC4 (Bitfield-Mask: 0x01) */ +/* ======================================================== TCSYSTR ======================================================== */ + #define R_MTU_TCSYSTR_SCH7_Pos (0UL) /*!< SCH7 (Bit 0) */ + #define R_MTU_TCSYSTR_SCH7_Msk (0x1UL) /*!< SCH7 (Bitfield-Mask: 0x01) */ + #define R_MTU_TCSYSTR_SCH6_Pos (1UL) /*!< SCH6 (Bit 1) */ + #define R_MTU_TCSYSTR_SCH6_Msk (0x2UL) /*!< SCH6 (Bitfield-Mask: 0x01) */ + #define R_MTU_TCSYSTR_SCH4_Pos (3UL) /*!< SCH4 (Bit 3) */ + #define R_MTU_TCSYSTR_SCH4_Msk (0x8UL) /*!< SCH4 (Bitfield-Mask: 0x01) */ + #define R_MTU_TCSYSTR_SCH3_Pos (4UL) /*!< SCH3 (Bit 4) */ + #define R_MTU_TCSYSTR_SCH3_Msk (0x10UL) /*!< SCH3 (Bitfield-Mask: 0x01) */ + #define R_MTU_TCSYSTR_SCH2_Pos (5UL) /*!< SCH2 (Bit 5) */ + #define R_MTU_TCSYSTR_SCH2_Msk (0x20UL) /*!< SCH2 (Bitfield-Mask: 0x01) */ + #define R_MTU_TCSYSTR_SCH1_Pos (6UL) /*!< SCH1 (Bit 6) */ + #define R_MTU_TCSYSTR_SCH1_Msk (0x40UL) /*!< SCH1 (Bitfield-Mask: 0x01) */ + #define R_MTU_TCSYSTR_SCH0_Pos (7UL) /*!< SCH0 (Bit 7) */ + #define R_MTU_TCSYSTR_SCH0_Msk (0x80UL) /*!< SCH0 (Bitfield-Mask: 0x01) */ +/* ======================================================== TRWERA ========================================================= */ + #define R_MTU_TRWERA_RWE_Pos (0UL) /*!< RWE (Bit 0) */ + #define R_MTU_TRWERA_RWE_Msk (0x1UL) /*!< RWE (Bitfield-Mask: 0x01) */ +/* ========================================================= TOERB ========================================================= */ + #define R_MTU_TOERB_OE6B_Pos (0UL) /*!< OE6B (Bit 0) */ + #define R_MTU_TOERB_OE6B_Msk (0x1UL) /*!< OE6B (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERB_OE7A_Pos (1UL) /*!< OE7A (Bit 1) */ + #define R_MTU_TOERB_OE7A_Msk (0x2UL) /*!< OE7A (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERB_OE7B_Pos (2UL) /*!< OE7B (Bit 2) */ + #define R_MTU_TOERB_OE7B_Msk (0x4UL) /*!< OE7B (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERB_OE6D_Pos (3UL) /*!< OE6D (Bit 3) */ + #define R_MTU_TOERB_OE6D_Msk (0x8UL) /*!< OE6D (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERB_OE7C_Pos (4UL) /*!< OE7C (Bit 4) */ + #define R_MTU_TOERB_OE7C_Msk (0x10UL) /*!< OE7C (Bitfield-Mask: 0x01) */ + #define R_MTU_TOERB_OE7D_Pos (5UL) /*!< OE7D (Bit 5) */ + #define R_MTU_TOERB_OE7D_Msk (0x20UL) /*!< OE7D (Bitfield-Mask: 0x01) */ +/* ======================================================== TOCR1B ========================================================= */ + #define R_MTU_TOCR1B_OLSP_Pos (0UL) /*!< OLSP (Bit 0) */ + #define R_MTU_TOCR1B_OLSP_Msk (0x1UL) /*!< OLSP (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1B_OLSN_Pos (1UL) /*!< OLSN (Bit 1) */ + #define R_MTU_TOCR1B_OLSN_Msk (0x2UL) /*!< OLSN (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1B_TOCS_Pos (2UL) /*!< TOCS (Bit 2) */ + #define R_MTU_TOCR1B_TOCS_Msk (0x4UL) /*!< TOCS (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1B_TOCL_Pos (3UL) /*!< TOCL (Bit 3) */ + #define R_MTU_TOCR1B_TOCL_Msk (0x8UL) /*!< TOCL (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR1B_PSYE_Pos (6UL) /*!< PSYE (Bit 6) */ + #define R_MTU_TOCR1B_PSYE_Msk (0x40UL) /*!< PSYE (Bitfield-Mask: 0x01) */ +/* ======================================================== TOCR2B ========================================================= */ + #define R_MTU_TOCR2B_OLS1P_Pos (0UL) /*!< OLS1P (Bit 0) */ + #define R_MTU_TOCR2B_OLS1P_Msk (0x1UL) /*!< OLS1P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2B_OLS1N_Pos (1UL) /*!< OLS1N (Bit 1) */ + #define R_MTU_TOCR2B_OLS1N_Msk (0x2UL) /*!< OLS1N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2B_OLS2P_Pos (2UL) /*!< OLS2P (Bit 2) */ + #define R_MTU_TOCR2B_OLS2P_Msk (0x4UL) /*!< OLS2P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2B_OLS2N_Pos (3UL) /*!< OLS2N (Bit 3) */ + #define R_MTU_TOCR2B_OLS2N_Msk (0x8UL) /*!< OLS2N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2B_OLS3P_Pos (4UL) /*!< OLS3P (Bit 4) */ + #define R_MTU_TOCR2B_OLS3P_Msk (0x10UL) /*!< OLS3P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2B_OLS3N_Pos (5UL) /*!< OLS3N (Bit 5) */ + #define R_MTU_TOCR2B_OLS3N_Msk (0x20UL) /*!< OLS3N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOCR2B_BF_Pos (6UL) /*!< BF (Bit 6) */ + #define R_MTU_TOCR2B_BF_Msk (0xc0UL) /*!< BF (Bitfield-Mask: 0x03) */ +/* ========================================================= TCDRB ========================================================= */ +/* ========================================================= TDDRB ========================================================= */ +/* ======================================================== TCNTSB ========================================================= */ +/* ========================================================= TCBRB ========================================================= */ +/* ======================================================== TITCR1B ======================================================== */ + #define R_MTU_TITCR1B_T7VCOR_Pos (0UL) /*!< T7VCOR (Bit 0) */ + #define R_MTU_TITCR1B_T7VCOR_Msk (0x7UL) /*!< T7VCOR (Bitfield-Mask: 0x07) */ + #define R_MTU_TITCR1B_T7VEN_Pos (3UL) /*!< T7VEN (Bit 3) */ + #define R_MTU_TITCR1B_T7VEN_Msk (0x8UL) /*!< T7VEN (Bitfield-Mask: 0x01) */ + #define R_MTU_TITCR1B_T6ACOR_Pos (4UL) /*!< T6ACOR (Bit 4) */ + #define R_MTU_TITCR1B_T6ACOR_Msk (0x70UL) /*!< T6ACOR (Bitfield-Mask: 0x07) */ + #define R_MTU_TITCR1B_T6AEN_Pos (7UL) /*!< T6AEN (Bit 7) */ + #define R_MTU_TITCR1B_T6AEN_Msk (0x80UL) /*!< T6AEN (Bitfield-Mask: 0x01) */ +/* ======================================================= TITCNT1B ======================================================== */ + #define R_MTU_TITCNT1B_T7VCNT_Pos (0UL) /*!< T7VCNT (Bit 0) */ + #define R_MTU_TITCNT1B_T7VCNT_Msk (0x7UL) /*!< T7VCNT (Bitfield-Mask: 0x07) */ + #define R_MTU_TITCNT1B_T6ACNT_Pos (4UL) /*!< T6ACNT (Bit 4) */ + #define R_MTU_TITCNT1B_T6ACNT_Msk (0x70UL) /*!< T6ACNT (Bitfield-Mask: 0x07) */ +/* ======================================================== TBTERB ========================================================= */ + #define R_MTU_TBTERB_BTE_Pos (0UL) /*!< BTE (Bit 0) */ + #define R_MTU_TBTERB_BTE_Msk (0x3UL) /*!< BTE (Bitfield-Mask: 0x03) */ +/* ========================================================= TDERB ========================================================= */ + #define R_MTU_TDERB_TDER_Pos (0UL) /*!< TDER (Bit 0) */ + #define R_MTU_TDERB_TDER_Msk (0x1UL) /*!< TDER (Bitfield-Mask: 0x01) */ +/* ======================================================== TOLBRB ========================================================= */ + #define R_MTU_TOLBRB_OLS1P_Pos (0UL) /*!< OLS1P (Bit 0) */ + #define R_MTU_TOLBRB_OLS1P_Msk (0x1UL) /*!< OLS1P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRB_OLS1N_Pos (1UL) /*!< OLS1N (Bit 1) */ + #define R_MTU_TOLBRB_OLS1N_Msk (0x2UL) /*!< OLS1N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRB_OLS2P_Pos (2UL) /*!< OLS2P (Bit 2) */ + #define R_MTU_TOLBRB_OLS2P_Msk (0x4UL) /*!< OLS2P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRB_OLS2N_Pos (3UL) /*!< OLS2N (Bit 3) */ + #define R_MTU_TOLBRB_OLS2N_Msk (0x8UL) /*!< OLS2N (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRB_OLS3P_Pos (4UL) /*!< OLS3P (Bit 4) */ + #define R_MTU_TOLBRB_OLS3P_Msk (0x10UL) /*!< OLS3P (Bitfield-Mask: 0x01) */ + #define R_MTU_TOLBRB_OLS3N_Pos (5UL) /*!< OLS3N (Bit 5) */ + #define R_MTU_TOLBRB_OLS3N_Msk (0x20UL) /*!< OLS3N (Bitfield-Mask: 0x01) */ +/* ======================================================== TITMRB ========================================================= */ + #define R_MTU_TITMRB_TITM_Pos (0UL) /*!< TITM (Bit 0) */ + #define R_MTU_TITMRB_TITM_Msk (0x1UL) /*!< TITM (Bitfield-Mask: 0x01) */ +/* ======================================================== TITCR2B ======================================================== */ + #define R_MTU_TITCR2B_TRG7COR_Pos (0UL) /*!< TRG7COR (Bit 0) */ + #define R_MTU_TITCR2B_TRG7COR_Msk (0x7UL) /*!< TRG7COR (Bitfield-Mask: 0x07) */ +/* ======================================================= TITCNT2B ======================================================== */ + #define R_MTU_TITCNT2B_TRG7CNT_Pos (0UL) /*!< TRG7CNT (Bit 0) */ + #define R_MTU_TITCNT2B_TRG7CNT_Msk (0x7UL) /*!< TRG7CNT (Bitfield-Mask: 0x07) */ +/* ========================================================= TWCRB ========================================================= */ + #define R_MTU_TWCRB_WRE_Pos (0UL) /*!< WRE (Bit 0) */ + #define R_MTU_TWCRB_WRE_Msk (0x1UL) /*!< WRE (Bitfield-Mask: 0x01) */ + #define R_MTU_TWCRB_SCC_Pos (1UL) /*!< SCC (Bit 1) */ + #define R_MTU_TWCRB_SCC_Msk (0x2UL) /*!< SCC (Bitfield-Mask: 0x01) */ + #define R_MTU_TWCRB_CCE_Pos (7UL) /*!< CCE (Bit 7) */ + #define R_MTU_TWCRB_CCE_Msk (0x80UL) /*!< CCE (Bitfield-Mask: 0x01) */ +/* ======================================================== TMDR2B ========================================================= */ + #define R_MTU_TMDR2B_DRS_Pos (0UL) /*!< DRS (Bit 0) */ + #define R_MTU_TMDR2B_DRS_Msk (0x1UL) /*!< DRS (Bitfield-Mask: 0x01) */ +/* ========================================================= TSTRB ========================================================= */ + #define R_MTU_TSTRB_CST6_Pos (6UL) /*!< CST6 (Bit 6) */ + #define R_MTU_TSTRB_CST6_Msk (0x40UL) /*!< CST6 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSTRB_CST7_Pos (7UL) /*!< CST7 (Bit 7) */ + #define R_MTU_TSTRB_CST7_Msk (0x80UL) /*!< CST7 (Bitfield-Mask: 0x01) */ +/* ========================================================= TSYRB ========================================================= */ + #define R_MTU_TSYRB_SYNC6_Pos (6UL) /*!< SYNC6 (Bit 6) */ + #define R_MTU_TSYRB_SYNC6_Msk (0x40UL) /*!< SYNC6 (Bitfield-Mask: 0x01) */ + #define R_MTU_TSYRB_SYNC7_Pos (7UL) /*!< SYNC7 (Bit 7) */ + #define R_MTU_TSYRB_SYNC7_Msk (0x80UL) /*!< SYNC7 (Bitfield-Mask: 0x01) */ +/* ======================================================== TRWERB ========================================================= */ + #define R_MTU_TRWERB_RWE_Pos (0UL) /*!< RWE (Bit 0) */ + #define R_MTU_TRWERB_RWE_Msk (0x1UL) /*!< RWE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU3 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU3_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU3_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU3_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU3_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU3_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU3_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU3_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU3_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ + #define R_MTU3_TMDR1_BFA_Pos (4UL) /*!< BFA (Bit 4) */ + #define R_MTU3_TMDR1_BFA_Msk (0x10UL) /*!< BFA (Bitfield-Mask: 0x01) */ + #define R_MTU3_TMDR1_BFB_Pos (5UL) /*!< BFB (Bit 5) */ + #define R_MTU3_TMDR1_BFB_Msk (0x20UL) /*!< BFB (Bitfield-Mask: 0x01) */ +/* ========================================================= TIORH ========================================================= */ + #define R_MTU3_TIORH_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU3_TIORH_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU3_TIORH_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU3_TIORH_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIORL ========================================================= */ + #define R_MTU3_TIORL_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU3_TIORL_IOC_Msk (0xfUL) /*!< IOC (Bitfield-Mask: 0x0f) */ + #define R_MTU3_TIORL_IOD_Pos (4UL) /*!< IOD (Bit 4) */ + #define R_MTU3_TIORL_IOD_Msk (0xf0UL) /*!< IOD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU3_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU3_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU3_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU3_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU3_TIER_TGIEC_Pos (2UL) /*!< TGIEC (Bit 2) */ + #define R_MTU3_TIER_TGIEC_Msk (0x4UL) /*!< TGIEC (Bitfield-Mask: 0x01) */ + #define R_MTU3_TIER_TGIED_Pos (3UL) /*!< TGIED (Bit 3) */ + #define R_MTU3_TIER_TGIED_Msk (0x8UL) /*!< TGIED (Bitfield-Mask: 0x01) */ + #define R_MTU3_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU3_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ + #define R_MTU3_TIER_TTGE_Pos (7UL) /*!< TTGE (Bit 7) */ + #define R_MTU3_TIER_TTGE_Msk (0x80UL) /*!< TTGE (Bitfield-Mask: 0x01) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TGRC ========================================================== */ +/* ========================================================= TGRD ========================================================== */ +/* ========================================================== TSR ========================================================== */ + #define R_MTU3_TSR_TGFA_Pos (0UL) /*!< TGFA (Bit 0) */ + #define R_MTU3_TSR_TGFA_Msk (0x1UL) /*!< TGFA (Bitfield-Mask: 0x01) */ + #define R_MTU3_TSR_TGFB_Pos (1UL) /*!< TGFB (Bit 1) */ + #define R_MTU3_TSR_TGFB_Msk (0x2UL) /*!< TGFB (Bitfield-Mask: 0x01) */ + #define R_MTU3_TSR_TGFC_Pos (2UL) /*!< TGFC (Bit 2) */ + #define R_MTU3_TSR_TGFC_Msk (0x4UL) /*!< TGFC (Bitfield-Mask: 0x01) */ + #define R_MTU3_TSR_TGFD_Pos (3UL) /*!< TGFD (Bit 3) */ + #define R_MTU3_TSR_TGFD_Msk (0x8UL) /*!< TGFD (Bitfield-Mask: 0x01) */ + #define R_MTU3_TSR_TCFV_Pos (4UL) /*!< TCFV (Bit 4) */ + #define R_MTU3_TSR_TCFV_Msk (0x10UL) /*!< TCFV (Bitfield-Mask: 0x01) */ + #define R_MTU3_TSR_TCFU_Pos (5UL) /*!< TCFU (Bit 5) */ + #define R_MTU3_TSR_TCFU_Msk (0x20UL) /*!< TCFU (Bitfield-Mask: 0x01) */ + #define R_MTU3_TSR_TCFD_Pos (7UL) /*!< TCFD (Bit 7) */ + #define R_MTU3_TSR_TCFD_Msk (0x80UL) /*!< TCFD (Bitfield-Mask: 0x01) */ +/* ========================================================= TBTM ========================================================== */ + #define R_MTU3_TBTM_TTSA_Pos (0UL) /*!< TTSA (Bit 0) */ + #define R_MTU3_TBTM_TTSA_Msk (0x1UL) /*!< TTSA (Bitfield-Mask: 0x01) */ + #define R_MTU3_TBTM_TTSB_Pos (1UL) /*!< TTSB (Bit 1) */ + #define R_MTU3_TBTM_TTSB_Msk (0x2UL) /*!< TTSB (Bitfield-Mask: 0x01) */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU3_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU3_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ +/* ========================================================= TGRE ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_MTU4 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU4_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU4_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU4_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU4_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU4_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU4_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU4_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU4_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ + #define R_MTU4_TMDR1_BFA_Pos (4UL) /*!< BFA (Bit 4) */ + #define R_MTU4_TMDR1_BFA_Msk (0x10UL) /*!< BFA (Bitfield-Mask: 0x01) */ + #define R_MTU4_TMDR1_BFB_Pos (5UL) /*!< BFB (Bit 5) */ + #define R_MTU4_TMDR1_BFB_Msk (0x20UL) /*!< BFB (Bitfield-Mask: 0x01) */ +/* ========================================================= TIORH ========================================================= */ + #define R_MTU4_TIORH_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU4_TIORH_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU4_TIORH_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU4_TIORH_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIORL ========================================================= */ + #define R_MTU4_TIORL_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU4_TIORL_IOC_Msk (0xfUL) /*!< IOC (Bitfield-Mask: 0x0f) */ + #define R_MTU4_TIORL_IOD_Pos (4UL) /*!< IOD (Bit 4) */ + #define R_MTU4_TIORL_IOD_Msk (0xf0UL) /*!< IOD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU4_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU4_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU4_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU4_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU4_TIER_TGIEC_Pos (2UL) /*!< TGIEC (Bit 2) */ + #define R_MTU4_TIER_TGIEC_Msk (0x4UL) /*!< TGIEC (Bitfield-Mask: 0x01) */ + #define R_MTU4_TIER_TGIED_Pos (3UL) /*!< TGIED (Bit 3) */ + #define R_MTU4_TIER_TGIED_Msk (0x8UL) /*!< TGIED (Bitfield-Mask: 0x01) */ + #define R_MTU4_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU4_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ + #define R_MTU4_TIER_TTGE2_Pos (6UL) /*!< TTGE2 (Bit 6) */ + #define R_MTU4_TIER_TTGE2_Msk (0x40UL) /*!< TTGE2 (Bitfield-Mask: 0x01) */ + #define R_MTU4_TIER_TTGE_Pos (7UL) /*!< TTGE (Bit 7) */ + #define R_MTU4_TIER_TTGE_Msk (0x80UL) /*!< TTGE (Bitfield-Mask: 0x01) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TGRC ========================================================== */ +/* ========================================================= TGRD ========================================================== */ +/* ========================================================== TSR ========================================================== */ + #define R_MTU4_TSR_TGFA_Pos (0UL) /*!< TGFA (Bit 0) */ + #define R_MTU4_TSR_TGFA_Msk (0x1UL) /*!< TGFA (Bitfield-Mask: 0x01) */ + #define R_MTU4_TSR_TGFB_Pos (1UL) /*!< TGFB (Bit 1) */ + #define R_MTU4_TSR_TGFB_Msk (0x2UL) /*!< TGFB (Bitfield-Mask: 0x01) */ + #define R_MTU4_TSR_TGFC_Pos (2UL) /*!< TGFC (Bit 2) */ + #define R_MTU4_TSR_TGFC_Msk (0x4UL) /*!< TGFC (Bitfield-Mask: 0x01) */ + #define R_MTU4_TSR_TGFD_Pos (3UL) /*!< TGFD (Bit 3) */ + #define R_MTU4_TSR_TGFD_Msk (0x8UL) /*!< TGFD (Bitfield-Mask: 0x01) */ + #define R_MTU4_TSR_TCFV_Pos (4UL) /*!< TCFV (Bit 4) */ + #define R_MTU4_TSR_TCFV_Msk (0x10UL) /*!< TCFV (Bitfield-Mask: 0x01) */ + #define R_MTU4_TSR_TCFU_Pos (5UL) /*!< TCFU (Bit 5) */ + #define R_MTU4_TSR_TCFU_Msk (0x20UL) /*!< TCFU (Bitfield-Mask: 0x01) */ + #define R_MTU4_TSR_TCFD_Pos (7UL) /*!< TCFD (Bit 7) */ + #define R_MTU4_TSR_TCFD_Msk (0x80UL) /*!< TCFD (Bitfield-Mask: 0x01) */ +/* ========================================================= TBTM ========================================================== */ + #define R_MTU4_TBTM_TTSA_Pos (0UL) /*!< TTSA (Bit 0) */ + #define R_MTU4_TBTM_TTSA_Msk (0x1UL) /*!< TTSA (Bitfield-Mask: 0x01) */ + #define R_MTU4_TBTM_TTSB_Pos (1UL) /*!< TTSB (Bit 1) */ + #define R_MTU4_TBTM_TTSB_Msk (0x2UL) /*!< TTSB (Bitfield-Mask: 0x01) */ +/* ========================================================= TADCR ========================================================= */ + #define R_MTU4_TADCR_ITB4VE_Pos (0UL) /*!< ITB4VE (Bit 0) */ + #define R_MTU4_TADCR_ITB4VE_Msk (0x1UL) /*!< ITB4VE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_ITB3AE_Pos (1UL) /*!< ITB3AE (Bit 1) */ + #define R_MTU4_TADCR_ITB3AE_Msk (0x2UL) /*!< ITB3AE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_ITA4VE_Pos (2UL) /*!< ITA4VE (Bit 2) */ + #define R_MTU4_TADCR_ITA4VE_Msk (0x4UL) /*!< ITA4VE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_ITA3AE_Pos (3UL) /*!< ITA3AE (Bit 3) */ + #define R_MTU4_TADCR_ITA3AE_Msk (0x8UL) /*!< ITA3AE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_DT4BE_Pos (4UL) /*!< DT4BE (Bit 4) */ + #define R_MTU4_TADCR_DT4BE_Msk (0x10UL) /*!< DT4BE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_UT4BE_Pos (5UL) /*!< UT4BE (Bit 5) */ + #define R_MTU4_TADCR_UT4BE_Msk (0x20UL) /*!< UT4BE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_DT4AE_Pos (6UL) /*!< DT4AE (Bit 6) */ + #define R_MTU4_TADCR_DT4AE_Msk (0x40UL) /*!< DT4AE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_UT4AE_Pos (7UL) /*!< UT4AE (Bit 7) */ + #define R_MTU4_TADCR_UT4AE_Msk (0x80UL) /*!< UT4AE (Bitfield-Mask: 0x01) */ + #define R_MTU4_TADCR_BF_Pos (14UL) /*!< BF (Bit 14) */ + #define R_MTU4_TADCR_BF_Msk (0xc000UL) /*!< BF (Bitfield-Mask: 0x03) */ +/* ======================================================== TADCORA ======================================================== */ +/* ======================================================== TADCORB ======================================================== */ +/* ======================================================= TADCOBRA ======================================================== */ +/* ======================================================= TADCOBRB ======================================================== */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU4_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU4_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ +/* ========================================================= TGRE ========================================================== */ +/* ========================================================= TGRF ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_MTU_NF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= NFCR0 ========================================================= */ + #define R_MTU_NF_NFCR0_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR0_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR0_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR0_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR0_NFCEN_Pos (2UL) /*!< NFCEN (Bit 2) */ + #define R_MTU_NF_NFCR0_NFCEN_Msk (0x4UL) /*!< NFCEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR0_NFDEN_Pos (3UL) /*!< NFDEN (Bit 3) */ + #define R_MTU_NF_NFCR0_NFDEN_Msk (0x8UL) /*!< NFDEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR0_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR0_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR1 ========================================================= */ + #define R_MTU_NF_NFCR1_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR1_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR1_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR1_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR1_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR1_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR2 ========================================================= */ + #define R_MTU_NF_NFCR2_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR2_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR2_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR2_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR2_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR2_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR3 ========================================================= */ + #define R_MTU_NF_NFCR3_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR3_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR3_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR3_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR3_NFCEN_Pos (2UL) /*!< NFCEN (Bit 2) */ + #define R_MTU_NF_NFCR3_NFCEN_Msk (0x4UL) /*!< NFCEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR3_NFDEN_Pos (3UL) /*!< NFDEN (Bit 3) */ + #define R_MTU_NF_NFCR3_NFDEN_Msk (0x8UL) /*!< NFDEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR3_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR3_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR4 ========================================================= */ + #define R_MTU_NF_NFCR4_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR4_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR4_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR4_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR4_NFCEN_Pos (2UL) /*!< NFCEN (Bit 2) */ + #define R_MTU_NF_NFCR4_NFCEN_Msk (0x4UL) /*!< NFCEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR4_NFDEN_Pos (3UL) /*!< NFDEN (Bit 3) */ + #define R_MTU_NF_NFCR4_NFDEN_Msk (0x8UL) /*!< NFDEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR4_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR4_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR8 ========================================================= */ + #define R_MTU_NF_NFCR8_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR8_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR8_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR8_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR8_NFCEN_Pos (2UL) /*!< NFCEN (Bit 2) */ + #define R_MTU_NF_NFCR8_NFCEN_Msk (0x4UL) /*!< NFCEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR8_NFDEN_Pos (3UL) /*!< NFDEN (Bit 3) */ + #define R_MTU_NF_NFCR8_NFDEN_Msk (0x8UL) /*!< NFDEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR8_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR8_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCRC ========================================================= */ + #define R_MTU_NF_NFCRC_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCRC_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCRC_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCRC_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCRC_NFCEN_Pos (2UL) /*!< NFCEN (Bit 2) */ + #define R_MTU_NF_NFCRC_NFCEN_Msk (0x4UL) /*!< NFCEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCRC_NFDEN_Pos (3UL) /*!< NFDEN (Bit 3) */ + #define R_MTU_NF_NFCRC_NFDEN_Msk (0x8UL) /*!< NFDEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCRC_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCRC_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR6 ========================================================= */ + #define R_MTU_NF_NFCR6_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR6_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR6_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR6_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR6_NFCEN_Pos (2UL) /*!< NFCEN (Bit 2) */ + #define R_MTU_NF_NFCR6_NFCEN_Msk (0x4UL) /*!< NFCEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR6_NFDEN_Pos (3UL) /*!< NFDEN (Bit 3) */ + #define R_MTU_NF_NFCR6_NFDEN_Msk (0x8UL) /*!< NFDEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR6_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR6_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR7 ========================================================= */ + #define R_MTU_NF_NFCR7_NFAEN_Pos (0UL) /*!< NFAEN (Bit 0) */ + #define R_MTU_NF_NFCR7_NFAEN_Msk (0x1UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR7_NFBEN_Pos (1UL) /*!< NFBEN (Bit 1) */ + #define R_MTU_NF_NFCR7_NFBEN_Msk (0x2UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR7_NFCEN_Pos (2UL) /*!< NFCEN (Bit 2) */ + #define R_MTU_NF_NFCR7_NFCEN_Msk (0x4UL) /*!< NFCEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR7_NFDEN_Pos (3UL) /*!< NFDEN (Bit 3) */ + #define R_MTU_NF_NFCR7_NFDEN_Msk (0x8UL) /*!< NFDEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR7_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR7_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ========================================================= NFCR5 ========================================================= */ + #define R_MTU_NF_NFCR5_NFUEN_Pos (0UL) /*!< NFUEN (Bit 0) */ + #define R_MTU_NF_NFCR5_NFUEN_Msk (0x1UL) /*!< NFUEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR5_NFVEN_Pos (1UL) /*!< NFVEN (Bit 1) */ + #define R_MTU_NF_NFCR5_NFVEN_Msk (0x2UL) /*!< NFVEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR5_NFWEN_Pos (2UL) /*!< NFWEN (Bit 2) */ + #define R_MTU_NF_NFCR5_NFWEN_Msk (0x4UL) /*!< NFWEN (Bitfield-Mask: 0x01) */ + #define R_MTU_NF_NFCR5_NFCS_Pos (4UL) /*!< NFCS (Bit 4) */ + #define R_MTU_NF_NFCR5_NFCS_Msk (0x30UL) /*!< NFCS (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU0_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU0_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU0_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU0_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU0_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU0_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU0_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU0_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ + #define R_MTU0_TMDR1_BFA_Pos (4UL) /*!< BFA (Bit 4) */ + #define R_MTU0_TMDR1_BFA_Msk (0x10UL) /*!< BFA (Bitfield-Mask: 0x01) */ + #define R_MTU0_TMDR1_BFB_Pos (5UL) /*!< BFB (Bit 5) */ + #define R_MTU0_TMDR1_BFB_Msk (0x20UL) /*!< BFB (Bitfield-Mask: 0x01) */ + #define R_MTU0_TMDR1_BFE_Pos (6UL) /*!< BFE (Bit 6) */ + #define R_MTU0_TMDR1_BFE_Msk (0x40UL) /*!< BFE (Bitfield-Mask: 0x01) */ +/* ========================================================= TIORH ========================================================= */ + #define R_MTU0_TIORH_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU0_TIORH_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU0_TIORH_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU0_TIORH_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIORL ========================================================= */ + #define R_MTU0_TIORL_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU0_TIORL_IOC_Msk (0xfUL) /*!< IOC (Bitfield-Mask: 0x0f) */ + #define R_MTU0_TIORL_IOD_Pos (4UL) /*!< IOD (Bit 4) */ + #define R_MTU0_TIORL_IOD_Msk (0xf0UL) /*!< IOD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU0_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU0_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU0_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU0_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU0_TIER_TGIEC_Pos (2UL) /*!< TGIEC (Bit 2) */ + #define R_MTU0_TIER_TGIEC_Msk (0x4UL) /*!< TGIEC (Bitfield-Mask: 0x01) */ + #define R_MTU0_TIER_TGIED_Pos (3UL) /*!< TGIED (Bit 3) */ + #define R_MTU0_TIER_TGIED_Msk (0x8UL) /*!< TGIED (Bitfield-Mask: 0x01) */ + #define R_MTU0_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU0_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ + #define R_MTU0_TIER_TTGE_Pos (7UL) /*!< TTGE (Bit 7) */ + #define R_MTU0_TIER_TTGE_Msk (0x80UL) /*!< TTGE (Bitfield-Mask: 0x01) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TGRC ========================================================== */ +/* ========================================================= TGRD ========================================================== */ +/* ========================================================= TGRE ========================================================== */ +/* ========================================================= TGRF ========================================================== */ +/* ========================================================= TIER2 ========================================================= */ + #define R_MTU0_TIER2_TGIEE_Pos (0UL) /*!< TGIEE (Bit 0) */ + #define R_MTU0_TIER2_TGIEE_Msk (0x1UL) /*!< TGIEE (Bitfield-Mask: 0x01) */ + #define R_MTU0_TIER2_TGIEF_Pos (1UL) /*!< TGIEF (Bit 1) */ + #define R_MTU0_TIER2_TGIEF_Msk (0x2UL) /*!< TGIEF (Bitfield-Mask: 0x01) */ + #define R_MTU0_TIER2_TTGE2_Pos (7UL) /*!< TTGE2 (Bit 7) */ + #define R_MTU0_TIER2_TTGE2_Msk (0x80UL) /*!< TTGE2 (Bitfield-Mask: 0x01) */ +/* ========================================================= TBTM ========================================================== */ + #define R_MTU0_TBTM_TTSA_Pos (0UL) /*!< TTSA (Bit 0) */ + #define R_MTU0_TBTM_TTSA_Msk (0x1UL) /*!< TTSA (Bitfield-Mask: 0x01) */ + #define R_MTU0_TBTM_TTSB_Pos (1UL) /*!< TTSB (Bit 1) */ + #define R_MTU0_TBTM_TTSB_Msk (0x2UL) /*!< TTSB (Bitfield-Mask: 0x01) */ + #define R_MTU0_TBTM_TTSE_Pos (2UL) /*!< TTSE (Bit 2) */ + #define R_MTU0_TBTM_TTSE_Msk (0x4UL) /*!< TTSE (Bitfield-Mask: 0x01) */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU0_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU0_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU1 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU1_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU1_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU1_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU1_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU1_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU1_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU1_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU1_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIOR ========================================================== */ + #define R_MTU1_TIOR_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU1_TIOR_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU1_TIOR_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU1_TIOR_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU1_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU1_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU1_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU1_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU1_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU1_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ + #define R_MTU1_TIER_TCIEU_Pos (5UL) /*!< TCIEU (Bit 5) */ + #define R_MTU1_TIER_TCIEU_Msk (0x20UL) /*!< TCIEU (Bitfield-Mask: 0x01) */ + #define R_MTU1_TIER_TTGE_Pos (7UL) /*!< TTGE (Bit 7) */ + #define R_MTU1_TIER_TTGE_Msk (0x80UL) /*!< TTGE (Bitfield-Mask: 0x01) */ +/* ========================================================== TSR ========================================================== */ + #define R_MTU1_TSR_TGFA_Pos (0UL) /*!< TGFA (Bit 0) */ + #define R_MTU1_TSR_TGFA_Msk (0x1UL) /*!< TGFA (Bitfield-Mask: 0x01) */ + #define R_MTU1_TSR_TGFB_Pos (1UL) /*!< TGFB (Bit 1) */ + #define R_MTU1_TSR_TGFB_Msk (0x2UL) /*!< TGFB (Bitfield-Mask: 0x01) */ + #define R_MTU1_TSR_TGFC_Pos (2UL) /*!< TGFC (Bit 2) */ + #define R_MTU1_TSR_TGFC_Msk (0x4UL) /*!< TGFC (Bitfield-Mask: 0x01) */ + #define R_MTU1_TSR_TGFD_Pos (3UL) /*!< TGFD (Bit 3) */ + #define R_MTU1_TSR_TGFD_Msk (0x8UL) /*!< TGFD (Bitfield-Mask: 0x01) */ + #define R_MTU1_TSR_TCFV_Pos (4UL) /*!< TCFV (Bit 4) */ + #define R_MTU1_TSR_TCFV_Msk (0x10UL) /*!< TCFV (Bitfield-Mask: 0x01) */ + #define R_MTU1_TSR_TCFU_Pos (5UL) /*!< TCFU (Bit 5) */ + #define R_MTU1_TSR_TCFU_Msk (0x20UL) /*!< TCFU (Bitfield-Mask: 0x01) */ + #define R_MTU1_TSR_TCFD_Pos (7UL) /*!< TCFD (Bit 7) */ + #define R_MTU1_TSR_TCFD_Msk (0x80UL) /*!< TCFD (Bitfield-Mask: 0x01) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TICCR ========================================================= */ + #define R_MTU1_TICCR_I1AE_Pos (0UL) /*!< I1AE (Bit 0) */ + #define R_MTU1_TICCR_I1AE_Msk (0x1UL) /*!< I1AE (Bitfield-Mask: 0x01) */ + #define R_MTU1_TICCR_I1BE_Pos (1UL) /*!< I1BE (Bit 1) */ + #define R_MTU1_TICCR_I1BE_Msk (0x2UL) /*!< I1BE (Bitfield-Mask: 0x01) */ + #define R_MTU1_TICCR_I2AE_Pos (2UL) /*!< I2AE (Bit 2) */ + #define R_MTU1_TICCR_I2AE_Msk (0x4UL) /*!< I2AE (Bitfield-Mask: 0x01) */ + #define R_MTU1_TICCR_I2BE_Pos (3UL) /*!< I2BE (Bit 3) */ + #define R_MTU1_TICCR_I2BE_Msk (0x8UL) /*!< I2BE (Bitfield-Mask: 0x01) */ +/* ========================================================= TMDR3 ========================================================= */ + #define R_MTU1_TMDR3_LWA_Pos (0UL) /*!< LWA (Bit 0) */ + #define R_MTU1_TMDR3_LWA_Msk (0x1UL) /*!< LWA (Bitfield-Mask: 0x01) */ + #define R_MTU1_TMDR3_PHCKSEL_Pos (1UL) /*!< PHCKSEL (Bit 1) */ + #define R_MTU1_TMDR3_PHCKSEL_Msk (0x2UL) /*!< PHCKSEL (Bitfield-Mask: 0x01) */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU1_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU1_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ + #define R_MTU1_TCR2_PCB_Pos (3UL) /*!< PCB (Bit 3) */ + #define R_MTU1_TCR2_PCB_Msk (0x18UL) /*!< PCB (Bitfield-Mask: 0x03) */ +/* ======================================================== TCNTLW ========================================================= */ +/* ======================================================== TGRALW ========================================================= */ +/* ======================================================== TGRBLW ========================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_MTU2 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU2_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU2_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU2_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU2_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU2_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU2_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU2_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU2_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIOR ========================================================== */ + #define R_MTU2_TIOR_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU2_TIOR_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU2_TIOR_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU2_TIOR_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU2_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU2_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU2_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU2_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU2_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU2_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ + #define R_MTU2_TIER_TCIEU_Pos (5UL) /*!< TCIEU (Bit 5) */ + #define R_MTU2_TIER_TCIEU_Msk (0x20UL) /*!< TCIEU (Bitfield-Mask: 0x01) */ + #define R_MTU2_TIER_TTGE_Pos (7UL) /*!< TTGE (Bit 7) */ + #define R_MTU2_TIER_TTGE_Msk (0x80UL) /*!< TTGE (Bitfield-Mask: 0x01) */ +/* ========================================================== TSR ========================================================== */ + #define R_MTU2_TSR_TGFA_Pos (0UL) /*!< TGFA (Bit 0) */ + #define R_MTU2_TSR_TGFA_Msk (0x1UL) /*!< TGFA (Bitfield-Mask: 0x01) */ + #define R_MTU2_TSR_TGFB_Pos (1UL) /*!< TGFB (Bit 1) */ + #define R_MTU2_TSR_TGFB_Msk (0x2UL) /*!< TGFB (Bitfield-Mask: 0x01) */ + #define R_MTU2_TSR_TGFC_Pos (2UL) /*!< TGFC (Bit 2) */ + #define R_MTU2_TSR_TGFC_Msk (0x4UL) /*!< TGFC (Bitfield-Mask: 0x01) */ + #define R_MTU2_TSR_TGFD_Pos (3UL) /*!< TGFD (Bit 3) */ + #define R_MTU2_TSR_TGFD_Msk (0x8UL) /*!< TGFD (Bitfield-Mask: 0x01) */ + #define R_MTU2_TSR_TCFV_Pos (4UL) /*!< TCFV (Bit 4) */ + #define R_MTU2_TSR_TCFV_Msk (0x10UL) /*!< TCFV (Bitfield-Mask: 0x01) */ + #define R_MTU2_TSR_TCFU_Pos (5UL) /*!< TCFU (Bit 5) */ + #define R_MTU2_TSR_TCFU_Msk (0x20UL) /*!< TCFU (Bitfield-Mask: 0x01) */ + #define R_MTU2_TSR_TCFD_Pos (7UL) /*!< TCFD (Bit 7) */ + #define R_MTU2_TSR_TCFD_Msk (0x80UL) /*!< TCFD (Bitfield-Mask: 0x01) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU2_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU2_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ + #define R_MTU2_TCR2_PCB_Pos (3UL) /*!< PCB (Bit 3) */ + #define R_MTU2_TCR2_PCB_Msk (0x18UL) /*!< PCB (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_MTU8 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU8_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU8_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU8_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU8_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU8_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU8_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU8_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU8_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ + #define R_MTU8_TMDR1_BFA_Pos (4UL) /*!< BFA (Bit 4) */ + #define R_MTU8_TMDR1_BFA_Msk (0x10UL) /*!< BFA (Bitfield-Mask: 0x01) */ + #define R_MTU8_TMDR1_BFB_Pos (5UL) /*!< BFB (Bit 5) */ + #define R_MTU8_TMDR1_BFB_Msk (0x20UL) /*!< BFB (Bitfield-Mask: 0x01) */ +/* ========================================================= TIORH ========================================================= */ + #define R_MTU8_TIORH_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU8_TIORH_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU8_TIORH_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU8_TIORH_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIORL ========================================================= */ + #define R_MTU8_TIORL_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU8_TIORL_IOC_Msk (0xfUL) /*!< IOC (Bitfield-Mask: 0x0f) */ + #define R_MTU8_TIORL_IOD_Pos (4UL) /*!< IOD (Bit 4) */ + #define R_MTU8_TIORL_IOD_Msk (0xf0UL) /*!< IOD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU8_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU8_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU8_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU8_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU8_TIER_TGIEC_Pos (2UL) /*!< TGIEC (Bit 2) */ + #define R_MTU8_TIER_TGIEC_Msk (0x4UL) /*!< TGIEC (Bitfield-Mask: 0x01) */ + #define R_MTU8_TIER_TGIED_Pos (3UL) /*!< TGIED (Bit 3) */ + #define R_MTU8_TIER_TGIED_Msk (0x8UL) /*!< TGIED (Bitfield-Mask: 0x01) */ + #define R_MTU8_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU8_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU8_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU8_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TGRC ========================================================== */ +/* ========================================================= TGRD ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_MTU6 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU6_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU6_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU6_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU6_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU6_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU6_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU6_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU6_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ + #define R_MTU6_TMDR1_BFA_Pos (4UL) /*!< BFA (Bit 4) */ + #define R_MTU6_TMDR1_BFA_Msk (0x10UL) /*!< BFA (Bitfield-Mask: 0x01) */ + #define R_MTU6_TMDR1_BFB_Pos (5UL) /*!< BFB (Bit 5) */ + #define R_MTU6_TMDR1_BFB_Msk (0x20UL) /*!< BFB (Bitfield-Mask: 0x01) */ +/* ========================================================= TIORH ========================================================= */ + #define R_MTU6_TIORH_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU6_TIORH_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU6_TIORH_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU6_TIORH_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIORL ========================================================= */ + #define R_MTU6_TIORL_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU6_TIORL_IOC_Msk (0xfUL) /*!< IOC (Bitfield-Mask: 0x0f) */ + #define R_MTU6_TIORL_IOD_Pos (4UL) /*!< IOD (Bit 4) */ + #define R_MTU6_TIORL_IOD_Msk (0xf0UL) /*!< IOD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU6_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU6_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU6_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU6_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU6_TIER_TGIEC_Pos (2UL) /*!< TGIEC (Bit 2) */ + #define R_MTU6_TIER_TGIEC_Msk (0x4UL) /*!< TGIEC (Bitfield-Mask: 0x01) */ + #define R_MTU6_TIER_TGIED_Pos (3UL) /*!< TGIED (Bit 3) */ + #define R_MTU6_TIER_TGIED_Msk (0x8UL) /*!< TGIED (Bitfield-Mask: 0x01) */ + #define R_MTU6_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU6_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ + #define R_MTU6_TIER_TTGE_Pos (7UL) /*!< TTGE (Bit 7) */ + #define R_MTU6_TIER_TTGE_Msk (0x80UL) /*!< TTGE (Bitfield-Mask: 0x01) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TGRC ========================================================== */ +/* ========================================================= TGRD ========================================================== */ +/* ========================================================== TSR ========================================================== */ + #define R_MTU6_TSR_TGFA_Pos (0UL) /*!< TGFA (Bit 0) */ + #define R_MTU6_TSR_TGFA_Msk (0x1UL) /*!< TGFA (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSR_TGFB_Pos (1UL) /*!< TGFB (Bit 1) */ + #define R_MTU6_TSR_TGFB_Msk (0x2UL) /*!< TGFB (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSR_TGFC_Pos (2UL) /*!< TGFC (Bit 2) */ + #define R_MTU6_TSR_TGFC_Msk (0x4UL) /*!< TGFC (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSR_TGFD_Pos (3UL) /*!< TGFD (Bit 3) */ + #define R_MTU6_TSR_TGFD_Msk (0x8UL) /*!< TGFD (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSR_TCFV_Pos (4UL) /*!< TCFV (Bit 4) */ + #define R_MTU6_TSR_TCFV_Msk (0x10UL) /*!< TCFV (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSR_TCFU_Pos (5UL) /*!< TCFU (Bit 5) */ + #define R_MTU6_TSR_TCFU_Msk (0x20UL) /*!< TCFU (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSR_TCFD_Pos (7UL) /*!< TCFD (Bit 7) */ + #define R_MTU6_TSR_TCFD_Msk (0x80UL) /*!< TCFD (Bitfield-Mask: 0x01) */ +/* ========================================================= TBTM ========================================================== */ + #define R_MTU6_TBTM_TTSA_Pos (0UL) /*!< TTSA (Bit 0) */ + #define R_MTU6_TBTM_TTSA_Msk (0x1UL) /*!< TTSA (Bitfield-Mask: 0x01) */ + #define R_MTU6_TBTM_TTSB_Pos (1UL) /*!< TTSB (Bit 1) */ + #define R_MTU6_TBTM_TTSB_Msk (0x2UL) /*!< TTSB (Bitfield-Mask: 0x01) */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU6_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU6_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ +/* ========================================================= TSYCR ========================================================= */ + #define R_MTU6_TSYCR_CE2B_Pos (0UL) /*!< CE2B (Bit 0) */ + #define R_MTU6_TSYCR_CE2B_Msk (0x1UL) /*!< CE2B (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSYCR_CE2A_Pos (1UL) /*!< CE2A (Bit 1) */ + #define R_MTU6_TSYCR_CE2A_Msk (0x2UL) /*!< CE2A (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSYCR_CE1B_Pos (2UL) /*!< CE1B (Bit 2) */ + #define R_MTU6_TSYCR_CE1B_Msk (0x4UL) /*!< CE1B (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSYCR_CE1A_Pos (3UL) /*!< CE1A (Bit 3) */ + #define R_MTU6_TSYCR_CE1A_Msk (0x8UL) /*!< CE1A (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSYCR_CE0D_Pos (4UL) /*!< CE0D (Bit 4) */ + #define R_MTU6_TSYCR_CE0D_Msk (0x10UL) /*!< CE0D (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSYCR_CE0C_Pos (5UL) /*!< CE0C (Bit 5) */ + #define R_MTU6_TSYCR_CE0C_Msk (0x20UL) /*!< CE0C (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSYCR_CE0B_Pos (6UL) /*!< CE0B (Bit 6) */ + #define R_MTU6_TSYCR_CE0B_Msk (0x40UL) /*!< CE0B (Bitfield-Mask: 0x01) */ + #define R_MTU6_TSYCR_CE0A_Pos (7UL) /*!< CE0A (Bit 7) */ + #define R_MTU6_TSYCR_CE0A_Msk (0x80UL) /*!< CE0A (Bitfield-Mask: 0x01) */ +/* ========================================================= TGRE ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_MTU7 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== TCR ========================================================== */ + #define R_MTU7_TCR_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU7_TCR_TPSC_Msk (0x7UL) /*!< TPSC (Bitfield-Mask: 0x07) */ + #define R_MTU7_TCR_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU7_TCR_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_MTU7_TCR_CCLR_Pos (5UL) /*!< CCLR (Bit 5) */ + #define R_MTU7_TCR_CCLR_Msk (0xe0UL) /*!< CCLR (Bitfield-Mask: 0x07) */ +/* ========================================================= TMDR1 ========================================================= */ + #define R_MTU7_TMDR1_MD_Pos (0UL) /*!< MD (Bit 0) */ + #define R_MTU7_TMDR1_MD_Msk (0xfUL) /*!< MD (Bitfield-Mask: 0x0f) */ + #define R_MTU7_TMDR1_BFA_Pos (4UL) /*!< BFA (Bit 4) */ + #define R_MTU7_TMDR1_BFA_Msk (0x10UL) /*!< BFA (Bitfield-Mask: 0x01) */ + #define R_MTU7_TMDR1_BFB_Pos (5UL) /*!< BFB (Bit 5) */ + #define R_MTU7_TMDR1_BFB_Msk (0x20UL) /*!< BFB (Bitfield-Mask: 0x01) */ +/* ========================================================= TIORH ========================================================= */ + #define R_MTU7_TIORH_IOA_Pos (0UL) /*!< IOA (Bit 0) */ + #define R_MTU7_TIORH_IOA_Msk (0xfUL) /*!< IOA (Bitfield-Mask: 0x0f) */ + #define R_MTU7_TIORH_IOB_Pos (4UL) /*!< IOB (Bit 4) */ + #define R_MTU7_TIORH_IOB_Msk (0xf0UL) /*!< IOB (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIORL ========================================================= */ + #define R_MTU7_TIORL_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU7_TIORL_IOC_Msk (0xfUL) /*!< IOC (Bitfield-Mask: 0x0f) */ + #define R_MTU7_TIORL_IOD_Pos (4UL) /*!< IOD (Bit 4) */ + #define R_MTU7_TIORL_IOD_Msk (0xf0UL) /*!< IOD (Bitfield-Mask: 0x0f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU7_TIER_TGIEA_Pos (0UL) /*!< TGIEA (Bit 0) */ + #define R_MTU7_TIER_TGIEA_Msk (0x1UL) /*!< TGIEA (Bitfield-Mask: 0x01) */ + #define R_MTU7_TIER_TGIEB_Pos (1UL) /*!< TGIEB (Bit 1) */ + #define R_MTU7_TIER_TGIEB_Msk (0x2UL) /*!< TGIEB (Bitfield-Mask: 0x01) */ + #define R_MTU7_TIER_TGIEC_Pos (2UL) /*!< TGIEC (Bit 2) */ + #define R_MTU7_TIER_TGIEC_Msk (0x4UL) /*!< TGIEC (Bitfield-Mask: 0x01) */ + #define R_MTU7_TIER_TGIED_Pos (3UL) /*!< TGIED (Bit 3) */ + #define R_MTU7_TIER_TGIED_Msk (0x8UL) /*!< TGIED (Bitfield-Mask: 0x01) */ + #define R_MTU7_TIER_TCIEV_Pos (4UL) /*!< TCIEV (Bit 4) */ + #define R_MTU7_TIER_TCIEV_Msk (0x10UL) /*!< TCIEV (Bitfield-Mask: 0x01) */ + #define R_MTU7_TIER_TTGE2_Pos (6UL) /*!< TTGE2 (Bit 6) */ + #define R_MTU7_TIER_TTGE2_Msk (0x40UL) /*!< TTGE2 (Bitfield-Mask: 0x01) */ + #define R_MTU7_TIER_TTGE_Pos (7UL) /*!< TTGE (Bit 7) */ + #define R_MTU7_TIER_TTGE_Msk (0x80UL) /*!< TTGE (Bitfield-Mask: 0x01) */ +/* ========================================================= TCNT ========================================================== */ +/* ========================================================= TGRA ========================================================== */ +/* ========================================================= TGRB ========================================================== */ +/* ========================================================= TGRC ========================================================== */ +/* ========================================================= TGRD ========================================================== */ +/* ========================================================== TSR ========================================================== */ + #define R_MTU7_TSR_TGFA_Pos (0UL) /*!< TGFA (Bit 0) */ + #define R_MTU7_TSR_TGFA_Msk (0x1UL) /*!< TGFA (Bitfield-Mask: 0x01) */ + #define R_MTU7_TSR_TGFB_Pos (1UL) /*!< TGFB (Bit 1) */ + #define R_MTU7_TSR_TGFB_Msk (0x2UL) /*!< TGFB (Bitfield-Mask: 0x01) */ + #define R_MTU7_TSR_TGFC_Pos (2UL) /*!< TGFC (Bit 2) */ + #define R_MTU7_TSR_TGFC_Msk (0x4UL) /*!< TGFC (Bitfield-Mask: 0x01) */ + #define R_MTU7_TSR_TGFD_Pos (3UL) /*!< TGFD (Bit 3) */ + #define R_MTU7_TSR_TGFD_Msk (0x8UL) /*!< TGFD (Bitfield-Mask: 0x01) */ + #define R_MTU7_TSR_TCFV_Pos (4UL) /*!< TCFV (Bit 4) */ + #define R_MTU7_TSR_TCFV_Msk (0x10UL) /*!< TCFV (Bitfield-Mask: 0x01) */ + #define R_MTU7_TSR_TCFU_Pos (5UL) /*!< TCFU (Bit 5) */ + #define R_MTU7_TSR_TCFU_Msk (0x20UL) /*!< TCFU (Bitfield-Mask: 0x01) */ + #define R_MTU7_TSR_TCFD_Pos (7UL) /*!< TCFD (Bit 7) */ + #define R_MTU7_TSR_TCFD_Msk (0x80UL) /*!< TCFD (Bitfield-Mask: 0x01) */ +/* ========================================================= TBTM ========================================================== */ + #define R_MTU7_TBTM_TTSA_Pos (0UL) /*!< TTSA (Bit 0) */ + #define R_MTU7_TBTM_TTSA_Msk (0x1UL) /*!< TTSA (Bitfield-Mask: 0x01) */ + #define R_MTU7_TBTM_TTSB_Pos (1UL) /*!< TTSB (Bit 1) */ + #define R_MTU7_TBTM_TTSB_Msk (0x2UL) /*!< TTSB (Bitfield-Mask: 0x01) */ +/* ========================================================= TADCR ========================================================= */ + #define R_MTU7_TADCR_ITB7VE_Pos (0UL) /*!< ITB7VE (Bit 0) */ + #define R_MTU7_TADCR_ITB7VE_Msk (0x1UL) /*!< ITB7VE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_ITB6AE_Pos (1UL) /*!< ITB6AE (Bit 1) */ + #define R_MTU7_TADCR_ITB6AE_Msk (0x2UL) /*!< ITB6AE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_ITA7VE_Pos (2UL) /*!< ITA7VE (Bit 2) */ + #define R_MTU7_TADCR_ITA7VE_Msk (0x4UL) /*!< ITA7VE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_ITA6AE_Pos (3UL) /*!< ITA6AE (Bit 3) */ + #define R_MTU7_TADCR_ITA6AE_Msk (0x8UL) /*!< ITA6AE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_DT7BE_Pos (4UL) /*!< DT7BE (Bit 4) */ + #define R_MTU7_TADCR_DT7BE_Msk (0x10UL) /*!< DT7BE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_UT7BE_Pos (5UL) /*!< UT7BE (Bit 5) */ + #define R_MTU7_TADCR_UT7BE_Msk (0x20UL) /*!< UT7BE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_DT7AE_Pos (6UL) /*!< DT7AE (Bit 6) */ + #define R_MTU7_TADCR_DT7AE_Msk (0x40UL) /*!< DT7AE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_UT7AE_Pos (7UL) /*!< UT7AE (Bit 7) */ + #define R_MTU7_TADCR_UT7AE_Msk (0x80UL) /*!< UT7AE (Bitfield-Mask: 0x01) */ + #define R_MTU7_TADCR_BF_Pos (14UL) /*!< BF (Bit 14) */ + #define R_MTU7_TADCR_BF_Msk (0xc000UL) /*!< BF (Bitfield-Mask: 0x03) */ +/* ======================================================== TADCORA ======================================================== */ +/* ======================================================== TADCORB ======================================================== */ +/* ======================================================= TADCOBRA ======================================================== */ +/* ======================================================= TADCOBRB ======================================================== */ +/* ========================================================= TCR2 ========================================================== */ + #define R_MTU7_TCR2_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU7_TCR2_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ +/* ========================================================= TGRE ========================================================== */ +/* ========================================================= TGRF ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_MTU5 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= TCNTU ========================================================= */ +/* ========================================================= TGRU ========================================================== */ +/* ========================================================= TCRU ========================================================== */ + #define R_MTU5_TCRU_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU5_TCRU_TPSC_Msk (0x3UL) /*!< TPSC (Bitfield-Mask: 0x03) */ +/* ========================================================= TCR2U ========================================================= */ + #define R_MTU5_TCR2U_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU5_TCR2U_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ + #define R_MTU5_TCR2U_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU5_TCR2U_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ +/* ========================================================= TIORU ========================================================= */ + #define R_MTU5_TIORU_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU5_TIORU_IOC_Msk (0x1fUL) /*!< IOC (Bitfield-Mask: 0x1f) */ +/* ========================================================= TCNTV ========================================================= */ +/* ========================================================= TGRV ========================================================== */ +/* ========================================================= TCRV ========================================================== */ + #define R_MTU5_TCRV_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU5_TCRV_TPSC_Msk (0x3UL) /*!< TPSC (Bitfield-Mask: 0x03) */ +/* ========================================================= TCR2V ========================================================= */ + #define R_MTU5_TCR2V_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU5_TCR2V_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ + #define R_MTU5_TCR2V_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU5_TCR2V_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ +/* ========================================================= TIORV ========================================================= */ + #define R_MTU5_TIORV_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU5_TIORV_IOC_Msk (0x1fUL) /*!< IOC (Bitfield-Mask: 0x1f) */ +/* ========================================================= TCNTW ========================================================= */ +/* ========================================================= TGRW ========================================================== */ +/* ========================================================= TCRW ========================================================== */ + #define R_MTU5_TCRW_TPSC_Pos (0UL) /*!< TPSC (Bit 0) */ + #define R_MTU5_TCRW_TPSC_Msk (0x3UL) /*!< TPSC (Bitfield-Mask: 0x03) */ +/* ========================================================= TCR2W ========================================================= */ + #define R_MTU5_TCR2W_TPSC2_Pos (0UL) /*!< TPSC2 (Bit 0) */ + #define R_MTU5_TCR2W_TPSC2_Msk (0x7UL) /*!< TPSC2 (Bitfield-Mask: 0x07) */ + #define R_MTU5_TCR2W_CKEG_Pos (3UL) /*!< CKEG (Bit 3) */ + #define R_MTU5_TCR2W_CKEG_Msk (0x18UL) /*!< CKEG (Bitfield-Mask: 0x03) */ +/* ========================================================= TIORW ========================================================= */ + #define R_MTU5_TIORW_IOC_Pos (0UL) /*!< IOC (Bit 0) */ + #define R_MTU5_TIORW_IOC_Msk (0x1fUL) /*!< IOC (Bitfield-Mask: 0x1f) */ +/* ========================================================= TIER ========================================================== */ + #define R_MTU5_TIER_TGIE5W_Pos (0UL) /*!< TGIE5W (Bit 0) */ + #define R_MTU5_TIER_TGIE5W_Msk (0x1UL) /*!< TGIE5W (Bitfield-Mask: 0x01) */ + #define R_MTU5_TIER_TGIE5V_Pos (1UL) /*!< TGIE5V (Bit 1) */ + #define R_MTU5_TIER_TGIE5V_Msk (0x2UL) /*!< TGIE5V (Bitfield-Mask: 0x01) */ + #define R_MTU5_TIER_TGIE5U_Pos (2UL) /*!< TGIE5U (Bit 2) */ + #define R_MTU5_TIER_TGIE5U_Msk (0x4UL) /*!< TGIE5U (Bitfield-Mask: 0x01) */ +/* ========================================================= TSTR ========================================================== */ + #define R_MTU5_TSTR_CSTW5_Pos (0UL) /*!< CSTW5 (Bit 0) */ + #define R_MTU5_TSTR_CSTW5_Msk (0x1UL) /*!< CSTW5 (Bitfield-Mask: 0x01) */ + #define R_MTU5_TSTR_CSTV5_Pos (1UL) /*!< CSTV5 (Bit 1) */ + #define R_MTU5_TSTR_CSTV5_Msk (0x2UL) /*!< CSTV5 (Bitfield-Mask: 0x01) */ + #define R_MTU5_TSTR_CSTU5_Pos (2UL) /*!< CSTU5 (Bit 2) */ + #define R_MTU5_TSTR_CSTU5_Msk (0x4UL) /*!< CSTU5 (Bitfield-Mask: 0x01) */ +/* ====================================================== TCNTCMPCLR ======================================================= */ + #define R_MTU5_TCNTCMPCLR_CMPCLR5W_Pos (0UL) /*!< CMPCLR5W (Bit 0) */ + #define R_MTU5_TCNTCMPCLR_CMPCLR5W_Msk (0x1UL) /*!< CMPCLR5W (Bitfield-Mask: 0x01) */ + #define R_MTU5_TCNTCMPCLR_CMPCLR5V_Pos (1UL) /*!< CMPCLR5V (Bit 1) */ + #define R_MTU5_TCNTCMPCLR_CMPCLR5V_Msk (0x2UL) /*!< CMPCLR5V (Bitfield-Mask: 0x01) */ + #define R_MTU5_TCNTCMPCLR_CMPCLR5U_Pos (2UL) /*!< CMPCLR5U (Bit 2) */ + #define R_MTU5_TCNTCMPCLR_CMPCLR5U_Msk (0x4UL) /*!< CMPCLR5U (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_TFU ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== TRGSTS ========================================================= */ + #define R_TFU_TRGSTS_BSYF_Pos (0UL) /*!< BSYF (Bit 0) */ + #define R_TFU_TRGSTS_BSYF_Msk (0x1UL) /*!< BSYF (Bitfield-Mask: 0x01) */ + #define R_TFU_TRGSTS_ERRF_Pos (1UL) /*!< ERRF (Bit 1) */ + #define R_TFU_TRGSTS_ERRF_Msk (0x2UL) /*!< ERRF (Bitfield-Mask: 0x01) */ +/* ========================================================= SCDT0 ========================================================= */ + #define R_TFU_SCDT0_SCDT0_Pos (0UL) /*!< SCDT0 (Bit 0) */ + #define R_TFU_SCDT0_SCDT0_Msk (0xffffffffUL) /*!< SCDT0 (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= SCDT1 ========================================================= */ + #define R_TFU_SCDT1_SCDT1_Pos (0UL) /*!< SCDT1 (Bit 0) */ + #define R_TFU_SCDT1_SCDT1_Msk (0xffffffffUL) /*!< SCDT1 (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= ATDT0 ========================================================= */ + #define R_TFU_ATDT0_ATDT0_Pos (0UL) /*!< ATDT0 (Bit 0) */ + #define R_TFU_ATDT0_ATDT0_Msk (0xffffffffUL) /*!< ATDT0 (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= ATDT1 ========================================================= */ + #define R_TFU_ATDT1_ATDT1_Pos (0UL) /*!< ATDT1 (Bit 0) */ + #define R_TFU_ATDT1_ATDT1_Msk (0xffffffffUL) /*!< ATDT1 (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ R_POE3 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ICSR1 ========================================================= */ + #define R_POE3_ICSR1_POE0M_Pos (0UL) /*!< POE0M (Bit 0) */ + #define R_POE3_ICSR1_POE0M_Msk (0x3UL) /*!< POE0M (Bitfield-Mask: 0x03) */ + #define R_POE3_ICSR1_PIE1_Pos (8UL) /*!< PIE1 (Bit 8) */ + #define R_POE3_ICSR1_PIE1_Msk (0x100UL) /*!< PIE1 (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR1_POE0F_Pos (12UL) /*!< POE0F (Bit 12) */ + #define R_POE3_ICSR1_POE0F_Msk (0x1000UL) /*!< POE0F (Bitfield-Mask: 0x01) */ +/* ========================================================= OCSR1 ========================================================= */ + #define R_POE3_OCSR1_OIE1_Pos (8UL) /*!< OIE1 (Bit 8) */ + #define R_POE3_OCSR1_OIE1_Msk (0x100UL) /*!< OIE1 (Bitfield-Mask: 0x01) */ + #define R_POE3_OCSR1_OCE1_Pos (9UL) /*!< OCE1 (Bit 9) */ + #define R_POE3_OCSR1_OCE1_Msk (0x200UL) /*!< OCE1 (Bitfield-Mask: 0x01) */ + #define R_POE3_OCSR1_OSF1_Pos (15UL) /*!< OSF1 (Bit 15) */ + #define R_POE3_OCSR1_OSF1_Msk (0x8000UL) /*!< OSF1 (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR2 ========================================================= */ + #define R_POE3_ICSR2_POE4M_Pos (0UL) /*!< POE4M (Bit 0) */ + #define R_POE3_ICSR2_POE4M_Msk (0x3UL) /*!< POE4M (Bitfield-Mask: 0x03) */ + #define R_POE3_ICSR2_PIE2_Pos (8UL) /*!< PIE2 (Bit 8) */ + #define R_POE3_ICSR2_PIE2_Msk (0x100UL) /*!< PIE2 (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR2_POE4F_Pos (12UL) /*!< POE4F (Bit 12) */ + #define R_POE3_ICSR2_POE4F_Msk (0x1000UL) /*!< POE4F (Bitfield-Mask: 0x01) */ +/* ========================================================= OCSR2 ========================================================= */ + #define R_POE3_OCSR2_OIE2_Pos (8UL) /*!< OIE2 (Bit 8) */ + #define R_POE3_OCSR2_OIE2_Msk (0x100UL) /*!< OIE2 (Bitfield-Mask: 0x01) */ + #define R_POE3_OCSR2_OCE2_Pos (9UL) /*!< OCE2 (Bit 9) */ + #define R_POE3_OCSR2_OCE2_Msk (0x200UL) /*!< OCE2 (Bitfield-Mask: 0x01) */ + #define R_POE3_OCSR2_OSF2_Pos (15UL) /*!< OSF2 (Bit 15) */ + #define R_POE3_OCSR2_OSF2_Msk (0x8000UL) /*!< OSF2 (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR3 ========================================================= */ + #define R_POE3_ICSR3_POE8M_Pos (0UL) /*!< POE8M (Bit 0) */ + #define R_POE3_ICSR3_POE8M_Msk (0x3UL) /*!< POE8M (Bitfield-Mask: 0x03) */ + #define R_POE3_ICSR3_PIE3_Pos (8UL) /*!< PIE3 (Bit 8) */ + #define R_POE3_ICSR3_PIE3_Msk (0x100UL) /*!< PIE3 (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR3_POE8E_Pos (9UL) /*!< POE8E (Bit 9) */ + #define R_POE3_ICSR3_POE8E_Msk (0x200UL) /*!< POE8E (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR3_POE8F_Pos (12UL) /*!< POE8F (Bit 12) */ + #define R_POE3_ICSR3_POE8F_Msk (0x1000UL) /*!< POE8F (Bitfield-Mask: 0x01) */ +/* ========================================================= SPOER ========================================================= */ + #define R_POE3_SPOER_MTUCH34HIZ_Pos (0UL) /*!< MTUCH34HIZ (Bit 0) */ + #define R_POE3_SPOER_MTUCH34HIZ_Msk (0x1UL) /*!< MTUCH34HIZ (Bitfield-Mask: 0x01) */ + #define R_POE3_SPOER_MTUCH67HIZ_Pos (1UL) /*!< MTUCH67HIZ (Bit 1) */ + #define R_POE3_SPOER_MTUCH67HIZ_Msk (0x2UL) /*!< MTUCH67HIZ (Bitfield-Mask: 0x01) */ + #define R_POE3_SPOER_MTUCH0HIZ_Pos (2UL) /*!< MTUCH0HIZ (Bit 2) */ + #define R_POE3_SPOER_MTUCH0HIZ_Msk (0x4UL) /*!< MTUCH0HIZ (Bitfield-Mask: 0x01) */ +/* ======================================================== POECR1 ========================================================= */ + #define R_POE3_POECR1_MTU0AZE_Pos (0UL) /*!< MTU0AZE (Bit 0) */ + #define R_POE3_POECR1_MTU0AZE_Msk (0x1UL) /*!< MTU0AZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR1_MTU0BZE_Pos (1UL) /*!< MTU0BZE (Bit 1) */ + #define R_POE3_POECR1_MTU0BZE_Msk (0x2UL) /*!< MTU0BZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR1_MTU0CZE_Pos (2UL) /*!< MTU0CZE (Bit 2) */ + #define R_POE3_POECR1_MTU0CZE_Msk (0x4UL) /*!< MTU0CZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR1_MTU0DZE_Pos (3UL) /*!< MTU0DZE (Bit 3) */ + #define R_POE3_POECR1_MTU0DZE_Msk (0x8UL) /*!< MTU0DZE (Bitfield-Mask: 0x01) */ +/* ======================================================== POECR2 ========================================================= */ + #define R_POE3_POECR2_MTU7BDZE_Pos (0UL) /*!< MTU7BDZE (Bit 0) */ + #define R_POE3_POECR2_MTU7BDZE_Msk (0x1UL) /*!< MTU7BDZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR2_MTU7ACZE_Pos (1UL) /*!< MTU7ACZE (Bit 1) */ + #define R_POE3_POECR2_MTU7ACZE_Msk (0x2UL) /*!< MTU7ACZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR2_MTU6BDZE_Pos (2UL) /*!< MTU6BDZE (Bit 2) */ + #define R_POE3_POECR2_MTU6BDZE_Msk (0x4UL) /*!< MTU6BDZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR2_MTU4BDZE_Pos (8UL) /*!< MTU4BDZE (Bit 8) */ + #define R_POE3_POECR2_MTU4BDZE_Msk (0x100UL) /*!< MTU4BDZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR2_MTU4ACZE_Pos (9UL) /*!< MTU4ACZE (Bit 9) */ + #define R_POE3_POECR2_MTU4ACZE_Msk (0x200UL) /*!< MTU4ACZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR2_MTU3BDZE_Pos (10UL) /*!< MTU3BDZE (Bit 10) */ + #define R_POE3_POECR2_MTU3BDZE_Msk (0x400UL) /*!< MTU3BDZE (Bitfield-Mask: 0x01) */ +/* ======================================================== POECR4 ========================================================= */ + #define R_POE3_POECR4_IC2ADDMT34ZE_Pos (2UL) /*!< IC2ADDMT34ZE (Bit 2) */ + #define R_POE3_POECR4_IC2ADDMT34ZE_Msk (0x4UL) /*!< IC2ADDMT34ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_IC3ADDMT34ZE_Pos (3UL) /*!< IC3ADDMT34ZE (Bit 3) */ + #define R_POE3_POECR4_IC3ADDMT34ZE_Msk (0x8UL) /*!< IC3ADDMT34ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_IC4ADDMT34ZE_Pos (4UL) /*!< IC4ADDMT34ZE (Bit 4) */ + #define R_POE3_POECR4_IC4ADDMT34ZE_Msk (0x10UL) /*!< IC4ADDMT34ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_IC5ADDMT34ZE_Pos (5UL) /*!< IC5ADDMT34ZE (Bit 5) */ + #define R_POE3_POECR4_IC5ADDMT34ZE_Msk (0x20UL) /*!< IC5ADDMT34ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_DE0ADDMT34ZE_Pos (6UL) /*!< DE0ADDMT34ZE (Bit 6) */ + #define R_POE3_POECR4_DE0ADDMT34ZE_Msk (0x40UL) /*!< DE0ADDMT34ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_DE1ADDMT34ZE_Pos (7UL) /*!< DE1ADDMT34ZE (Bit 7) */ + #define R_POE3_POECR4_DE1ADDMT34ZE_Msk (0x80UL) /*!< DE1ADDMT34ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_IC1ADDMT67ZE_Pos (9UL) /*!< IC1ADDMT67ZE (Bit 9) */ + #define R_POE3_POECR4_IC1ADDMT67ZE_Msk (0x200UL) /*!< IC1ADDMT67ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_IC3ADDMT67ZE_Pos (11UL) /*!< IC3ADDMT67ZE (Bit 11) */ + #define R_POE3_POECR4_IC3ADDMT67ZE_Msk (0x800UL) /*!< IC3ADDMT67ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_IC4ADDMT67ZE_Pos (12UL) /*!< IC4ADDMT67ZE (Bit 12) */ + #define R_POE3_POECR4_IC4ADDMT67ZE_Msk (0x1000UL) /*!< IC4ADDMT67ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_IC5ADDMT67ZE_Pos (13UL) /*!< IC5ADDMT67ZE (Bit 13) */ + #define R_POE3_POECR4_IC5ADDMT67ZE_Msk (0x2000UL) /*!< IC5ADDMT67ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_DE0ADDMT67ZE_Pos (14UL) /*!< DE0ADDMT67ZE (Bit 14) */ + #define R_POE3_POECR4_DE0ADDMT67ZE_Msk (0x4000UL) /*!< DE0ADDMT67ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR4_DE1ADDMT67ZE_Pos (15UL) /*!< DE1ADDMT67ZE (Bit 15) */ + #define R_POE3_POECR4_DE1ADDMT67ZE_Msk (0x8000UL) /*!< DE1ADDMT67ZE (Bitfield-Mask: 0x01) */ +/* ======================================================== POECR5 ========================================================= */ + #define R_POE3_POECR5_IC1ADDMT0ZE_Pos (1UL) /*!< IC1ADDMT0ZE (Bit 1) */ + #define R_POE3_POECR5_IC1ADDMT0ZE_Msk (0x2UL) /*!< IC1ADDMT0ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR5_IC2ADDMT0ZE_Pos (2UL) /*!< IC2ADDMT0ZE (Bit 2) */ + #define R_POE3_POECR5_IC2ADDMT0ZE_Msk (0x4UL) /*!< IC2ADDMT0ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR5_IC4ADDMT0ZE_Pos (4UL) /*!< IC4ADDMT0ZE (Bit 4) */ + #define R_POE3_POECR5_IC4ADDMT0ZE_Msk (0x10UL) /*!< IC4ADDMT0ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR5_IC5ADDMT0ZE_Pos (5UL) /*!< IC5ADDMT0ZE (Bit 5) */ + #define R_POE3_POECR5_IC5ADDMT0ZE_Msk (0x20UL) /*!< IC5ADDMT0ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR5_DE0ADDMT0ZE_Pos (6UL) /*!< DE0ADDMT0ZE (Bit 6) */ + #define R_POE3_POECR5_DE0ADDMT0ZE_Msk (0x40UL) /*!< DE0ADDMT0ZE (Bitfield-Mask: 0x01) */ + #define R_POE3_POECR5_DE1ADDMT0ZE_Pos (7UL) /*!< DE1ADDMT0ZE (Bit 7) */ + #define R_POE3_POECR5_DE1ADDMT0ZE_Msk (0x80UL) /*!< DE1ADDMT0ZE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR4 ========================================================= */ + #define R_POE3_ICSR4_POE10M_Pos (0UL) /*!< POE10M (Bit 0) */ + #define R_POE3_ICSR4_POE10M_Msk (0x3UL) /*!< POE10M (Bitfield-Mask: 0x03) */ + #define R_POE3_ICSR4_PIE4_Pos (8UL) /*!< PIE4 (Bit 8) */ + #define R_POE3_ICSR4_PIE4_Msk (0x100UL) /*!< PIE4 (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR4_POE10E_Pos (9UL) /*!< POE10E (Bit 9) */ + #define R_POE3_ICSR4_POE10E_Msk (0x200UL) /*!< POE10E (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR4_POE10F_Pos (12UL) /*!< POE10F (Bit 12) */ + #define R_POE3_ICSR4_POE10F_Msk (0x1000UL) /*!< POE10F (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR5 ========================================================= */ + #define R_POE3_ICSR5_POE11M_Pos (0UL) /*!< POE11M (Bit 0) */ + #define R_POE3_ICSR5_POE11M_Msk (0x3UL) /*!< POE11M (Bitfield-Mask: 0x03) */ + #define R_POE3_ICSR5_PIE5_Pos (8UL) /*!< PIE5 (Bit 8) */ + #define R_POE3_ICSR5_PIE5_Msk (0x100UL) /*!< PIE5 (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR5_POE11E_Pos (9UL) /*!< POE11E (Bit 9) */ + #define R_POE3_ICSR5_POE11E_Msk (0x200UL) /*!< POE11E (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR5_POE11F_Pos (12UL) /*!< POE11F (Bit 12) */ + #define R_POE3_ICSR5_POE11F_Msk (0x1000UL) /*!< POE11F (Bitfield-Mask: 0x01) */ +/* ========================================================= ALR1 ========================================================== */ + #define R_POE3_ALR1_OLSG0A_Pos (0UL) /*!< OLSG0A (Bit 0) */ + #define R_POE3_ALR1_OLSG0A_Msk (0x1UL) /*!< OLSG0A (Bitfield-Mask: 0x01) */ + #define R_POE3_ALR1_OLSG0B_Pos (1UL) /*!< OLSG0B (Bit 1) */ + #define R_POE3_ALR1_OLSG0B_Msk (0x2UL) /*!< OLSG0B (Bitfield-Mask: 0x01) */ + #define R_POE3_ALR1_OLSG1A_Pos (2UL) /*!< OLSG1A (Bit 2) */ + #define R_POE3_ALR1_OLSG1A_Msk (0x4UL) /*!< OLSG1A (Bitfield-Mask: 0x01) */ + #define R_POE3_ALR1_OLSG1B_Pos (3UL) /*!< OLSG1B (Bit 3) */ + #define R_POE3_ALR1_OLSG1B_Msk (0x8UL) /*!< OLSG1B (Bitfield-Mask: 0x01) */ + #define R_POE3_ALR1_OLSG2A_Pos (4UL) /*!< OLSG2A (Bit 4) */ + #define R_POE3_ALR1_OLSG2A_Msk (0x10UL) /*!< OLSG2A (Bitfield-Mask: 0x01) */ + #define R_POE3_ALR1_OLSG2B_Pos (5UL) /*!< OLSG2B (Bit 5) */ + #define R_POE3_ALR1_OLSG2B_Msk (0x20UL) /*!< OLSG2B (Bitfield-Mask: 0x01) */ + #define R_POE3_ALR1_OLSEN_Pos (7UL) /*!< OLSEN (Bit 7) */ + #define R_POE3_ALR1_OLSEN_Msk (0x80UL) /*!< OLSEN (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR6 ========================================================= */ + #define R_POE3_ICSR6_OSTSTE_Pos (9UL) /*!< OSTSTE (Bit 9) */ + #define R_POE3_ICSR6_OSTSTE_Msk (0x200UL) /*!< OSTSTE (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR6_OSTSTF_Pos (12UL) /*!< OSTSTF (Bit 12) */ + #define R_POE3_ICSR6_OSTSTF_Msk (0x1000UL) /*!< OSTSTF (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR7 ========================================================= */ + #define R_POE3_ICSR7_DERR0IE_Pos (6UL) /*!< DERR0IE (Bit 6) */ + #define R_POE3_ICSR7_DERR0IE_Msk (0x40UL) /*!< DERR0IE (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR7_DERR1IE_Pos (7UL) /*!< DERR1IE (Bit 7) */ + #define R_POE3_ICSR7_DERR1IE_Msk (0x80UL) /*!< DERR1IE (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR7_DERR0ST_Pos (13UL) /*!< DERR0ST (Bit 13) */ + #define R_POE3_ICSR7_DERR0ST_Msk (0x2000UL) /*!< DERR0ST (Bitfield-Mask: 0x01) */ + #define R_POE3_ICSR7_DERR1ST_Pos (14UL) /*!< DERR1ST (Bit 14) */ + #define R_POE3_ICSR7_DERR1ST_Msk (0x4000UL) /*!< DERR1ST (Bitfield-Mask: 0x01) */ +/* ======================================================== M0SELR1 ======================================================== */ + #define R_POE3_M0SELR1_M0ASEL_Pos (0UL) /*!< M0ASEL (Bit 0) */ + #define R_POE3_M0SELR1_M0ASEL_Msk (0xfUL) /*!< M0ASEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M0SELR1_M0BSEL_Pos (4UL) /*!< M0BSEL (Bit 4) */ + #define R_POE3_M0SELR1_M0BSEL_Msk (0xf0UL) /*!< M0BSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== M0SELR2 ======================================================== */ + #define R_POE3_M0SELR2_M0CSEL_Pos (0UL) /*!< M0CSEL (Bit 0) */ + #define R_POE3_M0SELR2_M0CSEL_Msk (0xfUL) /*!< M0CSEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M0SELR2_M0DSEL_Pos (4UL) /*!< M0DSEL (Bit 4) */ + #define R_POE3_M0SELR2_M0DSEL_Msk (0xf0UL) /*!< M0DSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== M3SELR ========================================================= */ + #define R_POE3_M3SELR_M3BSEL_Pos (0UL) /*!< M3BSEL (Bit 0) */ + #define R_POE3_M3SELR_M3BSEL_Msk (0xfUL) /*!< M3BSEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M3SELR_M3DSEL_Pos (4UL) /*!< M3DSEL (Bit 4) */ + #define R_POE3_M3SELR_M3DSEL_Msk (0xf0UL) /*!< M3DSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== M4SELR1 ======================================================== */ + #define R_POE3_M4SELR1_M4ASEL_Pos (0UL) /*!< M4ASEL (Bit 0) */ + #define R_POE3_M4SELR1_M4ASEL_Msk (0xfUL) /*!< M4ASEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M4SELR1_M4CSEL_Pos (4UL) /*!< M4CSEL (Bit 4) */ + #define R_POE3_M4SELR1_M4CSEL_Msk (0xf0UL) /*!< M4CSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== M4SELR2 ======================================================== */ + #define R_POE3_M4SELR2_M4BSEL_Pos (0UL) /*!< M4BSEL (Bit 0) */ + #define R_POE3_M4SELR2_M4BSEL_Msk (0xfUL) /*!< M4BSEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M4SELR2_M4DSEL_Pos (4UL) /*!< M4DSEL (Bit 4) */ + #define R_POE3_M4SELR2_M4DSEL_Msk (0xf0UL) /*!< M4DSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== M6SELR ========================================================= */ + #define R_POE3_M6SELR_M6BSEL_Pos (0UL) /*!< M6BSEL (Bit 0) */ + #define R_POE3_M6SELR_M6BSEL_Msk (0xfUL) /*!< M6BSEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M6SELR_M6DSEL_Pos (4UL) /*!< M6DSEL (Bit 4) */ + #define R_POE3_M6SELR_M6DSEL_Msk (0xf0UL) /*!< M6DSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== M7SELR1 ======================================================== */ + #define R_POE3_M7SELR1_M7ASEL_Pos (0UL) /*!< M7ASEL (Bit 0) */ + #define R_POE3_M7SELR1_M7ASEL_Msk (0xfUL) /*!< M7ASEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M7SELR1_M7CSEL_Pos (4UL) /*!< M7CSEL (Bit 4) */ + #define R_POE3_M7SELR1_M7CSEL_Msk (0xf0UL) /*!< M7CSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== M7SELR2 ======================================================== */ + #define R_POE3_M7SELR2_M7BSEL_Pos (0UL) /*!< M7BSEL (Bit 0) */ + #define R_POE3_M7SELR2_M7BSEL_Msk (0xfUL) /*!< M7BSEL (Bitfield-Mask: 0x0f) */ + #define R_POE3_M7SELR2_M7DSEL_Pos (4UL) /*!< M7DSEL (Bit 4) */ + #define R_POE3_M7SELR2_M7DSEL_Msk (0xf0UL) /*!< M7DSEL (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ R_POEG0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== POEG0GA ======================================================== */ + #define R_POEG0_POEG0GA_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG0_POEG0GA_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG0_POEG0GA_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG0_POEG0GA_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG0_POEG0GA_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG0_POEG0GA_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG0_POEG0GA_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG0_POEG0GA_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG0_POEG0GA_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_DERR0ST_Pos (24UL) /*!< DERR0ST (Bit 24) */ + #define R_POEG0_POEG0GA_DERR0ST_Msk (0x1000000UL) /*!< DERR0ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_DERR1ST_Pos (25UL) /*!< DERR1ST (Bit 25) */ + #define R_POEG0_POEG0GA_DERR1ST_Msk (0x2000000UL) /*!< DERR1ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_DERR0E_Pos (26UL) /*!< DERR0E (Bit 26) */ + #define R_POEG0_POEG0GA_DERR0E_Msk (0x4000000UL) /*!< DERR0E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_DERR1E_Pos (27UL) /*!< DERR1E (Bit 27) */ + #define R_POEG0_POEG0GA_DERR1E_Msk (0x8000000UL) /*!< DERR1E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG0_POEG0GA_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG0_POEG0GA_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GA_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG0_POEG0GA_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG0GB ======================================================== */ + #define R_POEG0_POEG0GB_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG0_POEG0GB_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG0_POEG0GB_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG0_POEG0GB_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG0_POEG0GB_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG0_POEG0GB_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG0_POEG0GB_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG0_POEG0GB_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG0_POEG0GB_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_DERR0ST_Pos (24UL) /*!< DERR0ST (Bit 24) */ + #define R_POEG0_POEG0GB_DERR0ST_Msk (0x1000000UL) /*!< DERR0ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_DERR1ST_Pos (25UL) /*!< DERR1ST (Bit 25) */ + #define R_POEG0_POEG0GB_DERR1ST_Msk (0x2000000UL) /*!< DERR1ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_DERR0E_Pos (26UL) /*!< DERR0E (Bit 26) */ + #define R_POEG0_POEG0GB_DERR0E_Msk (0x4000000UL) /*!< DERR0E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_DERR1E_Pos (27UL) /*!< DERR1E (Bit 27) */ + #define R_POEG0_POEG0GB_DERR1E_Msk (0x8000000UL) /*!< DERR1E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG0_POEG0GB_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG0_POEG0GB_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GB_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG0_POEG0GB_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG0GC ======================================================== */ + #define R_POEG0_POEG0GC_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG0_POEG0GC_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG0_POEG0GC_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG0_POEG0GC_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG0_POEG0GC_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG0_POEG0GC_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG0_POEG0GC_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG0_POEG0GC_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG0_POEG0GC_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_DERR0ST_Pos (24UL) /*!< DERR0ST (Bit 24) */ + #define R_POEG0_POEG0GC_DERR0ST_Msk (0x1000000UL) /*!< DERR0ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_DERR1ST_Pos (25UL) /*!< DERR1ST (Bit 25) */ + #define R_POEG0_POEG0GC_DERR1ST_Msk (0x2000000UL) /*!< DERR1ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_DERR0E_Pos (26UL) /*!< DERR0E (Bit 26) */ + #define R_POEG0_POEG0GC_DERR0E_Msk (0x4000000UL) /*!< DERR0E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_DERR1E_Pos (27UL) /*!< DERR1E (Bit 27) */ + #define R_POEG0_POEG0GC_DERR1E_Msk (0x8000000UL) /*!< DERR1E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG0_POEG0GC_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG0_POEG0GC_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GC_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG0_POEG0GC_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ +/* ======================================================== POEG0GD ======================================================== */ + #define R_POEG0_POEG0GD_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_POEG0_POEG0GD_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_POEG0_POEG0GD_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_POEG0_POEG0GD_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_POEG0_POEG0GD_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_POEG0_POEG0GD_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_POEG0_POEG0GD_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_POEG0_POEG0GD_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_POEG0_POEG0GD_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_DERR0ST_Pos (24UL) /*!< DERR0ST (Bit 24) */ + #define R_POEG0_POEG0GD_DERR0ST_Msk (0x1000000UL) /*!< DERR0ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_DERR1ST_Pos (25UL) /*!< DERR1ST (Bit 25) */ + #define R_POEG0_POEG0GD_DERR1ST_Msk (0x2000000UL) /*!< DERR1ST (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_DERR0E_Pos (26UL) /*!< DERR0E (Bit 26) */ + #define R_POEG0_POEG0GD_DERR0E_Msk (0x4000000UL) /*!< DERR0E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_DERR1E_Pos (27UL) /*!< DERR1E (Bit 27) */ + #define R_POEG0_POEG0GD_DERR1E_Msk (0x8000000UL) /*!< DERR1E (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_POEG0_POEG0GD_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_POEG0_POEG0GD_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_POEG0_POEG0GD_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_POEG0_POEG0GD_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_DSMIF0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== DSSEICR ======================================================== */ + #define R_DSMIF0_DSSEICR_ISEL_Pos (0UL) /*!< ISEL (Bit 0) */ + #define R_DSMIF0_DSSEICR_ISEL_Msk (0x1UL) /*!< ISEL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSSEICR_ISEH_Pos (1UL) /*!< ISEH (Bit 1) */ + #define R_DSMIF0_DSSEICR_ISEH_Msk (0x2UL) /*!< ISEH (Bitfield-Mask: 0x01) */ +/* ======================================================== DSSECSR ======================================================== */ + #define R_DSMIF0_DSSECSR_SEDM_Pos (0UL) /*!< SEDM (Bit 0) */ + #define R_DSMIF0_DSSECSR_SEDM_Msk (0x7UL) /*!< SEDM (Bitfield-Mask: 0x07) */ +/* ======================================================== DSSELTR ======================================================== */ + #define R_DSMIF0_DSSELTR_SCMPTBL_Pos (0UL) /*!< SCMPTBL (Bit 0) */ + #define R_DSMIF0_DSSELTR_SCMPTBL_Msk (0x3ffffUL) /*!< SCMPTBL (Bitfield-Mask: 0x3ffff) */ +/* ======================================================== DSSEHTR ======================================================== */ + #define R_DSMIF0_DSSEHTR_SCMPTBH_Pos (0UL) /*!< SCMPTBH (Bit 0) */ + #define R_DSMIF0_DSSEHTR_SCMPTBH_Msk (0x3ffffUL) /*!< SCMPTBH (Bitfield-Mask: 0x3ffff) */ +/* ======================================================== DSSECR ========================================================= */ + #define R_DSMIF0_DSSECR_SEEL_Pos (0UL) /*!< SEEL (Bit 0) */ + #define R_DSMIF0_DSSECR_SEEL_Msk (0x1UL) /*!< SEEL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSSECR_SEEH_Pos (1UL) /*!< SEEH (Bit 1) */ + #define R_DSMIF0_DSSECR_SEEH_Msk (0x2UL) /*!< SEEH (Bitfield-Mask: 0x01) */ +/* ======================================================== DSSECDR ======================================================== */ + #define R_DSMIF0_DSSECDR_SECDR_Pos (0UL) /*!< SECDR (Bit 0) */ + #define R_DSMIF0_DSSECDR_SECDR_Msk (0xffffUL) /*!< SECDR (Bitfield-Mask: 0xffff) */ +/* ======================================================= DSCSTRTR ======================================================== */ + #define R_DSMIF0_DSCSTRTR_STRTRG0_Pos (0UL) /*!< STRTRG0 (Bit 0) */ + #define R_DSMIF0_DSCSTRTR_STRTRG0_Msk (0x1UL) /*!< STRTRG0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSTRTR_STRTRG1_Pos (1UL) /*!< STRTRG1 (Bit 1) */ + #define R_DSMIF0_DSCSTRTR_STRTRG1_Msk (0x2UL) /*!< STRTRG1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSTRTR_STRTRG2_Pos (2UL) /*!< STRTRG2 (Bit 2) */ + #define R_DSMIF0_DSCSTRTR_STRTRG2_Msk (0x4UL) /*!< STRTRG2 (Bitfield-Mask: 0x01) */ +/* ======================================================= DSCSTPTR ======================================================== */ + #define R_DSMIF0_DSCSTPTR_STPTRG0_Pos (0UL) /*!< STPTRG0 (Bit 0) */ + #define R_DSMIF0_DSCSTPTR_STPTRG0_Msk (0x1UL) /*!< STPTRG0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSTPTR_STPTRG1_Pos (1UL) /*!< STPTRG1 (Bit 1) */ + #define R_DSMIF0_DSCSTPTR_STPTRG1_Msk (0x2UL) /*!< STPTRG1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSTPTR_STPTRG2_Pos (2UL) /*!< STPTRG2 (Bit 2) */ + #define R_DSMIF0_DSCSTPTR_STPTRG2_Msk (0x4UL) /*!< STPTRG2 (Bitfield-Mask: 0x01) */ +/* ======================================================== DSCESR ========================================================= */ + #define R_DSMIF0_DSCESR_OCFL0_Pos (0UL) /*!< OCFL0 (Bit 0) */ + #define R_DSMIF0_DSCESR_OCFL0_Msk (0x1UL) /*!< OCFL0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_OCFL1_Pos (1UL) /*!< OCFL1 (Bit 1) */ + #define R_DSMIF0_DSCESR_OCFL1_Msk (0x2UL) /*!< OCFL1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_OCFL2_Pos (2UL) /*!< OCFL2 (Bit 2) */ + #define R_DSMIF0_DSCESR_OCFL2_Msk (0x4UL) /*!< OCFL2 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_OCFH0_Pos (4UL) /*!< OCFH0 (Bit 4) */ + #define R_DSMIF0_DSCESR_OCFH0_Msk (0x10UL) /*!< OCFH0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_OCFH1_Pos (5UL) /*!< OCFH1 (Bit 5) */ + #define R_DSMIF0_DSCESR_OCFH1_Msk (0x20UL) /*!< OCFH1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_OCFH2_Pos (6UL) /*!< OCFH2 (Bit 6) */ + #define R_DSMIF0_DSCESR_OCFH2_Msk (0x40UL) /*!< OCFH2 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_SCF0_Pos (8UL) /*!< SCF0 (Bit 8) */ + #define R_DSMIF0_DSCESR_SCF0_Msk (0x100UL) /*!< SCF0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_SCF1_Pos (9UL) /*!< SCF1 (Bit 9) */ + #define R_DSMIF0_DSCESR_SCF1_Msk (0x200UL) /*!< SCF1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_SCF2_Pos (10UL) /*!< SCF2 (Bit 10) */ + #define R_DSMIF0_DSCESR_SCF2_Msk (0x400UL) /*!< SCF2 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_SUMERRL_Pos (16UL) /*!< SUMERRL (Bit 16) */ + #define R_DSMIF0_DSCESR_SUMERRL_Msk (0x10000UL) /*!< SUMERRL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESR_SUMERRH_Pos (17UL) /*!< SUMERRH (Bit 17) */ + #define R_DSMIF0_DSCESR_SUMERRH_Msk (0x20000UL) /*!< SUMERRH (Bitfield-Mask: 0x01) */ +/* ========================================================= DSCSR ========================================================= */ + #define R_DSMIF0_DSCSR_DUF0_Pos (0UL) /*!< DUF0 (Bit 0) */ + #define R_DSMIF0_DSCSR_DUF0_Msk (0x1UL) /*!< DUF0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSR_DUF1_Pos (1UL) /*!< DUF1 (Bit 1) */ + #define R_DSMIF0_DSCSR_DUF1_Msk (0x2UL) /*!< DUF1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSR_DUF2_Pos (2UL) /*!< DUF2 (Bit 2) */ + #define R_DSMIF0_DSCSR_DUF2_Msk (0x4UL) /*!< DUF2 (Bitfield-Mask: 0x01) */ +/* ======================================================== DSCSSR ========================================================= */ + #define R_DSMIF0_DSCSSR_CHSTATE0_Pos (0UL) /*!< CHSTATE0 (Bit 0) */ + #define R_DSMIF0_DSCSSR_CHSTATE0_Msk (0x1UL) /*!< CHSTATE0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSSR_CHSTATE1_Pos (4UL) /*!< CHSTATE1 (Bit 4) */ + #define R_DSMIF0_DSCSSR_CHSTATE1_Msk (0x10UL) /*!< CHSTATE1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSSR_CHSTATE2_Pos (8UL) /*!< CHSTATE2 (Bit 8) */ + #define R_DSMIF0_DSCSSR_CHSTATE2_Msk (0x100UL) /*!< CHSTATE2 (Bitfield-Mask: 0x01) */ +/* ======================================================== DSCESCR ======================================================== */ + #define R_DSMIF0_DSCESCR_CLROCFL0_Pos (0UL) /*!< CLROCFL0 (Bit 0) */ + #define R_DSMIF0_DSCESCR_CLROCFL0_Msk (0x1UL) /*!< CLROCFL0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLROCFL1_Pos (1UL) /*!< CLROCFL1 (Bit 1) */ + #define R_DSMIF0_DSCESCR_CLROCFL1_Msk (0x2UL) /*!< CLROCFL1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLROCFL2_Pos (2UL) /*!< CLROCFL2 (Bit 2) */ + #define R_DSMIF0_DSCESCR_CLROCFL2_Msk (0x4UL) /*!< CLROCFL2 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLROCFH0_Pos (4UL) /*!< CLROCFH0 (Bit 4) */ + #define R_DSMIF0_DSCESCR_CLROCFH0_Msk (0x10UL) /*!< CLROCFH0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLROCFH1_Pos (5UL) /*!< CLROCFH1 (Bit 5) */ + #define R_DSMIF0_DSCESCR_CLROCFH1_Msk (0x20UL) /*!< CLROCFH1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLROCFH2_Pos (6UL) /*!< CLROCFH2 (Bit 6) */ + #define R_DSMIF0_DSCESCR_CLROCFH2_Msk (0x40UL) /*!< CLROCFH2 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLRSCF0_Pos (8UL) /*!< CLRSCF0 (Bit 8) */ + #define R_DSMIF0_DSCESCR_CLRSCF0_Msk (0x100UL) /*!< CLRSCF0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLRSCF1_Pos (9UL) /*!< CLRSCF1 (Bit 9) */ + #define R_DSMIF0_DSCESCR_CLRSCF1_Msk (0x200UL) /*!< CLRSCF1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLRSCF2_Pos (10UL) /*!< CLRSCF2 (Bit 10) */ + #define R_DSMIF0_DSCESCR_CLRSCF2_Msk (0x400UL) /*!< CLRSCF2 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLRSUMERRL_Pos (16UL) /*!< CLRSUMERRL (Bit 16) */ + #define R_DSMIF0_DSCESCR_CLRSUMERRL_Msk (0x10000UL) /*!< CLRSUMERRL (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCESCR_CLRSUMERRH_Pos (17UL) /*!< CLRSUMERRH (Bit 17) */ + #define R_DSMIF0_DSCESCR_CLRSUMERRH_Msk (0x20000UL) /*!< CLRSUMERRH (Bitfield-Mask: 0x01) */ +/* ======================================================== DSCSCR ========================================================= */ + #define R_DSMIF0_DSCSCR_CLRDUF0_Pos (0UL) /*!< CLRDUF0 (Bit 0) */ + #define R_DSMIF0_DSCSCR_CLRDUF0_Msk (0x1UL) /*!< CLRDUF0 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSCR_CLRDUF1_Pos (1UL) /*!< CLRDUF1 (Bit 1) */ + #define R_DSMIF0_DSCSCR_CLRDUF1_Msk (0x2UL) /*!< CLRDUF1 (Bitfield-Mask: 0x01) */ + #define R_DSMIF0_DSCSCR_CLRDUF2_Pos (2UL) /*!< CLRDUF2 (Bit 2) */ + #define R_DSMIF0_DSCSCR_CLRDUF2_Msk (0x4UL) /*!< CLRDUF2 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_GSC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CNTCR ========================================================= */ + #define R_GSC_CNTCR_EN_Pos (0UL) /*!< EN (Bit 0) */ + #define R_GSC_CNTCR_EN_Msk (0x1UL) /*!< EN (Bitfield-Mask: 0x01) */ + #define R_GSC_CNTCR_HDBG_Pos (1UL) /*!< HDBG (Bit 1) */ + #define R_GSC_CNTCR_HDBG_Msk (0x2UL) /*!< HDBG (Bitfield-Mask: 0x01) */ +/* ========================================================= CNTSR ========================================================= */ + #define R_GSC_CNTSR_DBGH_Pos (1UL) /*!< DBGH (Bit 1) */ + #define R_GSC_CNTSR_DBGH_Msk (0x2UL) /*!< DBGH (Bitfield-Mask: 0x01) */ +/* ======================================================== CNTCVL ========================================================= */ + #define R_GSC_CNTCVL_CNTCVL_L_32_Pos (0UL) /*!< CNTCVL_L_32 (Bit 0) */ + #define R_GSC_CNTCVL_CNTCVL_L_32_Msk (0xffffffffUL) /*!< CNTCVL_L_32 (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CNTCVU ========================================================= */ + #define R_GSC_CNTCVU_CNTCVU_U_32_Pos (0UL) /*!< CNTCVU_U_32 (Bit 0) */ + #define R_GSC_CNTCVU_CNTCVU_U_32_Msk (0xffffffffUL) /*!< CNTCVU_U_32 (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CNTFID0 ======================================================== */ + #define R_GSC_CNTFID0_FREQ_Pos (0UL) /*!< FREQ (Bit 0) */ + #define R_GSC_CNTFID0_FREQ_Msk (0xffffffffUL) /*!< FREQ (Bitfield-Mask: 0xffffffff) */ + +/** @} */ /* End of group PosMask_peripherals */ + + #ifdef __cplusplus +} + #endif + +#endif /* R9A07G084_H */ + +/** @} */ /* End of group R9A07G084 */ + +/** @} */ /* End of group Renesas Electronics Corporation */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h new file mode 100644 index 00000000000..5e369f1b4ee --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h @@ -0,0 +1,131 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/* Ensure Renesas MCU variation definitions are included to ensure MCU + * specific register variations are handled correctly. */ +#ifndef BSP_FEATURE_H + #error "INTERNAL ERROR: bsp_feature.h must be included before renesas.h." +#endif + +/** @addtogroup Renesas Electronics Corporation + * @{ + */ + +/** @addtogroup RZN2 + * @{ + */ + +#ifndef RZN2_H + #define RZN2_H + + #ifdef __cplusplus +extern "C" { + #endif + +/* Define compiler macros for CPU architecture, used in CMSIS 5. */ + #if defined(__ICCARM__) + #if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ + +/* Macros already defined */ + #else + #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' + #if __ARM_ARCH == 6 + #define __ARM_ARCH_6M__ 1 + #elif __ARM_ARCH == 7 + #if __ARM_FEATURE_DSP + #define __ARM_ARCH_7EM__ 1 + #else + #define __ARM_ARCH_7M__ 1 + #endif + #endif /* __ARM_ARCH */ + #endif /* __ARM_ARCH_PROFILE == 'M' */ + #endif + +/* Alternative core deduction for older ICCARM's */ + #if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ + !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) + #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) + #define __ARM_ARCH_6M__ 1 + #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) + #define __ARM_ARCH_7M__ 1 + #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) + #define __ARM_ARCH_7EM__ 1 + #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8R__) && (__CORE__ == __ARM8R__) + #define __ARM_ARCH_8R__ 1 + #else + #error "Unknown target." + #endif + #endif + #endif + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ +/* IRQn_Type is generated as part of an FSP project. It can be found in vector_data.h. */ + +/** @} */ /* End of group Configuration_of_CMSIS */ + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + + #if __ARM_ARCH_7EM__ + #define RENESAS_CORTEX_M4 + #elif __ARM_ARCH_6M__ + #define RENESAS_CORTEX_M0PLUS + #elif __ARM_ARCH_8M_BASE__ + #define RENESAS_CORTEX_M23 + #elif __ARM_ARCH_8M_MAIN__ + #define RENESAS_CORTEX_M33 + #elif __ARM_ARCH_8R__ + #define RENESAS_CORTEX_R52 + #else + #warning Unsupported Architecture + #endif + + #if BSP_MCU_GROUP_RZN2L + #include "R9A07G084.h" + #else + #warning Unsupported MCU + #endif + + #ifdef __cplusplus +} + #endif + +#endif /* RZN2_H */ + +/** @} */ /* End of group RZN2 */ + +/** @} */ /* End of group Renesas Electronics Corporation */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h new file mode 100644 index 00000000000..2fafe6c0f68 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h @@ -0,0 +1,58 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef SYSTEM_RENESAS_ARM_H + #define SYSTEM_RENESAS_ARM_H + + #ifdef __cplusplus +extern "C" { + #endif + + #include + +extern uint32_t SystemCoreClock; /** System Clock Frequency (Core Clock) */ + +/** + * Initialize the system + * + * @param none + * @return none + * + * @brief Setup the microcontroller system. + * Initialize the System and update the SystemCoreClock variable. + */ +extern void SystemInit(void); + +/** + * Update SystemCoreClock variable + * + * @param none + * @return none + * + * @brief Updates the SystemCoreClock with current core Clock + * retrieved from cpu registers. + */ +extern void SystemCoreClockUpdate(void); + + #ifdef __cplusplus +} + #endif + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/startup_core.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/startup_core.c new file mode 100644 index 00000000000..3347ca1d085 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/startup_core.c @@ -0,0 +1,364 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_HACTLR_BIT_L (0xB783) /* HACTLR EL1 access enable(0b1011 0111 1000 0011) */ +#define BSP_HCR_HCD_DISABLE (0x20000000) /* HCR.HCD = 1 : HVC disable */ +#define BSP_MODE_MASK (0x1F) /* Bit mask for mode bits in CPSR */ +#define BSP_SVC_MODE (0x13) /* Supervisor mode */ + +#if defined(__ICCARM__) + #define BSP_IRQ_STACK_END_ADDRESS __section_end(".irq_stack") + #define BSP_FIQ_STACK_END_ADDRESS __section_end(".fiq_stack") + #define BSP_SVC_STACK_END_ADDRESS __section_end(".svc_stack") + #define BSP_ABORT_STACK_END_ADDRESS __section_end(".abt_stack") + #define BSP_UNDEFINED_STACK_END_ADDRESS __section_end(".und_stack") + #define BSP_SYSTEM_STACK_END_ADDRESS __section_end(".sys_stack") + +#elif defined(__GNUC__) + #define BSP_IRQ_STACK_END_ADDRESS &__IrqStackLimit + #define BSP_FIQ_STACK_END_ADDRESS &__FiqStackLimit + #define BSP_SVC_STACK_END_ADDRESS &__SvcStackLimit + #define BSP_ABORT_STACK_END_ADDRESS &__AbtStackLimit + #define BSP_UNDEFINED_STACK_END_ADDRESS &__UndStackLimit + #define BSP_SYSTEM_STACK_END_ADDRESS &__SysStackLimit + +#endif + +#define BSP_IMP_BTCMREGIONR_MASK_L (0x1FFC) /* Masked out BASEADDRESS and ENABLEELx bits(L) */ +#define BSP_IMP_BTCMREGIONR_ENABLEEL_L (0x0003) /* Set base address and enable EL2, EL1, EL0 access(L) */ +#define BSP_IMP_BTCMREGIONR_ENABLEEL_H (0x0010) /* Set base address and enable EL2, EL1, EL0 access(H) */ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +#if defined(__ICCARM__) + #pragma section=".irq_stack" + #pragma section=".fiq_stack" + #pragma section=".svc_stack" + #pragma section=".abt_stack" + #pragma section=".und_stack" + #pragma section=".sys_stack" + +#elif defined(__GNUC__) +extern void * __IrqStackLimit; +extern void * __FiqStackLimit; +extern void * __SvcStackLimit; +extern void * __AbtStackLimit; +extern void * __UndStackLimit; +extern void * __SysStackLimit; + +#endif + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#if __FPU_USED +extern void bsp_fpu_advancedsimd_init(void); + +#endif + +extern void bsp_slavetcm_enable(void); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +int32_t main(void); + +BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void system_init(void) BSP_PLACE_IN_SECTION(".loader_text"); +BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void stack_init(void); +BSP_TARGET_ARM void fpu_slavetcm_init(void); + +BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void __Vectors(void) BSP_PLACE_IN_SECTION(".intvec"); +__WEAK BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void IRQ_Handler(void); +__WEAK BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void Reset_Handler(void) BSP_PLACE_IN_SECTION(".reset_handler"); + +void Default_Handler(void); + +/* Stacks */ +BSP_DONT_REMOVE static uint8_t g_fiq_stack[BSP_CFG_STACK_FIQ_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) +BSP_PLACE_IN_SECTION(BSP_SECTION_FIQ_STACK); +BSP_DONT_REMOVE static uint8_t g_irq_stack[BSP_CFG_STACK_IRQ_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) +BSP_PLACE_IN_SECTION(BSP_SECTION_IRQ_STACK); +BSP_DONT_REMOVE static uint8_t g_abt_stack[BSP_CFG_STACK_ABT_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) +BSP_PLACE_IN_SECTION(BSP_SECTION_ABT_STACK); +BSP_DONT_REMOVE static uint8_t g_und_stack[BSP_CFG_STACK_UND_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) +BSP_PLACE_IN_SECTION(BSP_SECTION_UND_STACK); +BSP_DONT_REMOVE static uint8_t g_sys_stack[BSP_CFG_STACK_SYS_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) +BSP_PLACE_IN_SECTION(BSP_SECTION_SYS_STACK); +BSP_DONT_REMOVE static uint8_t g_svc_stack[BSP_CFG_STACK_SVC_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) +BSP_PLACE_IN_SECTION(BSP_SECTION_SVC_STACK); + +/* Heap */ +#if (BSP_CFG_HEAP_BYTES > 0) + +BSP_DONT_REMOVE static uint8_t g_heap[BSP_CFG_HEAP_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) \ + BSP_PLACE_IN_SECTION(BSP_SECTION_HEAP); +#endif + +#if defined(__GNUC__) +BSP_DONT_REMOVE static const void * g_bsp_dummy BSP_PLACE_IN_SECTION(".dummy"); + + #if BSP_CFG_RAM_EXECUTION +BSP_DONT_REMOVE static const void * g_bsp_loader_dummy BSP_PLACE_IN_SECTION(".loader_dummy"); + + #endif +#endif + +BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void __Vectors (void) +{ + __asm volatile ( + " LDR pc,=Reset_Handler \n" + " LDR pc,=Undefined_Handler \n" + " LDR pc,=SVC_Handler \n" + " LDR pc,=Prefetch_Handler \n" + " LDR pc,=Abort_Handler \n" + " LDR pc,=Reserved_Handler \n" + " LDR pc,=IRQ_Handler \n" + " LDR pc,=FIQ_Handler \n" + ::: "memory"); +} + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Default exception handler. + **********************************************************************************************************************/ +void Default_Handler (void) +{ + /** A error has occurred. The user will need to investigate the cause. Common problems are stack corruption + * or use of an invalid pointer. Use the Fault Status window in e2 studio or manually check the fault status + * registers for more information. + */ + BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(0); +} + +/*******************************************************************************************************************//** + * After boot processing, LSI starts executing here. + **********************************************************************************************************************/ +BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void system_init (void) +{ + __asm volatile ( + "set_hactlr: \n" + " MOVW r0, %[bsp_hactlr_bit_l] \n" /* Set HACTLR bits(L) */ + " MOVT r0, #0 \n" + " MCR p15, #4, r0, c1, c0, #1 \n" /* Write r0 to HACTLR */ + ::[bsp_hactlr_bit_l] "i" (BSP_HACTLR_BIT_L) : "memory"); + + __asm volatile ( + "set_hcr: \n" + " MRC p15, #4, r1, c1, c1, #0 \n" /* Read Hyp Configuration Register */ + " ORR r1, r1, %[bsp_hcr_hcd_disable] \n" /* HVC instruction disable */ + " MCR p15, #4, r1, c1, c1, #0 \n" /* Write Hyp Configuration Register */ + ::[bsp_hcr_hcd_disable] "i" (BSP_HCR_HCD_DISABLE) : "memory"); + + __asm volatile ( + "set_vbar: \n" + " LDR r0, =__Vectors \n" + " MCR p15, #0, r0, c12, c0, #0 \n" /* Write r0 to VBAR */ + ::: "memory"); + + __asm volatile ( + "LLPP_access_enable: \n" + + /* Enable PERIPHPREGIONR (LLPP) */ + " MRC p15, #0, r1, c15, c0,#0 \n" /* PERIPHPREGIONR */ + " ORR r1, r1, #(0x1 << 1) \n" /* Enable PERIPHPREGIONR EL2 */ + " ORR r1, r1, #(0x1) \n" /* Enable PERIPHPREGIONR EL1 and EL0 */ + " DSB \n" /* Ensuring memory access complete */ + " MCR p15, #0, r1, c15, c0,#0 \n" /* PERIPHREGIONR */ + " ISB \n" /* Ensuring Context-changing */ + ::: "memory"); + + __asm volatile ( + "cpsr_save: \n" + " MRS r0, CPSR \n" /* Original PSR value */ + " BIC r0, r0, %[bsp_mode_mask] \n" /* Clear the mode bits */ + " ORR r0, r0, %[bsp_svc_mode] \n" /* Set SVC mode bits */ + " MSR SPSR_hyp, r0 \n" + ::[bsp_mode_mask] "i" (BSP_MODE_MASK), [bsp_svc_mode] "i" (BSP_SVC_MODE) : "memory"); + + __asm volatile ( + "exception_return: \n" + " LDR r1, =stack_init \n" + " MSR ELR_hyp, r1 \n" + " ERET \n" /* Branch to stack_init and enter EL1 */ + ::: "memory"); +} + +/** @} (end addtogroup BSP_MCU) */ + +#if defined(__ICCARM__) + #define BSP_SYSTEMINIT_B_INSTRUCTION SystemInit(); + + #define WEAK_REF_ATTRIBUTE + + #pragma weak Undefined_Handler = Default_Handler + #pragma weak SVC_Handler = Default_Handler + #pragma weak Prefetch_Handler = Default_Handler + #pragma weak Abort_Handler = Default_Handler + #pragma weak Reserved_Handler = Default_Handler + #pragma weak FIQ_Handler = Default_Handler +#elif defined(__GNUC__) + + #define BSP_SYSTEMINIT_B_INSTRUCTION __asm volatile ("B SystemInit"); + + #define WEAK_REF_ATTRIBUTE __attribute__((weak, alias("Default_Handler"))) +#endif + +void Undefined_Handler(void) WEAK_REF_ATTRIBUTE; +void SVC_Handler(void) WEAK_REF_ATTRIBUTE; +void Prefetch_Handler(void) WEAK_REF_ATTRIBUTE; +void Abort_Handler(void) WEAK_REF_ATTRIBUTE; +void Reserved_Handler(void) WEAK_REF_ATTRIBUTE; +void FIQ_Handler(void) WEAK_REF_ATTRIBUTE; + +/*******************************************************************************************************************//** + * After system_init, EL1 settings start here. + **********************************************************************************************************************/ +BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void stack_init (void) +{ + __asm volatile ( + "stack_initialization: \n" + + /* Stack setting for EL1 */ + " CPS #17 \n" /* FIQ mode */ + " MOV sp, %[bsp_fiq_stack_end_address] \n" + " CPS #18 \n" /* IRQ mode */ + " MOV sp, %[bsp_irq_stack_end_address] \n" + " CPS #23 \n" /* Abort mode */ + " MOV sp, %[bsp_abort_stack_end_address] \n" + " CPS #27 \n" /* Undefined mode */ + " MOV sp, %[bsp_undefined_stack_end_address] \n" + " CPS #31 \n" /* System mode */ + " MOV sp, %[bsp_system_stack_end_address] \n" + " CPS #19 \n" /* SVC mode */ + " MOV sp, %[bsp_svc_stack_end_address] \n" + + " B fpu_slavetcm_init \n" /* Branch to fpu_slavetcm_init */ + ::[bsp_fiq_stack_end_address] "r" (BSP_FIQ_STACK_END_ADDRESS), + [bsp_irq_stack_end_address] "r" (BSP_IRQ_STACK_END_ADDRESS), + [bsp_abort_stack_end_address] "r" (BSP_ABORT_STACK_END_ADDRESS), + [bsp_undefined_stack_end_address] "r" (BSP_UNDEFINED_STACK_END_ADDRESS), + [bsp_system_stack_end_address] "r" (BSP_SYSTEM_STACK_END_ADDRESS), + [bsp_svc_stack_end_address] "r" (BSP_SVC_STACK_END_ADDRESS) : "memory"); +} + +/*******************************************************************************************************************//** + * Enable FPU and enable privileged/unprivileged access for TCM. + **********************************************************************************************************************/ +BSP_TARGET_ARM void fpu_slavetcm_init (void) +{ +#if __FPU_USED + + /* Initialize FPU and Advanced SIMD setting */ + bsp_fpu_advancedsimd_init(); +#endif + + /* Enable SLAVEPCTLR TCM access lvl slaves */ + bsp_slavetcm_enable(); + + BSP_SYSTEMINIT_B_INSTRUCTION +} + +__WEAK BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void IRQ_Handler (void) +{ + __asm volatile ( + "SUB lr, lr, #4 \n" + "SRSDB sp!, #31 \n" /* Store LR_irq and SPSR_irq in system mode stack. */ + "CPS #31 \n" /* Switch to system mode. */ + "PUSH {r0-r3, r12} \n" /* Store other AAPCS registers. */ + +#if __FPU_USED + "VMRS r0, FPSCR \n" + "STMDB sp!, {r0} \n" /* Store FPSCR register. */ + "SUB sp, sp, #4 \n" + "VPUSH {d0-d15} \n" /* Store FPU registers. */ + "VPUSH {d16-d31} \n" /* Store FPU registers. */ +#endif + + "MRC p15, #0, r3, c12, c12, #2 \n" /* Read HPPIR1 to r3. */ + "MRC p15, #0, r0, c12, c12, #0 \n" /* Read IAR1 to r0. */ + + "PUSH {r0} \n" /* Store the INTID. */ + "MOV r1, sp \n" /* Make alignment for stack. */ + "AND r1, r1, #4 \n" + "SUB sp, sp, r1 \n" + "PUSH {r1, lr} \n" + + "LDR r1,=bsp_common_interrupt_handler \n" + "BLX r1 \n" /* Jump to bsp_common_interrupt_handler, First argument (r0) = ICC_IAR1 read value. */ + + "POP {r1, lr} \n" + "ADD sp, sp, r1 \n" + "POP {r0} \n" /* Restore the INTID to r0. */ + + "MCR p15, #0, r0, c12, c12, #1 \n" /* Write INTID to EOIR. */ + +#if __FPU_USED + "VPOP {d16-d31} \n" /* Restore FPU registers. */ + "VPOP {d0-d15} \n" /* Restore FPU registers. */ + "ADD sp, sp, #4 \n" + "POP {r0} \n" + "VMSR FPSCR, r0 \n" /* Restore FPSCR register. */ +#endif + + "POP {r0-r3, r12} \n" /* Restore registers. */ + "RFEIA sp! \n" /* Return from system mode tack using RFE. */ + ::: "memory"); +} + +__WEAK BSP_TARGET_ARM BSP_ATTRIBUTE_STACKLESS void Reset_Handler (void) +{ + /* Enable access to BTCM */ + __asm volatile ( + "set_IMP_BTCMREGIONR: \n" + " MRC p15, #0, r0, c9, c1, #1 \n" /* Read IMP_BTCMREGIONR to r0 */ + " MOVW r1, %[bsp_imp_btcmregionr_mask_l] \n" + " MOVT r1, #0 \n" + " AND r0, r0, r1 \n" /* Masked out BASEADDRESS and ENABLEELx bits */ + " MOVW r1, %[bsp_imp_btcmregionr_enableel_l] \n" + " MOVT r1, %[bsp_imp_btcmregionr_enableel_h] \n" + " ORR r0, r0, r1 \n" /* Set base address and enable EL2, EL1, EL0 access */ + " DSB \n" /* Ensuring memory access complete */ + + " MCR p15, #0, r0, c9, c1, #1 \n" /* Write r0 to IMP_BTCMREGIONR */ + " ISB \n" /* Ensuring Context-changing */ + ::[bsp_imp_btcmregionr_mask_l] "i" (BSP_IMP_BTCMREGIONR_MASK_L), + [bsp_imp_btcmregionr_enableel_l] "i" (BSP_IMP_BTCMREGIONR_ENABLEEL_L), + [bsp_imp_btcmregionr_enableel_h] "i" (BSP_IMP_BTCMREGIONR_ENABLEEL_H) : "memory"); + + /* Branch to system_init */ + __asm volatile ("B system_init"); +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/system_core.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/system_core.c new file mode 100644 index 00000000000..cc47895c3f8 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/cr/system_core.c @@ -0,0 +1,617 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include +#include "bsp_api.h" + +#include "../../../../../mcu/all/bsp_clocks.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_CPCAR_CP_ENABLE (0x00F00000) +#define BSP_FPEXC_EN_ENABLE (0x40000000) +#define BSP_TCM_ALL_ACCESS_ENABLE (0x00000003) + +#define BSP_PRIORITY_MASK BSP_FEATURE_BSP_IRQ_PRIORITY_MASK /* Priority mask value for GIC */ +#define BSP_ENABLE_GROUP_INT (0x00000001) /* Enable Group1 interrupt value */ +#define BSP_ICC_CTLR (0x00000001) /* ICC_BPR0 is used for Group1 interrupt */ + +#define BSP_BG_REGION_ENABLE (0x00020000) /* Enable EL1 background region */ +#define BSP_BG_REGION_DISABLE (0x00000000) /* Disable EL1 background region */ +#define BSP_SCTLR_BR_BIT (BSP_CFG_SCTLR_BR_BIT) /* Enable EL1 background region */ + +#define BSP_ICACHE_ENABLE (0x00001000) +#define BSP_ICACHE_DISABLE (0x00000000) + +#define BSP_DATACACHE_ENABLE (0x00000004) +#define BSP_DATACACHE_DISABLE (0x00000000) + +#define BSP_WRITE_THROUGH_TRANSIENT (0x0003) /* Normal-Memory: Write-Through transient */ +#define BSP_NON_CACHEABLE (0x0004) /* Normal-Memory: Non-Cacheable */ +#define BSP_WRITE_BACK_TRANSIENT (0x0007) /* Normal-Memory: Write-Back transient */ +#define BSP_WRITE_NON_THROUGH (0x000B) /* Normal-Memory: Write-Through non-transient. */ +#define BSP_WRITE_BACK_NON_TRANSIENT (0x000F) /* Normal-Memory: Write-Back non-transient. */ + +#define BSP_TYPE_NORMAL_MEMORY (0) +#define BSP_TYPE_DEVICE_MEMORY (1) + +#define BSP_READ_ALLOCATE (0xFFFF) /* Read allocate (bit1=1, "1" mask except bit1) */ +#define BSP_READ_NOT_ALLOCATE (0xFFFD) /* Read not allocate (bit1=0, "1" mask except bit1) */ +#define BSP_WRITE_ALLOCATE (0xFFFF) /* Write allocate (bit0=1, "1" mask except bit0) */ +#define BSP_WRITE_NOT_ALLOCATE (0xFFFE) /* Write not allocate (bit0=0, "1" mask except bit0) */ + +#define BSP_DEVICE_NGNRNE (0x0000) /* Device-nGnRnE memory */ +#define BSP_DEVICE_NGNRE (0x0004) /* Device-nGnRE memory */ +#define BSP_DEVICE_NGRE (0x0008) /* Device-nGRE memory */ +#define BSP_DEVICE_GRE (0x000C) /* Device-GRE memory */ + +#define BSP_OFFSET_ATTR0_INNER (0) +#define BSP_OFFSET_ATTR0_OUTER (4) +#define BSP_OFFSET_ATTR0_DEVICE (0) +#define BSP_OFFSET_ATTR1_INNER (8) +#define BSP_OFFSET_ATTR1_OUTER (12) +#define BSP_OFFSET_ATTR1_DEVICE (8) + +#define BSP_OFFSET_ATTR2_INNER (16) +#define BSP_OFFSET_ATTR2_OUTER (20) +#define BSP_OFFSET_ATTR2_DEVICE (16) +#define BSP_OFFSET_ATTR3_INNER (24) +#define BSP_OFFSET_ATTR3_OUTER (28) +#define BSP_OFFSET_ATTR3_DEVICE (24) + +#define BSP_OFFSET_ATTR4_INNER (0) +#define BSP_OFFSET_ATTR4_OUTER (4) +#define BSP_OFFSET_ATTR4_DEVICE (0) +#define BSP_OFFSET_ATTR5_INNER (8) +#define BSP_OFFSET_ATTR5_OUTER (12) +#define BSP_OFFSET_ATTR5_DEVICE (8) + +#define BSP_OFFSET_ATTR6_INNER (16) +#define BSP_OFFSET_ATTR6_OUTER (20) +#define BSP_OFFSET_ATTR6_DEVICE (16) +#define BSP_OFFSET_ATTR7_INNER (24) +#define BSP_OFFSET_ATTR7_OUTER (28) +#define BSP_OFFSET_ATTR7_DEVICE (24) + +#define BSP_NON_SHAREABLE (0 << 3) +#define BSP_OUTER_SHAREABLE (2 << 3) +#define BSP_INNER_SHAREABLE (3 << 3) +#define BSP_EL1RW_EL0NO (0 << 1) +#define BSP_EL1RW_EL0RW (1 << 1) +#define BSP_EL1RO_EL0NO (2 << 1) +#define BSP_EL1RO_EL0RO (3 << 1) +#define BSP_EXECUTE_ENABLE (0) +#define BSP_EXECUTE_NEVER (1) +#define BSP_REGION_DISABLE (0) +#define BSP_REGION_ENABLE (1) +#define BSP_ATTRINDEX0 (0 << 1) +#define BSP_ATTRINDEX1 (1 << 1) +#define BSP_ATTRINDEX2 (2 << 1) +#define BSP_ATTRINDEX3 (3 << 1) +#define BSP_ATTRINDEX4 (4 << 1) +#define BSP_ATTRINDEX5 (5 << 1) +#define BSP_ATTRINDEX6 (6 << 1) +#define BSP_ATTRINDEX7 (7 << 1) + +/* Attr0 */ +#if BSP_CFG_CPU_MPU_ATTR0_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR0 (BSP_CFG_CPU_MPU_ATTR0_DEVICE_TYPE << BSP_OFFSET_ATTR0_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR0 (((BSP_CFG_CPU_MPU_ATTR0_INNER & \ + (BSP_CFG_CPU_MPU_ATTR0_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR0_INNER_WRITE)) << BSP_OFFSET_ATTR0_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR0_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR0_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR0_OUTER_WRITE)) << BSP_OFFSET_ATTR0_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR0_TYPE */ + +/* Attr1 */ +#if BSP_CFG_CPU_MPU_ATTR1_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR1 (BSP_CFG_CPU_MPU_ATTR1_DEVICE_TYPE << BSP_OFFSET_ATTR1_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR1 (((BSP_CFG_CPU_MPU_ATTR1_INNER & \ + (BSP_CFG_CPU_MPU_ATTR1_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR1_INNER_WRITE)) << BSP_OFFSET_ATTR1_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR1_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR1_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR1_OUTER_WRITE)) << BSP_OFFSET_ATTR1_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR1_TYPE */ + +/* Attr2 */ +#if BSP_CFG_CPU_MPU_ATTR2_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR2 (BSP_CFG_CPU_MPU_ATTR2_DEVICE_TYPE << BSP_OFFSET_ATTR2_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR2 (((BSP_CFG_CPU_MPU_ATTR2_INNER & \ + (BSP_CFG_CPU_MPU_ATTR2_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR2_INNER_WRITE)) << BSP_OFFSET_ATTR2_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR2_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR2_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR2_OUTER_WRITE)) << BSP_OFFSET_ATTR2_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR2_TYPE */ + +/* Attr3 */ +#if BSP_CFG_CPU_MPU_ATTR3_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR3 (BSP_CFG_CPU_MPU_ATTR3_DEVICE_TYPE << BSP_OFFSET_ATTR3_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR3 (((BSP_CFG_CPU_MPU_ATTR3_INNER & \ + (BSP_CFG_CPU_MPU_ATTR3_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR3_INNER_WRITE)) << BSP_OFFSET_ATTR3_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR3_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR3_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR3_OUTER_WRITE)) << BSP_OFFSET_ATTR3_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR3_TYPE */ + +/* Attr4 */ +#if BSP_CFG_CPU_MPU_ATTR4_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR4 (BSP_CFG_CPU_MPU_ATTR4_DEVICE_TYPE << BSP_OFFSET_ATTR4_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR4 (((BSP_CFG_CPU_MPU_ATTR4_INNER & \ + (BSP_CFG_CPU_MPU_ATTR4_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR4_INNER_WRITE)) << BSP_OFFSET_ATTR4_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR4_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR4_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR4_OUTER_WRITE)) << BSP_OFFSET_ATTR4_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR4_TYPE */ + +/* Attr5 */ +#if BSP_CFG_CPU_MPU_ATTR5_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR5 (BSP_CFG_CPU_MPU_ATTR5_DEVICE_TYPE << BSP_OFFSET_ATTR5_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR5 (((BSP_CFG_CPU_MPU_ATTR5_INNER & \ + (BSP_CFG_CPU_MPU_ATTR5_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR5_INNER_WRITE)) << BSP_OFFSET_ATTR5_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR5_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR5_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR5_OUTER_WRITE)) << BSP_OFFSET_ATTR5_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR5_TYPE */ + +/* Attr6 */ +#if BSP_CFG_CPU_MPU_ATTR6_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR6 (BSP_CFG_CPU_MPU_ATTR6_DEVICE_TYPE << BSP_OFFSET_ATTR6_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR6 (((BSP_CFG_CPU_MPU_ATTR6_INNER & \ + (BSP_CFG_CPU_MPU_ATTR6_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR6_INNER_WRITE)) << BSP_OFFSET_ATTR6_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR6_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR6_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR6_OUTER_WRITE)) << BSP_OFFSET_ATTR6_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR6_TYPE */ + +/* Attr7 */ +#if BSP_CFG_CPU_MPU_ATTR7_TYPE == BSP_TYPE_DEVICE_MEMORY /* MEMORY TYPE == DEVICE */ + #define BSP_CFG_CPU_MPU_ATTR7 (BSP_CFG_CPU_MPU_ATTR7_DEVICE_TYPE << BSP_OFFSET_ATTR7_DEVICE) +#else /* MEMORY TYPE == NORMAL MEMORY */ + #define BSP_CFG_CPU_MPU_ATTR7 (((BSP_CFG_CPU_MPU_ATTR7_INNER & \ + (BSP_CFG_CPU_MPU_ATTR7_INNER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR7_INNER_WRITE)) << BSP_OFFSET_ATTR7_INNER) | \ + ((BSP_CFG_CPU_MPU_ATTR7_OUTER & \ + (BSP_CFG_CPU_MPU_ATTR7_OUTER_READ) & \ + (BSP_CFG_CPU_MPU_ATTR7_OUTER_WRITE)) << BSP_OFFSET_ATTR7_OUTER)) +#endif /* BSP_CFG_CPU_MPU_ATTR7_TYPE */ + +#define ATTR_3_2_1_0 (BSP_CFG_CPU_MPU_ATTR3 | BSP_CFG_CPU_MPU_ATTR2 | BSP_CFG_CPU_MPU_ATTR1 | \ + BSP_CFG_CPU_MPU_ATTR0) +#define ATTR_7_6_5_4 (BSP_CFG_CPU_MPU_ATTR7 | BSP_CFG_CPU_MPU_ATTR6 | BSP_CFG_CPU_MPU_ATTR5 | \ + BSP_CFG_CPU_MPU_ATTR4) + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR0_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR0_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR0_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR0_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR0_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR0_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR0_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR1_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR1_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR1_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR1_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR1_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR1_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR1_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR2_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR2_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR2_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR2_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR2_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR2_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR2_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR3_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR3_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR3_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR3_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR3_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR3_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR3_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR4_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR4_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR4_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR4_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR4_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR4_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR4_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR5_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR5_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR5_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR5_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR5_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR5_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR5_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR6_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR6_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR6_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR6_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR6_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR6_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR6_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +#if (BSP_TYPE_NORMAL_MEMORY == BSP_CFG_CPU_MPU_ATTR7_TYPE) + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR7_INNER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR7_INNER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR7_INNER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif + #if ((BSP_WRITE_THROUGH_TRANSIENT == BSP_CFG_CPU_MPU_ATTR7_OUTER) && \ + (BSP_READ_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR7_OUTER_READ) && \ + (BSP_WRITE_NOT_ALLOCATE == BSP_CFG_CPU_MPU_ATTR7_OUTER_WRITE)) + #error "If you select Write-Through transient, set either Read or Write to allocate." + #endif +#endif + +/* Region template */ +#define EL1_MPU_REGION_COUNT (24) + +#define EL1_MPU_REGIONXX_BASE(n) ((BSP_CFG_EL1_MPU_REGION ## n ## _BASE & 0xFFFFFFC0) | \ + BSP_CFG_EL1_MPU_REGION ## n ## _SH | \ + BSP_CFG_EL1_MPU_REGION ## n ## _AP | \ + BSP_CFG_EL1_MPU_REGION ## n ## _XN) + +#define EL1_MPU_REGIONXX_LIMIT(n) ((BSP_CFG_EL1_MPU_REGION ## n ## _LIMIT & 0xFFFFFFC0) | \ + BSP_CFG_EL1_MPU_REGION ## n ## _ATTRINDEX | \ + BSP_CFG_EL1_MPU_REGION ## n ## _ENABLE) + +/* region 0 */ +#define EL1_MPU_REGION00_BASE EL1_MPU_REGIONXX_BASE(00) +#define EL1_MPU_REGION00_LIMIT EL1_MPU_REGIONXX_LIMIT(00) + +/* region 1 */ +#define EL1_MPU_REGION01_BASE EL1_MPU_REGIONXX_BASE(01) +#define EL1_MPU_REGION01_LIMIT EL1_MPU_REGIONXX_LIMIT(01) + +/* region 2 */ +#define EL1_MPU_REGION02_BASE EL1_MPU_REGIONXX_BASE(02) +#define EL1_MPU_REGION02_LIMIT EL1_MPU_REGIONXX_LIMIT(02) + +/* region 3 */ +#define EL1_MPU_REGION03_BASE EL1_MPU_REGIONXX_BASE(03) +#define EL1_MPU_REGION03_LIMIT EL1_MPU_REGIONXX_LIMIT(03) + +/* region 4 */ +#define EL1_MPU_REGION04_BASE EL1_MPU_REGIONXX_BASE(04) +#define EL1_MPU_REGION04_LIMIT EL1_MPU_REGIONXX_LIMIT(04) + +/* region 5 */ +#define EL1_MPU_REGION05_BASE EL1_MPU_REGIONXX_BASE(05) +#define EL1_MPU_REGION05_LIMIT EL1_MPU_REGIONXX_LIMIT(05) + +/* region 6 */ +#define EL1_MPU_REGION06_BASE EL1_MPU_REGIONXX_BASE(06) +#define EL1_MPU_REGION06_LIMIT EL1_MPU_REGIONXX_LIMIT(06) + +/* region 7 */ +#define EL1_MPU_REGION07_BASE EL1_MPU_REGIONXX_BASE(07) +#define EL1_MPU_REGION07_LIMIT EL1_MPU_REGIONXX_LIMIT(07) + +/* region 8 */ +#define EL1_MPU_REGION08_BASE EL1_MPU_REGIONXX_BASE(08) +#define EL1_MPU_REGION08_LIMIT EL1_MPU_REGIONXX_LIMIT(08) + +/* region 9 */ +#define EL1_MPU_REGION09_BASE EL1_MPU_REGIONXX_BASE(09) +#define EL1_MPU_REGION09_LIMIT EL1_MPU_REGIONXX_LIMIT(09) + +/* region 10 */ +#define EL1_MPU_REGION10_BASE EL1_MPU_REGIONXX_BASE(10) +#define EL1_MPU_REGION10_LIMIT EL1_MPU_REGIONXX_LIMIT(10) + +/* region 11 */ +#define EL1_MPU_REGION11_BASE EL1_MPU_REGIONXX_BASE(11) +#define EL1_MPU_REGION11_LIMIT EL1_MPU_REGIONXX_LIMIT(11) + +/* region 12 */ +#define EL1_MPU_REGION12_BASE EL1_MPU_REGIONXX_BASE(12) +#define EL1_MPU_REGION12_LIMIT EL1_MPU_REGIONXX_LIMIT(12) + +/* region 13 */ +#define EL1_MPU_REGION13_BASE EL1_MPU_REGIONXX_BASE(13) +#define EL1_MPU_REGION13_LIMIT EL1_MPU_REGIONXX_LIMIT(13) + +/* region 14 */ +#define EL1_MPU_REGION14_BASE EL1_MPU_REGIONXX_BASE(14) +#define EL1_MPU_REGION14_LIMIT EL1_MPU_REGIONXX_LIMIT(14) + +/* region 15 */ +#define EL1_MPU_REGION15_BASE EL1_MPU_REGIONXX_BASE(15) +#define EL1_MPU_REGION15_LIMIT EL1_MPU_REGIONXX_LIMIT(15) + +/* region 16 */ +#define EL1_MPU_REGION16_BASE EL1_MPU_REGIONXX_BASE(16) +#define EL1_MPU_REGION16_LIMIT EL1_MPU_REGIONXX_LIMIT(16) + +/* region 17 */ +#define EL1_MPU_REGION17_BASE EL1_MPU_REGIONXX_BASE(17) +#define EL1_MPU_REGION17_LIMIT EL1_MPU_REGIONXX_LIMIT(17) + +/* region 18 */ +#define EL1_MPU_REGION18_BASE EL1_MPU_REGIONXX_BASE(18) +#define EL1_MPU_REGION18_LIMIT EL1_MPU_REGIONXX_LIMIT(18) + +/* region 19 */ +#define EL1_MPU_REGION19_BASE EL1_MPU_REGIONXX_BASE(19) +#define EL1_MPU_REGION19_LIMIT EL1_MPU_REGIONXX_LIMIT(19) + +/* region 20 */ +#define EL1_MPU_REGION20_BASE EL1_MPU_REGIONXX_BASE(20) +#define EL1_MPU_REGION20_LIMIT EL1_MPU_REGIONXX_LIMIT(20) + +/* region 21 */ +#define EL1_MPU_REGION21_BASE EL1_MPU_REGIONXX_BASE(21) +#define EL1_MPU_REGION21_LIMIT EL1_MPU_REGIONXX_LIMIT(21) + +/* region 22 */ +#define EL1_MPU_REGION22_BASE EL1_MPU_REGIONXX_BASE(22) +#define EL1_MPU_REGION22_LIMIT EL1_MPU_REGIONXX_LIMIT(22) + +/* region 23 */ +#define EL1_MPU_REGION23_BASE EL1_MPU_REGIONXX_BASE(23) +#define EL1_MPU_REGION23_LIMIT EL1_MPU_REGIONXX_LIMIT(23) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef struct st_bsp_mpu_config +{ + uint32_t base; + uint32_t limit; +} bsp_mpu_config_t; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +static const bsp_mpu_config_t g_bsp_el1_mpu[EL1_MPU_REGION_COUNT] = +{ + {EL1_MPU_REGION00_BASE, EL1_MPU_REGION00_LIMIT}, + {EL1_MPU_REGION01_BASE, EL1_MPU_REGION01_LIMIT}, + {EL1_MPU_REGION02_BASE, EL1_MPU_REGION02_LIMIT}, + {EL1_MPU_REGION03_BASE, EL1_MPU_REGION03_LIMIT}, + {EL1_MPU_REGION04_BASE, EL1_MPU_REGION04_LIMIT}, + {EL1_MPU_REGION05_BASE, EL1_MPU_REGION05_LIMIT}, + {EL1_MPU_REGION06_BASE, EL1_MPU_REGION06_LIMIT}, + {EL1_MPU_REGION07_BASE, EL1_MPU_REGION07_LIMIT}, + {EL1_MPU_REGION08_BASE, EL1_MPU_REGION08_LIMIT}, + {EL1_MPU_REGION09_BASE, EL1_MPU_REGION09_LIMIT}, + {EL1_MPU_REGION10_BASE, EL1_MPU_REGION10_LIMIT}, + {EL1_MPU_REGION11_BASE, EL1_MPU_REGION11_LIMIT}, + {EL1_MPU_REGION12_BASE, EL1_MPU_REGION12_LIMIT}, + {EL1_MPU_REGION13_BASE, EL1_MPU_REGION13_LIMIT}, + {EL1_MPU_REGION14_BASE, EL1_MPU_REGION14_LIMIT}, + {EL1_MPU_REGION15_BASE, EL1_MPU_REGION15_LIMIT}, + {EL1_MPU_REGION16_BASE, EL1_MPU_REGION16_LIMIT}, + {EL1_MPU_REGION17_BASE, EL1_MPU_REGION17_LIMIT}, + {EL1_MPU_REGION18_BASE, EL1_MPU_REGION18_LIMIT}, + {EL1_MPU_REGION19_BASE, EL1_MPU_REGION19_LIMIT}, + {EL1_MPU_REGION20_BASE, EL1_MPU_REGION20_LIMIT}, + {EL1_MPU_REGION21_BASE, EL1_MPU_REGION21_LIMIT}, + {EL1_MPU_REGION22_BASE, EL1_MPU_REGION22_LIMIT}, + {EL1_MPU_REGION23_BASE, EL1_MPU_REGION23_LIMIT}, +}; + +#if __FPU_USED +void bsp_fpu_advancedsimd_init(void); + +#endif + +void bsp_slavetcm_enable(void); +void bsp_memory_protect_setting(void); +void bsp_mpu_init(uint32_t region, uint32_t base, uint32_t limit); +void bsp_irq_cfg_common(void); + +#if __FPU_USED + +/*******************************************************************************************************************//** + * Initialize FPU and Advanced SIMD setting. + **********************************************************************************************************************/ +void bsp_fpu_advancedsimd_init (void) +{ + uint32_t apacr; + uint32_t fpexc; + + /* Enables cp10 and cp11 accessing */ + apacr = __get_CPACR(); + apacr |= BSP_CPCAR_CP_ENABLE; + __set_CPACR(apacr); + __ISB(); + + /* Enables the FPU */ + fpexc = __get_FPEXC(); + fpexc |= BSP_FPEXC_EN_ENABLE; + __set_FPEXC(fpexc); + __ISB(); +} + +#endif + +/*******************************************************************************************************************//** + * Settings the privilege level required for the AXIS to access the TCM. + **********************************************************************************************************************/ +void bsp_slavetcm_enable (void) +{ + uint32_t imp_slavepctlr; + + /* Enable TCM access privilege and non privilege */ + imp_slavepctlr = __get_IMP_SLAVEPCTLR(); + imp_slavepctlr |= BSP_TCM_ALL_ACCESS_ENABLE; + __DSB(); + + __set_IMP_SLAVEPCTLR(imp_slavepctlr); + __ISB(); +} + +/*******************************************************************************************************************//** + * Initialize memory protection settings. + **********************************************************************************************************************/ +void bsp_memory_protect_setting (void) +{ + uint32_t sctlr; + uint32_t mair0; + uint32_t mair1; + uint32_t region; + + /* Adopt EL1 default memory map as background map */ + sctlr = __get_SCTLR(); + sctlr |= BSP_SCTLR_BR_BIT; + __DSB(); + __set_SCTLR(sctlr); + __ISB(); + + /* Configure Memory Attribute Indirection Registers */ + mair0 = ATTR_3_2_1_0; + mair1 = ATTR_7_6_5_4; + __set_MAIR0(mair0); + __set_MAIR1(mair1); + __DSB(); + + /* Setup region. */ + for (region = 0; region < EL1_MPU_REGION_COUNT; region++) + { + bsp_mpu_init(region, g_bsp_el1_mpu[region].base, g_bsp_el1_mpu[region].limit); + } + + R_BSP_CacheInvalidateAll(); + + R_BSP_CacheEnableMemoryProtect(); + +#if (BSP_ICACHE_ENABLE == BSP_CFG_SCTLR_I_BIT) + R_BSP_CacheEnableInst(); +#else + R_BSP_CacheDisableInst(); +#endif + +#if (BSP_DATACACHE_ENABLE == BSP_CFG_SCTLR_C_BIT) + R_BSP_CacheEnableData(); +#else + R_BSP_CacheDisableData(); +#endif +} + +/*******************************************************************************************************************//** + * Core MPU initialization block. + **********************************************************************************************************************/ +void bsp_mpu_init (uint32_t region, uint32_t base, uint32_t limit) +{ + /* Selects the current EL1-controlled MPU region registers, PRBAR, and PRLAR */ + __set_PRSELR(region); + __DSB(); + + /* Set the base address and attributes of the MPU region controlled by EL1 */ + __set_PRBAR(base); + __DSB(); + + /* Set the limit address and attributes of the MPU region controlled by EL1 */ + __set_PRLAR(limit); + __DSB(); +} + +/*******************************************************************************************************************//** + * Initialize common configuration settings for interrupts + **********************************************************************************************************************/ +void bsp_irq_cfg_common (void) +{ + uint32_t icc_pmr; + uint32_t icc_igrpen1; + uint32_t icc_ctlr; + + /* Set priority mask level for CPU interface */ + icc_pmr = BSP_PRIORITY_MASK; + __set_ICC_PMR(icc_pmr); + + /* Enable group 1 interrupts */ + icc_igrpen1 = BSP_ENABLE_GROUP_INT; + __set_ICC_IGRPEN1(icc_igrpen1); + + /* Use ICC_BPR0 for interrupt preemption for both group 0 and group 1 interrupts */ + icc_ctlr = __get_ICC_CTLR(); + icc_ctlr |= BSP_ICC_CTLR; + __set_ICC_CTLR(icc_ctlr); + + __ISB(); +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c new file mode 100644 index 00000000000..72bd1de7517 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c @@ -0,0 +1,197 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +extern void bsp_master_mpu_init(void); +extern void bsp_global_system_counter_init(void); + +#if BSP_FEATURE_TFU_SUPPORTED +extern void bsp_tfu_init(void); + +#endif + +#if BSP_CFG_C_RUNTIME_INIT +extern void bsp_loader_data_init(void); +extern void bsp_loader_bss_init(void); +extern void bsp_static_constructor_init(void); + +#endif + +#if !(BSP_CFG_RAM_EXECUTION) +extern void bsp_copy_to_ram(void); +extern void bsp_application_bss_init(void); + +#endif + +#if !BSP_CFG_PORT_PROTECT +extern void bsp_release_port_protect(void); + +#endif + +extern void bsp_memory_protect_setting(void); +extern void bsp_irq_cfg_common(void); + +extern void R_BSP_WarmStart(bsp_warm_start_event_t event); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +int32_t main(void); + +#if BSP_CFG_EARLY_INIT +static void bsp_init_uninitialized_vars(void); + +#endif + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Initialize the MCU and the runtime environment. + **********************************************************************************************************************/ +void SystemInit (void) +{ +#if BSP_CFG_EARLY_INIT + + /* Initialize uninitialized BSP variables early for use in R_BSP_WarmStart. */ + bsp_init_uninitialized_vars(); +#endif + + /* Call before initializing clock and variables. */ + R_BSP_WarmStart(BSP_WARM_START_RESET); + + /* Configure system clocks. */ + bsp_clock_init(); + + /* Call post clock initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_CLOCK); + +#if BSP_CFG_C_RUNTIME_INIT + + /* Copy the loader data from external Flash to internal RAM. */ + bsp_loader_data_init(); + + /* Clear loader bss section in internal RAM. */ + bsp_loader_bss_init(); +#endif + + /* Initialize SystemCoreClock variable. */ + SystemCoreClockUpdate(); + + /* Set memory attributes, etc. */ + bsp_memory_protect_setting(); + +#if !(BSP_CFG_RAM_EXECUTION) + + /* Copy the application program from external Flash to internal RAM. */ + bsp_copy_to_ram(); + + /* Clear bss section in internal RAM. */ + bsp_application_bss_init(); +#endif + +#if BSP_CFG_C_RUNTIME_INIT + + /* Initialize static constructors */ + bsp_static_constructor_init(); +#endif + +#if !BSP_CFG_PORT_PROTECT + + /* When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ + bsp_release_port_protect(); +#endif + + /* Call Post C runtime initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_C); + + /* Initialize the Master-MPU settings. */ + bsp_master_mpu_init(); + + /* Initialize global system counter. The counter is enabled and is incrementing. */ + bsp_global_system_counter_init(); + + /* GIC initialization */ + bsp_irq_cfg_common(); + + /* Initialize GIC interrupts. */ + bsp_irq_cfg(); + +#if BSP_FEATURE_TFU_SUPPORTED + + /* Initialize the TFU settings. */ + bsp_tfu_init(); +#endif + +#if defined(__GNUC__) + extern void entry(void); + entry(); +#elif defined(__ICCARM__) + extern void __low_level_init(void); + __low_level_init(); +#else + /* Jump to main. */ + main(); +#endif +} + +/** @} (end addtogroup BSP_MCU) */ + +#if BSP_CFG_EARLY_INIT + +/*******************************************************************************************************************//** + * Initialize BSP variables not handled by C runtime startup. + **********************************************************************************************************************/ +static void bsp_init_uninitialized_vars (void) +{ + g_protect_port_counter = 0; + + extern volatile uint16_t g_protect_counters[]; + for (uint32_t i = 0; i < 4; i++) + { + g_protect_counters[i] = 0; + } + + SystemCoreClockUpdate(); +} + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c new file mode 100644 index 00000000000..66d5fa642e4 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c @@ -0,0 +1,822 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_PRV_MASTER_MPU_REGION_NUM (8) + +#define BSP_PRV_MASTER_MPU_STADD(master, region) (BSP_CFG_MPU ## master ## _STADD ## region | \ + (BSP_CFG_MPU ## master ## _WRITE ## region << 1) | \ + BSP_CFG_MPU ## master ## _READ ## region) + +#define BSP_PRV_MASTER_MPU_ENDADD(master, region) (BSP_CFG_MPU ## master ## _ENDADD ## region) + +#if defined(__ICCARM__) + #if BSP_CFG_C_RUNTIME_INIT + #define BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS __section_begin("LDR_DATA_RBLOCK") + #define BSP_PRV_SECTION_LDR_DATA_RAM_START __section_begin("LDR_DATA_WBLOCK") + #define BSP_PRV_SECTION_LDR_DATA_RAM_END __section_end("LDR_DATA_WBLOCK") + + #define BSP_PRV_SECTION_LDR_DATA_BSS_START __section_begin("LDR_DATA_ZBLOCK") + #define BSP_PRV_SECTION_LDR_DATA_BSS_END __section_end("LDR_DATA_ZBLOCK") + + #endif + + #if !(BSP_CFG_RAM_EXECUTION) + #define BSP_PRV_SECTION_VECTOR_ROM_ADDRESS __section_begin("VECTOR_RBLOCK") + #define BSP_PRV_SECTION_VECTOR_RAM_START __section_begin("VECTOR_WBLOCK") + #define BSP_PRV_SECTION_VECTOR_RAM_END __section_end("VECTOR_WBLOCK") + + #define BSP_PRV_SECTION_USER_PRG_ROM_ADDRESS __section_begin("USER_PRG_RBLOCK") + #define BSP_PRV_SECTION_USER_PRG_RAM_START __section_begin("USER_PRG_WBLOCK") + #define BSP_PRV_SECTION_USER_PRG_RAM_END __section_end("USER_PRG_WBLOCK") + + #define BSP_PRV_SECTION_USER_DATA_ROM_ADDRESS __section_begin("USER_DATA_RBLOCK") + #define BSP_PRV_SECTION_USER_DATA_RAM_START __section_begin("USER_DATA_WBLOCK") + #define BSP_PRV_SECTION_USER_DATA_RAM_END __section_end("USER_DATA_WBLOCK") + + #define BSP_PRV_SECTION_USER_DATA_NONCACHE_ROM_ADDRESS __section_begin("USER_DATA_NONCACHE_RBLOCK") + #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START __section_begin("USER_DATA_NONCACHE_WBLOCK") + #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_END __section_end("USER_DATA_NONCACHE_WBLOCK") + + #define BSP_PRV_SECTION_USER_DATA_BSS_START __section_begin("USER_DATA_ZBLOCK") + #define BSP_PRV_SECTION_USER_DATA_BSS_END __section_end("USER_DATA_ZBLOCK") + + #endif + + #if BSP_CFG_RAM_EXECUTION + #define BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_START __section_begin("NONCACHE_BUFFER_ZBLOCK") + #define BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_END __section_end("NONCACHE_BUFFER_ZBLOCK") + + #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_START __section_begin("SHARED_NONCACHE_BUFFER_ZBLOCK") + #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_END __section_end("SHARED_NONCACHE_BUFFER_ZBLOCK") + + #define BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_START __section_begin("DMAC_LINK_MODE_ZBLOCK") + #define BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_END __section_end("DMAC_LINK_MODE_ZBLOCK") + + #endif + +#elif defined(__GNUC__) + #if BSP_CFG_C_RUNTIME_INIT + #define BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS &_mloader_data + #define BSP_PRV_SECTION_LDR_DATA_RAM_START &__loader_data_start + #define BSP_PRV_SECTION_LDR_DATA_RAM_END &__loader_data_end + + #define BSP_PRV_SECTION_LDR_DATA_BSS_START &__loader_bss_start + #define BSP_PRV_SECTION_LDR_DATA_BSS_END &__loader_bss_end + + #endif + + #if !(BSP_CFG_RAM_EXECUTION) + #define BSP_PRV_SECTION_VECTOR_ROM_ADDRESS &_mfvector + #define BSP_PRV_SECTION_VECTOR_RAM_START &_fvector_start + #define BSP_PRV_SECTION_VECTOR_RAM_END &_fvector_end + + #define BSP_PRV_SECTION_USER_PRG_ROM_ADDRESS &_mtext + #define BSP_PRV_SECTION_USER_PRG_RAM_START &_text_start + #define BSP_PRV_SECTION_USER_PRG_RAM_END &_text_end + + #define BSP_PRV_SECTION_USER_DATA_ROM_ADDRESS &_mdata + #define BSP_PRV_SECTION_USER_DATA_RAM_START &_data_start + #define BSP_PRV_SECTION_USER_DATA_RAM_END &_data_end + + #define BSP_PRV_SECTION_USER_DATA_NONCACHE_ROM_ADDRESS &_mdata_noncache + #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START &_data_noncache_start + #define BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_END &_data_noncache_end + + #endif + + #define BSP_PRV_SECTION_USER_DATA_BSS_START &__bss_start__ + #define BSP_PRV_SECTION_USER_DATA_BSS_END &__bss_end__ + + #if BSP_CFG_RAM_EXECUTION + #define BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_START &_ncbuffer_start + #define BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_END &_ncbuffer_end + + #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_START &_sncbuffer_start + #define BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_END &_sncbuffer_end + + #define BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_START &_DmacLinkMode_start + #define BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_END &_DmacLinkMode_end + + #endif + +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** System Clock Frequency (Core Clock) */ +uint32_t SystemCoreClock = 0U; + +/** @} (end addtogroup BSP_MCU) */ + +#if defined(__ICCARM__) + #if BSP_CFG_C_RUNTIME_INIT + #pragma section="LDR_DATA_RBLOCK" + #pragma section="LDR_DATA_WBLOCK" + #pragma section="LDR_DATA_ZBLOCK" + + #endif + + #if !(BSP_CFG_RAM_EXECUTION) + #pragma section="VECTOR_RBLOCK" + #pragma section="VECTOR_WBLOCK" + + #pragma section="USER_PRG_RBLOCK" + #pragma section="USER_PRG_WBLOCK" + + #pragma section="USER_DATA_RBLOCK" + #pragma section="USER_DATA_WBLOCK" + #pragma section="USER_DATA_ZBLOCK" + + #pragma section="USER_DATA_NONCACHE_RBLOCK" + #pragma section="USER_DATA_NONCACHE_WBLOCK" + + #endif + + #if BSP_CFG_RAM_EXECUTION + #pragma section="NONCACHE_BUFFER_ZBLOCK" + #pragma section="SHARED_NONCACHE_BUFFER_ZBLOCK" + #pragma section="DMAC_LINK_MODE_ZBLOCK" + + #endif + +#elif defined(__GNUC__) + #if BSP_CFG_C_RUNTIME_INIT +extern void * _mloader_data; +extern void * __loader_data_start; +extern void * __loader_data_end; + +extern void * __loader_bss_start; +extern void * __loader_bss_end; + +extern void (* __preinit_array_start[])(void); +extern void (* __preinit_array_end[])(void); +extern void (* __init_array_start[])(void); +extern void (* __init_array_end[])(void); + + #endif + + #if !(BSP_CFG_RAM_EXECUTION) +extern void * _mfvector; +extern void * _fvector_start; +extern void * _fvector_end; + +extern void * _mtext; +extern void * _text_start; +extern void * _text_end; + +extern void * _mdata; +extern void * _data_start; +extern void * _data_end; + +extern void * _mdata_noncache; +extern void * _data_noncache_start; +extern void * _data_noncache_end; + + #endif + +extern void * __bss_start__; +extern void * __bss_end__; + + #if BSP_CFG_RAM_EXECUTION +extern void * _ncbuffer_start; +extern void * _ncbuffer_end; + +extern void * _sncbuffer_start; +extern void * _sncbuffer_end; + +extern void * _DmacLinkMode_start; +extern void * _DmacLinkMode_end; + + #endif +#endif + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#if defined(__ICCARM__) + #if BSP_CFG_C_RUNTIME_INIT +extern void __iar_data_init3(void); + + #endif +#endif + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +#if (1 == BSP_FEATURE_BSP_MASTER_MPU0_SUPPORTED) +const uint32_t g_bsp_master_mpu0_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(0, 0), BSP_PRV_MASTER_MPU_ENDADD(0, 0)}, + {BSP_PRV_MASTER_MPU_STADD(0, 1), BSP_PRV_MASTER_MPU_ENDADD(0, 1)}, + {BSP_PRV_MASTER_MPU_STADD(0, 2), BSP_PRV_MASTER_MPU_ENDADD(0, 2)}, + {BSP_PRV_MASTER_MPU_STADD(0, 3), BSP_PRV_MASTER_MPU_ENDADD(0, 3)}, + {BSP_PRV_MASTER_MPU_STADD(0, 4), BSP_PRV_MASTER_MPU_ENDADD(0, 4)}, + {BSP_PRV_MASTER_MPU_STADD(0, 5), BSP_PRV_MASTER_MPU_ENDADD(0, 5)}, + {BSP_PRV_MASTER_MPU_STADD(0, 6), BSP_PRV_MASTER_MPU_ENDADD(0, 6)}, + {BSP_PRV_MASTER_MPU_STADD(0, 7), BSP_PRV_MASTER_MPU_ENDADD(0, 7)} +}; + +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU1_SUPPORTED) +const uint32_t g_bsp_master_mpu1_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(1, 0), BSP_PRV_MASTER_MPU_ENDADD(1, 0)}, + {BSP_PRV_MASTER_MPU_STADD(1, 1), BSP_PRV_MASTER_MPU_ENDADD(1, 1)}, + {BSP_PRV_MASTER_MPU_STADD(1, 2), BSP_PRV_MASTER_MPU_ENDADD(1, 2)}, + {BSP_PRV_MASTER_MPU_STADD(1, 3), BSP_PRV_MASTER_MPU_ENDADD(1, 3)}, + {BSP_PRV_MASTER_MPU_STADD(1, 4), BSP_PRV_MASTER_MPU_ENDADD(1, 4)}, + {BSP_PRV_MASTER_MPU_STADD(1, 5), BSP_PRV_MASTER_MPU_ENDADD(1, 5)}, + {BSP_PRV_MASTER_MPU_STADD(1, 6), BSP_PRV_MASTER_MPU_ENDADD(1, 6)}, + {BSP_PRV_MASTER_MPU_STADD(1, 7), BSP_PRV_MASTER_MPU_ENDADD(1, 7)} +}; + +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU2_SUPPORTED) +const uint32_t g_bsp_master_mpu2_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(2, 0), BSP_PRV_MASTER_MPU_ENDADD(2, 0)}, + {BSP_PRV_MASTER_MPU_STADD(2, 1), BSP_PRV_MASTER_MPU_ENDADD(2, 1)}, + {BSP_PRV_MASTER_MPU_STADD(2, 2), BSP_PRV_MASTER_MPU_ENDADD(2, 2)}, + {BSP_PRV_MASTER_MPU_STADD(2, 3), BSP_PRV_MASTER_MPU_ENDADD(2, 3)}, + {BSP_PRV_MASTER_MPU_STADD(2, 4), BSP_PRV_MASTER_MPU_ENDADD(2, 4)}, + {BSP_PRV_MASTER_MPU_STADD(2, 5), BSP_PRV_MASTER_MPU_ENDADD(2, 5)}, + {BSP_PRV_MASTER_MPU_STADD(2, 6), BSP_PRV_MASTER_MPU_ENDADD(2, 6)}, + {BSP_PRV_MASTER_MPU_STADD(2, 7), BSP_PRV_MASTER_MPU_ENDADD(2, 7)} +}; + +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU3_SUPPORTED) +const uint32_t g_bsp_master_mpu3_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(3, 0), BSP_PRV_MASTER_MPU_ENDADD(3, 0)}, + {BSP_PRV_MASTER_MPU_STADD(3, 1), BSP_PRV_MASTER_MPU_ENDADD(3, 1)}, + {BSP_PRV_MASTER_MPU_STADD(3, 2), BSP_PRV_MASTER_MPU_ENDADD(3, 2)}, + {BSP_PRV_MASTER_MPU_STADD(3, 3), BSP_PRV_MASTER_MPU_ENDADD(3, 3)}, + {BSP_PRV_MASTER_MPU_STADD(3, 4), BSP_PRV_MASTER_MPU_ENDADD(3, 4)}, + {BSP_PRV_MASTER_MPU_STADD(3, 5), BSP_PRV_MASTER_MPU_ENDADD(3, 5)}, + {BSP_PRV_MASTER_MPU_STADD(3, 6), BSP_PRV_MASTER_MPU_ENDADD(3, 6)}, + {BSP_PRV_MASTER_MPU_STADD(3, 7), BSP_PRV_MASTER_MPU_ENDADD(3, 7)} +}; + +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU4_SUPPORTED) +const uint32_t g_bsp_master_mpu4_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(4, 0), BSP_PRV_MASTER_MPU_ENDADD(4, 0)}, + {BSP_PRV_MASTER_MPU_STADD(4, 1), BSP_PRV_MASTER_MPU_ENDADD(4, 1)}, + {BSP_PRV_MASTER_MPU_STADD(4, 2), BSP_PRV_MASTER_MPU_ENDADD(4, 2)}, + {BSP_PRV_MASTER_MPU_STADD(4, 3), BSP_PRV_MASTER_MPU_ENDADD(4, 3)}, + {BSP_PRV_MASTER_MPU_STADD(4, 4), BSP_PRV_MASTER_MPU_ENDADD(4, 4)}, + {BSP_PRV_MASTER_MPU_STADD(4, 5), BSP_PRV_MASTER_MPU_ENDADD(4, 5)}, + {BSP_PRV_MASTER_MPU_STADD(4, 6), BSP_PRV_MASTER_MPU_ENDADD(4, 6)}, + {BSP_PRV_MASTER_MPU_STADD(4, 7), BSP_PRV_MASTER_MPU_ENDADD(4, 7)} +}; + +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU6_SUPPORTED) +const uint32_t g_bsp_master_mpu6_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(6, 0), BSP_PRV_MASTER_MPU_ENDADD(6, 0)}, + {BSP_PRV_MASTER_MPU_STADD(6, 1), BSP_PRV_MASTER_MPU_ENDADD(6, 1)}, + {BSP_PRV_MASTER_MPU_STADD(6, 2), BSP_PRV_MASTER_MPU_ENDADD(6, 2)}, + {BSP_PRV_MASTER_MPU_STADD(6, 3), BSP_PRV_MASTER_MPU_ENDADD(6, 3)}, + {BSP_PRV_MASTER_MPU_STADD(6, 4), BSP_PRV_MASTER_MPU_ENDADD(6, 4)}, + {BSP_PRV_MASTER_MPU_STADD(6, 5), BSP_PRV_MASTER_MPU_ENDADD(6, 5)}, + {BSP_PRV_MASTER_MPU_STADD(6, 6), BSP_PRV_MASTER_MPU_ENDADD(6, 6)}, + {BSP_PRV_MASTER_MPU_STADD(6, 7), BSP_PRV_MASTER_MPU_ENDADD(6, 7)} +}; + +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU7_SUPPORTED) +const uint32_t g_bsp_master_mpu7_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(7, 0), BSP_PRV_MASTER_MPU_ENDADD(7, 0)}, + {BSP_PRV_MASTER_MPU_STADD(7, 1), BSP_PRV_MASTER_MPU_ENDADD(7, 1)}, + {BSP_PRV_MASTER_MPU_STADD(7, 2), BSP_PRV_MASTER_MPU_ENDADD(7, 2)}, + {BSP_PRV_MASTER_MPU_STADD(7, 3), BSP_PRV_MASTER_MPU_ENDADD(7, 3)}, + {BSP_PRV_MASTER_MPU_STADD(7, 4), BSP_PRV_MASTER_MPU_ENDADD(7, 4)}, + {BSP_PRV_MASTER_MPU_STADD(7, 5), BSP_PRV_MASTER_MPU_ENDADD(7, 5)}, + {BSP_PRV_MASTER_MPU_STADD(7, 6), BSP_PRV_MASTER_MPU_ENDADD(7, 6)}, + {BSP_PRV_MASTER_MPU_STADD(7, 7), BSP_PRV_MASTER_MPU_ENDADD(7, 7)} +}; + +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU8_SUPPORTED) +const uint32_t g_bsp_master_mpu8_cfg[BSP_PRV_MASTER_MPU_REGION_NUM][2] = +{ + {BSP_PRV_MASTER_MPU_STADD(8, 0), BSP_PRV_MASTER_MPU_ENDADD(8, 0)}, + {BSP_PRV_MASTER_MPU_STADD(8, 1), BSP_PRV_MASTER_MPU_ENDADD(8, 1)}, + {BSP_PRV_MASTER_MPU_STADD(8, 2), BSP_PRV_MASTER_MPU_ENDADD(8, 2)}, + {BSP_PRV_MASTER_MPU_STADD(8, 3), BSP_PRV_MASTER_MPU_ENDADD(8, 3)}, + {BSP_PRV_MASTER_MPU_STADD(8, 4), BSP_PRV_MASTER_MPU_ENDADD(8, 4)}, + {BSP_PRV_MASTER_MPU_STADD(8, 5), BSP_PRV_MASTER_MPU_ENDADD(8, 5)}, + {BSP_PRV_MASTER_MPU_STADD(8, 6), BSP_PRV_MASTER_MPU_ENDADD(8, 6)}, + {BSP_PRV_MASTER_MPU_STADD(8, 7), BSP_PRV_MASTER_MPU_ENDADD(8, 7)} +}; + +#endif + +#if defined(__ICCARM__) + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + + #pragma weak R_BSP_WarmStart + +#elif defined(__GNUC__) || defined(__ARMCC_VERSION) + +void R_BSP_WarmStart(bsp_warm_start_event_t event) __attribute__((weak)); + +#endif + +#if BSP_CFG_C_RUNTIME_INIT +void bsp_loader_data_init(void); +void bsp_loader_bss_init(void); +void bsp_static_constructor_init(void); + +#endif + +void bsp_copy_multibyte(uintptr_t * src, uintptr_t * dst, uintptr_t bytesize); +void bsp_bss_init_multibyte(uintptr_t * src, uintptr_t bytesize); + +#if !(BSP_CFG_RAM_EXECUTION) +void bsp_copy_to_ram(void); +void bsp_application_bss_init(void); + +#endif + +void bsp_master_mpu_init(void); +void bsp_global_system_counter_init(void); + +#if BSP_FEATURE_TFU_SUPPORTED +void bsp_tfu_init(void); + +#endif + +#if !BSP_CFG_PORT_PROTECT +void bsp_release_port_protect(void); + +#endif + +/*******************************************************************************************************************//** + * Initialize the Master-MPU settings. + **********************************************************************************************************************/ +void bsp_master_mpu_init (void) +{ + /* Disable register protection for Master-MPU related registers. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SYSTEM); + + for (uint8_t region_num = 0; region_num < BSP_PRV_MASTER_MPU_REGION_NUM; region_num++) + { +#if (1 == BSP_FEATURE_BSP_MASTER_MPU0_SUPPORTED) + R_MPU0->RGN[region_num].STADD = g_bsp_master_mpu0_cfg[region_num][0]; + R_MPU0->RGN[region_num].ENDADD = g_bsp_master_mpu0_cfg[region_num][1]; +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU1_SUPPORTED) + R_MPU1->RGN[region_num].STADD = g_bsp_master_mpu1_cfg[region_num][0]; + R_MPU1->RGN[region_num].ENDADD = g_bsp_master_mpu1_cfg[region_num][1]; +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU2_SUPPORTED) + R_MPU2->RGN[region_num].STADD = g_bsp_master_mpu2_cfg[region_num][0]; + R_MPU2->RGN[region_num].ENDADD = g_bsp_master_mpu2_cfg[region_num][1]; +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU3_SUPPORTED) + R_MPU3->RGN[region_num].STADD = g_bsp_master_mpu3_cfg[region_num][0]; + R_MPU3->RGN[region_num].ENDADD = g_bsp_master_mpu3_cfg[region_num][1]; +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU4_SUPPORTED) + R_MPU4->RGN[region_num].STADD = g_bsp_master_mpu4_cfg[region_num][0]; + R_MPU4->RGN[region_num].ENDADD = g_bsp_master_mpu4_cfg[region_num][1]; +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU6_SUPPORTED) + R_MPU6->RGN[region_num].STADD = g_bsp_master_mpu6_cfg[region_num][0]; + R_MPU6->RGN[region_num].ENDADD = g_bsp_master_mpu6_cfg[region_num][1]; +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU7_SUPPORTED) + R_MPU7->RGN[region_num].STADD = g_bsp_master_mpu7_cfg[region_num][0]; + R_MPU7->RGN[region_num].ENDADD = g_bsp_master_mpu7_cfg[region_num][1]; +#endif +#if (1 == BSP_FEATURE_BSP_MASTER_MPU8_SUPPORTED) + R_MPU8->RGN[region_num].STADD = g_bsp_master_mpu8_cfg[region_num][0]; + R_MPU8->RGN[region_num].ENDADD = g_bsp_master_mpu8_cfg[region_num][1]; +#endif + } + + /* Enable register protection for Master-MPU related registers. */ + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SYSTEM); +} + +/*******************************************************************************************************************//** + * Initialize global system counter. The counter is enabled and is incrementing. + **********************************************************************************************************************/ +void bsp_global_system_counter_init (void) +{ + /* Initialize registers related the global system counter. */ + R_GSC->CNTCR &= (uint32_t) (~R_GSC_CNTCR_EN_Msk); + R_GSC->CNTFID0 = BSP_GLOBAL_SYSTEM_COUNTER_CLOCK_HZ; + R_GSC->CNTCVL = 0; + R_GSC->CNTCVU = 0; + R_GSC->CNTCR |= R_GSC_CNTCR_EN_Msk; +} + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. + * This function is declared as a weak symbol higher up in this file because it is meant to be overridden by a user + * implemented version. One of the main uses for this function is to call functional safety code during the startup + * process. To use this function just copy this function into your own code and modify it to meet your needs. + * + * @param[in] event Where the code currently is in the start up process + * + * + * @note All programs to be executed when BSP_WARM_START_RESET or BSP_WARM_START_POST_CLOCK event occurs should be + * placed in BTCM. These events occur before copying the application program in startup code is executed, and + * therefore the application program is located on ROM and cannot be executed at that time. + * Linker script for FSP specifies that .warm_start section is to be placed at BTCM. Adding the section + * designation to function or variable definition makes it easy to place at BTCM. + **********************************************************************************************************************/ +void R_BSP_WarmStart (bsp_warm_start_event_t event) +{ + if (BSP_WARM_START_RESET == event) + { + /* C runtime environment has not been setup so you cannot use globals. System clocks are not setup. */ + } + + if (BSP_WARM_START_POST_CLOCK == event) + { + /* C runtime environment has not been setup so you cannot use globals. Clocks have been initialized. */ + } + else if (BSP_WARM_START_POST_C == event) + { + /* C runtime environment, system clocks, and pins are all setup. */ + } + else + { + /* Do nothing */ + } +} + +/** @} (end addtogroup BSP_MCU) */ + +#if BSP_CFG_C_RUNTIME_INIT + +/*******************************************************************************************************************//** + * Copy the loader data block from external Flash to internal RAM. + **********************************************************************************************************************/ +void bsp_loader_data_init (void) +{ + #if (!defined(__GNUC__) || !(BSP_CFG_RAM_EXECUTION)) + + /* Define destination/source address pointer and block size */ + uintptr_t * src; + uintptr_t * dst; + uintptr_t size; + + /* Copy loader data block */ + src = (uintptr_t *) BSP_PRV_SECTION_LDR_DATA_ROM_ADDRESS; + dst = (uintptr_t *) BSP_PRV_SECTION_LDR_DATA_RAM_START; + size = (uintptr_t) BSP_PRV_SECTION_LDR_DATA_RAM_END - (uintptr_t) BSP_PRV_SECTION_LDR_DATA_RAM_START; + bsp_copy_multibyte(src, dst, size); + #endif +} + +/*******************************************************************************************************************//** + * Clear the loader bss block in internal RAM. + **********************************************************************************************************************/ +void bsp_loader_bss_init (void) +{ + /* Define source address pointer and block size */ + uintptr_t * src; + uintptr_t size; + + /* Clear loader bss block. */ + src = (uintptr_t *) BSP_PRV_SECTION_LDR_DATA_BSS_START; + size = (uintptr_t) BSP_PRV_SECTION_LDR_DATA_BSS_END - (uintptr_t) BSP_PRV_SECTION_LDR_DATA_BSS_START; + bsp_bss_init_multibyte(src, size); + + #if BSP_CFG_RAM_EXECUTION + #if defined(__ICCARM__) + + /* Initialize the application data and clear the application bss. + * This code is for RAM Execution. If you want to boot with ROM, + * enable app_copy and app_bss_init, and disable this code. + * Also need to change icf file. */ + __iar_data_init3(); + #elif defined(__GNUC__) + + /* Clear application bss block. */ + src = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_BSS_START; + size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_END - (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_START; + bsp_bss_init_multibyte(src, size); + #endif + + /* Clear non-cache buffer block. */ + src = (uintptr_t *) BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_START; + size = (uintptr_t) BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_END - + (uintptr_t) BSP_PRV_SECTION_NONCACHE_BUFFER_BSS_START; + bsp_bss_init_multibyte(src, size); + + /* Clear shared non-cache buffer block. */ + src = (uintptr_t *) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_START; + size = (uintptr_t) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_END - + (uintptr_t) BSP_PRV_SECTION_SHARED_NONCACHE_BUFFER_BSS_START; + bsp_bss_init_multibyte(src, size); + + /* Clear DMAC link mode data block. */ + src = (uintptr_t *) BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_START; + size = (uintptr_t) BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_END - + (uintptr_t) BSP_PRV_SECTION_DMAC_LINK_MODE_BSS_START; + bsp_bss_init_multibyte(src, size); + #endif +} + +#endif + +/*******************************************************************************************************************//** + * Copy the memory block from Source address to Destination address by the multi byte unit. + **********************************************************************************************************************/ +void bsp_copy_multibyte (uintptr_t * src, uintptr_t * dst, uintptr_t bytesize) +{ + uintptr_t i; + uintptr_t cnt; + + uintptr_t src_mod; + uint8_t * src_single_byte; + uint8_t * dst_single_byte; + + if (0 != bytesize) + { + /* Copy Count in single byte unit */ + src_mod = (uintptr_t) src % sizeof(uintptr_t); + + if (0 != src_mod) + { + src_single_byte = (uint8_t *) src; + dst_single_byte = (uint8_t *) dst; + + for (i = 0; i < src_mod; i++) + { + *dst_single_byte++ = *src_single_byte++; + } + + dst = (uintptr_t *) dst_single_byte; + src = (uintptr_t *) src_single_byte; + bytesize -= src_mod; + } + else + { + /* Do nothing */ + } + + /* Copy Count in multi byte unit */ + cnt = (bytesize + (sizeof(uintptr_t) - 1)) / sizeof(uintptr_t); + + for (i = 0; i < cnt; i++) + { + *dst++ = *src++; + } + + /* Ensuring data-changing */ + __asm volatile ("DSB SY"); + } + else + { + /* Do nothing */ + } +} + +/*******************************************************************************************************************//** + * Clear the bss block by the multi byte unit. + **********************************************************************************************************************/ +void bsp_bss_init_multibyte (uintptr_t * src, uintptr_t bytesize) +{ + uintptr_t i; + uintptr_t cnt; + uintptr_t zero = 0; + + uintptr_t src_mod; + uint8_t * src_single_byte; + uint8_t zero_single_byte = 0; + + if (0 != bytesize) + { + /* Clear Count in single byte unit */ + src_mod = (uintptr_t) src % sizeof(uintptr_t); + + if (0 != src_mod) + { + src_single_byte = (uint8_t *) src; + + for (i = 0; i < src_mod; i++) + { + *src_single_byte++ = zero_single_byte; + } + + src = (uintptr_t *) src_single_byte; + bytesize -= src_mod; + } + else + { + /* Do nothing */ + } + + /* Clear Count in multi byte unit */ + cnt = (bytesize + (sizeof(uintptr_t) - 1)) / sizeof(uintptr_t); + + for (i = 0; i < cnt; i++) + { + *src++ = zero; + } + + /* Ensuring data-changing */ + __asm volatile ("DSB SY"); + } + else + { + /* Do nothing */ + } +} + +#if !(BSP_CFG_RAM_EXECUTION) + +/*******************************************************************************************************************//** + * Copy the application program block from external Flash to internal RAM. + **********************************************************************************************************************/ +void bsp_copy_to_ram (void) +{ + /* Define destination/source address pointer and block size */ + uintptr_t * src; + uintptr_t * dst; + uintptr_t size; + + /* Copy exception vector block */ + src = (uintptr_t *) BSP_PRV_SECTION_VECTOR_ROM_ADDRESS; + dst = (uintptr_t *) BSP_PRV_SECTION_VECTOR_RAM_START; + size = (uintptr_t) BSP_PRV_SECTION_VECTOR_RAM_END - (uintptr_t) BSP_PRV_SECTION_VECTOR_RAM_START; + bsp_copy_multibyte(src, dst, size); + + /* Copy user program block */ + src = (uintptr_t *) BSP_PRV_SECTION_USER_PRG_ROM_ADDRESS; + dst = (uintptr_t *) BSP_PRV_SECTION_USER_PRG_RAM_START; + size = (uintptr_t) BSP_PRV_SECTION_USER_PRG_RAM_END - (uintptr_t) BSP_PRV_SECTION_USER_PRG_RAM_START; + bsp_copy_multibyte(src, dst, size); + + /* Copy user data block */ + src = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_ROM_ADDRESS; + dst = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_RAM_START; + size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_RAM_END - (uintptr_t) BSP_PRV_SECTION_USER_DATA_RAM_START; + bsp_copy_multibyte(src, dst, size); + + /* Copy user data_noncache block */ + src = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_NONCACHE_ROM_ADDRESS; + dst = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START; + size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_END - + (uintptr_t) BSP_PRV_SECTION_USER_DATA_NONCACHE_RAM_START; + bsp_copy_multibyte(src, dst, size); +} + +/*******************************************************************************************************************//** + * Clear the application bss block in internal RAM. + **********************************************************************************************************************/ +void bsp_application_bss_init (void) +{ + /* Define source address pointer and block size */ + uintptr_t * src; + uintptr_t size; + + /* Clear application bss block. */ + src = (uintptr_t *) BSP_PRV_SECTION_USER_DATA_BSS_START; + size = (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_END - (uintptr_t) BSP_PRV_SECTION_USER_DATA_BSS_START; + bsp_bss_init_multibyte(src, size); +} + +#endif + +#if BSP_FEATURE_TFU_SUPPORTED +void bsp_tfu_init (void) +{ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET); + R_BSP_MODULE_START(FSP_IP_TFU, 0U); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET); +} + +#endif + +#if !BSP_CFG_PORT_PROTECT +void bsp_release_port_protect (void) +{ + /** When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ + R_RWP_NS->PRCRN = ((R_RWP_NS->PRCRN | BSP_IO_PRV_PRCR_KEY) | BSP_IO_REG_PROTECT_GPIO); + R_RWP_S->PRCRS = ((R_RWP_S->PRCRS | BSP_IO_PRV_PRCR_KEY) | BSP_IO_REG_PROTECT_GPIO); +} + +#endif + +/*******************************************************************************************************************//** + * Initialize static constructors. + **********************************************************************************************************************/ +#if BSP_CFG_C_RUNTIME_INIT +void bsp_static_constructor_init (void) +{ + #if defined(__ICCARM__) + #if !(BSP_CFG_RAM_EXECUTION) + + /* In the case of ROM boot, initialization of static constructors is performed by __iar_data_init3(). */ + __iar_data_init3(); + #endif + #elif defined(__GNUC__) + intptr_t count; + intptr_t i; + + count = __preinit_array_end - __preinit_array_start; + for (i = 0; i < count; i++) + { + __preinit_array_start[i](); + } + + count = __init_array_end - __init_array_start; + for (i = 0; i < count; i++) + { + __init_array_start[i](); + } + #endif +} + +#endif + +/* This vector table is for SGI and PPI interrupts. */ +BSP_DONT_REMOVE fsp_vector_t g_sgi_ppi_vector_table[BSP_CORTEX_VECTOR_TABLE_ENTRIES] = +{ + NULL, /* INTID0 : SOFTWARE_GENERATE_INT0 */ + NULL, /* INTID1 : SOFTWARE_GENERATE_INT1 */ + NULL, /* INTID2 : SOFTWARE_GENERATE_INT2 */ + NULL, /* INTID3 : SOFTWARE_GENERATE_INT3 */ + NULL, /* INTID4 : SOFTWARE_GENERATE_INT4 */ + NULL, /* INTID5 : SOFTWARE_GENERATE_INT5 */ + NULL, /* INTID6 : SOFTWARE_GENERATE_INT6 */ + NULL, /* INTID7 : SOFTWARE_GENERATE_INT7 */ + NULL, /* INTID8 : SOFTWARE_GENERATE_INT8 */ + NULL, /* INTID9 : SOFTWARE_GENERATE_INT9 */ + NULL, /* INTID10 : SOFTWARE_GENERATE_INT10 */ + NULL, /* INTID11 : SOFTWARE_GENERATE_INT11 */ + NULL, /* INTID12 : SOFTWARE_GENERATE_INT12 */ + NULL, /* INTID13 : SOFTWARE_GENERATE_INT13 */ + NULL, /* INTID14 : SOFTWARE_GENERATE_INT14 */ + NULL, /* INTID15 : SOFTWARE_GENERATE_INT15 */ + NULL, /* INTID16 : RESERVED */ + NULL, /* INTID17 : RESERVED */ + NULL, /* INTID18 : RESERVED */ + NULL, /* INTID19 : RESERVED */ + NULL, /* INTID20 : RESERVED */ + NULL, /* INTID21 : RESERVED */ + NULL, /* INTID22 : DEBUG_COMMUNICATIONS_CHANNEL_INT */ + NULL, /* INTID23 : PERFORMANCE_MONITOR_COUNTER_OVERFLOW_INT */ + NULL, /* INTID24 : CROSS_TRIGGER_INTERFACE_INT */ + NULL, /* INTID25 : VIRTUAL_CPU_INTERFACE_MAINTENANCE_INT */ + NULL, /* INTID26 : HYPERVISOR_TIMER_INT */ + NULL, /* INTID27 : VIRTUAL_TIMER_INT */ + NULL, /* INTID28 : RESERVED */ + NULL, /* INTID29 : RESERVED */ + NULL, /* INTID30 : NON-SECURE_PHYSICAL_TIMER_INT */ + NULL, /* INTID31 : RESERVED */ +}; diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.c new file mode 100644 index 00000000000..4a42d4ca6c1 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.c @@ -0,0 +1,752 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_PRV_SCTLR_ELX_BIT_I (0x1000U) +#define BSP_PRV_SCTLR_ELX_BIT_C (0x4U) +#define BSP_PRV_SCTLR_ELX_BIT_M (0x1U) + +#define BSP_PRV_CLIDR_CTYPE_OFFSET (3U) +#define BSP_PRV_CLIDR_CTYPE_MASK (7U) +#define BSP_PRV_CLIDR_CTYPE_EXIST_DATACACHE (2U) +#define BSP_PRV_CLIDR_LOC_OFFSET (24U) +#define BSP_PRV_CLIDR_LOC_MASK (7U) + +#define BSP_PRV_CCSIDR_LINESIZE_OFFSET (0U) +#define BSP_PRV_CCSIDR_LINESIZE_MASK (7U) +#define BSP_PRV_CCSIDR_LINESIZE_ACTUAL_VALUE (4U) +#define BSP_PRV_CCSIDR_ASSOCIATIVITY_OFFSET (3U) +#define BSP_PRV_CCSIDR_ASSOCIATIVITY_MASK (0x3FFU) +#define BSP_PRV_CCSIDR_NUMSETS_OFFSET (13U) +#define BSP_PRV_CCSIDR_NUMSETS_MASK (0x7FFFU) +#define BSP_PRV_CCSIDR_SHIFT_MAX (32U) + +#define BSP_PRV_CSSELR_LEVEL_OFFSET (1U) + +#define BSP_PRV_CTR_IMINLINE_OFFSET (0U) +#define BSP_PRV_CTR_IMINLINE_MASK (0xFU) +#define BSP_PRV_CTR_IMINLINE_NUMBER_OF_WORDS (4U) +#define BSP_PRV_CTR_IMINLINE_ADDRESS_MASK (1U) +#define BSP_PRV_CTR_DMINLINE_OFFSET (16U) +#define BSP_PRV_CTR_DMINLINE_MASK (0xFU) +#define BSP_PRV_CTR_DMINLINE_NUMBER_OF_WORDS (4U) +#define BSP_PRV_CTR_DMINLINE_ADDRESS_MASK (1U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Enable instruction caching. + **********************************************************************************************************************/ +void R_BSP_CacheEnableInst (void) +{ + uintptr_t sctlr; + + sctlr = __get_SCTLR(); + sctlr |= BSP_PRV_SCTLR_ELX_BIT_I; + + __asm volatile ("DSB SY"); + + __set_SCTLR(sctlr); + + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Enable data caching. + **********************************************************************************************************************/ +void R_BSP_CacheEnableData (void) +{ + uintptr_t sctlr; + + sctlr = __get_SCTLR(); + sctlr |= BSP_PRV_SCTLR_ELX_BIT_C; + + __asm volatile ("DSB SY"); + + __set_SCTLR(sctlr); + + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Enable memory protect. + **********************************************************************************************************************/ +void R_BSP_CacheEnableMemoryProtect (void) +{ + uintptr_t sctlr; + + sctlr = __get_SCTLR(); + sctlr |= BSP_PRV_SCTLR_ELX_BIT_M; + + __asm volatile ("DSB SY"); + + __set_SCTLR(sctlr); + + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Disable instruction caching. + **********************************************************************************************************************/ +void R_BSP_CacheDisableInst (void) +{ + uintptr_t sctlr; + + sctlr = __get_SCTLR(); + sctlr &= ~(BSP_PRV_SCTLR_ELX_BIT_I); + + __asm volatile ("DSB SY"); + + __set_SCTLR(sctlr); + + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Disable data caching. + **********************************************************************************************************************/ +void R_BSP_CacheDisableData (void) +{ + uintptr_t sctlr; + + sctlr = __get_SCTLR(); + sctlr &= ~(BSP_PRV_SCTLR_ELX_BIT_C); + + __asm volatile ("DSB SY"); + + __set_SCTLR(sctlr); + + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Disable memory protect. + **********************************************************************************************************************/ +void R_BSP_CacheDisableMemoryProtect (void) +{ + uintptr_t sctlr; + + sctlr = __get_SCTLR(); + sctlr &= ~(BSP_PRV_SCTLR_ELX_BIT_M); + + __asm volatile ("DSB SY"); + + __set_SCTLR(sctlr); + + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Clean data cache by set/way. + * Clean means writing the cache data to memory and clear the dirty bits + * if there is a discrepancy between the cache and memory data. + **********************************************************************************************************************/ +void R_BSP_CacheCleanAll (void) +{ + uintptr_t clidr; + uintptr_t clidr_loc; + uintptr_t clidr_ctype; + uintptr_t clidr_ctype_shift; + + uintptr_t csselr; + uintptr_t csselr_level; + + uintptr_t ccsidr; + uintptr_t ccsidr_linesize; + uintptr_t ccsidr_associativity; + uintptr_t ccsidr_associativity_clz; + uintptr_t ccsidr_associativity_value; + uintptr_t ccsidr_associativity_msb; + uintptr_t ccsidr_numsets; + uintptr_t ccsidr_numsets_total; + + uintptr_t dccsw; + + __asm volatile ("DSB SY"); + + __set_ICIALLU(0); + + __asm volatile ("DMB SY"); + + /* Reads the maximum level of cache implemented */ + clidr = __get_CLIDR(); + clidr_loc = (clidr >> BSP_PRV_CLIDR_LOC_OFFSET) & BSP_PRV_CLIDR_LOC_MASK; + + /* If the cache does not exist, do not process */ + if (0 != clidr_loc) + { + /* Loop until all levels of cache are processed */ + for (csselr = 0; csselr < clidr_loc; csselr++) + { + /* Read the current level cache type */ + clidr_ctype_shift = csselr * BSP_PRV_CLIDR_CTYPE_OFFSET; + clidr_ctype = (clidr >> clidr_ctype_shift) & BSP_PRV_CLIDR_CTYPE_MASK; + + /* If no data cache exists in the current level of cache, do not process */ + if (BSP_PRV_CLIDR_CTYPE_EXIST_DATACACHE <= clidr_ctype) + { + /* Set the current level to Cache Size Selection Register */ + csselr_level = csselr << BSP_PRV_CSSELR_LEVEL_OFFSET; + __set_CSSELR(csselr_level); + + __asm volatile ("DSB SY"); + + /* Read the line size, number of ways, and number of sets for the current level of cache */ + ccsidr = __get_CCSIDR(); + ccsidr_linesize = ((ccsidr >> BSP_PRV_CCSIDR_LINESIZE_OFFSET) & BSP_PRV_CCSIDR_LINESIZE_MASK) + + BSP_PRV_CCSIDR_LINESIZE_ACTUAL_VALUE; + ccsidr_associativity = (ccsidr >> BSP_PRV_CCSIDR_ASSOCIATIVITY_OFFSET) & + BSP_PRV_CCSIDR_ASSOCIATIVITY_MASK; + ccsidr_numsets = (ccsidr >> BSP_PRV_CCSIDR_NUMSETS_OFFSET) & BSP_PRV_CCSIDR_NUMSETS_MASK; + + /* Count consecutive number of 0 starting from the most significant bit (CLZ = Count Leading Zeros) */ + ccsidr_associativity_clz = __CLZ((uint32_t) ccsidr_associativity); + if (BSP_PRV_CCSIDR_SHIFT_MAX == ccsidr_associativity_clz) + { + ccsidr_associativity_clz--; + } + else + { + /* Do Nothing */ + } + + /* Loop until all sets are processed */ + while (1) + { + /* Working copy of number of ways */ + ccsidr_associativity_value = ccsidr_associativity; + + /* Loop until all ways are processed */ + while (1) + { + ccsidr_associativity_msb = (ccsidr_associativity_value << ccsidr_associativity_clz) | + csselr_level; /* Left shift way */ + ccsidr_numsets_total = ccsidr_numsets << ccsidr_linesize; /* Left shift set */ + dccsw = ccsidr_associativity_msb | ccsidr_numsets_total; /* Combine set and way */ + + /* DCCSW - Data or unified Cache line Clean by Set/Way */ + __set_DCCSW(dccsw); + + if (0 != ccsidr_associativity_value) + { + ccsidr_associativity_value--; + } + else + { + break; + } + } + + if (0 != ccsidr_numsets) + { + ccsidr_numsets--; + } + else + { + break; + } + } + } + else + { + /* Do Nothing */ + } + } + + __asm volatile ("DSB SY"); + __asm volatile ("ISB SY"); + } + else + { + /* Do Nothing */ + } +} + +/*******************************************************************************************************************//** + * Invalidate data cache by set/way. + * Also Invalidate instruction cache. + * + * Invalidate means to delete cache data. + **********************************************************************************************************************/ +void R_BSP_CacheInvalidateAll (void) +{ + uintptr_t clidr; + uintptr_t clidr_loc; + uintptr_t clidr_ctype; + uintptr_t clidr_ctype_shift; + + uintptr_t csselr; + uintptr_t csselr_level; + + uintptr_t ccsidr; + uintptr_t ccsidr_linesize; + uintptr_t ccsidr_associativity; + uintptr_t ccsidr_associativity_clz; + uintptr_t ccsidr_associativity_value; + uintptr_t ccsidr_associativity_msb; + uintptr_t ccsidr_numsets; + uintptr_t ccsidr_numsets_total; + + uintptr_t dcisw; + + __asm volatile ("DSB SY"); + + __set_ICIALLU(0); + + __asm volatile ("DMB SY"); + + /* Reads the maximum level of cache implemented */ + clidr = __get_CLIDR(); + clidr_loc = (clidr >> BSP_PRV_CLIDR_LOC_OFFSET) & BSP_PRV_CLIDR_LOC_MASK; + + /* If the cache does not exist, do not process */ + if (0 != clidr_loc) + { + /* Loop until all levels of cache are processed */ + for (csselr = 0; csselr < clidr_loc; csselr++) + { + /* Read the current level cache type */ + clidr_ctype_shift = csselr * BSP_PRV_CLIDR_CTYPE_OFFSET; + clidr_ctype = (clidr >> clidr_ctype_shift) & BSP_PRV_CLIDR_CTYPE_MASK; + + /* If no data cache exists in the current level of cache, do not process */ + if (BSP_PRV_CLIDR_CTYPE_EXIST_DATACACHE <= clidr_ctype) + { + /* Set the current level to Cache Size Selection Register */ + csselr_level = csselr << BSP_PRV_CSSELR_LEVEL_OFFSET; + __set_CSSELR(csselr_level); + + __asm volatile ("DSB SY"); + + /* Read the line size, number of ways, and number of sets for the current level of cache */ + ccsidr = __get_CCSIDR(); + ccsidr_linesize = ((ccsidr >> BSP_PRV_CCSIDR_LINESIZE_OFFSET) & BSP_PRV_CCSIDR_LINESIZE_MASK) + + BSP_PRV_CCSIDR_LINESIZE_ACTUAL_VALUE; + ccsidr_associativity = (ccsidr >> BSP_PRV_CCSIDR_ASSOCIATIVITY_OFFSET) & + BSP_PRV_CCSIDR_ASSOCIATIVITY_MASK; + ccsidr_numsets = (ccsidr >> BSP_PRV_CCSIDR_NUMSETS_OFFSET) & BSP_PRV_CCSIDR_NUMSETS_MASK; + + /* Count consecutive number of 0 starting from the most significant bit (CLZ = Count Leading Zeros) */ + ccsidr_associativity_clz = __CLZ((uint32_t) ccsidr_associativity); + if (BSP_PRV_CCSIDR_SHIFT_MAX == ccsidr_associativity_clz) + { + ccsidr_associativity_clz--; + } + else + { + /* Do Nothing */ + } + + /* Loop until all sets are processed */ + while (1) + { + /* Working copy of number of ways */ + ccsidr_associativity_value = ccsidr_associativity; + + /* Loop until all ways are processed */ + while (1) + { + ccsidr_associativity_msb = (ccsidr_associativity_value << ccsidr_associativity_clz) | + csselr_level; /* Left shift way */ + ccsidr_numsets_total = ccsidr_numsets << ccsidr_linesize; /* Left shift set */ + dcisw = ccsidr_associativity_msb | ccsidr_numsets_total; /* Combine set and way */ + + /* DCISW - Data or unified Cache line Invalidate by Set/Way */ + __set_DCISW(dcisw); + + if (0 != ccsidr_associativity_value) + { + ccsidr_associativity_value--; + } + else + { + break; + } + } + + if (0 != ccsidr_numsets) + { + ccsidr_numsets--; + } + else + { + break; + } + } + } + else + { + /* Do Nothing */ + } + } + + __asm volatile ("DSB SY"); + __asm volatile ("ISB SY"); + } + else + { + /* Do Nothing */ + } +} + +/*******************************************************************************************************************//** + * Clean and Invalidate data cache by set/way. + * Also Invalidate instruction cache. + * + * Clean means writing the cache data to memory and clear the dirty bits + * if there is a discrepancy between the cache and memory data. + * + * Invalidate means to delete cache data. + **********************************************************************************************************************/ +void R_BSP_CacheCleanInvalidateAll (void) +{ + uintptr_t clidr; + uintptr_t clidr_loc; + uintptr_t clidr_ctype; + uintptr_t clidr_ctype_shift; + + uintptr_t csselr; + uintptr_t csselr_level; + + uintptr_t ccsidr; + uintptr_t ccsidr_linesize; + uintptr_t ccsidr_associativity; + uintptr_t ccsidr_associativity_clz; + uintptr_t ccsidr_associativity_value; + uintptr_t ccsidr_associativity_msb; + uintptr_t ccsidr_numsets; + uintptr_t ccsidr_numsets_total; + + uintptr_t dccisw; + + __asm volatile ("DSB SY"); + + __set_ICIALLU(0); + + __asm volatile ("DMB SY"); + + /* Reads the maximum level of cache implemented */ + clidr = __get_CLIDR(); + clidr_loc = (clidr >> BSP_PRV_CLIDR_LOC_OFFSET) & BSP_PRV_CLIDR_LOC_MASK; + + /* If the cache does not exist, do not process */ + if (0 != clidr_loc) + { + /* Loop until all levels of cache are processed */ + for (csselr = 0; csselr < clidr_loc; csselr++) + { + /* Read the current level cache type */ + clidr_ctype_shift = csselr * BSP_PRV_CLIDR_CTYPE_OFFSET; + clidr_ctype = (clidr >> clidr_ctype_shift) & BSP_PRV_CLIDR_CTYPE_MASK; + + /* If no data cache exists in the current level of cache, do not process */ + if (BSP_PRV_CLIDR_CTYPE_EXIST_DATACACHE <= clidr_ctype) + { + /* Set the current level to Cache Size Selection Register */ + csselr_level = csselr << BSP_PRV_CSSELR_LEVEL_OFFSET; + __set_CSSELR(csselr_level); + + __asm volatile ("DSB SY"); + + /* Read the line size, number of ways, and number of sets for the current level of cache */ + ccsidr = __get_CCSIDR(); + ccsidr_linesize = ((ccsidr >> BSP_PRV_CCSIDR_LINESIZE_OFFSET) & BSP_PRV_CCSIDR_LINESIZE_MASK) + + BSP_PRV_CCSIDR_LINESIZE_ACTUAL_VALUE; + ccsidr_associativity = (ccsidr >> BSP_PRV_CCSIDR_ASSOCIATIVITY_OFFSET) & + BSP_PRV_CCSIDR_ASSOCIATIVITY_MASK; + ccsidr_numsets = (ccsidr >> BSP_PRV_CCSIDR_NUMSETS_OFFSET) & BSP_PRV_CCSIDR_NUMSETS_MASK; + + /* Count consecutive number of 0 starting from the most significant bit (CLZ = Count Leading Zeros) */ + ccsidr_associativity_clz = __CLZ((uint32_t) ccsidr_associativity); + if (BSP_PRV_CCSIDR_SHIFT_MAX == ccsidr_associativity_clz) + { + ccsidr_associativity_clz--; + } + else + { + /* Do Nothing */ + } + + /* Loop until all sets are processed */ + while (1) + { + /* Working copy of number of ways */ + ccsidr_associativity_value = ccsidr_associativity; + + /* Loop until all ways are processed */ + while (1) + { + ccsidr_associativity_msb = (ccsidr_associativity_value << ccsidr_associativity_clz) | + csselr_level; /* Left shift way */ + ccsidr_numsets_total = ccsidr_numsets << ccsidr_linesize; /* Left shift set */ + dccisw = ccsidr_associativity_msb | ccsidr_numsets_total; /* Combine set and way */ + + /* DCCISW - Data or unified Cache line Clean and Invalidate by Set/Way */ + __set_DCCISW(dccisw); + + if (0 != ccsidr_associativity_value) + { + ccsidr_associativity_value--; + } + else + { + break; + } + } + + if (0 != ccsidr_numsets) + { + ccsidr_numsets--; + } + else + { + break; + } + } + } + else + { + /* Do Nothing */ + } + } + + __asm volatile ("DSB SY"); + __asm volatile ("ISB SY"); + } + else + { + /* Do Nothing */ + } +} + +/*******************************************************************************************************************//** + * Clean data cache and Invalidate instruction cache by address. + * + * Clean means writing the cache data to memory and clear the dirty bits + * if there is a discrepancy between the cache and memory data. + * + * Invalidate means to delete cache data. + * + * @param[in] base_address Start address of area you want to Clean. + * @param[in] length Size of area you want to Clean. + **********************************************************************************************************************/ +void R_BSP_CacheCleanRange (uintptr_t base_address, uintptr_t length) +{ + uintptr_t end_address; + uintptr_t ctr; + + uintptr_t dminline; + uintptr_t dminline_size; + uintptr_t dccvac; + + uintptr_t iminline; + uintptr_t iminline_size; + uintptr_t icivau; + + end_address = base_address + length; + + /* Calculate data cache line size */ + ctr = __get_CTR(); + dminline = (ctr >> BSP_PRV_CTR_DMINLINE_OFFSET) & BSP_PRV_CTR_DMINLINE_MASK; + dminline_size = (BSP_PRV_CTR_DMINLINE_NUMBER_OF_WORDS << dminline); + + /* Align base address with cache line */ + dccvac = base_address & ~(dminline_size - BSP_PRV_CTR_DMINLINE_ADDRESS_MASK); + do + { + /* Data or unified Cache line Clean by VA to PoC */ + __set_DCCVAC(dccvac); + + dccvac += dminline_size; /* Next data line */ + } while (end_address > dccvac); + + __asm volatile ("DSB SY"); + + /* Calculate instruction cache line size */ + iminline = (ctr >> BSP_PRV_CTR_IMINLINE_OFFSET) & BSP_PRV_CTR_IMINLINE_MASK; + iminline_size = (BSP_PRV_CTR_IMINLINE_NUMBER_OF_WORDS << iminline); + + /* Align base address with cache line */ + icivau = base_address & ~(iminline_size - BSP_PRV_CTR_IMINLINE_ADDRESS_MASK); + do + { + /* Instruction Cache line Invalidate by VA to PoU */ + __set_ICIVAU(icivau); + + icivau += iminline_size; /* Next data line */ + } while (end_address == icivau); + + __asm volatile ("DSB SY"); + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Invalidate instruction and data cache by address. + * + * Invalidate means to delete cache data. + * + * @param[in] base_address Start address of area you want to Invalidate. + * @param[in] length Size of area you want to Invalidate. + **********************************************************************************************************************/ +void R_BSP_CacheInvalidateRange (uintptr_t base_address, uintptr_t length) +{ + uintptr_t end_address; + uintptr_t ctr; + + uintptr_t dminline; + uintptr_t dminline_size; + uintptr_t dcivac; + + uintptr_t iminline; + uintptr_t iminline_size; + uintptr_t icivau; + + end_address = base_address + length; + + /* Calculate data cache line size */ + ctr = __get_CTR(); + dminline = (ctr >> BSP_PRV_CTR_DMINLINE_OFFSET) & BSP_PRV_CTR_DMINLINE_MASK; + dminline_size = (BSP_PRV_CTR_DMINLINE_NUMBER_OF_WORDS << dminline); + + /* Align base address with cache line */ + dcivac = base_address & ~(dminline_size - BSP_PRV_CTR_DMINLINE_ADDRESS_MASK); + do + { + /* Data or unified Cache line Invalidate by VA to PoC */ + __set_DCIVAC(dcivac); + + dcivac += dminline_size; /* Next data line */ + } while (end_address > dcivac); + + __asm volatile ("DSB SY"); + + /* Calculate instruction cache line size */ + iminline = (ctr >> BSP_PRV_CTR_IMINLINE_OFFSET) & BSP_PRV_CTR_IMINLINE_MASK; + iminline_size = (BSP_PRV_CTR_IMINLINE_NUMBER_OF_WORDS << iminline); + + /* Align base address with cache line */ + icivau = base_address & ~(iminline_size - BSP_PRV_CTR_IMINLINE_ADDRESS_MASK); + do + { + /* Instruction Cache line Invalidate by VA to PoU */ + __set_ICIVAU(icivau); + + icivau += iminline_size; /* Next data line */ + } while (end_address == icivau); + + __asm volatile ("DSB SY"); + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Clean and Invalidate data cache and Invalidate instruction cache by address. + * + * Clean means writing the cache data to memory and clear the dirty bits + * if there is a discrepancy between the cache and memory data. + * + * Invalidate means to delete cache data. + * + * @param[in] base_address Start address of area you want to Clean and Invalidate. + * @param[in] length Size of area you want to Clean and Invalidate. + **********************************************************************************************************************/ +void R_BSP_CacheCleanInvalidateRange (uintptr_t base_address, uintptr_t length) +{ + uintptr_t end_address; + uintptr_t ctr; + + uintptr_t dminline; + uintptr_t dminline_size; + uintptr_t dccivac; + + uintptr_t iminline; + uintptr_t iminline_size; + uintptr_t icivau; + + end_address = base_address + length; + + /* Calculate data cache line size */ + ctr = __get_CTR(); + dminline = (ctr >> BSP_PRV_CTR_DMINLINE_OFFSET) & BSP_PRV_CTR_DMINLINE_MASK; + dminline_size = (BSP_PRV_CTR_DMINLINE_NUMBER_OF_WORDS << dminline); + + /* Align base address with cache line */ + dccivac = base_address & ~(dminline_size - BSP_PRV_CTR_DMINLINE_ADDRESS_MASK); + do + { + /* Data or unified Cache line Clean and Invalidate by VA to PoC */ + __set_DCCIVAC(dccivac); + + dccivac += dminline_size; /* Next data line */ + } while (end_address > dccivac); + + __asm volatile ("DSB SY"); + + /* Calculate instruction cache line size */ + iminline = (ctr >> BSP_PRV_CTR_IMINLINE_OFFSET) & BSP_PRV_CTR_IMINLINE_MASK; + iminline_size = (BSP_PRV_CTR_IMINLINE_NUMBER_OF_WORDS << iminline); + + /* Align base address with cache line */ + icivau = base_address & ~(iminline_size - BSP_PRV_CTR_IMINLINE_ADDRESS_MASK); + do + { + /* Instruction Cache line Invalidate by VA to PoU */ + __set_ICIVAU(icivau); + + icivau += iminline_size; /* Next data line */ + } while (end_address == icivau); + + __asm volatile ("DSB SY"); + __asm volatile ("ISB SY"); +} + +/*******************************************************************************************************************//** + * Powers on and off the L3 cache way. + * CA55 only. + **********************************************************************************************************************/ +void R_BSP_CacheL3PowerCtrl (void) +{ + r_bsp_cache_l3_power_ctrl(); +} + +/*******************************************************************************************************************//** + * @} (end addtogroup BSP_MCU) + **********************************************************************************************************************/ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.h new file mode 100644 index 00000000000..8f311e8c5dc --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_cache.h @@ -0,0 +1,67 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_CACHE_H +#define BSP_CACHE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#if defined(BSP_CFG_CORE_CR52) + #include "cr/bsp_cache_core.h" +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void R_BSP_CacheEnableInst(void); +void R_BSP_CacheEnableData(void); +void R_BSP_CacheEnableMemoryProtect(void); +void R_BSP_CacheDisableInst(void); +void R_BSP_CacheDisableData(void); +void R_BSP_CacheDisableMemoryProtect(void); +void R_BSP_CacheCleanAll(void); +void R_BSP_CacheInvalidateAll(void); +void R_BSP_CacheCleanInvalidateAll(void); +void R_BSP_CacheCleanRange(uintptr_t base_address, uintptr_t length); +void R_BSP_CacheInvalidateRange(uintptr_t base_address, uintptr_t length); +void R_BSP_CacheCleanInvalidateRange(uintptr_t base_address, uintptr_t length); +void R_BSP_CacheL3PowerCtrl(void); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.c new file mode 100644 index 00000000000..8d7da17b406 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.c @@ -0,0 +1,374 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_clocks.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Key code for writing PRCR register. */ +#define BSP_PRV_PRCR_KEY (0xA500U) +#define BSP_PRV_PRCR_CGC_UNLOCK ((BSP_PRV_PRCR_KEY) | 0x1U) +#define BSP_PRV_PRCR_LOCK ((BSP_PRV_PRCR_KEY) | 0x0U) + +/* Key code for writing PCMD register. */ +#define BSP_PRV_PCMD_KEY (0xA5U) + +/* Calculate the value to write to SCKCR. */ +#define BSP_PRV_STARTUP_SCKCR_FSELXSPI0_DIVSELXSPI0_BITS (BSP_CFG_FSELXSPI0_DIVSELXSPI0 & 0x47U) +#define BSP_PRV_STARTUP_SCKCR_FSELXSPI1_DIVSELXSPI1_BITS ((BSP_CFG_FSELXSPI1_DIVSELXSPI1 & 0x47U) << 8U) +#define BSP_PRV_STARTUP_SCKCR_CKIO_BITS ((BSP_CFG_CKIO & 7U) << 16U) +#define BSP_PRV_STARTUP_SCKCR_FSELCANFD_BITS ((BSP_CFG_FSELCANFD & 1U) << 20U) +#define BSP_PRV_STARTUP_SCKCR_PHYSEL_BITS ((BSP_CFG_PHYSEL & 1U) << 21U) +#define BSP_PRV_STARTUP_SCKCR_CLMASEL_BITS ((BSP_CFG_CLMASEL & 1U) << 22U) +#define BSP_PRV_STARTUP_SCKCR_SPI0ASYNCSEL_BITS ((BSP_CFG_SPI0ASYNCCLK & 1U) << 24U) +#define BSP_PRV_STARTUP_SCKCR_SPI1ASYNCSEL_BITS ((BSP_CFG_SPI1ASYNCCLK & 1U) << 25U) +#define BSP_PRV_STARTUP_SCKCR_SPI2ASYNCSEL_BITS ((BSP_CFG_SPI2ASYNCCLK & 1U) << 26U) +#define BSP_PRV_STARTUP_SCKCR_SCI0ASYNCSEL_BITS ((BSP_CFG_SCI0ASYNCCLK & 1U) << 27U) +#define BSP_PRV_STARTUP_SCKCR_SCI1ASYNCSEL_BITS ((BSP_CFG_SCI1ASYNCCLK & 1U) << 28U) +#define BSP_PRV_STARTUP_SCKCR_SCI2ASYNCSEL_BITS ((BSP_CFG_SCI2ASYNCCLK & 1U) << 29U) +#define BSP_PRV_STARTUP_SCKCR_SCI3ASYNCSEL_BITS ((BSP_CFG_SCI3ASYNCCLK & 1U) << 30U) +#define BSP_PRV_STARTUP_SCKCR_SCI4ASYNCSEL_BITS ((BSP_CFG_SCI4ASYNCCLK & 1U) << 31U) + +/* Calculate the value to write to SCKCR2. */ +#define BSP_PRV_STARTUP_SCKCR2_FSELCPU0_BITS (BSP_CFG_FSELCPU0 & 3U) +#define BSP_PRV_STARTUP_SCKCR2_RESERVED_BIT4_BITS (1U << 4U) // The write value should be 1. +#define BSP_PRV_STARTUP_SCKCR2_DIVSELSUB_BITS ((BSP_CFG_DIVSELSUB & 1U) << 5U) +#define BSP_PRV_STARTUP_SCKCR2_SPI3ASYNCSEL_BITS ((BSP_CFG_SPI3ASYNCCLK & 1U) << 24U) +#define BSP_PRV_STARTUP_SCKCR2_SCI5ASYNCSEL_BITS ((BSP_CFG_SCI5ASYNCCLK & 1U) << 25U) + +#define BSP_PRV_STARTUP_SCKCR (BSP_PRV_STARTUP_SCKCR_FSELXSPI0_DIVSELXSPI0_BITS | \ + BSP_PRV_STARTUP_SCKCR_FSELXSPI1_DIVSELXSPI1_BITS | \ + BSP_PRV_STARTUP_SCKCR_CKIO_BITS | \ + BSP_PRV_STARTUP_SCKCR_FSELCANFD_BITS | \ + BSP_PRV_STARTUP_SCKCR_PHYSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_CLMASEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SPI0ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SPI1ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SPI2ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SCI0ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SCI1ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SCI2ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SCI3ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR_SCI4ASYNCSEL_BITS) + +#define BSP_PRV_STARTUP_SCKCR2 (BSP_PRV_STARTUP_SCKCR2_FSELCPU0_BITS | \ + BSP_PRV_STARTUP_SCKCR2_RESERVED_BIT4_BITS | \ + BSP_PRV_STARTUP_SCKCR2_DIVSELSUB_BITS | \ + BSP_PRV_STARTUP_SCKCR2_SPI3ASYNCSEL_BITS | \ + BSP_PRV_STARTUP_SCKCR2_SCI5ASYNCSEL_BITS) + +#define BSP_PRV_STARTUP_SCKCR2_FSELCPU0_ICLK_MUL2 (BSP_CLOCKS_FSELCPU0_ICLK_MUL2 << \ + R_SYSC_S_SCKCR2_FSELCPU0_Pos) + +/* Calculate the value to write to HIZCTRLEN. */ +#define BSP_PRV_STARTUP_HIZCTRLEN ((BSP_CFG_CLMA1MASK << 2) | (BSP_CFG_CLMA0MASK << 1) | \ + BSP_CFG_CLMA3MASK) + +/* Frequencies of clocks. */ +#define BSP_PRV_CPU_FREQ_200_MHZ (200000000U) // CPU frequency is 200 MHz +#define BSP_PRV_CPU_FREQ_150_MHZ (150000000U) // CPU frequency is 150 MHz + +/* Command sequence for enabling CLMA. */ +#define BSP_PRV_CTL0_ENABLE_TARGET_CMD (0x01) +#define BSP_PRV_CTL0_ENABLE_REVERSED_CMD (0xFE) + +#define BSP_PRV_LOCO_STABILIZATION_COUNT (40000) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +#if !BSP_CFG_SOFT_RESET_SUPPORTED +static void bsp_prv_clock_set_hard_reset(void); + +#endif + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Update SystemCoreClock variable based on current clock settings. + **********************************************************************************************************************/ +void SystemCoreClockUpdate (void) +{ + uint32_t devselsub = R_SYSC_S->SCKCR2_b.DIVSELSUB; + uint32_t fselcpu = (R_SYSC_S->SCKCR2_b.FSELCPU0 & 1U); + + if (0U == devselsub) + { + SystemCoreClock = BSP_PRV_CPU_FREQ_200_MHZ << fselcpu; + } + else + { + SystemCoreClock = BSP_PRV_CPU_FREQ_150_MHZ << fselcpu; + } +} + +/*******************************************************************************************************************//** + * Applies system core clock source and divider changes. The MCU is expected to be in high speed mode during this + * configuration and the CGC registers are expected to be unlocked in PRCR. + * + * @param[in] sckcr Value to set in SCKCR register + * @param[in] sckcr2 Value to set in SCKCR2 register + **********************************************************************************************************************/ +void bsp_prv_clock_set (uint32_t sckcr, uint32_t sckcr2) +{ + volatile uint32_t dummy; + sckcr = sckcr & BSP_PRV_SCKCR_MASK; + sckcr2 = sckcr2 & BSP_PRV_SCKCR2_MASK; + + /* Set the system source clock */ + R_SYSC_S->SCKCR2 = sckcr2; + + /** In order to secure processing after clock frequency is changed, + * dummy read the same register at least eight times. + * Refer to "Notes on Clock Generation Circuit" in the RZ microprocessor manual. */ + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + + R_SYSC_NS->SCKCR = sckcr; + + /** In order to secure processing after clock frequency is changed, + * dummy read the same register at least eight times. + * Refer to "Notes on Clock Generation Circuit" in the RZ microprocessor manual. */ + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + + FSP_PARAMETER_NOT_USED(dummy); + + /* Clock is now at requested frequency. */ + + /* Update the CMSIS core clock variable so that it reflects the new ICLK frequency. */ + SystemCoreClockUpdate(); +} + +#if !BSP_CFG_SOFT_RESET_SUPPORTED + +static void bsp_prv_clock_set_hard_reset (void) +{ + volatile uint32_t dummy; + uint32_t sckcr = BSP_PRV_STARTUP_SCKCR & BSP_PRV_SCKCR_MASK; + uint32_t sckcr2 = BSP_PRV_STARTUP_SCKCR2 & BSP_PRV_SCKCR2_MASK; + + /* Set the system source clock */ + R_SYSC_S->SCKCR2 = sckcr2; + + /** In order to secure processing after clock frequency is changed, + * dummy read the same register at least eight times. + * Refer to "Notes on Clock Generation Circuit" in the RZ microprocessor manual. */ + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + dummy = R_SYSC_S->SCKCR2; + + R_SYSC_NS->SCKCR = sckcr; + + /** In order to secure processing after clock frequency is changed, + * dummy read the same register at least eight times. + * Refer to "Notes on Clock Generation Circuit" in the RZ microprocessor manual. */ + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + dummy = R_SYSC_NS->SCKCR; + + FSP_PARAMETER_NOT_USED(dummy); + + /* Clock is now at requested frequency. */ + + /* Update the CMSIS core clock variable so that it reflects the new ICLK frequency. */ + SystemCoreClockUpdate(); +} + +#endif + +/*******************************************************************************************************************//** + * Initializes system clocks. Makes no assumptions about current register settings. + **********************************************************************************************************************/ +void bsp_clock_init (void) +{ + volatile uint32_t dummy = 0; + + /* Unlock CGC protection registers. */ + R_RWP_NS->PRCRN = (uint16_t) BSP_PRV_PRCR_CGC_UNLOCK; + R_RWP_S->PRCRS = (uint16_t) BSP_PRV_PRCR_CGC_UNLOCK; + + /* The SystemCoreClock needs to be updated before calling R_BSP_SoftwareDelay. */ + SystemCoreClockUpdate(); + + /* Set source clock and dividers. */ +#if BSP_CFG_SOFT_RESET_SUPPORTED + bsp_prv_clock_set(BSP_PRV_STARTUP_SCKCR, BSP_PRV_STARTUP_SCKCR2); +#else + bsp_prv_clock_set_hard_reset(); +#endif + +#if (BSP_CLOCKS_PLL1_INITIAL != BSP_CFG_PLL1) + R_SYSC_S->PLL1EN = BSP_CFG_PLL1; +#endif + +#if (BSP_CLOCKS_LOCO_ENABLE == BSP_CFG_LOCO_ENABLE) + R_SYSC_S->LOCOCR = BSP_CLOCKS_LOCO_ENABLE; + + /* Only start using the LOCO clock after + * the LOCO oscillation stabilization time (tLOCOWT) has elapsed. */ + for (uint16_t i = 0; i < BSP_PRV_LOCO_STABILIZATION_COUNT; i++) + { + __asm volatile ("nop"); + } +#endif + + R_SYSC_S->HIZCTRLEN = BSP_PRV_STARTUP_HIZCTRLEN; + +#if (BSP_CLOCKS_CLMA0_ENABLE == BSP_CFG_CLMA0_ENABLE) + + /* Set the lower and upper limit for comparing frequency domains. */ + R_CLMA0->CMPL = BSP_CFG_CLMA0_CMPL; + R_CLMA0->CMPH = BSP_CFG_CLMA0_CMPH; + + /* Enabling CLMA0 operation. */ + do + { + R_CLMA0->PCMD = BSP_PRV_PCMD_KEY; + + R_CLMA0->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + R_CLMA0->CTL0 = BSP_PRV_CTL0_ENABLE_REVERSED_CMD; + R_CLMA0->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + + if (1 != R_CLMA0->CTL0) + { + /* Check the value of PROTSR register. */ + dummy = R_CLMA0->PROTSR; + } + } while (1 == R_CLMA0->PROTSR_b.PRERR); +#endif + +#if (BSP_CLOCKS_CLMA1_ENABLE == BSP_CFG_CLMA1_ENABLE) + + /* Set the lower and upper limit for comparing frequency domains. */ + R_CLMA1->CMPL = BSP_CFG_CLMA1_CMPL; + R_CLMA1->CMPH = BSP_CFG_CLMA1_CMPH; + + /* Enabling CLMA1 operation. */ + do + { + R_CLMA1->PCMD = BSP_PRV_PCMD_KEY; + + R_CLMA1->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + R_CLMA1->CTL0 = BSP_PRV_CTL0_ENABLE_REVERSED_CMD; + R_CLMA1->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + + if (1 != R_CLMA1->CTL0) + { + /* Check the value of PROTSR register. */ + dummy = R_CLMA1->PROTSR; + } + } while (1 == R_CLMA1->PROTSR_b.PRERR); +#endif + +#if (BSP_CLOCKS_CLMA2_ENABLE == BSP_CFG_CLMA2_ENABLE) + + /* Set the lower and upper limit for comparing frequency domains. */ + R_CLMA2->CMPL = BSP_CFG_CLMA2_CMPL; + R_CLMA2->CMPH = BSP_CFG_CLMA2_CMPH; + + /* Enabling CLMA2 operation. */ + do + { + R_CLMA2->PCMD = BSP_PRV_PCMD_KEY; + + R_CLMA2->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + R_CLMA2->CTL0 = BSP_PRV_CTL0_ENABLE_REVERSED_CMD; + R_CLMA2->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + + if (1 != R_CLMA2->CTL0) + { + /* Check the value of PROTSR register. */ + dummy = R_CLMA2->PROTSR; + } + } while (1 == R_CLMA2->PROTSR_b.PRERR); +#endif + +#if (BSP_CLOCKS_CLMA3_ENABLE == BSP_CFG_CLMA3_ENABLE) + + /* Set the lower and upper limit for comparing frequency domains. */ + R_CLMA3->CMPL = BSP_CFG_CLMA3_CMPL; + R_CLMA3->CMPH = BSP_CFG_CLMA3_CMPH; + + /* Enabling CLMA3 operation. */ + do + { + R_CLMA3->PCMD = BSP_PRV_PCMD_KEY; + + R_CLMA3->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + R_CLMA3->CTL0 = BSP_PRV_CTL0_ENABLE_REVERSED_CMD; + R_CLMA3->CTL0 = BSP_PRV_CTL0_ENABLE_TARGET_CMD; + + if (1 != R_CLMA3->CTL0) + { + /* Check the value of PROTSR register. */ + dummy = R_CLMA3->PROTSR; + } + } while (1 == R_CLMA3->PROTSR_b.PRERR); +#endif + + /* Lock CGC and LPM protection registers. */ + R_RWP_NS->PRCRN = (uint16_t) BSP_PRV_PRCR_LOCK; + R_RWP_S->PRCRS = (uint16_t) BSP_PRV_PRCR_LOCK; + + FSP_PARAMETER_NOT_USED(dummy); +} + +/** @} (end addtogroup BSP_MCU_PRV) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.h new file mode 100644 index 00000000000..b292987ccd9 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_clocks.h @@ -0,0 +1,221 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_CLOCKS_H +#define BSP_CLOCKS_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_clock_cfg.h" +#include "bsp_api.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Startup clock frequency of each system clock. These macros are only helpful if the system clock and dividers have + * not changed since startup. These macros are not used in FSP modules except for the clock startup code. */ + +/* xSPI unit0 clock options. */ +#define BSP_CLOCKS_XSPI0_CLOCK_DIV0_133_3_MHZ (0x02) // xSPI0 base clock 800MHz and xSPI0 clock 133.3MHz. +#define BSP_CLOCKS_XSPI0_CLOCK_DIV0_100_0_MHZ (0x03) // xSPI0 base clock 800MHz and xSPI0 clock 100.0 MHz. +#define BSP_CLOCKS_XSPI0_CLOCK_DIV0_50_0_MHZ (0x04) // xSPI0 base clock 800MHz and xSPI0 clock 50.0 MHz. +#define BSP_CLOCKS_XSPI0_CLOCK_DIV0_25_0_MHZ (0x05) // xSPI0 base clock 800MHz and xSPI0 clock 25.0 MHz. +#define BSP_CLOCKS_XSPI0_CLOCK_DIV0_12_5_MHZ (0x06) // xSPI0 base clock 800MHz and xSPI0 clock 12.5 MHz. +#define BSP_CLOCKS_XSPI0_CLOCK_DIV1_75_0_MHZ (0x43) // xSPI0 base clock 600MHz and xSPI0 clock 75.0 MHz. +#define BSP_CLOCKS_XSPI0_CLOCK_DIV1_37_5_MHZ (0x44) // xSPI0 base clock 600MHz and xSPI0 clock 37.5 MHz. + +/* xSPI unit1 clock options. */ +#define BSP_CLOCKS_XSPI1_CLOCK_DIV0_133_3_MHZ (0x02) // xSPI1 base clock 800MHz and xSPI1 clock 133.3MHz. +#define BSP_CLOCKS_XSPI1_CLOCK_DIV0_100_0_MHZ (0x03) // xSPI1 base clock 800MHz and xSPI1 clock 100.0 MHz. +#define BSP_CLOCKS_XSPI1_CLOCK_DIV0_50_0_MHZ (0x04) // xSPI1 base clock 800MHz and xSPI1 clock 50.0 MHz. +#define BSP_CLOCKS_XSPI1_CLOCK_DIV0_25_0_MHZ (0x05) // xSPI1 base clock 800MHz and xSPI1 clock 25.0 MHz. +#define BSP_CLOCKS_XSPI1_CLOCK_DIV0_12_5_MHZ (0x06) // xSPI1 base clock 800MHz and xSPI1 clock 12.5 MHz. +#define BSP_CLOCKS_XSPI1_CLOCK_DIV1_75_0_MHZ (0x43) // xSPI1 base clock 600MHz and xSPI1 clock 75.0 MHz. +#define BSP_CLOCKS_XSPI1_CLOCK_DIV1_37_5_MHZ (0x44) // xSPI1 base clock 600MHz and xSPI1 clock 37.5 MHz. + +/* CKIO clock options. */ +#define BSP_CLOCKS_CKIO_ICLK_DIV2 (0) // CKIO clock 100.0 MHz (when SCKCR2.DIVSELSUB = 0), + // or 75.0 MHz (when SCKCR2.DIVSELSUB = 1). +#define BSP_CLOCKS_CKIO_ICLK_DIV3 (1) // CKIO clock 66.7 MHz (when SCKCR2.DIVSELSUB = 0), + // or 50.0 MHz (when SCKCR2.DIVSELSUB = 1). +#define BSP_CLOCKS_CKIO_ICLK_DIV4 (2) // CKIO clock 50.0 MHz (when SCKCR2.DIVSELSUB = 0), + // or 37.5 MHz (when SCKCR2.DIVSELSUB = 1). +#define BSP_CLOCKS_CKIO_ICLK_DIV5 (3) // CKIO clock 40.0 MHz (when SCKCR2.DIVSELSUB = 0), + // or 30.0 MHz (when SCKCR2.DIVSELSUB = 1). +#define BSP_CLOCKS_CKIO_ICLK_DIV6 (4) // CKIO clock 33.3 MHz (when SCKCR2.DIVSELSUB = 0), + // or 25.0 MHz (when SCKCR2.DIVSELSUB = 1). +#define BSP_CLOCKS_CKIO_ICLK_DIV7 (5) // CKIO clock 28.6 MHz (when SCKCR2.DIVSELSUB = 0), + // or 21.4 MHz (when SCKCR2.DIVSELSUB = 1). +#define BSP_CLOCKS_CKIO_ICLK_DIV8 (6) // CKIO clock 25.0 MHz (when SCKCR2.DIVSELSUB = 0), + // or 18.75 MHz (when SCKCR2.DIVSELSUB = 1). + +/* CANFD clock options. */ +#define BSP_CLOCKS_CANFD_CLOCK_80_MHZ (0) // CANFD clock 80 MHz. +#define BSP_CLOCKS_CANFD_CLOCK_40_MHZ (1) // CANFD clock 40 MHz. + +/* Ethernet PHY reference clock (ETHn_REFCLK : n = 0 to 2) options. */ +#define BSP_CLOCKS_PHYSEL_PLL1_DIV (0) // PLL1 devider clock. +#define BSP_CLOCKS_PHYSEL_MAINOSC_DIV (1) // Main clock oscillator. + +/* Alternative clock options when main clock abnormal oscillation is detected in CLMA3. */ +#define BSP_CLOCKS_CLMASEL_LOCO (0) // LOCO clock. +#define BSP_CLOCKS_CLMASEL_PLL (1) // PLL clock. + +/* SPI clock options. */ +#define BSP_CLOCKS_SPI0_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SPI0 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SPI0_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SPI0 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SPI1_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SPI1 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SPI1_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SPI1 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SPI2_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SPI2 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SPI2_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SPI2 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SPI3_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SPI3 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SPI3_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SPI3 asynchronous serial clock 96.0 MHz. + +/* SCI clock options. */ +#define BSP_CLOCKS_SCI0_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SCI0 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SCI0_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SCI0 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SCI1_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SCI1 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SCI1_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SCI1 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SCI2_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SCI2 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SCI2_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SCI2 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SCI3_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SCI3 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SCI3_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SCI3 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SCI4_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SCI4 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SCI4_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SCI4 asynchronous serial clock 96.0 MHz. +#define BSP_CLOCKS_SCI5_ASYNCHRONOUS_SERIAL_CLOCK_75_MHZ (0) // SCI5 asynchronous serial clock 75.0 MHz. +#define BSP_CLOCKS_SCI5_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ (1) // SCI5 asynchronous serial clock 96.0 MHz. + +/* CPU0 clock options. */ +#define BSP_CLOCKS_FSELCPU0_ICLK_MUL2 (1) // CPU0 clock 400 MHz (when SCKCR2.DIVSELSUB = 0), + // or 300 MHz (when SCKCR2.DIVSELSUB = 1). +#define BSP_CLOCKS_FSELCPU0_ICLK_MUL1 (0) // CPU0 clock 200 MHz (when SCKCR2.DIVSELSUB = 0), + // or 150 MHz (when SCKCR2.DIVSELSUB = 1). + +/* Peripheral module base clock options. */ +#define BSP_CLOCKS_DIVSELSUB_0 (0) // ICLK:200MHz, PCLKH:200MHz, PCLKM:100MHz, + // PCLKL:50MHz, PCLKADC:25MHz, PCLKGPTL:400MHz. +#define BSP_CLOCKS_DIVSELSUB_1 (1) // ICLK:150MHz, PCLKH:150MHz, PCLKM:75 MHz, + // PCLKL:37.5MHz, PCLKADC:18.75MHz, PCLKGPTL:300MHz. + +/* LOCO enable options. */ +#define BSP_CLOCKS_LOCO_DISABLE (0) // LOCO Stop +#define BSP_CLOCKS_LOCO_ENABLE (1) // LOCO Run + +/* PLL1 enable options. */ +#define BSP_CLOCKS_PLL1_INITIAL (0xFF) // Initial (This value should not be reflected in the register) +#define BSP_CLOCKS_PLL1_STANDBY (0) // PLL1 is standby state. +#define BSP_CLOCKS_PLL1_NORMAL (1) // PLL1 is normal state. + +/* CLMA error mask options. */ +#define BSP_CLOCKS_CLMA0_ERROR_MASK (0) // CLMA0 error is not transferred to POE3 and POEG. +#define BSP_CLOCKS_CLMA0_ERROR_NOT_MASK (1) // CLMA0 error is transferred to POE3 and POEG. +#define BSP_CLOCKS_CLMA1_ERROR_MASK (0) // CLMA1 error is not transferred to POE3 and POEG. +#define BSP_CLOCKS_CLMA1_ERROR_NOT_MASK (1) // CLMA1 error is transferred to POE3 and POEG. +#define BSP_CLOCKS_CLMA3_ERROR_MASK (0) // CLMA3 error is not transferred to POE3 and POEG. +#define BSP_CLOCKS_CLMA3_ERROR_NOT_MASK (1) // CLMA3 error is transferred to POE3 and POEG. + +/* CLMA enable options. */ +#define BSP_CLOCKS_CLMA0_DISABLE (0) // Disable CLMA0 operation. +#define BSP_CLOCKS_CLMA0_ENABLE (1) // Enable CLMA0 operation. +#define BSP_CLOCKS_CLMA1_DISABLE (0) // Disable CLMA1 operation. +#define BSP_CLOCKS_CLMA1_ENABLE (1) // Enable CLMA1 operation. +#define BSP_CLOCKS_CLMA2_DISABLE (0) // Disable CLMA2 operation. +#define BSP_CLOCKS_CLMA2_ENABLE (1) // Enable CLMA2 operation. +#define BSP_CLOCKS_CLMA3_DISABLE (0) // Disable CLMA3 operation. +#define BSP_CLOCKS_CLMA3_ENABLE (1) // Enable CLMA3 operation. + +/* Create a mask of valid bits in SCKCR. */ +#define BSP_PRV_SCKCR_FSELXSPI0_MASK (7U << 0) +#define BSP_PRV_SCKCR_DIVSELXSPI0_MASK (1U << 6) +#define BSP_PRV_SCKCR_FSELXSPI1_MASK (7U << 8) +#define BSP_PRV_SCKCR_DIVSELXSPI1_MASK (1U << 14) +#define BSP_PRV_SCKCR_CKIO_MASK (7U << 16) +#define BSP_PRV_SCKCR_FSELCANFD_MASK (1U << 20) +#define BSP_PRV_SCKCR_PHYSEL_MASK (1U << 21) +#define BSP_PRV_SCKCR_CLMASEL_MASK (1U << 22) +#define BSP_PRV_SCKCR_SPI0ASYNCSEL_MASK (1U << 24) +#define BSP_PRV_SCKCR_SPI1ASYNCSEL_MASK (1U << 25) +#define BSP_PRV_SCKCR_SPI2ASYNCSEL_MASK (1U << 26) +#define BSP_PRV_SCKCR_SCI0ASYNCSEL_MASK (1U << 27) +#define BSP_PRV_SCKCR_SCI1ASYNCSEL_MASK (1U << 28) +#define BSP_PRV_SCKCR_SCI2ASYNCSEL_MASK (1U << 29) +#define BSP_PRV_SCKCR_SCI3ASYNCSEL_MASK (1U << 30) +#define BSP_PRV_SCKCR_SCI4ASYNCSEL_MASK (1U << 31) +#define BSP_PRV_SCKCR_MASK (((((((((((((((BSP_PRV_SCKCR_FSELXSPI0_MASK | \ + BSP_PRV_SCKCR_DIVSELXSPI0_MASK) | \ + BSP_PRV_SCKCR_FSELXSPI1_MASK) | \ + BSP_PRV_SCKCR_DIVSELXSPI1_MASK) | \ + BSP_PRV_SCKCR_CKIO_MASK) | \ + BSP_PRV_SCKCR_FSELCANFD_MASK) | \ + BSP_PRV_SCKCR_PHYSEL_MASK) | \ + BSP_PRV_SCKCR_CLMASEL_MASK) | \ + BSP_PRV_SCKCR_SPI0ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR_SPI1ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR_SPI2ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR_SCI0ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR_SCI1ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR_SCI2ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR_SCI3ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR_SCI4ASYNCSEL_MASK) +#define BSP_PRV_SCKCR_DIVSELXSPI_MASK (BSP_PRV_SCKCR_DIVSELXSPI0_MASK | \ + BSP_PRV_SCKCR_DIVSELXSPI1_MASK) + +/* Create a mask of valid bits in SCKCR2. */ +#define BSP_PRV_SCKCR2_FSELCPU0_MASK (3U << 0) +#define BSP_PRV_SCKCR2_RESERVED_BIT4_MASK (1U << 4) +#define BSP_PRV_SCKCR2_DIVSELSUB_MASK (1U << 5) +#define BSP_PRV_SCKCR2_SPI3ASYNCSEL_MASK (1U << 24) +#define BSP_PRV_SCKCR2_SCI5ASYNCSEL_MASK (1U << 25) +#define BSP_PRV_SCKCR2_MASK ((((BSP_PRV_SCKCR2_FSELCPU0_MASK | \ + BSP_PRV_SCKCR2_RESERVED_BIT4_MASK) | \ + BSP_PRV_SCKCR2_DIVSELSUB_MASK) | \ + BSP_PRV_SCKCR2_SPI3ASYNCSEL_MASK) | \ + BSP_PRV_SCKCR2_SCI5ASYNCSEL_MASK) + +#define BSP_PRV_FSELCPU0_INIT (0x02U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_clock_init(void); // Used internally by BSP + +/* Used internally by CGC */ + +void bsp_prv_clock_set(uint32_t sckcr, uint32_t sckcr2); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.c new file mode 100644 index 00000000000..4f70b298c67 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.c @@ -0,0 +1,221 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#if defined(__ICCARM__) + #define WEAK_ERROR_ATTRIBUTE + #define WEAK_INIT_ATTRIBUTE + #pragma weak fsp_error_log = fsp_error_log_internal + #pragma weak bsp_init = bsp_init_internal +#elif defined(__GNUC__) + + #define WEAK_ERROR_ATTRIBUTE __attribute__((weak, alias("fsp_error_log_internal"))) + + #define WEAK_INIT_ATTRIBUTE __attribute__((weak, alias("bsp_init_internal"))) +#endif + +#define FSP_SECTION_VERSION ".version" + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/* System clock frequency information */ +const uint32_t g_bsp_system_clock_select[][2] = +{ + {BSP_PRV_CPU_FREQ_200_MHZ, BSP_PRV_CPU_FREQ_150_MHZ }, // FSP_PRIV_CLOCK_CPU0 + {0, 0 }, // Reserved + {BSP_PRV_ICLK_FREQ_200_MHZ, BSP_PRV_ICLK_FREQ_150_MHZ }, // FSP_PRIV_CLOCK_ICLK + {BSP_PRV_PCLKH_FREQ_200_MHZ, BSP_PRV_PCLKH_FREQ_150_MHZ }, // FSP_PRIV_CLOCK_PCLKH + {BSP_PRV_PCLKM_FREQ_100_MHZ, BSP_PRV_PCLKM_FREQ_75_MHZ }, // FSP_PRIV_CLOCK_PCLKM + {BSP_PRV_PCLKL_FREQ_50_MHZ, BSP_PRV_PCLKL_FREQ_37_5_MHZ }, // FSP_PRIV_CLOCK_PCLKL + {BSP_PRV_PCLKADC_FREQ_25_MHZ, BSP_PRV_PCLKADC_FREQ_18_75_MHZ}, // FSP_PRIV_CLOCK_PCLKADC + {BSP_PRV_PCLKGPTL_FREQ_400_MHZ, BSP_PRV_PCLKGPTL_FREQ_300_MHZ }, // FSP_PRIV_CLOCK_PCLKGPTL + {BSP_PRV_PCLKSPI_FREQ_75_MHZ, BSP_PRV_PCLKSPI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSPI0 + {BSP_PRV_PCLKSPI_FREQ_75_MHZ, BSP_PRV_PCLKSPI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSPI1 + {BSP_PRV_PCLKSPI_FREQ_75_MHZ, BSP_PRV_PCLKSPI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSPI2 + {BSP_PRV_PCLKSPI_FREQ_75_MHZ, BSP_PRV_PCLKSPI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSPI3 + {BSP_PRV_PCLKSCI_FREQ_75_MHZ, BSP_PRV_PCLKSCI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSCI0 + {BSP_PRV_PCLKSCI_FREQ_75_MHZ, BSP_PRV_PCLKSCI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSCI1 + {BSP_PRV_PCLKSCI_FREQ_75_MHZ, BSP_PRV_PCLKSCI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSCI2 + {BSP_PRV_PCLKSCI_FREQ_75_MHZ, BSP_PRV_PCLKSCI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSCI3 + {BSP_PRV_PCLKSCI_FREQ_75_MHZ, BSP_PRV_PCLKSCI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSCI4 + {BSP_PRV_PCLKSCI_FREQ_75_MHZ, BSP_PRV_PCLKSCI_FREQ_96_MHZ }, // FSP_PRIV_CLOCK_PCLKSCI5 + {BSP_PRV_PCLKCAN_FREQ_80_MHZ, BSP_PRV_PCLKCAN_FREQ_40_MHZ }, // FSP_PRIV_CLOCK_PCLKCAN +}; + +/* System clock frequency information for CKIO */ +const uint32_t g_bsp_system_clock_select_ckio[][2] = +{ + {BSP_PRV_CKIO_FREQ_100_MHZ, BSP_PRV_CKIO_FREQ_75_MHZ }, // CKIO = 000b + {BSP_PRV_CKIO_FREQ_66_7_MHZ, BSP_PRV_CKIO_FREQ_50_MHZ }, // CKIO = 001b + {BSP_PRV_CKIO_FREQ_50_MHZ, BSP_PRV_CKIO_FREQ_37_5_MHZ }, // CKIO = 010b + {BSP_PRV_CKIO_FREQ_40_MHZ, BSP_PRV_CKIO_FREQ_30_MHZ }, // CKIO = 011b + {BSP_PRV_CKIO_FREQ_33_3_MHZ, BSP_PRV_CKIO_FREQ_25_MHZ }, // CKIO = 100b + {BSP_PRV_CKIO_FREQ_28_6_MHZ, BSP_PRV_CKIO_FREQ_21_4_MHZ }, // CKIO = 101b + {BSP_PRV_CKIO_FREQ_25_MHZ, BSP_PRV_CKIO_FREQ_18_75_MHZ }, // CKIO = 110b + {BSP_PRV_CKIO_FREQ_NOT_SUPPORTED, BSP_PRV_CKIO_FREQ_NOT_SUPPORTED}, // CKIO = 111b +}; + +/* System clock frequency information for XSPI_CLK */ +const uint32_t g_bsp_system_clock_select_xspi_clk[][2] = +{ + {BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED, BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED}, // FSELXSPIn = 000b + {BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED, BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED}, // FSELXSPIn = 001b + {BSP_PRV_XSPI_CLK_FREQ_133_3_MHZ, BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED}, // FSELXSPIn = 010b + {BSP_PRV_XSPI_CLK_FREQ_100_MHZ, BSP_PRV_XSPI_CLK_FREQ_75_MHZ }, // FSELXSPIn = 011b + {BSP_PRV_XSPI_CLK_FREQ_50_MHZ, BSP_PRV_XSPI_CLK_FREQ_37_5_MHZ }, // FSELXSPIn = 100b + {BSP_PRV_XSPI_CLK_FREQ_25_MHZ, BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED}, // FSELXSPIn = 101b + {BSP_PRV_XSPI_CLK_FREQ_12_5_MHZ, BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED}, // FSELXSPIn = 110b + {BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED, BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED}, // FSELXSPIn = 111b +}; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/* FSP pack version structure. */ +static BSP_DONT_REMOVE const fsp_pack_version_t g_fsp_version BSP_PLACE_IN_SECTION (FSP_SECTION_VERSION) = +{ + .version_id_b = + { + .minor = FSP_VERSION_MINOR, + .major = FSP_VERSION_MAJOR, + .build = FSP_VERSION_BUILD, + .patch = FSP_VERSION_PATCH + } +}; + +/* Public FSP version name. */ +static BSP_DONT_REMOVE const uint8_t g_fsp_version_string[] BSP_PLACE_IN_SECTION(FSP_SECTION_VERSION) = + FSP_VERSION_STRING; + +/* Unique FSP version ID. */ +static BSP_DONT_REMOVE const uint8_t g_fsp_version_build_string[] BSP_PLACE_IN_SECTION(FSP_SECTION_VERSION) = + FSP_VERSION_BUILD_STRING; + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/** Prototype of initialization function called before main. This prototype sets the weak association of this + * function to an internal example implementation. If this function is defined in the application code, the + * application code version is used. */ + +void bsp_init(void * p_args) WEAK_INIT_ATTRIBUTE; + +void bsp_init_internal(void * p_args); /// Default initialization function + +#if ((1 == BSP_CFG_ERROR_LOG) || (1 == BSP_CFG_ASSERT)) + +/** Prototype of function called before errors are returned in FSP code if BSP_CFG_ERROR_LOG is set to 1. This + * prototype sets the weak association of this function to an internal example implementation. */ + +void fsp_error_log(fsp_err_t err, const char * file, int32_t line) WEAK_ERROR_ATTRIBUTE; + +void fsp_error_log_internal(fsp_err_t err, const char * file, int32_t line); /// Default error logger function + +#endif + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Get the FSP version based on compile time macros. + * + * @param[out] p_version Memory address to return version information to. + * + * @retval FSP_SUCCESS Version information stored. + * @retval FSP_ERR_ASSERTION The parameter p_version is NULL. + **********************************************************************************************************************/ +fsp_err_t R_FSP_VersionGet (fsp_pack_version_t * const p_version) +{ +#if BSP_CFG_PARAM_CHECKING_ENABLE + + /** Verify parameters are valid */ + FSP_ASSERT(NULL != p_version); +#endif + + *p_version = g_fsp_version; + + return FSP_SUCCESS; +} + +#if ((1 == BSP_CFG_ERROR_LOG) || (1 == BSP_CFG_ASSERT)) + +/*******************************************************************************************************************//** + * Default error logger function, used only if fsp_error_log is not defined in the user application. + * + * @param[in] err The error code encountered. + * @param[in] file The file name in which the error code was encountered. + * @param[in] line The line number at which the error code was encountered. + **********************************************************************************************************************/ +void fsp_error_log_internal (fsp_err_t err, const char * file, int32_t line) +{ + /** Do nothing. Do not generate any 'unused' warnings. */ + FSP_PARAMETER_NOT_USED(err); + FSP_PARAMETER_NOT_USED(file); + FSP_PARAMETER_NOT_USED(line); +} + +#endif + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * Default initialization function, used only if bsp_init is not defined in the user application. + **********************************************************************************************************************/ +void bsp_init_internal (void * p_args) +{ + /* Do nothing. */ + FSP_PARAMETER_NOT_USED(p_args); +} + +#if defined(__ARMCC_VERSION) + +/*******************************************************************************************************************//** + * Default implementation of assert for AC6. + **********************************************************************************************************************/ +__attribute__((weak, noreturn)) +void __aeabi_assert (const char * expr, const char * file, int line) { + FSP_PARAMETER_NOT_USED(expr); + FSP_PARAMETER_NOT_USED(file); + FSP_PARAMETER_NOT_USED(line); + __BKPT(0); + while (1) + { + /* Do nothing. */ + } +} + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.h new file mode 100644 index 00000000000..f6f12905bc6 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_common.h @@ -0,0 +1,435 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_COMMON_H +#define BSP_COMMON_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* C99 includes. */ +#include +#include +#include +#include +#include + +/* Different compiler support. */ +#include "../../inc/fsp_common_api.h" +#include "bsp_compiler_support.h" +#include "bsp_cfg.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** Used to signify that an ELC event is not able to be used as an interrupt. */ +#define BSP_IRQ_DISABLED (0xFFU) + +/* Vector Number offset */ +#define BSP_VECTOR_NUM_OFFSET (32) +#define BSP_INTERRUPT_TYPE_OFFSET (16U) + +#define FSP_CONTEXT_SAVE +#define FSP_CONTEXT_RESTORE + +#define BSP_PRV_CPU_FREQ_200_MHZ (200000000U) // CPU frequency is 200 MHz +#define BSP_PRV_CPU_FREQ_150_MHZ (150000000U) // CPU frequency is 150 MHz + +#define BSP_PRV_ICLK_FREQ_200_MHZ (200000000U) // ICLK frequency is 200 MHz +#define BSP_PRV_ICLK_FREQ_150_MHZ (150000000U) // ICLK frequency is 150 MHz + +#define BSP_PRV_PCLKH_FREQ_200_MHZ (200000000U) // PCLKH frequency is 200 MHz +#define BSP_PRV_PCLKH_FREQ_150_MHZ (150000000U) // PCLKH frequency is 150 MHz + +#define BSP_PRV_PCLKM_FREQ_100_MHZ (100000000U) // PCLKM frequency is 100 MHz +#define BSP_PRV_PCLKM_FREQ_75_MHZ (75000000U) // PCLKM frequency is 750 MHz + +#define BSP_PRV_PCLKL_FREQ_50_MHZ (50000000U) // PCLKL frequency is 50 MHz +#define BSP_PRV_PCLKL_FREQ_37_5_MHZ (37500000U) // PCLKL frequency is 37.5 MHz + +#define BSP_PRV_PCLKADC_FREQ_25_MHZ (25000000U) // PCLKADC frequency is 25 MHz +#define BSP_PRV_PCLKADC_FREQ_18_75_MHZ (18750000U) // PCLKADC frequency is 18.75 MHz + +#define BSP_PRV_PCLKGPTL_FREQ_400_MHZ (400000000U) // PCLKGPTL frequency is 400 MHz +#define BSP_PRV_PCLKGPTL_FREQ_300_MHZ (300000000U) // PCLKGPTL frequency is 300 MHz + +#define BSP_PRV_PCLKSCI_FREQ_75_MHZ (75000000U) // PCLKSCI frequency is 75 MHz +#define BSP_PRV_PCLKSCI_FREQ_96_MHZ (96000000U) // PCLKSCI frequency is 96 MHz + +#define BSP_PRV_PCLKSPI_FREQ_75_MHZ (75000000U) // PCLKSPI frequency is 75 MHz +#define BSP_PRV_PCLKSPI_FREQ_96_MHZ (96000000U) // PCLKSPI frequency is 96 MHz + +#define BSP_PRV_PCLKCAN_FREQ_80_MHZ (80000000U) // PCLKCAN frequency is 80 MHz +#define BSP_PRV_PCLKCAN_FREQ_40_MHZ (40000000U) // PCLKCAN frequency is 40 MHz + +#define BSP_PRV_CKIO_FREQ_100_MHZ (100000000U) // CKIO frequency is 100 MHz +#define BSP_PRV_CKIO_FREQ_75_MHZ (75000000U) // CKIO frequency is 75 MHz +#define BSP_PRV_CKIO_FREQ_66_7_MHZ (66666666U) // CKIO frequency is 66.7 MHz +#define BSP_PRV_CKIO_FREQ_50_MHZ (50000000U) // CKIO frequency is 50 MHz +#define BSP_PRV_CKIO_FREQ_40_MHZ (40000000U) // CKIO frequency is 40 MHz +#define BSP_PRV_CKIO_FREQ_37_5_MHZ (37500000U) // CKIO frequency is 37.5 MHz +#define BSP_PRV_CKIO_FREQ_33_3_MHZ (33333333U) // CKIO frequency is 33.3MHz +#define BSP_PRV_CKIO_FREQ_30_MHZ (30000000U) // CKIO frequency is 30 MHz +#define BSP_PRV_CKIO_FREQ_28_6_MHZ (28571428U) // CKIO frequency is 28.6 MHz +#define BSP_PRV_CKIO_FREQ_25_MHZ (25000000U) // CKIO frequency is 25 MHz +#define BSP_PRV_CKIO_FREQ_21_4_MHZ (21428571U) // CKIO frequency is 21.4 MHz +#define BSP_PRV_CKIO_FREQ_18_75_MHZ (18750000U) // CKIO frequency is 18.75 MHz +#define BSP_PRV_CKIO_FREQ_NOT_SUPPORTED (0xFFFFFFFFU) // CKIO frequency is not supported + +#define BSP_PRV_XSPI_CLK_FREQ_133_3_MHZ (133333333U) // XSPI_CLK frequency is 133.3 MHz +#define BSP_PRV_XSPI_CLK_FREQ_100_MHZ (100000000U) // XSPI_CLK frequency is 100.0 MHz +#define BSP_PRV_XSPI_CLK_FREQ_75_MHZ (75000000U) // XSPI_CLK frequency is 75.0 MHz +#define BSP_PRV_XSPI_CLK_FREQ_50_MHZ (50000000U) // XSPI_CLK frequency is 50.0 MHz +#define BSP_PRV_XSPI_CLK_FREQ_37_5_MHZ (37500000U) // XSPI_CLK frequency is 37.5 MHz +#define BSP_PRV_XSPI_CLK_FREQ_25_MHZ (25000000U) // XSPI_CLK frequency is 25.0 MHz +#define BSP_PRV_XSPI_CLK_FREQ_12_5_MHZ (12500000U) // XSPI_CLK frequency is 12.5 MHz +#define BSP_PRV_XSPI_CLK_FREQ_NOT_SUPPORTED (0xFFFFFFFFU) // XSPI_CLK frequency is not supported + +/** Macro to log and return error without an assertion. */ +#ifndef FSP_RETURN + + #define FSP_RETURN(err) FSP_ERROR_LOG((err)); \ + return err; +#endif + +/** This function is called before returning an error code. To stop on a runtime error, define fsp_error_log in + * user code and do required debugging (breakpoints, stack dump, etc) in this function.*/ +#if (1 == BSP_CFG_ERROR_LOG) + + #ifndef FSP_ERROR_LOG + #define FSP_ERROR_LOG(err) \ + fsp_error_log((err), __FILE__, __LINE__); + #endif +#else + + #define FSP_ERROR_LOG(err) +#endif + +/** Default assertion calls ::FSP_ERROR_RETURN if condition "a" is false. Used to identify incorrect use of API's in FSP + * functions. */ +#if (3 == BSP_CFG_ASSERT) + #define FSP_ASSERT(a) +#elif (2 == BSP_CFG_ASSERT) + #define FSP_ASSERT(a) {assert(a);} +#else + #define FSP_ASSERT(a) FSP_ERROR_RETURN((a), FSP_ERR_ASSERTION) +#endif // ifndef FSP_ASSERT + +/** All FSP error codes are returned using this macro. Calls ::FSP_ERROR_LOG function if condition "a" is false. Used + * to identify runtime errors in FSP functions. */ + +#define FSP_ERROR_RETURN(a, err) \ + { \ + if ((a)) \ + { \ + (void) 0; /* Do nothing */ \ + } \ + else \ + { \ + FSP_ERROR_LOG(err); \ + return err; \ + } \ + } + +/* Function-like macro used to wait for a condition to be met, most often used to wait for hardware register updates. + * This macro can be redefined to add a timeout if necessary. */ +#ifndef FSP_HARDWARE_REGISTER_WAIT + #define FSP_HARDWARE_REGISTER_WAIT(reg, required_value) while (reg != required_value) { /* Wait. */} +#endif + +/* Function-like macro used to wait for a condition to be met with timeout, + * most often used to wait for hardware register updates. */ +#define BSP_HARDWARE_REGISTER_WAIT_WTIH_TIMEOUT(reg, required_value, timeout) \ + while ((timeout)) \ + { \ + if ((required_value) == (reg)) \ + { \ + break; \ + } \ + (timeout)--; \ + } + +#ifndef BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION + #define BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION (0U) +#endif + +/* This macro defines a variable for saving previous mask value */ +#ifndef FSP_CRITICAL_SECTION_DEFINE + + #define FSP_CRITICAL_SECTION_DEFINE uintptr_t old_mask_level = 0U +#endif + +/* These macros abstract methods to save and restore the interrupt state. */ +#define FSP_CRITICAL_SECTION_GET_CURRENT_STATE __get_ICC_PMR +#define FSP_CRITICAL_SECTION_SET_STATE __set_ICC_PMR +#define FSP_CRITICAL_SECTION_IRQ_MASK_SET ((uint8_t) (BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION << \ + BSP_FEATURE_BSP_IRQ_PRIORITY_POS_BIT)) + +/** This macro temporarily saves the current interrupt state and disables interrupts. */ +#ifndef FSP_CRITICAL_SECTION_ENTER + #define FSP_CRITICAL_SECTION_ENTER \ + old_mask_level = FSP_CRITICAL_SECTION_GET_CURRENT_STATE(); \ + FSP_CRITICAL_SECTION_SET_STATE(FSP_CRITICAL_SECTION_IRQ_MASK_SET) +#endif + +/** This macro restores the previously saved interrupt state, reenabling interrupts. */ +#ifndef FSP_CRITICAL_SECTION_EXIT + #define FSP_CRITICAL_SECTION_EXIT FSP_CRITICAL_SECTION_SET_STATE(old_mask_level) +#endif + +/* Number of Cortex processor exceptions. */ +#define FSP_PRIV_CORTEX_PROCESSOR_EXCEPTIONS (32U) + +/** Used to signify that the requested IRQ vector is not defined in this system. */ +#define FSP_INVALID_VECTOR ((IRQn_Type) - 33) + +/* This macro Enable or Disable interrupts. */ +#define BSP_INTERRUPT_ENABLE __asm volatile ("cpsie i"); \ + __asm volatile ("isb"); + +#define BSP_INTERRUPT_DISABLE __asm volatile ("cpsid i"); \ + __asm volatile ("isb"); + +/** In the event of an unrecoverable error the BSP will by default call the __BKPT() intrinsic function which will + * alert the user of the error. The user can override this default behavior by defining their own + * BSP_CFG_HANDLE_UNRECOVERABLE_ERROR macro. + */ +#if !defined(BSP_CFG_HANDLE_UNRECOVERABLE_ERROR) + + #define BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(x) __BKPT((x)) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Different warm start entry locations in the BSP. */ +typedef enum e_bsp_warm_start_event +{ + BSP_WARM_START_RESET = 0, ///< Called almost immediately after reset. No C runtime environment, clocks, or IRQs. + BSP_WARM_START_POST_CLOCK, ///< Called after clock initialization. No C runtime environment or IRQs. + BSP_WARM_START_POST_C ///< Called after clocks and C runtime environment have been set up +} bsp_warm_start_event_t; + +/* Private enum used in R_FSP_SystemClockHzGet. */ +typedef enum e_fsp_priv_clock +{ + FSP_PRIV_CLOCK_CPU0 = 0, + FSP_PRIV_CLOCK_ICLK = 2, + FSP_PRIV_CLOCK_PCLKH = 3, + FSP_PRIV_CLOCK_PCLKM = 4, + FSP_PRIV_CLOCK_PCLKL = 5, + FSP_PRIV_CLOCK_PCLKADC = 6, + FSP_PRIV_CLOCK_PCLKGPTL = 7, + FSP_PRIV_CLOCK_PCLKSPI0 = 8, + FSP_PRIV_CLOCK_PCLKSPI1 = 9, + FSP_PRIV_CLOCK_PCLKSPI2 = 10, + FSP_PRIV_CLOCK_PCLKSPI3 = 11, + FSP_PRIV_CLOCK_PCLKSCI0 = 12, + FSP_PRIV_CLOCK_PCLKSCI1 = 13, + FSP_PRIV_CLOCK_PCLKSCI2 = 14, + FSP_PRIV_CLOCK_PCLKSCI3 = 15, + FSP_PRIV_CLOCK_PCLKSCI4 = 16, + FSP_PRIV_CLOCK_PCLKSCI5 = 17, + FSP_PRIV_CLOCK_PCLKCAN = 18, + FSP_PRIV_CLOCK_CKIO = 19, + FSP_PRIV_CLOCK_XSPI0_CLK = 20, + FSP_PRIV_CLOCK_XSPI1_CLK = 21, +} fsp_priv_clock_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +extern const uint32_t g_bsp_system_clock_select[][2]; +extern const uint32_t g_bsp_system_clock_select_ckio[][2]; +extern const uint32_t g_bsp_system_clock_select_xspi_clk[][2]; + +extern IRQn_Type g_current_interrupt_num[]; +extern uint8_t g_current_interrupt_pointer; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Return active interrupt vector number value + * + * @return Active interrupt vector number value + **********************************************************************************************************************/ +__STATIC_INLINE IRQn_Type R_FSP_CurrentIrqGet (void) +{ + /* Return the current interrupt number. */ + return g_current_interrupt_num[(g_current_interrupt_pointer - 1U)]; +} + +/*******************************************************************************************************************//** + * Gets the frequency of a system clock. + * + * @return Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_FSP_SystemClockHzGet (fsp_priv_clock_t clock) +{ + uint32_t clock_hz = 0; + uint32_t fselcpu0 = R_SYSC_S->SCKCR2_b.FSELCPU0; + + switch (clock) + { + case FSP_PRIV_CLOCK_CPU0: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_S->SCKCR2_b.DIVSELSUB] << fselcpu0; + break; + } + + /* These iclk and pclk cases are intentionally combined. */ + case FSP_PRIV_CLOCK_ICLK: + case FSP_PRIV_CLOCK_PCLKH: + case FSP_PRIV_CLOCK_PCLKM: + case FSP_PRIV_CLOCK_PCLKL: + case FSP_PRIV_CLOCK_PCLKADC: + case FSP_PRIV_CLOCK_PCLKGPTL: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_S->SCKCR2_b.DIVSELSUB]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSPI0: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SPI0ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSPI1: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SPI1ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSPI2: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SPI2ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSPI3: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_S->SCKCR2_b.SPI3ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSCI0: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SCI0ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSCI1: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SCI1ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSCI2: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SCI2ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSCI3: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SCI3ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSCI4: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.SCI4ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKSCI5: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_S->SCKCR2_b.SCI5ASYNCSEL]; + break; + } + + case FSP_PRIV_CLOCK_PCLKCAN: + { + clock_hz = g_bsp_system_clock_select[clock][R_SYSC_NS->SCKCR_b.FSELCANFD]; + break; + } + + case FSP_PRIV_CLOCK_CKIO: + { + uint32_t ckio = R_SYSC_NS->SCKCR_b.CKIO; + clock_hz = g_bsp_system_clock_select_ckio[ckio][R_SYSC_S->SCKCR2_b.DIVSELSUB]; + break; + } + + case FSP_PRIV_CLOCK_XSPI0_CLK: + { + uint32_t fselxspi0 = R_SYSC_NS->SCKCR_b.FSELXSPI0; + clock_hz = g_bsp_system_clock_select_xspi_clk[fselxspi0][R_SYSC_NS->SCKCR_b.DIVSELXSPI0]; + break; + } + + case FSP_PRIV_CLOCK_XSPI1_CLK: + { + uint32_t fselxspi1 = R_SYSC_NS->SCKCR_b.FSELXSPI1; + clock_hz = g_bsp_system_clock_select_xspi_clk[fselxspi1][R_SYSC_NS->SCKCR_b.DIVSELXSPI1]; + break; + } + + default: + { + break; + } + } + + return clock_hz; +} + +#if ((1 == BSP_CFG_ERROR_LOG) || (1 == BSP_CFG_ASSERT)) + +/** Prototype of default function called before errors are returned in FSP code if BSP_CFG_LOG_ERRORS is set to 1. */ +void fsp_error_log(fsp_err_t err, const char * file, int32_t line); + +#endif + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_compiler_support.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_compiler_support.h new file mode 100644 index 00000000000..d593dee9d60 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_compiler_support.h @@ -0,0 +1,110 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_COMPILER_SUPPORT_H +#define BSP_COMPILER_SUPPORT_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) + #include +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#if defined(__ARMCC_VERSION) /* AC6 compiler */ + +/* The AC6 linker requires uninitialized code to be placed in a section that starts with ".bss." Without this, load + * memory (ROM) is reserved unnecessarily. */ + #define BSP_UNINIT_SECTION_PREFIX ".bss" + #define BSP_SECTION_HEAP BSP_UNINIT_SECTION_PREFIX ".heap" + #define BSP_DONT_REMOVE + #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) + #define BSP_FORCE_INLINE __attribute__((always_inline)) + #define BSP_TARGET_ARM #pragma arm +#elif defined(__GNUC__) /* GCC compiler */ + #define BSP_UNINIT_SECTION_PREFIX + #define BSP_SECTION_HEAP ".heap" + #define BSP_DONT_REMOVE + #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) + #define BSP_FORCE_INLINE __attribute__((always_inline)) + #define BSP_TARGET_ARM __attribute__((target("arm"))) +#elif defined(__ICCARM__) /* IAR compiler */ + #define BSP_UNINIT_SECTION_PREFIX + #define BSP_SECTION_HEAP "HEAP" + #define BSP_DONT_REMOVE __root + #define BSP_ATTRIBUTE_STACKLESS __stackless + #define BSP_FORCE_INLINE _Pragma("inline=forced") + #define BSP_TARGET_ARM __arm +#endif + +#define BSP_SECTION_FIQ_STACK BSP_UNINIT_SECTION_PREFIX ".fiq_stack" +#define BSP_SECTION_IRQ_STACK BSP_UNINIT_SECTION_PREFIX ".irq_stack" +#define BSP_SECTION_ABT_STACK BSP_UNINIT_SECTION_PREFIX ".abt_stack" +#define BSP_SECTION_UND_STACK BSP_UNINIT_SECTION_PREFIX ".und_stack" +#define BSP_SECTION_SYS_STACK BSP_UNINIT_SECTION_PREFIX ".sys_stack" +#define BSP_SECTION_SVC_STACK BSP_UNINIT_SECTION_PREFIX ".svc_stack" +#define BSP_SECTION_NOINIT BSP_UNINIT_SECTION_PREFIX ".noinit" +#define BSP_SECTION_FIXED_VECTORS ".fixed_vectors" +#define BSP_SECTION_APPLICATION_VECTORS ".application_vectors" +#define BSP_SECTION_ROM_REGISTERS ".rom_registers" +#define BSP_SECTION_ID_CODE ".id_code" +#define BSP_SECTION_LOADER_PARAM ".loader_param" + +/* Compiler neutral macros. */ +#define BSP_PLACE_IN_SECTION(x) __attribute__((section(x))) __attribute__((__used__)) + +#define BSP_ALIGN_VARIABLE(x) __attribute__((aligned(x))) + +#define BSP_PACKED __attribute__((aligned(1))) + +#define BSP_WEAK_REFERENCE __attribute__((weak)) + +/** Stacks (and heap) must be sized and aligned to an integer multiple of this number. */ +#define BSP_STACK_ALIGNMENT (8) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** @} (end of addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.c new file mode 100644 index 00000000000..e24d3f0abc8 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.c @@ -0,0 +1,159 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "bsp_delay.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_DELAY_NS_PER_SECOND (1000000000) +#define BSP_DELAY_NS_PER_US (1000) +#define BSP_DELAY_SIGNIFICANT_DIGITS (10000) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Delay for at least the specified duration in units and return. + * @param[in] delay The number of 'units' to delay. + * @param[in] units The 'base' (bsp_delay_units_t) for the units specified. Valid values are: + * BSP_DELAY_UNITS_SECONDS, BSP_DELAY_UNITS_MILLISECONDS, BSP_DELAY_UNITS_MICROSECONDS.@n + * For example:@n + * At 200 MHz one cycle takes 1/200 microsecond or 5 nanoseconds.@n + * At 800 MHz one cycle takes 1/800 microsecond or 1.25 nanoseconds.@n + * Therefore one run through bsp_prv_software_delay_loop() takes: + * ~ (1.25 * BSP_DELAY_LOOP_CYCLES) or 5 ns. + * A delay of 2 us therefore requires 2000ns/5ns or 400 loops. + * + * The 'theoretical' maximum delay that may be obtained is determined by a full 32 bit loop count and the system clock rate. + * @200MHz: ((0xFFFFFFFF loops * 4 cycles /loop) / 200000000) = 85 seconds. + * @800MHz: ((0xFFFFFFFF loops * 4 cycles /loop) / 800000000) = 21 seconds. + * + * Note that requests for very large delays will be affected by rounding in the calculations and the actual delay + * achieved may be slightly longer. @200 MHz, for example, a request for 85 seconds will be closer to 86 seconds. + * + * Note also that if the calculations result in a loop_cnt of zero, the bsp_prv_software_delay_loop() function is not called + * at all. In this case the requested delay is too small (nanoseconds) to be carried out by the loop itself, and the + * overhead associated with executing the code to just get to this point has certainly satisfied the requested delay. + * + * + * @note R_BSP_SoftwareDelay() obtains the system clock value by reading the SystemCoreClock variable. + * Therefore, R_BSP_SoftwareDelay() cannot be used until after the SystemCoreClock has been updated. + * The SystemCoreClock is updated by executing SystemCoreClockUpdate() in startup; + * users cannot call R_BSP_SoftwareDelay() inside R_BSP_WarmStart(BSP_WARM_START_RESET) and + * R_BSP_WarmStart(BSP_WARM_START_POST_CLOCK) since they are invoked before SystemCoreClockUpdate() in startup. + * + * @note This function will delay for **at least** the specified duration. Due to overhead in calculating the correct number + * of loops to delay, very small delay values (generally 1-5 microseconds) may be significantly longer than specified. + * Approximate overhead for this function is as follows: + * - CR52: 87-94 cycles + * + * @note If more accurate microsecond timing must be performed in software it is recommended to use + * bsp_prv_software_delay_loop() directly. In this case, use BSP_DELAY_LOOP_CYCLES or BSP_DELAY_LOOPS_CALCULATE() + * to convert a calculated delay cycle count to a number of software delay loops. + * + * @note Delays may be longer than expected when compiler optimization is turned off. + **********************************************************************************************************************/ + +void R_BSP_SoftwareDelay (uint32_t delay, bsp_delay_units_t units) +{ + uint32_t cpu_hz; + uint32_t cycles_requested; + uint32_t ns_per_cycle; + uint32_t loops_required = 0; + uint32_t total_us = (delay * units); /** Convert the requested time to microseconds. */ + uint64_t ns_64bits; + + cpu_hz = SystemCoreClock; /** Get the system clock frequency in Hz. */ + + /* BSP_DELAY_SIGNIFICANT_DIGITS to keep the decimal point. */ + ns_per_cycle = BSP_DELAY_NS_PER_SECOND / (cpu_hz / BSP_DELAY_SIGNIFICANT_DIGITS); /** Get the # of nanoseconds/cycle. */ + + /* We want to get the time in total nanoseconds but need to be conscious of overflowing 32 bits. We also do not want to do 64 bit */ + /* division as that pulls in a division library. */ + ns_64bits = (uint64_t) total_us * (uint64_t) BSP_DELAY_NS_PER_US; // Convert to ns. + + /* Have we overflowed 32 bits? */ + if (ns_64bits <= UINT32_MAX) + { + ns_64bits = ns_64bits * (uint64_t) BSP_DELAY_SIGNIFICANT_DIGITS; + + /* No, we will not overflow. + * Multiply the calculation result by BSP_DELAY_SIGNIFICANT_DIGITS to disable the retention of the decimal point.*/ + cycles_requested = (uint32_t) (ns_64bits / (uint64_t) ns_per_cycle); + loops_required = cycles_requested / BSP_DELAY_LOOP_CYCLES; + } + else + { + /* We did overflow. Try dividing down first. + * Multiply the calculation result by BSP_DELAY_SIGNIFICANT_DIGITS to disable the retention of the decimal point.*/ + total_us = (total_us / (ns_per_cycle * BSP_DELAY_LOOP_CYCLES)) * BSP_DELAY_SIGNIFICANT_DIGITS; + ns_64bits = (uint64_t) total_us * (uint64_t) BSP_DELAY_NS_PER_US; // Convert to ns. + + /* Have we overflowed 32 bits? */ + if (ns_64bits <= UINT32_MAX) + { + /* No, we will not overflow. */ + loops_required = (uint32_t) ns_64bits; + } + else + { + /* We still overflowed, use the max count for cycles */ + loops_required = UINT32_MAX; + } + } + + /** Only delay if the supplied parameters constitute a delay. */ + if (loops_required > (uint32_t) 0) + { + bsp_prv_software_delay_loop(loops_required); + } +} + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * This assembly language routine takes roughly 4 cycles per loop. 2 additional cycles + * occur when the loop exits. The 'naked' attribute indicates that the specified function does not need + * prologue/epilogue sequences generated by the compiler. + * @param[in] loop_cnt The number of loops to iterate. + **********************************************************************************************************************/ +void bsp_prv_software_delay_loop (uint32_t loop_cnt) +{ + r_bsp_software_delay_loop(loop_cnt); +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.h new file mode 100644 index 00000000000..82e69ab1188 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_delay.h @@ -0,0 +1,72 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_DELAY_H +#define BSP_DELAY_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#if defined(BSP_CFG_CORE_CR52) + #include "cr/bsp_delay_core.h" +#endif + +#include "bsp_compiler_support.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Available delay units for R_BSP_SoftwareDelay(). These are ultimately used to calculate a total # of microseconds */ +typedef enum +{ + BSP_DELAY_UNITS_SECONDS = 1000000, ///< Requested delay amount is in seconds + BSP_DELAY_UNITS_MILLISECONDS = 1000, ///< Requested delay amount is in milliseconds + BSP_DELAY_UNITS_MICROSECONDS = 1 ///< Requested delay amount is in microseconds +} bsp_delay_units_t; + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void bsp_prv_software_delay_loop(uint32_t loop_cnt); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_exceptions.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_exceptions.h new file mode 100644 index 00000000000..37b0468ac00 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_exceptions.h @@ -0,0 +1,50 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_EXCEPTIONS_H +#define BSP_EXCEPTIONS_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.c new file mode 100644 index 00000000000..4cf8a6285a6 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.c @@ -0,0 +1,41 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +volatile uint32_t g_protect_port_counter; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.h new file mode 100644 index 00000000000..0da51954ec8 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_io.h @@ -0,0 +1,544 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @defgroup BSP_IO BSP I/O access + * @ingroup RENESAS_COMMON + * @brief This module provides basic read/write/toggle access to port pins and read/write access to port. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_IO_H +#define BSP_IO_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Private definition to set enumeration values. */ +#define BSP_IO_PRV_8BIT_MASK (0xFF) +#define BSP_IO_PM_OUTPUT (3U) + +/* Key code for writing PRCR register. */ +#define BSP_IO_PRV_PRCR_KEY (0xA500U) +#define BSP_IO_REG_PROTECT_GPIO (0x0004U) + +/* Difference between safety and non safety I/O port region addresses. */ +#define BSP_IO_REGION_ADDRESS_DIFF (R_PORT_SR_BASE - R_PORT_NSR_BASE) + +/* Shift to get port in bsp_io_port_t and bsp_io_port_pin_t enums. */ +#define BSP_IO_PRV_PORT_OFFSET (8U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Levels that can be set and read for individual pins */ +typedef enum e_bsp_io_level +{ + BSP_IO_LEVEL_LOW = 0, ///< Low + BSP_IO_LEVEL_HIGH ///< High +} bsp_io_level_t; + +/** Direction of individual pins */ +typedef enum e_bsp_io_dir +{ + BSP_IO_DIRECTION_INPUT = 0, ///< Input + BSP_IO_DIRECTION_OUTPUT ///< Output +} bsp_io_direction_t; + +/** Superset list of all possible IO ports. */ +typedef enum e_bsp_io_port +{ + BSP_IO_PORT_00 = 0x0000, ///< IO port 0 + BSP_IO_PORT_01 = 0x0100, ///< IO port 1 + BSP_IO_PORT_02 = 0x0200, ///< IO port 2 + BSP_IO_PORT_03 = 0x0300, ///< IO port 3 + BSP_IO_PORT_04 = 0x0400, ///< IO port 4 + BSP_IO_PORT_05 = 0x0500, ///< IO port 5 + BSP_IO_PORT_06 = 0x0600, ///< IO port 6 + BSP_IO_PORT_07 = 0x0700, ///< IO port 7 + BSP_IO_PORT_08 = 0x0800, ///< IO port 8 + BSP_IO_PORT_09 = 0x0900, ///< IO port 9 + BSP_IO_PORT_10 = 0x0A00, ///< IO port 10 + BSP_IO_PORT_11 = 0x0B00, ///< IO port 11 + BSP_IO_PORT_12 = 0x0C00, ///< IO port 12 + BSP_IO_PORT_13 = 0x0D00, ///< IO port 13 + BSP_IO_PORT_14 = 0x0E00, ///< IO port 14 + BSP_IO_PORT_15 = 0x0F00, ///< IO port 15 + BSP_IO_PORT_16 = 0x1000, ///< IO port 16 + BSP_IO_PORT_17 = 0x1100, ///< IO port 17 + BSP_IO_PORT_18 = 0x1200, ///< IO port 18 + BSP_IO_PORT_19 = 0x1300, ///< IO port 19 + BSP_IO_PORT_20 = 0x1400, ///< IO port 20 + BSP_IO_PORT_21 = 0x1500, ///< IO port 21 + BSP_IO_PORT_22 = 0x1600, ///< IO port 22 + BSP_IO_PORT_23 = 0x1700, ///< IO port 23 + BSP_IO_PORT_24 = 0x1800, ///< IO port 24 +} bsp_io_port_t; + +/** Superset list of all possible IO port pins. */ +typedef enum e_bsp_io_port_pin +{ + BSP_IO_PORT_00_PIN_0 = 0x0000, ///< IO port 0 pin 0 + BSP_IO_PORT_00_PIN_1 = 0x0001, ///< IO port 0 pin 1 + BSP_IO_PORT_00_PIN_2 = 0x0002, ///< IO port 0 pin 2 + BSP_IO_PORT_00_PIN_3 = 0x0003, ///< IO port 0 pin 3 + BSP_IO_PORT_00_PIN_4 = 0x0004, ///< IO port 0 pin 4 + BSP_IO_PORT_00_PIN_5 = 0x0005, ///< IO port 0 pin 5 + BSP_IO_PORT_00_PIN_6 = 0x0006, ///< IO port 0 pin 6 + BSP_IO_PORT_00_PIN_7 = 0x0007, ///< IO port 0 pin 7 + + BSP_IO_PORT_01_PIN_0 = 0x0100, ///< IO port 1 pin 0 + BSP_IO_PORT_01_PIN_1 = 0x0101, ///< IO port 1 pin 1 + BSP_IO_PORT_01_PIN_2 = 0x0102, ///< IO port 1 pin 2 + BSP_IO_PORT_01_PIN_3 = 0x0103, ///< IO port 1 pin 3 + BSP_IO_PORT_01_PIN_4 = 0x0104, ///< IO port 1 pin 4 + BSP_IO_PORT_01_PIN_5 = 0x0105, ///< IO port 1 pin 5 + BSP_IO_PORT_01_PIN_6 = 0x0106, ///< IO port 1 pin 6 + BSP_IO_PORT_01_PIN_7 = 0x0107, ///< IO port 1 pin 7 + + BSP_IO_PORT_02_PIN_0 = 0x0200, ///< IO port 2 pin 0 + BSP_IO_PORT_02_PIN_1 = 0x0201, ///< IO port 2 pin 1 + BSP_IO_PORT_02_PIN_2 = 0x0202, ///< IO port 2 pin 2 + BSP_IO_PORT_02_PIN_3 = 0x0203, ///< IO port 2 pin 3 + BSP_IO_PORT_02_PIN_4 = 0x0204, ///< IO port 2 pin 4 + BSP_IO_PORT_02_PIN_5 = 0x0205, ///< IO port 2 pin 5 + BSP_IO_PORT_02_PIN_6 = 0x0206, ///< IO port 2 pin 6 + BSP_IO_PORT_02_PIN_7 = 0x0207, ///< IO port 2 pin 7 + + BSP_IO_PORT_03_PIN_0 = 0x0300, ///< IO port 3 pin 0 + BSP_IO_PORT_03_PIN_1 = 0x0301, ///< IO port 3 pin 1 + BSP_IO_PORT_03_PIN_2 = 0x0302, ///< IO port 3 pin 2 + BSP_IO_PORT_03_PIN_3 = 0x0303, ///< IO port 3 pin 3 + BSP_IO_PORT_03_PIN_4 = 0x0304, ///< IO port 3 pin 4 + BSP_IO_PORT_03_PIN_5 = 0x0305, ///< IO port 3 pin 5 + BSP_IO_PORT_03_PIN_6 = 0x0306, ///< IO port 3 pin 6 + BSP_IO_PORT_03_PIN_7 = 0x0307, ///< IO port 3 pin 7 + + BSP_IO_PORT_04_PIN_0 = 0x0400, ///< IO port 4 pin 0 + BSP_IO_PORT_04_PIN_1 = 0x0401, ///< IO port 4 pin 1 + BSP_IO_PORT_04_PIN_2 = 0x0402, ///< IO port 4 pin 2 + BSP_IO_PORT_04_PIN_3 = 0x0403, ///< IO port 4 pin 3 + BSP_IO_PORT_04_PIN_4 = 0x0404, ///< IO port 4 pin 4 + BSP_IO_PORT_04_PIN_5 = 0x0405, ///< IO port 4 pin 5 + BSP_IO_PORT_04_PIN_6 = 0x0406, ///< IO port 4 pin 6 + BSP_IO_PORT_04_PIN_7 = 0x0407, ///< IO port 4 pin 7 + + BSP_IO_PORT_05_PIN_0 = 0x0500, ///< IO port 5 pin 0 + BSP_IO_PORT_05_PIN_1 = 0x0501, ///< IO port 5 pin 1 + BSP_IO_PORT_05_PIN_2 = 0x0502, ///< IO port 5 pin 2 + BSP_IO_PORT_05_PIN_3 = 0x0503, ///< IO port 5 pin 3 + BSP_IO_PORT_05_PIN_4 = 0x0504, ///< IO port 5 pin 4 + BSP_IO_PORT_05_PIN_5 = 0x0505, ///< IO port 5 pin 5 + BSP_IO_PORT_05_PIN_6 = 0x0506, ///< IO port 5 pin 6 + BSP_IO_PORT_05_PIN_7 = 0x0507, ///< IO port 5 pin 7 + + BSP_IO_PORT_06_PIN_0 = 0x0600, ///< IO port 6 pin 0 + BSP_IO_PORT_06_PIN_1 = 0x0601, ///< IO port 6 pin 1 + BSP_IO_PORT_06_PIN_2 = 0x0602, ///< IO port 6 pin 2 + BSP_IO_PORT_06_PIN_3 = 0x0603, ///< IO port 6 pin 3 + BSP_IO_PORT_06_PIN_4 = 0x0604, ///< IO port 6 pin 4 + BSP_IO_PORT_06_PIN_5 = 0x0605, ///< IO port 6 pin 5 + BSP_IO_PORT_06_PIN_6 = 0x0606, ///< IO port 6 pin 6 + BSP_IO_PORT_06_PIN_7 = 0x0607, ///< IO port 6 pin 7 + + BSP_IO_PORT_07_PIN_0 = 0x0700, ///< IO port 7 pin 0 + BSP_IO_PORT_07_PIN_1 = 0x0701, ///< IO port 7 pin 1 + BSP_IO_PORT_07_PIN_2 = 0x0702, ///< IO port 7 pin 2 + BSP_IO_PORT_07_PIN_3 = 0x0703, ///< IO port 7 pin 3 + BSP_IO_PORT_07_PIN_4 = 0x0704, ///< IO port 7 pin 4 + BSP_IO_PORT_07_PIN_5 = 0x0705, ///< IO port 7 pin 5 + BSP_IO_PORT_07_PIN_6 = 0x0706, ///< IO port 7 pin 6 + BSP_IO_PORT_07_PIN_7 = 0x0707, ///< IO port 7 pin 7 + + BSP_IO_PORT_08_PIN_0 = 0x0800, ///< IO port 8 pin 0 + BSP_IO_PORT_08_PIN_1 = 0x0801, ///< IO port 8 pin 1 + BSP_IO_PORT_08_PIN_2 = 0x0802, ///< IO port 8 pin 2 + BSP_IO_PORT_08_PIN_3 = 0x0803, ///< IO port 8 pin 3 + BSP_IO_PORT_08_PIN_4 = 0x0804, ///< IO port 8 pin 4 + BSP_IO_PORT_08_PIN_5 = 0x0805, ///< IO port 8 pin 5 + BSP_IO_PORT_08_PIN_6 = 0x0806, ///< IO port 8 pin 6 + BSP_IO_PORT_08_PIN_7 = 0x0807, ///< IO port 8 pin 7 + + BSP_IO_PORT_09_PIN_0 = 0x0900, ///< IO port 9 pin 0 + BSP_IO_PORT_09_PIN_1 = 0x0901, ///< IO port 9 pin 1 + BSP_IO_PORT_09_PIN_2 = 0x0902, ///< IO port 9 pin 2 + BSP_IO_PORT_09_PIN_3 = 0x0903, ///< IO port 9 pin 3 + BSP_IO_PORT_09_PIN_4 = 0x0904, ///< IO port 9 pin 4 + BSP_IO_PORT_09_PIN_5 = 0x0905, ///< IO port 9 pin 5 + BSP_IO_PORT_09_PIN_6 = 0x0906, ///< IO port 9 pin 6 + BSP_IO_PORT_09_PIN_7 = 0x0907, ///< IO port 9 pin 7 + + BSP_IO_PORT_10_PIN_0 = 0x0A00, ///< IO port 10 pin 0 + BSP_IO_PORT_10_PIN_1 = 0x0A01, ///< IO port 10 pin 1 + BSP_IO_PORT_10_PIN_2 = 0x0A02, ///< IO port 10 pin 2 + BSP_IO_PORT_10_PIN_3 = 0x0A03, ///< IO port 10 pin 3 + BSP_IO_PORT_10_PIN_4 = 0x0A04, ///< IO port 10 pin 4 + BSP_IO_PORT_10_PIN_5 = 0x0A05, ///< IO port 10 pin 5 + BSP_IO_PORT_10_PIN_6 = 0x0A06, ///< IO port 10 pin 6 + BSP_IO_PORT_10_PIN_7 = 0x0A07, ///< IO port 10 pin 7 + + BSP_IO_PORT_11_PIN_0 = 0x0B00, ///< IO port 11 pin 0 + BSP_IO_PORT_11_PIN_1 = 0x0B01, ///< IO port 11 pin 1 + BSP_IO_PORT_11_PIN_2 = 0x0B02, ///< IO port 11 pin 2 + BSP_IO_PORT_11_PIN_3 = 0x0B03, ///< IO port 11 pin 3 + BSP_IO_PORT_11_PIN_4 = 0x0B04, ///< IO port 11 pin 4 + BSP_IO_PORT_11_PIN_5 = 0x0B05, ///< IO port 11 pin 5 + BSP_IO_PORT_11_PIN_6 = 0x0B06, ///< IO port 11 pin 6 + BSP_IO_PORT_11_PIN_7 = 0x0B07, ///< IO port 11 pin 7 + + BSP_IO_PORT_12_PIN_0 = 0x0C00, ///< IO port 12 pin 0 + BSP_IO_PORT_12_PIN_1 = 0x0C01, ///< IO port 12 pin 1 + BSP_IO_PORT_12_PIN_2 = 0x0C02, ///< IO port 12 pin 2 + BSP_IO_PORT_12_PIN_3 = 0x0C03, ///< IO port 12 pin 3 + BSP_IO_PORT_12_PIN_4 = 0x0C04, ///< IO port 12 pin 4 + BSP_IO_PORT_12_PIN_5 = 0x0C05, ///< IO port 12 pin 5 + BSP_IO_PORT_12_PIN_6 = 0x0C06, ///< IO port 12 pin 6 + BSP_IO_PORT_12_PIN_7 = 0x0C07, ///< IO port 12 pin 7 + + BSP_IO_PORT_13_PIN_0 = 0x0D00, ///< IO port 13 pin 0 + BSP_IO_PORT_13_PIN_1 = 0x0D01, ///< IO port 13 pin 1 + BSP_IO_PORT_13_PIN_2 = 0x0D02, ///< IO port 13 pin 2 + BSP_IO_PORT_13_PIN_3 = 0x0D03, ///< IO port 13 pin 3 + BSP_IO_PORT_13_PIN_4 = 0x0D04, ///< IO port 13 pin 4 + BSP_IO_PORT_13_PIN_5 = 0x0D05, ///< IO port 13 pin 5 + BSP_IO_PORT_13_PIN_6 = 0x0D06, ///< IO port 13 pin 6 + BSP_IO_PORT_13_PIN_7 = 0x0D07, ///< IO port 13 pin 7 + + BSP_IO_PORT_14_PIN_0 = 0x0E00, ///< IO port 14 pin 0 + BSP_IO_PORT_14_PIN_1 = 0x0E01, ///< IO port 14 pin 1 + BSP_IO_PORT_14_PIN_2 = 0x0E02, ///< IO port 14 pin 2 + BSP_IO_PORT_14_PIN_3 = 0x0E03, ///< IO port 14 pin 3 + BSP_IO_PORT_14_PIN_4 = 0x0E04, ///< IO port 14 pin 4 + BSP_IO_PORT_14_PIN_5 = 0x0E05, ///< IO port 14 pin 5 + BSP_IO_PORT_14_PIN_6 = 0x0E06, ///< IO port 14 pin 6 + BSP_IO_PORT_14_PIN_7 = 0x0E07, ///< IO port 14 pin 7 + + BSP_IO_PORT_15_PIN_0 = 0x0F00, ///< IO port 15 pin 0 + BSP_IO_PORT_15_PIN_1 = 0x0F01, ///< IO port 15 pin 1 + BSP_IO_PORT_15_PIN_2 = 0x0F02, ///< IO port 15 pin 2 + BSP_IO_PORT_15_PIN_3 = 0x0F03, ///< IO port 15 pin 3 + BSP_IO_PORT_15_PIN_4 = 0x0F04, ///< IO port 15 pin 4 + BSP_IO_PORT_15_PIN_5 = 0x0F05, ///< IO port 15 pin 5 + BSP_IO_PORT_15_PIN_6 = 0x0F06, ///< IO port 15 pin 6 + BSP_IO_PORT_15_PIN_7 = 0x0F07, ///< IO port 15 pin 7 + + BSP_IO_PORT_16_PIN_0 = 0x1000, ///< IO port 16 pin 0 + BSP_IO_PORT_16_PIN_1 = 0x1001, ///< IO port 16 pin 1 + BSP_IO_PORT_16_PIN_2 = 0x1002, ///< IO port 16 pin 2 + BSP_IO_PORT_16_PIN_3 = 0x1003, ///< IO port 16 pin 3 + BSP_IO_PORT_16_PIN_4 = 0x1004, ///< IO port 16 pin 4 + BSP_IO_PORT_16_PIN_5 = 0x1005, ///< IO port 16 pin 5 + BSP_IO_PORT_16_PIN_6 = 0x1006, ///< IO port 16 pin 6 + BSP_IO_PORT_16_PIN_7 = 0x1007, ///< IO port 16 pin 7 + + BSP_IO_PORT_17_PIN_0 = 0x1100, ///< IO port 17 pin 0 + BSP_IO_PORT_17_PIN_1 = 0x1101, ///< IO port 17 pin 1 + BSP_IO_PORT_17_PIN_2 = 0x1102, ///< IO port 17 pin 2 + BSP_IO_PORT_17_PIN_3 = 0x1103, ///< IO port 17 pin 3 + BSP_IO_PORT_17_PIN_4 = 0x1104, ///< IO port 17 pin 4 + BSP_IO_PORT_17_PIN_5 = 0x1105, ///< IO port 17 pin 5 + BSP_IO_PORT_17_PIN_6 = 0x1106, ///< IO port 17 pin 6 + BSP_IO_PORT_17_PIN_7 = 0x1107, ///< IO port 17 pin 7 + + BSP_IO_PORT_18_PIN_0 = 0x1200, ///< IO port 18 pin 0 + BSP_IO_PORT_18_PIN_1 = 0x1201, ///< IO port 18 pin 1 + BSP_IO_PORT_18_PIN_2 = 0x1202, ///< IO port 18 pin 2 + BSP_IO_PORT_18_PIN_3 = 0x1203, ///< IO port 18 pin 3 + BSP_IO_PORT_18_PIN_4 = 0x1204, ///< IO port 18 pin 4 + BSP_IO_PORT_18_PIN_5 = 0x1205, ///< IO port 18 pin 5 + BSP_IO_PORT_18_PIN_6 = 0x1206, ///< IO port 18 pin 6 + BSP_IO_PORT_18_PIN_7 = 0x1207, ///< IO port 18 pin 7 + + BSP_IO_PORT_19_PIN_0 = 0x1300, ///< IO port 19 pin 0 + BSP_IO_PORT_19_PIN_1 = 0x1301, ///< IO port 19 pin 1 + BSP_IO_PORT_19_PIN_2 = 0x1302, ///< IO port 19 pin 2 + BSP_IO_PORT_19_PIN_3 = 0x1303, ///< IO port 19 pin 3 + BSP_IO_PORT_19_PIN_4 = 0x1304, ///< IO port 19 pin 4 + BSP_IO_PORT_19_PIN_5 = 0x1305, ///< IO port 19 pin 5 + BSP_IO_PORT_19_PIN_6 = 0x1306, ///< IO port 19 pin 6 + BSP_IO_PORT_19_PIN_7 = 0x1307, ///< IO port 19 pin 7 + + BSP_IO_PORT_20_PIN_0 = 0x1400, ///< IO port 20 pin 0 + BSP_IO_PORT_20_PIN_1 = 0x1401, ///< IO port 20 pin 1 + BSP_IO_PORT_20_PIN_2 = 0x1402, ///< IO port 20 pin 2 + BSP_IO_PORT_20_PIN_3 = 0x1403, ///< IO port 20 pin 3 + BSP_IO_PORT_20_PIN_4 = 0x1404, ///< IO port 20 pin 4 + BSP_IO_PORT_20_PIN_5 = 0x1405, ///< IO port 20 pin 5 + BSP_IO_PORT_20_PIN_6 = 0x1406, ///< IO port 20 pin 6 + BSP_IO_PORT_20_PIN_7 = 0x1407, ///< IO port 20 pin 7 + + BSP_IO_PORT_21_PIN_0 = 0x1500, ///< IO port 21 pin 0 + BSP_IO_PORT_21_PIN_1 = 0x1501, ///< IO port 21 pin 1 + BSP_IO_PORT_21_PIN_2 = 0x1502, ///< IO port 21 pin 2 + BSP_IO_PORT_21_PIN_3 = 0x1503, ///< IO port 21 pin 3 + BSP_IO_PORT_21_PIN_4 = 0x1504, ///< IO port 21 pin 4 + BSP_IO_PORT_21_PIN_5 = 0x1505, ///< IO port 21 pin 5 + BSP_IO_PORT_21_PIN_6 = 0x1506, ///< IO port 21 pin 6 + BSP_IO_PORT_21_PIN_7 = 0x1507, ///< IO port 21 pin 7 + + BSP_IO_PORT_22_PIN_0 = 0x1600, ///< IO port 22 pin 0 + BSP_IO_PORT_22_PIN_1 = 0x1601, ///< IO port 22 pin 1 + BSP_IO_PORT_22_PIN_2 = 0x1602, ///< IO port 22 pin 2 + BSP_IO_PORT_22_PIN_3 = 0x1603, ///< IO port 22 pin 3 + BSP_IO_PORT_22_PIN_4 = 0x1604, ///< IO port 22 pin 4 + BSP_IO_PORT_22_PIN_5 = 0x1605, ///< IO port 22 pin 5 + BSP_IO_PORT_22_PIN_6 = 0x1606, ///< IO port 22 pin 6 + BSP_IO_PORT_22_PIN_7 = 0x1607, ///< IO port 22 pin 7 + + BSP_IO_PORT_23_PIN_0 = 0x1700, ///< IO port 23 pin 0 + BSP_IO_PORT_23_PIN_1 = 0x1701, ///< IO port 23 pin 1 + BSP_IO_PORT_23_PIN_2 = 0x1702, ///< IO port 23 pin 2 + BSP_IO_PORT_23_PIN_3 = 0x1703, ///< IO port 23 pin 3 + BSP_IO_PORT_23_PIN_4 = 0x1704, ///< IO port 23 pin 4 + BSP_IO_PORT_23_PIN_5 = 0x1705, ///< IO port 23 pin 5 + BSP_IO_PORT_23_PIN_6 = 0x1706, ///< IO port 23 pin 6 + BSP_IO_PORT_23_PIN_7 = 0x1707, ///< IO port 23 pin 7 + + BSP_IO_PORT_24_PIN_0 = 0x1800, ///< IO port 24 pin 0 + BSP_IO_PORT_24_PIN_1 = 0x1801, ///< IO port 24 pin 1 + BSP_IO_PORT_24_PIN_2 = 0x1802, ///< IO port 24 pin 2 + BSP_IO_PORT_24_PIN_3 = 0x1803, ///< IO port 24 pin 3 + BSP_IO_PORT_24_PIN_4 = 0x1804, ///< IO port 24 pin 4 + BSP_IO_PORT_24_PIN_5 = 0x1805, ///< IO port 24 pin 5 + BSP_IO_PORT_24_PIN_6 = 0x1806, ///< IO port 24 pin 6 + BSP_IO_PORT_24_PIN_7 = 0x1807, ///< IO port 24 pin 7 +} bsp_io_port_pin_t; + +/** Offset for pin safety region access */ +typedef enum e_bsp_io_region +{ + BSP_IO_REGION_NOT_SAFE = 0, ///< Non safety region + BSP_IO_REGION_SAFE = BSP_IO_REGION_ADDRESS_DIFF, ///< Safety region +} bsp_io_region_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +extern volatile uint32_t g_protect_port_counter; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Set the output level of the pin in the specified region. + * + * @param[in] region The target IO region + * @param[in] pin The pin + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinSet (bsp_io_region_t region, bsp_io_port_pin_t pin) +{ + /* Casting to a uint8_t type is valid because only the lower 8 bits of pin(uint16_t) are extracted by masking on + * the right side. */ + ((R_PORT_COMMON_Type *) (R_PORT_NSR_BASE + region))->P[pin >> + BSP_IO_PRV_PORT_OFFSET] |= + (uint8_t) (1UL << (pin & BSP_IO_PRV_8BIT_MASK)); +} + +/*******************************************************************************************************************//** + * Clear the output level of the pin in the specified region. + * + * @param[in] region The target IO region + * @param[in] pin The pin + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinClear (bsp_io_region_t region, bsp_io_port_pin_t pin) +{ + /* Casting to a uint8_t type is valid because only the lower 8 bits of pin(uint16_t) are extracted by masking on + * the right side. */ + ((R_PORT_COMMON_Type *) (R_PORT_NSR_BASE + region))->P[pin >> BSP_IO_PRV_PORT_OFFSET] &= + (uint8_t) (~(1UL << (pin & BSP_IO_PRV_8BIT_MASK))); +} + +/*******************************************************************************************************************//** + * Toggle the output level of the pin in the specified region. + * + * @param[in] region The target IO region + * @param[in] pin The pin + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinToggle (bsp_io_region_t region, bsp_io_port_pin_t pin) +{ + /* Casting to a uint8_t type is valid because only the lower 8 bits of pin(uint16_t) are extracted by masking on + * the right side. */ + ((R_PORT_COMMON_Type *) (R_PORT_NSR_BASE + region))->P[pin >> + BSP_IO_PRV_PORT_OFFSET] ^= + (uint8_t) (1UL << (pin & BSP_IO_PRV_8BIT_MASK)); +} + +/*******************************************************************************************************************//** + * Read the input level of the pin in the specified region. + * + * @param[in] region The target IO region + * @param[in] pin The pin + * + * @retval Current input level + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_BSP_FastPinRead (bsp_io_region_t region, bsp_io_port_pin_t pin) +{ + return (uint32_t) ((((R_PORT_COMMON_Type *) (R_PORT_NSR_BASE + region))->PIN[pin >> BSP_IO_PRV_PORT_OFFSET]) >> + (pin & BSP_IO_PRV_8BIT_MASK)) & 0x00000001UL; +} + +/*******************************************************************************************************************//** + * Set the output value of the port in the specified region. All pins in the port must be set to the same IO region to + * use this function. + * + * @param[in] region The target IO region + * @param[in] port The port + * @param[in] set_value The setting value + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PortWrite (bsp_io_region_t region, bsp_io_port_t port, uint8_t set_value) +{ + ((R_PORT_COMMON_Type *) (R_PORT_NSR_BASE + region))->P[port >> BSP_IO_PRV_PORT_OFFSET] = set_value; +} + +/*******************************************************************************************************************//** + * Read the input value of the port in the specified region. All pins in the port must be set to the same IO region to + * use this function. + * + * @param[in] region The target IO region + * @param[in] port The port + * + * @retval Current input value + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_BSP_PortRead (bsp_io_region_t region, bsp_io_port_t port) +{ + return (uint32_t) (((R_PORT_COMMON_Type *) (R_PORT_NSR_BASE + region))->PIN[port >> BSP_IO_PRV_PORT_OFFSET]); +} + +/*******************************************************************************************************************//** + * Enable access to the PFS registers. Uses a reference counter to protect against interrupts that could occur + * via multiple threads or an ISR re-entering this code. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinAccessEnable (void) +{ +#if BSP_CFG_PORT_PROTECT + + /** Get the current state of interrupts */ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /** If this is first entry then allow writing of PFS. */ + if (0 == g_protect_port_counter) + { + /** Disable protection using PRCR register. */ + + /** When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ + R_RWP_NS->PRCRN = ((R_RWP_NS->PRCRN | BSP_IO_PRV_PRCR_KEY) | BSP_IO_REG_PROTECT_GPIO); + R_RWP_S->PRCRS = ((R_RWP_S->PRCRS | BSP_IO_PRV_PRCR_KEY) | BSP_IO_REG_PROTECT_GPIO); + } + + /** Increment the protect counter */ + g_protect_port_counter++; + + /** Restore the interrupt state */ + FSP_CRITICAL_SECTION_EXIT; +#endif +} + +/*******************************************************************************************************************//** + * Disable access to the PFS registers. Uses a reference counter to protect against interrupts that could occur via + * multiple threads or an ISR re-entering this code. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinAccessDisable (void) +{ +#if BSP_CFG_PORT_PROTECT + + /** Get the current state of interrupts */ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /** Is it safe to disable PFS register? */ + if (0 != g_protect_port_counter) + { + /* Decrement the protect counter */ + g_protect_port_counter--; + } + + /** Is it safe to disable writing of PFS? */ + if (0 == g_protect_port_counter) + { + /** Enable protection using PRCR register. */ + + /** When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ + R_RWP_NS->PRCRN = ((R_RWP_NS->PRCRN | BSP_IO_PRV_PRCR_KEY) & (uint16_t) (~BSP_IO_REG_PROTECT_GPIO)); + R_RWP_S->PRCRS = ((R_RWP_S->PRCRS | BSP_IO_PRV_PRCR_KEY) & (uint16_t) (~BSP_IO_REG_PROTECT_GPIO)); + } + + /** Restore the interrupt state */ + FSP_CRITICAL_SECTION_EXIT; +#endif +} + +/*******************************************************************************************************************//** + * Read IO region of the pin. + * + * @param[in] pin The pin + * + * @retval BSP_IO_REGION_SAFE IO region of the pin is safety + * @retval BSP_IO_REGION_NOT_SAFE IO region of the pin is non-safety + * + * This function can be given as an argument to pin/port access functions described below. When used in a function + * starting with R_BSP_Port, any one pin in the port should be given as an argument to this function. + * R_BSP_PinSet(), R_BSP_PinClear(), R_BSP_PinToggle(), R_BSP_FastPinRead(), R_BSP_PortWrite(), R_BSP_PortRead() + * + * @note This function can be used to get the region of a specified pin, but the overhead should be considered if this + * function is executed each time the pin is accessed. When accessing the same pin repeatedly, it is recommended + * that the value obtained by this function be held in a variable beforehand, and the value of the variable be + * used as the region argument of the pin access function. + **********************************************************************************************************************/ +__STATIC_INLINE bsp_io_region_t R_BSP_IoRegionGet (bsp_io_port_pin_t pin) +{ + /* Casting to a uint32_t type is valid because the range of values represented by uint32_t is not over in the + * calculation process of the right-hand side. */ + uint32_t aselp = + ((uint32_t) ((R_PTADR->RSELP[pin >> BSP_IO_PRV_PORT_OFFSET]) >> (pin & BSP_IO_PRV_8BIT_MASK)) & 0x00000001UL); + + if (0U == aselp) + { + return BSP_IO_REGION_SAFE; + } + else + { + return BSP_IO_REGION_NOT_SAFE; + } +} + +/** @} (end addtogroup BSP_IO) */ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.c new file mode 100644 index 00000000000..3fe92cc3e2d --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.c @@ -0,0 +1,50 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Initialize interrupt controller. + * + * @retval None + **********************************************************************************************************************/ +void bsp_irq_cfg (void) +{ + bsp_irq_core_cfg(); +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.h new file mode 100644 index 00000000000..f8fa8e2d021 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_irq.h @@ -0,0 +1,236 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_IRQ_H +#define BSP_IRQ_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#if defined(BSP_CFG_CORE_CR52) + #include "cr/bsp_irq_core.h" +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Sets the ISR context associated with the requested IRQ. + * + * @param[in] irq IRQ number (parameter checking must ensure the IRQ number is valid before calling this + * function. + * @param[in] p_context ISR context for IRQ. + **********************************************************************************************************************/ +__STATIC_INLINE void R_FSP_IsrContextSet (IRQn_Type const irq, void * p_context) +{ + /* This provides access to the ISR context array defined in bsp_irq.c. This is an inline function instead of + * being part of bsp_irq.c for performance considerations because it is used in interrupt service routines. */ + r_fsp_irq_context_set(irq, p_context); +} + +/*******************************************************************************************************************//** + * Clear the GIC pending interrupt. + * + * @param[in] irq Interrupt for which to clear the Pending bit. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqClearPending (IRQn_Type irq) +{ + r_bsp_irq_clear_pending(irq); +} + +/*******************************************************************************************************************//** + * Get the GIC pending interrupt. + * + * @param[in] irq Interrupt that gets a pending bit.. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @return Value indicating the status of the level interrupt. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_BSP_IrqPendingGet (IRQn_Type irq) +{ + return r_bsp_irq_pending_get(irq); +} + +/*******************************************************************************************************************//** + * Sets the interrupt priority and context. + * + * @param[in] irq The IRQ number to configure. + * @param[in] priority GIC priority of the interrupt + * @param[in] p_context The interrupt context is a pointer to data required in the ISR. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqCfg (IRQn_Type const irq, uint32_t priority, void * p_context) +{ + r_bsp_irq_cfg(irq, priority); + + /* Store the context. The context is recovered in the ISR. */ + R_FSP_IsrContextSet(irq, p_context); +} + +/*******************************************************************************************************************//** + * Enable the IRQ in the GIC (Without clearing the pending bit). + * + * @param[in] irq The IRQ number to enable. Note that the enums listed for IRQn_Type are only those for the + * Cortex Processor Exceptions Numbers. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqEnableNoClear (IRQn_Type const irq) +{ + r_bsp_irq_enable_no_clear(irq); +} + +/*******************************************************************************************************************//** + * Enable the IRQ in the GIC (With clearing the pending bit). + * + * @param[in] irq The IRQ number to enable. Note that the enums listed for IRQn_Type are only those for the + * Cortex Processor Exceptions Numbers. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqEnable (IRQn_Type const irq) +{ + /* Clear pending interrupts in the GIC. */ + R_BSP_IrqClearPending(irq); + + /* Enable the interrupt in the GIC. */ + R_BSP_IrqEnableNoClear(irq); +} + +/*******************************************************************************************************************//** + * Disables interrupts in the GIC. + * + * @param[in] irq The IRQ number to disable in the GIC. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqDisable (IRQn_Type const irq) +{ + r_bsp_irq_disable(irq); +} + +/*******************************************************************************************************************//** + * Sets the interrupt priority and context, clears pending interrupts, then enables the interrupt. + * + * @param[in] irq Interrupt number. + * @param[in] priority GIC priority of the interrupt + * @param[in] p_context The interrupt context is a pointer to data required in the ISR. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqCfgEnable (IRQn_Type const irq, uint32_t priority, void * p_context) +{ + R_BSP_IrqCfg(irq, priority, p_context); + R_BSP_IrqEnable(irq); +} + +/*******************************************************************************************************************//** + * @brief Finds the ISR context associated with the requested IRQ. + * + * @param[in] irq IRQ number (parameter checking must ensure the IRQ number is valid before calling this + * function. + * @return ISR context for IRQ. + **********************************************************************************************************************/ +__STATIC_INLINE void * R_FSP_IsrContextGet (IRQn_Type const irq) +{ + /* This provides access to the ISR context array defined in bsp_irq.c. This is an inline function instead of + * being part of bsp_irq.c for performance considerations because it is used in interrupt service routines. */ + return gp_renesas_isr_context[irq + BSP_VECTOR_NUM_OFFSET]; +} + +/*******************************************************************************************************************//** + * Sets the interrupt detect type. + * + * @param[in] irq The IRQ number to configure. + * @param[in] detect_type GIC detect type of the interrupt (0 : active-HIGH level, 1 : rising edge-triggerd). + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqDetectTypeSet (IRQn_Type const irq, uint32_t detect_type) +{ + r_bsp_irq_detect_type_set(irq, detect_type); +} + +/*******************************************************************************************************************//** + * Sets the interrupt Group. + * + * @param[in] irq The IRQ number to configure. + * @param[in] interrupt_group GIC interrupt group number ( 0 : FIQ, 1 : IRQ ). + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqGroupSet (IRQn_Type const irq, uint32_t interrupt_group) +{ + r_bsp_irq_group_set(irq, interrupt_group); +} + +/*******************************************************************************************************************//** + * Sets the interrupt mask level. + * + * @param[in] mask_level The interrupt mask level + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqMaskLevelSet (uint32_t mask_level) +{ + FSP_CRITICAL_SECTION_SET_STATE(mask_level << BSP_FEATURE_BSP_IRQ_PRIORITY_POS_BIT); +} + +/*******************************************************************************************************************//** + * Gets the interrupt mask level. + * + * @return Value indicating the interrupt mask level. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_BSP_IrqMaskLevelGet (void) +{ + return (uint32_t) ((FSP_CRITICAL_SECTION_GET_CURRENT_STATE() >> BSP_FEATURE_BSP_IRQ_PRIORITY_POS_BIT) & + 0x0000001FUL); +} + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_irq_cfg(void); // Used internally by BSP + +/** @} (end addtogroup BSP_MCU_PRV) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_mcu_api.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_mcu_api.h new file mode 100644 index 00000000000..12eab87147f --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_mcu_api.h @@ -0,0 +1,64 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_MCU_API_H +#define BSP_MCU_API_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef struct st_bsp_event_info +{ + IRQn_Type irq; + elc_event_t event; +} bsp_event_info_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void R_BSP_RegisterProtectEnable(bsp_reg_protect_t regs_to_protect); +void R_BSP_RegisterProtectDisable(bsp_reg_protect_t regs_to_unprotect); +void R_BSP_SoftwareDelay(uint32_t delay, bsp_delay_units_t units); +void R_BSP_SystemReset(void); +void R_BSP_CPUReset(bsp_reset_t cpu); +void R_BSP_CPUResetRelease(bsp_reset_t cpu); +void R_BSP_ModuleResetEnable(bsp_module_reset_t module_to_enable); +void R_BSP_ModuleResetDisable(bsp_module_reset_t module_to_disable); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_module_stop.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_module_stop.h new file mode 100644 index 00000000000..fa92dd9cdb6 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_module_stop.h @@ -0,0 +1,228 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_MODULE_H +#define BSP_MODULE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Cancels the module stop state. + * + * @param ip fsp_ip_t enum value for the module to be stopped + * @param channel The channel. Use channel 0 for modules without channels. + **********************************************************************************************************************/ +#define R_BSP_MODULE_START(ip, channel) {FSP_CRITICAL_SECTION_DEFINE; \ + FSP_CRITICAL_SECTION_ENTER; \ + BSP_MSTP_REG_ ## ip(channel) &= ~BSP_MSTP_BIT_ ## ip(channel); \ + BSP_MSTP_REG_ ## ip(channel); \ + BSP_MSTP_DMY_ ## ip(channel); \ + BSP_MSTP_DMY_ ## ip(channel); \ + BSP_MSTP_DMY_ ## ip(channel); \ + BSP_MSTP_DMY_ ## ip(channel); \ + BSP_MSTP_DMY_ ## ip(channel); \ + FSP_CRITICAL_SECTION_EXIT;} + +/*******************************************************************************************************************//** + * Enables the module stop state. + * + * @param ip fsp_ip_t enum value for the module to be stopped + * @param channel The channel. Use channel 0 for modules without channels. + **********************************************************************************************************************/ +#define R_BSP_MODULE_STOP(ip, channel) {FSP_CRITICAL_SECTION_DEFINE; \ + FSP_CRITICAL_SECTION_ENTER; \ + BSP_MSTP_REG_ ## ip(channel) |= BSP_MSTP_BIT_ ## ip(channel); \ + BSP_MSTP_REG_ ## ip(channel); \ + FSP_CRITICAL_SECTION_EXIT;} + +/** @} (end addtogroup BSP_MCU) */ + +#define BSP_MSTP_REG_FSP_IP_BSC(channel) R_SYSC_NS->MSTPCRA +#define BSP_MSTP_BIT_FSP_IP_BSC(channel) (1U); +#define BSP_MSTP_DMY_FSP_IP_BSC(channel) R_BSC->SDCR; + +#define BSP_MSTP_REG_FSP_IP_XSPI(channel) R_SYSC_NS->MSTPCRA +#define BSP_MSTP_BIT_FSP_IP_XSPI(channel) (1U << (4U + channel)); +#define BSP_MSTP_DMY_FSP_IP_XSPI(channel) (0 >= channel) ? R_XSPI0->WRAPCFG : R_XSPI1->WRAPCFG + +#define BSP_MSTP_REG_FSP_IP_SCI(channel) *((4U >= channel) ? &R_SYSC_NS->MSTPCRA : &R_SYSC_S->MSTPCRG) +#define BSP_MSTP_BIT_FSP_IP_SCI(channel) ((4U >= channel) ? (1U << (8U + channel)) : (1U)); +#define BSP_MSTP_DMY_FSP_IP_SCI(channel) (0 >= channel) ? R_SCI0->RDR : ((1 >= channel) ? R_SCI1->RDR : \ + ((2 >= \ + channel) ? R_SCI2->RDR : ((3 >= \ + channel) \ + ? R_SCI3 \ + ->RDR : \ + ((4 \ + >= \ + channel) \ + ? R_SCI4 \ + ->RDR : \ + R_SCI5-> \ + RDR)))) + +#define BSP_MSTP_REG_FSP_IP_IIC(channel) *((1U >= channel) ? &R_SYSC_NS->MSTPCRB : &R_SYSC_S->MSTPCRG) +#define BSP_MSTP_BIT_FSP_IP_IIC(channel) ((1U >= channel) ? (1U << (0U + channel)) : (1U << (1U))); +#define BSP_MSTP_DMY_FSP_IP_IIC(channel) (0 >= channel) ? R_IIC0->ICCR1 : ((1 >= channel) ? R_IIC1->ICCR1 \ + : R_IIC2->ICCR1) + +#define BSP_MSTP_REG_FSP_IP_SPI(channel) *((2U >= channel) ? &R_SYSC_NS->MSTPCRB : &R_SYSC_S->MSTPCRG) +#define BSP_MSTP_BIT_FSP_IP_SPI(channel) ((2U >= channel) ? (1U << (4U + channel)) : (1U << (2U))); +#define BSP_MSTP_DMY_FSP_IP_SPI(channel) (0 >= channel) ? R_SPI0->SPCKD : ((1 >= channel) ? R_SPI1->SPCKD : \ + ((2 >= \ + channel) ? R_SPI2->SPCKD : R_SPI3 \ + ->SPCKD)) + +#define BSP_MSTP_REG_FSP_IP_MTU3(channel) R_SYSC_NS->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_MTU3(channel) (1U); +#define BSP_MSTP_DMY_FSP_IP_MTU3(channel) R_MTU0->TCR; + +#define BSP_MSTP_REG_FSP_IP_GPT(channel) *((13U >= channel) ? &R_SYSC_NS->MSTPCRC : &R_SYSC_S->MSTPCRG) +#define BSP_MSTP_BIT_FSP_IP_GPT(channel) ((6U >= channel) ? (1U << (1U)) : ((13U >= channel) ? \ + (1U << (2U)) : (1U << (3U)))); +#define BSP_MSTP_DMY_FSP_IP_GPT(channel) (6 >= \ + channel) ? R_GPT0->GTSTR : ((13 >= \ + channel) ? R_GPT7->GTSTR : R_GPT14-> \ + GTSTR); +#define BSP_MSTP_REG_FSP_IP_TFU(channel) R_SYSC_NS->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_TFU(channel) (1U << (5U)); +#define BSP_MSTP_DMY_FSP_IP_TFU(channel) R_TFU->TRGSTS; + +#define BSP_MSTP_REG_FSP_IP_ADC12(channel) R_SYSC_NS->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_ADC12(channel) (1U << (6U + channel)); +#define BSP_MSTP_DMY_FSP_IP_ADC12(channel) (0 >= channel) ? R_ADC120->ADCSR : R_ADC121->ADCSR; + +#define BSP_MSTP_REG_FSP_IP_DSMIF(channel) R_SYSC_NS->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_DSMIF(channel) (1U << (0U + channel)); +#define BSP_MSTP_DMY_FSP_IP_DSMIF(channel) (0 >= channel) ? R_DSMIF0->DSSEICR : R_DSMIF1->DSSEICR + +#define BSP_MSTP_REG_FSP_IP_CMT(channel) R_SYSC_NS->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_CMT(channel) (1U << (2U + channel)); +#define BSP_MSTP_DMY_FSP_IP_CMT(channel) (0 >= \ + channel) ? R_CMT->UNT[0].CMSTR0 : ((1 >= \ + channel) ? R_CMT->UNT[1].CMSTR0 \ + : R_CMT->UNT[2].CMSTR0) + +#define BSP_MSTP_REG_FSP_IP_CMTW(channel) R_SYSC_NS->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_CMTW(channel) (1U << (5U + channel)); +#define BSP_MSTP_DMY_FSP_IP_CMTW(channel) (0 >= channel) ? R_CMTW0->CMWSTR : R_CMTW1->CMWSTR + +#define BSP_MSTP_REG_FSP_IP_TSU(channel) R_SYSC_NS->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_TSU(channel) (1U << (7U)); +#define BSP_MSTP_DMY_FSP_IP_TSU(channel) R_TSU->TSUSM; + +#define BSP_MSTP_REG_FSP_IP_DOC(channel) R_SYSC_NS->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_DOC(channel) (1U << (8U)); +#define BSP_MSTP_DMY_FSP_IP_DOC(channel) R_DOC->DOCR + +#define BSP_MSTP_REG_FSP_IP_CRC(channel) *((0U == channel) ? &R_SYSC_NS->MSTPCRD : &R_SYSC_S->MSTPCRG) +#define BSP_MSTP_BIT_FSP_IP_CRC(channel) ((0U == channel) ? (1U << (9U)) : (1U << (4U))); +#define BSP_MSTP_DMY_FSP_IP_CRC(channel) (0 >= channel) ? R_CRC0->CRCDIR : R_CRC1->CRCDIR; + +#define BSP_MSTP_REG_FSP_IP_CANFD(channel) R_SYSC_NS->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_CANFD(channel) (1U << (10U)); +#define BSP_MSTP_DMY_FSP_IP_CANFD(channel) R_CANFD->CFDGIPV; + +#define BSP_MSTP_REG_FSP_IP_CKIO(channel) R_SYSC_NS->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_CKIO(channel) (1U << (11U)); +#define BSP_MSTP_DMY_FSP_IP_CKIO(channel) ; + +#define BSP_MSTP_REG_FSP_IP_GMAC(channel) R_SYSC_NS->MSTPCRE +#define BSP_MSTP_BIT_FSP_IP_GMAC(channel) (1U); +#define BSP_MSTP_DMY_FSP_IP_GMAC(channel) R_GMAC->MAC_Configuration + +#define BSP_MSTP_REG_FSP_IP_ETHSW(channel) R_SYSC_NS->MSTPCRE +#define BSP_MSTP_BIT_FSP_IP_ETHSW(channel) (1U << (1U)); +#define BSP_MSTP_DMY_FSP_IP_ETHSW(channel) R_ETHSW->REVISION + +#define BSP_MSTP_REG_FSP_IP_ESC(channel) R_SYSC_NS->MSTPCRE +#define BSP_MSTP_BIT_FSP_IP_ESC(channel) (1U << (2U)); +#define BSP_MSTP_DMY_FSP_IP_ESC(channel) R_ESC->TYPE; + +#define BSP_MSTP_REG_FSP_IP_ETHSS(channel) R_SYSC_NS->MSTPCRE +#define BSP_MSTP_BIT_FSP_IP_ETHSS(channel) (1U << (3U)); +#define BSP_MSTP_DMY_FSP_IP_ETHSS(channel) R_ETHSS->PRCMD + +#define BSP_MSTP_REG_FSP_IP_ENCIF(channel) R_SYSC_NS->MSTPCRE +#define BSP_MSTP_BIT_FSP_IP_ENCIF(channel) (1U << (4U)); +#define BSP_MSTP_DMY_FSP_IP_ENCIF(channel) ; + +#define BSP_MSTP_REG_FSP_IP_USBHS(channel) R_SYSC_NS->MSTPCRE +#define BSP_MSTP_BIT_FSP_IP_USBHS(channel) (1U << (8U)); +#define BSP_MSTP_DMY_FSP_IP_USBHS(channel) R_USBHC->HCREVISION; + +#define BSP_MSTP_REG_FSP_IP_TRACECLOCK(channel) R_SYSC_S->MSTPCRF +#define BSP_MSTP_BIT_FSP_IP_TRACECLOCK(channel) (1U << (0U)); +#define BSP_MSTP_DMY_FSP_IP_TRACECLOCK(channel) ; + +#define BSP_MSTP_REG_FSP_IP_RTC(channel) R_SYSC_S->MSTPCRG +#define BSP_MSTP_BIT_FSP_IP_RTC(channel) (1U << (5U)); +#define BSP_MSTP_DMY_FSP_IP_RTC(channel) R_RTC->RTCA0CTL0; + +#define BSP_MSTP_REG_FSP_IP_CLMA(channel) R_SYSC_S->MSTPCRG +#define BSP_MSTP_BIT_FSP_IP_CLMA(channel) ((2U >= channel) ? \ + (1U << (9U + channel)) : (1U << (8U))); +#define BSP_MSTP_DMY_FSP_IP_CLMA(channel) (0 >= \ + channel) ? R_CLMA0->CTL0 : ((1 >= \ + channel) ? R_CLMA1->CTL0 : ((2 >= \ + channel) ? \ + R_CLMA2-> \ + CTL0 : \ + R_CLMA3-> \ + CTL0)); + +#define BSP_MSTP_REG_FSP_IP_SHOSTIF(channel) R_SYSC_S->MSTPCRI +#define BSP_MSTP_BIT_FSP_IP_SHOSTIF(channel) (1U << (1U)); +#define BSP_MSTP_DMY_FSP_IP_SHOSTIF(channel) ; + +#define BSP_MSTP_REG_FSP_IP_PHOSTIF(channel) R_SYSC_S->MSTPCRI +#define BSP_MSTP_BIT_FSP_IP_PHOSTIF(channel) (1U << (0U)); +#define BSP_MSTP_DMY_FSP_IP_PHOSTIF(channel) ; + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.c new file mode 100644 index 00000000000..8db202648dc --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.c @@ -0,0 +1,116 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Key code for writing PRCR register. */ +#define BSP_PRV_PRCR_KEY (0xA500U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/** Used for holding reference counters for protection bits. */ +volatile uint16_t g_protect_counters[] = +{ + 0U, 0U, 0U, 0U +}; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** Masks for setting or clearing the PRCR register. Use -1 for size because PWPR in MPC is used differently. */ +static const uint16_t g_prcr_masks[] = +{ + 0x0001U, /* PRC0. */ + 0x0002U, /* PRC1. */ + 0x0004U, /* PRC2. */ + 0x0008U, /* PRC3. */ +}; + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Enable register protection. Registers that are protected cannot be written to. Register protection is + * enabled by using the Protect Register (PRCR) and the MPC's Write-Protect Register (PWPR). + * + * @param[in] regs_to_protect Registers which have write protection enabled. + **********************************************************************************************************************/ +void R_BSP_RegisterProtectEnable (bsp_reg_protect_t regs_to_protect) +{ + /* Is it safe to disable write access? */ + if (0U != g_protect_counters[regs_to_protect]) + { + /* Decrement the protect counter */ + g_protect_counters[regs_to_protect]--; + } + + /* Is it safe to disable write access? */ + if (0U == g_protect_counters[regs_to_protect]) + { + /** Enable protection using PRCR register. */ + + /** When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ + R_RWP_NS->PRCRN = ((R_RWP_NS->PRCRN | BSP_PRV_PRCR_KEY) & (uint16_t) (~g_prcr_masks[regs_to_protect])); + R_RWP_S->PRCRS = ((R_RWP_S->PRCRS | BSP_PRV_PRCR_KEY) & (uint16_t) (~g_prcr_masks[regs_to_protect])); + } +} + +/*******************************************************************************************************************//** + * Disable register protection. Registers that are protected cannot be written to. Register protection is + * disabled by using the Protect Register (PRCR) and the MPC's Write-Protect Register (PWPR). + * + * @param[in] regs_to_unprotect Registers which have write protection disabled. + **********************************************************************************************************************/ +void R_BSP_RegisterProtectDisable (bsp_reg_protect_t regs_to_unprotect) +{ + /* If this is first entry then disable protection. */ + if (0U == g_protect_counters[regs_to_unprotect]) + { + /** Disable protection using PRCR register. */ + + /** When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ + R_RWP_NS->PRCRN = ((R_RWP_NS->PRCRN | BSP_PRV_PRCR_KEY) | g_prcr_masks[regs_to_unprotect]); + R_RWP_S->PRCRS = ((R_RWP_S->PRCRS | BSP_PRV_PRCR_KEY) | g_prcr_masks[regs_to_unprotect]); + } + + /** Increment the protect counter */ + g_protect_counters[regs_to_unprotect]++; +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.h new file mode 100644 index 00000000000..63917ea4690 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_register_protection.h @@ -0,0 +1,76 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_REGISTER_PROTECTION_H +#define BSP_REGISTER_PROTECTION_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** The different types of registers that can be protected. */ +typedef enum e_bsp_reg_protect +{ + /** Enables writing to the registers related to the clock generation circuit. */ + BSP_REG_PROTECT_CGC = 0, + + /** Enables writing to the registers related to low power consumption and reset. */ + BSP_REG_PROTECT_LPC_RESET, + + /** Enables writing to the registers related to GPIO. */ + BSP_REG_PROTECT_GPIO, + + /** Enables writing to the registers related to Non-Safety reg. */ + BSP_REG_PROTECT_SYSTEM, +} bsp_reg_protect_t; + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_register_protect_open(void); // Used internally by BSP + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.c new file mode 100644 index 00000000000..a8b44d2419d --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.c @@ -0,0 +1,139 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_RESET_MRCTL_BIT_SHIFT_MASK (0x0000001FU) +#define BSP_RESET_MRCTL_SELECT_MASK (0x001F0000U) +#define BSP_RESET_MRCTL_REGION_SELECT_MASK (0x00400000U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Occur the system software reset. + **********************************************************************************************************************/ +void R_BSP_SystemReset (void) +{ + /* System software reset. */ + R_SYSC_S->SWRSYS = BSP_PRV_RESET_KEY; +} + +/*******************************************************************************************************************//** + * Occur the CPU software reset. + * + * @param[in] cpu to be reset state. + **********************************************************************************************************************/ +void R_BSP_CPUReset (bsp_reset_t cpu) +{ + /* CPU0 software reset. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET); + R_SYSC_S->SWRCPU0 = BSP_PRV_RESET_KEY; + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET); + __WFI(); + FSP_PARAMETER_NOT_USED(cpu); +} + +/*******************************************************************************************************************//** + * Release the CPU reset state. + * + * @param[in] cpu to be release reset state. + **********************************************************************************************************************/ +void R_BSP_CPUResetRelease (bsp_reset_t cpu) +{ + /* Release CPU0 reset state. */ + R_SYSC_S->SWRCPU0 = BSP_PRV_RESET_RELEASE_KEY; + FSP_PARAMETER_NOT_USED(cpu); +} + +/*******************************************************************************************************************//** + * Enable module reset state. + * + * @param[in] module_to_enable Modules to enable module reset state. + **********************************************************************************************************************/ +void R_BSP_ModuleResetEnable (bsp_module_reset_t module_to_enable) +{ + volatile uint32_t mrctl; + uint32_t * p_reg; + + /** When MRCTLn register exists in the safety region, + * it is necessary to add an offset of safety region. */ + p_reg = (uint32_t *) &R_SYSC_NS->MRCTLA + + (((module_to_enable & BSP_RESET_MRCTL_SELECT_MASK) >> 16U) + + (module_to_enable & BSP_RESET_MRCTL_REGION_SELECT_MASK)); + mrctl = 1U << (module_to_enable & BSP_RESET_MRCTL_BIT_SHIFT_MASK); + + /** Enable module reset state using MRCTLE register. */ + *p_reg |= mrctl; + + /** To ensure processing after module reset. */ + mrctl = *(volatile uint32_t *) (p_reg); +} + +/*******************************************************************************************************************//** + * Disable module reset state. + * + * @param[in] module_to_disable Modules to disable module reset state. + **********************************************************************************************************************/ +void R_BSP_ModuleResetDisable (bsp_module_reset_t module_to_disable) +{ + volatile uint32_t mrctl; + uint32_t * p_reg; + + /** When MRCTLn register exists in the safety region, + * it is necessary to add an offset of safety region. */ + p_reg = (uint32_t *) &R_SYSC_NS->MRCTLA + + (((module_to_disable & BSP_RESET_MRCTL_SELECT_MASK) >> 16U) + + (module_to_disable & BSP_RESET_MRCTL_REGION_SELECT_MASK)); + mrctl = 1U << (module_to_disable & BSP_RESET_MRCTL_BIT_SHIFT_MASK); + + /** Disable module stop state using MRCTLn register. */ + *p_reg &= ~mrctl; + + /** In order to secure processing after release from module reset, + * dummy read the same register at least three times. + * Refer to "Notes on Module Reset Control Register Operation" of the RZ microprocessor manual. */ + mrctl = *(volatile uint32_t *) (p_reg); + mrctl = *(volatile uint32_t *) (p_reg); + mrctl = *(volatile uint32_t *) (p_reg); +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.h new file mode 100644 index 00000000000..10cd9c44db4 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_reset.h @@ -0,0 +1,150 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_RESET_H +#define BSP_RESET_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Key code for writing reset register. */ +#define BSP_PRV_RESET_KEY (0x4321A501U) +#define BSP_PRV_RESET_RELEASE_KEY (0x00000000U) + +/* MRCTL register selection. Bits 16-20 assign values in order for the module control registers (A=0, E=4). + * Bit 24 indicates whether MRCTLn register is in the safety region. */ +#define BSP_RESET_MRCTLA_SELECT (0x00000000U) +#define BSP_RESET_MRCTLE_SELECT (0x00040000U) +#define BSP_RESET_MRCTLI_SELECT (0x00480000U) + +/* MRCTL register bit number. */ +#define BSP_RESET_MRCTL_BIT0_SHIFT (0x00000000U) +#define BSP_RESET_MRCTL_BIT1_SHIFT (0x00000001U) +#define BSP_RESET_MRCTL_BIT2_SHIFT (0x00000002U) +#define BSP_RESET_MRCTL_BIT3_SHIFT (0x00000003U) +#define BSP_RESET_MRCTL_BIT4_SHIFT (0x00000004U) +#define BSP_RESET_MRCTL_BIT5_SHIFT (0x00000005U) +#define BSP_RESET_MRCTL_BIT6_SHIFT (0x00000006U) +#define BSP_RESET_MRCTL_BIT7_SHIFT (0x00000007U) +#define BSP_RESET_MRCTL_BIT8_SHIFT (0x00000008U) +#define BSP_RESET_MRCTL_BIT9_SHIFT (0x00000009U) +#define BSP_RESET_MRCTL_BIT10_SHIFT (0x0000000AU) +#define BSP_RESET_MRCTL_BIT11_SHIFT (0x0000000BU) +#define BSP_RESET_MRCTL_BIT12_SHIFT (0x0000000CU) +#define BSP_RESET_MRCTL_BIT13_SHIFT (0x0000000DU) +#define BSP_RESET_MRCTL_BIT14_SHIFT (0x0000000EU) +#define BSP_RESET_MRCTL_BIT15_SHIFT (0x0000000FU) +#define BSP_RESET_MRCTL_BIT16_SHIFT (0x00000010U) +#define BSP_RESET_MRCTL_BIT17_SHIFT (0x00000011U) +#define BSP_RESET_MRCTL_BIT18_SHIFT (0x00000012U) +#define BSP_RESET_MRCTL_BIT19_SHIFT (0x00000013U) +#define BSP_RESET_MRCTL_BIT20_SHIFT (0x00000014U) +#define BSP_RESET_MRCTL_BIT21_SHIFT (0x00000015U) +#define BSP_RESET_MRCTL_BIT22_SHIFT (0x00000016U) +#define BSP_RESET_MRCTL_BIT23_SHIFT (0x00000017U) +#define BSP_RESET_MRCTL_BIT24_SHIFT (0x00000018U) +#define BSP_RESET_MRCTL_BIT25_SHIFT (0x00000019U) +#define BSP_RESET_MRCTL_BIT26_SHIFT (0x0000001AU) +#define BSP_RESET_MRCTL_BIT27_SHIFT (0x0000001BU) +#define BSP_RESET_MRCTL_BIT28_SHIFT (0x0000001CU) +#define BSP_RESET_MRCTL_BIT29_SHIFT (0x0000001DU) +#define BSP_RESET_MRCTL_BIT30_SHIFT (0x0000001EU) +#define BSP_RESET_MRCTL_BIT31_SHIFT (0x0000001FU) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** CPU to be reset target.*/ +typedef enum e_bsp_reset +{ + BSP_RESET_CR52_0 = 0, ///< Software reset for CR52_0 +} bsp_reset_t; + +/** The different types of registers that can control the reset of peripheral modules related to Ethernet. */ +typedef enum e_bsp_module_reset +{ + /** Enables writing to the registers related to xSPI Unit 0 reset control. */ + BSP_MODULE_RESET_XSPI0 = (BSP_RESET_MRCTLA_SELECT | BSP_RESET_MRCTL_BIT4_SHIFT), + + /** Enables writing to the registers related to xSPI Unit 1 reset control. */ + BSP_MODULE_RESET_XSPI1 = (BSP_RESET_MRCTLA_SELECT | BSP_RESET_MRCTL_BIT5_SHIFT), + + /** Enables writing to the registers related to GMAC (PCLKH clock domain) reset control. */ + BSP_MODULE_RESET_GMAC0_PCLKH = (BSP_RESET_MRCTLE_SELECT | BSP_RESET_MRCTL_BIT0_SHIFT), + + /** Enables writing to the registers related to GMAC (PCLKM clock domain) reset control. */ + BSP_MODULE_RESET_GMAC0_PCLKM = (BSP_RESET_MRCTLE_SELECT | BSP_RESET_MRCTL_BIT1_SHIFT), + + /** Enables writing to the registers related to ETHSW reset control. */ + BSP_MODULE_RESET_ETHSW = (BSP_RESET_MRCTLE_SELECT | BSP_RESET_MRCTL_BIT2_SHIFT), + + /** Enables writing to the registers related to ESC (Bus clock domain) reset control. */ + BSP_MODULE_RESET_ESC_BUS = (BSP_RESET_MRCTLE_SELECT | BSP_RESET_MRCTL_BIT3_SHIFT), + + /** Enables writing to the registers related to ESC (IP clock domain) reset control. */ + BSP_MODULE_RESET_ESC_IP = (BSP_RESET_MRCTLE_SELECT | BSP_RESET_MRCTL_BIT4_SHIFT), + + /** Enables writing to the registers related to Ethernet subsystem register reset control. */ + BSP_MODULE_RESET_ESC_ETH_SUBSYSTEM = (BSP_RESET_MRCTLE_SELECT | BSP_RESET_MRCTL_BIT5_SHIFT), + + /** Enables writing to the registers related to MII converter reset control. */ + BSP_MODULE_RESET_MII = (BSP_RESET_MRCTLE_SELECT | BSP_RESET_MRCTL_BIT6_SHIFT), + + /** Enables writing to the registers related to PHOSTIF reset control. */ + BSP_MODULE_RESET_PHOSTIF = (BSP_RESET_MRCTLI_SELECT | BSP_RESET_MRCTL_BIT0_SHIFT), + + /** Enables writing to the registers related to SHOSTIF (Master bus clock domain) reset control. */ + BSP_MODULE_RESET_SHOSTIF_MASTER_BUS_CLOCK = (BSP_RESET_MRCTLI_SELECT | BSP_RESET_MRCTL_BIT1_SHIFT), + + /** Enables writing to the registers related to SHOSTIF (Slave bus clock domain) reset control. */ + BSP_MODULE_RESET_SHOSTIF_SLAVE_BUS_CLOCK = (BSP_RESET_MRCTLI_SELECT | BSP_RESET_MRCTL_BIT2_SHIFT), + + /** Enables writing to the registers related to SHOSTIF (IP clock domain) reset control. */ + BSP_MODULE_RESET_SHOSTIF_IP_CLOCK = (BSP_RESET_MRCTLI_SELECT | BSP_RESET_MRCTL_BIT3_SHIFT), +} bsp_module_reset_t; + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_sbrk.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_sbrk.c new file mode 100644 index 00000000000..35759244d0e --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_sbrk.c @@ -0,0 +1,108 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#if defined(__GNUC__) && !defined(__ARMCC_VERSION) +#include +#include +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +caddr_t _sbrk(int incr); + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * FSP implementation of the standard library _sbrk() function. + * @param[in] inc The number of bytes being asked for by malloc(). + * + * @note This function overrides the _sbrk version that exists in the newlib library that is linked with. + * That version improperly relies on the SP as part of it's allocation strategy. This is bad in general and + * worse in an RTOS environment. This version insures that we allocate the byte pool requested by malloc() + * only from our allocated HEAP area. Also note that newlib is pre-built and forces the pagesize used by + * malloc() to be 4096. That requires that we have a HEAP of at least 4096 if we are to support malloc(). + * @retval Address of allocated area if successful, -1 otherwise. + **********************************************************************************************************************/ +caddr_t _sbrk (int incr) +{ + extern char _Heap_Begin __asm("__HeapBase"); ///< Defined by the linker. + + extern char _Heap_Limit __asm("__HeapLimit"); ///< Defined by the linker. + + uint32_t bytes = (uint32_t) incr; + static char * current_heap_end = 0; + char * current_block_address; + + if (current_heap_end == 0) + { + current_heap_end = &_Heap_Begin; + } + + current_block_address = current_heap_end; + + /* The returned address must be aligned to a word boundary to prevent hard faults on cores that do not support + * unaligned access. We assume the heap starts on a word boundary and make sure all allocations are a multiple + * of 4. */ + bytes = (bytes + 3U) & (~3U); + if (current_heap_end + bytes > &_Heap_Limit) + { + /** Heap has overflowed */ + errno = ENOMEM; + + return (caddr_t) -1; + } + + current_heap_end += bytes; + + return (caddr_t) current_block_address; +} + +#endif + +/******************************************************************************************************************//** + * @} (end addtogroup BSP_MCU) + *********************************************************************************************************************/ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_tfu.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_tfu.h new file mode 100644 index 00000000000..42304d7d02f --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/bsp_tfu.h @@ -0,0 +1,228 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef RENESAS_TFU +#define RENESAS_TFU + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* Mathematical Functions includes. */ +#ifdef __cplusplus + #include +#else + #include +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#define R_TFU_HYPOT_SCALING_FACTOR 0.607252935F + +#ifdef __GNUC__ /* and (arm)clang */ + #if (__STDC_VERSION__ < 199901L) && defined(__STRICT_ANSI__) && !defined(__cplusplus) + +/* No form of inline is available, it happens only when -std=c89, gnu89 and + * above are OK */ + #warning \ + "-std=c89 doesn't support type checking on TFU. Please use -std=gnu89 or higher for example -std=c99" + #else + #ifdef __GNUC_GNU_INLINE__ + +/* gnu89 semantics of inline and extern inline are essentially the exact + * opposite of those in C99 */ + #define BSP_TFU_INLINE extern inline __attribute__((always_inline)) + #else /* __GNUC_STDC_INLINE__ */ + #define BSP_TFU_INLINE static inline __attribute__((always_inline)) + #endif + #endif +#elif __ICCARM__ + #define BSP_TFU_INLINE +#else + #error "Compiler not supported!" +#endif + +#if BSP_CFG_USE_TFU_MATHLIB + #define sinf(x) __sinf(x) + #define cosf(x) __cosf(x) + #define atan2f(y, x) __atan2f(y, x) + #define hypotf(x, y) __hypotf(x, y) + #define atan2hypotf(y, x, a, h) __atan2hypotf(y, x, a, h) + #define sincosf(a, s, c) __sincosf(a, s, c) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Calculates sine of the given angle. + * @param[in] angle The value of an angle in radian. + * + * @retval Sine value of an angle. + **********************************************************************************************************************/ +#if __ICCARM__ + #pragma inline = forced +#endif +BSP_TFU_INLINE float __sinf (float angle) +{ + /* Set the angle to R_TFU->SCDT1 */ + R_TFU->SCDT1 = angle; + + /* Read sin from R_TFU->SCDT1 */ + return R_TFU->SCDT1; +} + +/*******************************************************************************************************************//** + * Calculates cosine of the given angle. + * @param[in] angle The value of an angle in radian. + * + * @retval Cosine value of an angle. + **********************************************************************************************************************/ +#if __ICCARM__ + #pragma inline = forced +#endif +BSP_TFU_INLINE float __cosf (float angle) +{ + /* Set the angle to R_TFU->SCDT1 */ + R_TFU->SCDT1 = angle; + + /* Read cos from R_TFU->SCDT1 */ + return R_TFU->SCDT0; +} + +/*******************************************************************************************************************//** + * Calculates sine and cosine of the given angle. + * @param[in] angle The value of an angle in radian. + * @param[out] sin Sine value of an angle. + * @param[out] cos Cosine value of an angle. + **********************************************************************************************************************/ +#if __ICCARM__ + #pragma inline = forced +#endif +BSP_TFU_INLINE void __sincosf (float angle, float * sin, float * cos) +{ + /* Set the angle to R_TFU->SCDT1 */ + R_TFU->SCDT1 = angle; + + /* Read sin from R_TFU->SCDT1 */ + *sin = R_TFU->SCDT1; + + /* Read sin from R_TFU->SCDT1 */ + *cos = R_TFU->SCDT0; +} + +/*******************************************************************************************************************//** + * Calculates the arc tangent based on given X-cordinate and Y-cordinate values. + * @param[in] y_cord Y-Axis cordinate value. + * @param[in] x_cord X-Axis cordinate value. + * + * @retval Arc tangent for given values. + **********************************************************************************************************************/ +#if __ICCARM__ + #pragma inline = forced +#endif +BSP_TFU_INLINE float __atan2f (float y_cord, float x_cord) +{ + /* Set X-cordinate to R_TFU->ATDT0 */ + R_TFU->ATDT0 = x_cord; + + /* set Y-cordinate to R_TFU->ATDT1 */ + R_TFU->ATDT1 = y_cord; + + /* Read arctan(y/x) from R_TFU->ATDT1 */ + return R_TFU->ATDT1; +} + +/*******************************************************************************************************************//** + * Calculates the hypotenuse based on given X-cordinate and Y-cordinate values. + * @param[in] y_cord Y-cordinate value. + * @param[in] x_cord X-cordinate value. + * + * @retval Hypotenuse for given values. + **********************************************************************************************************************/ +#if __ICCARM__ + #pragma inline = forced +#endif +BSP_TFU_INLINE float __hypotf (float x_cord, float y_cord) +{ + /* Set X-coordinate to R_TFU->ATDT0 */ + R_TFU->ATDT0 = x_cord; + + /* set Y-coordinate to R_TFU->ATDT1 */ + R_TFU->ATDT1 = y_cord; + + /* Read sqrt (x_cord2 + y_cord2) from R_TFU->ATDT0 */ + return R_TFU->ATDT0 * R_TFU_HYPOT_SCALING_FACTOR; +} + +/*******************************************************************************************************************//** + * Calculates the arc tangent and hypotenuse based on given X-cordinate and Y-cordinate values. + * @param[in] y_cord Y-cordinate value. + * @param[in] x_cord X-cordinate value. + * @param[out] atan2 Arc tangent for given values. + * @param[out] hypot Hypotenuse for given values. + **********************************************************************************************************************/ +#if __ICCARM__ + #pragma inline = forced +#endif +BSP_TFU_INLINE void __atan2hypotf (float y_cord, float x_cord, float * atan2, float * hypot) +{ + /* Set X-coordinate to R_TFU->ATDT0 */ + R_TFU->ATDT0 = x_cord; + + /* set Y-coordinate to R_TFU->ATDT1 */ + R_TFU->ATDT1 = y_cord; + + /* Read arctan(y/x) from R_TFU->ATDT1 */ + *atan2 = R_TFU->ATDT1; + + /* Read sqrt (x_cord2 + y_cord2) from R_TFU->ATDT0 */ + *hypot = R_TFU->ATDT0 * R_TFU_HYPOT_SCALING_FACTOR; +} + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif /* RENESAS_TFU */ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.c new file mode 100644 index 00000000000..f85e3dbdae9 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.c @@ -0,0 +1,48 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Powers on and off the L3 cache way. + **********************************************************************************************************************/ +void r_bsp_cache_l3_power_ctrl (void) +{ + /* Does nothing because CR52 does not have the CLUSTERPWRCTLR register. */ +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.h new file mode 100644 index 00000000000..a0ca23c5e6b --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_cache_core.h @@ -0,0 +1,52 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_CACHE_CORE_H +#define BSP_CACHE_CORE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void r_bsp_cache_l3_power_ctrl(void); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.c new file mode 100644 index 00000000000..9eea2c8a1da --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.c @@ -0,0 +1,63 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * This assembly language routine takes roughly 4 cycles per loop. 2 additional cycles + * occur when the loop exits. The 'naked' attribute indicates that the specified function does not need + * prologue/epilogue sequences generated by the compiler. + * @param[in] loop_cnt The number of loops to iterate. + **********************************************************************************************************************/ +BSP_ATTRIBUTE_STACKLESS void r_bsp_software_delay_loop (__attribute__((unused)) uint32_t loop_cnt) +{ + __asm volatile ("sw_delay_loop: \n" + +#if defined(__ICCARM__) || defined(__ARMCC_VERSION) + " subs r0, #1 \n" ///< 1 cycle +#elif defined(__GNUC__) + " sub r0, r0, #1 \n" ///< 1 cycle +#endif + + " cmp r0, #0 \n" ///< 1 cycle + + " bne sw_delay_loop \n" ///< 2 cycles + + " bx lr \n"); ///< 2 cycles +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.h new file mode 100644 index 00000000000..1e31cd2b4e1 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_delay_core.h @@ -0,0 +1,63 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_DELAY_CORE_H +#define BSP_DELAY_CORE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* The number of cycles required per software delay loop. */ +#ifndef BSP_DELAY_LOOP_CYCLES + #define BSP_DELAY_LOOP_CYCLES (4) +#endif + +/* Calculates the number of delay loops to pass to r_bsp_software_delay_loop to achieve at least the requested cycle + * count delay. This is 1 loop longer than optimal if cycles is a multiple of BSP_DELAY_LOOP_CYCLES, but it ensures + * the requested number of loops is at least 1 since r_bsp_software_delay_loop cannot be called with a loop count + * of 0. */ +#define BSP_DELAY_LOOPS_CALCULATE(cycles) (((cycles) / BSP_DELAY_LOOP_CYCLES) + 1U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +BSP_ATTRIBUTE_STACKLESS void r_bsp_software_delay_loop(uint32_t loop_cnt); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.c new file mode 100644 index 00000000000..d31ab2fb5b1 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.c @@ -0,0 +1,146 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/** ELC event definitions. */ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_IRQ_UINT32_MAX (0xFFFFFFFFU) + +#define BSP_PRV_CLEAR_REG_MAX (13U) +#define BSP_PRV_ALL_BIT_CLEAR (0xFFFFFFFFU) + +#define BSP_PRV_ID_MASK (0x000003FFU) +#define BSP_PRV_INTERRUPTABLE_NUM (32U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +#if VECTOR_DATA_IRQ_COUNT > 0 +extern fsp_vector_t g_vector_table[BSP_ICU_VECTOR_MAX_ENTRIES]; +#endif +extern fsp_vector_t g_sgi_ppi_vector_table[BSP_CORTEX_VECTOR_TABLE_ENTRIES]; + +extern const uint32_t BSP_GICD_ICFGR_INIT[BSP_NON_SELECTABLE_ICFGR_MAX]; + +/* This table is used to store the context in the ISR. */ +void * gp_renesas_isr_context[BSP_ICU_VECTOR_MAX_ENTRIES + BSP_CORTEX_VECTOR_TABLE_ENTRIES]; + +/* GIC current interrupt ID and variable. */ +IRQn_Type g_current_interrupt_num[BSP_PRV_INTERRUPTABLE_NUM]; +uint8_t g_current_interrupt_pointer = 0; + +const bsp_interrupt_event_t g_interrupt_event_link_select[BSP_ICU_VECTOR_MAX_ENTRIES] BSP_WEAK_REFERENCE = +{ + (bsp_interrupt_event_t) 0 +}; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Using the vector table information section that has been built by the linker and placed into ROM in the + * .vector_info. section, this function will initialize the ICU so that configured ELC events will trigger interrupts + * in the NVIC. + * + **********************************************************************************************************************/ +void bsp_irq_core_cfg (void) +{ + uint32_t gicd_reg_num; + GICD_Type * GICD; + GICR_CONTROL_TARGET_Type * GICR_TARGET0_IFREG; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_IFREG = BSP_PRV_GICR_TARGET0_IFREG_ADDRESS; + + /* Enable Group1 interrupts from the GIC Distributor to the GIC CPU interface. */ + GICD->GICD_CTLR |= 0x00000002UL; + + /* Release Processor Sleep state of the target. */ + GICR_TARGET0_IFREG->GICR_WAKER = 0x00000000UL; + + /* Initialize GICD_ICFGR register for the edge-triggered interrupt. */ + for (gicd_reg_num = 0; gicd_reg_num < BSP_NON_SELECTABLE_ICFGR_MAX; gicd_reg_num++) + { + GICD->GICD_ICFGR[gicd_reg_num] = BSP_GICD_ICFGR_INIT[gicd_reg_num]; + } + + /* Clear the Pending and Active bit for the all interrupts. */ + for (gicd_reg_num = 0; gicd_reg_num < BSP_PRV_CLEAR_REG_MAX; gicd_reg_num++) + { + GICD->GICD_ICPENDR[gicd_reg_num] = BSP_PRV_ALL_BIT_CLEAR; + GICD->GICD_ICACTIVER[gicd_reg_num] = BSP_PRV_ALL_BIT_CLEAR; + } + + __asm volatile ("cpsie i \n" /* Enable IRQ Interrupts */ + "cpsie f \n" /* Enable FIQ Interrupts */ + "cpsie a \n" /* Enable SError Interrupts */ + "isb"); /* Ensuring Context-changing */ +} + +/*******************************************************************************************************************//** + * This function is called first when an interrupt is generated and branches to each interrupt isr function. + * + * @param[in] id GIC INTID used to identify the interrupt. + **********************************************************************************************************************/ +void bsp_common_interrupt_handler (uint32_t id) +{ + uint16_t gic_intid; + IRQn_Type irq; + + /* Get interrupt ID (GIC INTID). */ + gic_intid = (uint16_t) (id & BSP_PRV_ID_MASK); + + irq = (IRQn_Type) (gic_intid - BSP_CORTEX_VECTOR_TABLE_ENTRIES); + + /* Remain the interrupt number */ + g_current_interrupt_num[g_current_interrupt_pointer++] = irq; + __asm volatile ("dmb"); + + BSP_CFG_MULTIPLEX_INTERRUPT_ENABLE + +#if VECTOR_DATA_IRQ_COUNT > 0 + if (BSP_CORTEX_VECTOR_TABLE_ENTRIES <= gic_intid) + { + /* Branch to an interrupt handler. */ + g_vector_table[irq](); + } + else +#endif + { + /* Branch to an interrupt handler. */ + g_sgi_ppi_vector_table[gic_intid](); + } + + g_current_interrupt_pointer--; + + BSP_CFG_MULTIPLEX_INTERRUPT_DISABLE +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.h new file mode 100644 index 00000000000..60588e23256 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/all/cr/bsp_irq_core.h @@ -0,0 +1,347 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_IRQ_CORE_H +#define BSP_IRQ_CORE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_ICU_VECTOR_MAX_ENTRIES (BSP_VECTOR_TABLE_MAX_ENTRIES) + +#define BSP_PRV_GICD_ADDRESS (GICD0) +#define BSP_PRV_GICR_TARGET0_INTREG_ADDRESS (GICR0_TARGET0_INTREG) +#define BSP_PRV_GICR_TARGET0_IFREG_ADDRESS (GICR0_TARGET0_IFREG) + +#define BSP_EVENT_SGI_PPI_ARRAY_NUM (2U) +#define BSP_NON_SELECTABLE_ICFGR_MAX (BSP_VECTOR_TABLE_MAX_ENTRIES / BSP_INTERRUPT_TYPE_OFFSET) + +#define BSP_PRV_IRQ_CONFIG_MASK (0x000000FFU) +#define BSP_PRV_GICD_ICFGR_INT_CONFIG_MASK (1UL << 1UL) + +#define BSP_PRV_GIC_REG_STRIDE04 (4U) +#define BSP_PRV_GIC_REG_STRIDE16 (16U) +#define BSP_PRV_GIC_REG_STRIDE32 (32U) + +#define BSP_PRV_GIC_REG_BITS1 (1U) +#define BSP_PRV_GIC_REG_BITS2 (2U) +#define BSP_PRV_GIC_REG_BITS8 (8U) + +#define BSP_PRV_GIC_REG_MASK_1BIT (1U) + +#define BSP_PRV_GIC_LOWEST_PPI_INTERRUPT_NUM (-17) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +extern void * gp_renesas_isr_context[BSP_ICU_VECTOR_MAX_ENTRIES + BSP_CORTEX_VECTOR_TABLE_ENTRIES]; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Sets the ISR context associated with the requested IRQ. + * + * @param[in] irq IRQ number (parameter checking must ensure the IRQ number is valid before calling this + * function. + * @param[in] p_context ISR context for IRQ. + **********************************************************************************************************************/ +__STATIC_INLINE void r_fsp_irq_context_set (IRQn_Type const irq, void * p_context) +{ + /* This provides access to the ISR context array defined in bsp_irq.c. This is an inline function instead of + * being part of bsp_irq.c for performance considerations because it is used in interrupt service routines. */ + gp_renesas_isr_context[irq + BSP_VECTOR_NUM_OFFSET] = p_context; +} + +/*******************************************************************************************************************//** + * Clear the GIC pending interrupt. + * + * @param[in] irq Interrupt for which to clear the Pending bit. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + **********************************************************************************************************************/ +__STATIC_INLINE void r_bsp_irq_clear_pending (IRQn_Type irq) +{ + GICD_Type * GICD; + GICR_SGI_PPI_Type * GICR_TARGET0_INTREG; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_INTREG = BSP_PRV_GICR_TARGET0_INTREG_ADDRESS; + + if (irq >= 0) + { + uint32_t _irq = (uint32_t) irq; + GICD->GICD_ICPENDR[_irq / BSP_PRV_GIC_REG_STRIDE32] = + (uint32_t) (BSP_PRV_GIC_REG_BITS1 << (_irq % BSP_PRV_GIC_REG_STRIDE32)); + } + else + { + uint32_t _irq = (uint32_t) (irq + BSP_VECTOR_NUM_OFFSET); + GICR_TARGET0_INTREG->GICR_ICPENDR0 = (uint32_t) (BSP_PRV_GIC_REG_BITS1 << _irq); + } +} + +/*******************************************************************************************************************//** + * Get the GIC pending interrupt. + * + * @param[in] irq Interrupt that gets a pending bit.. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @return Value indicating the status of the level interrupt. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t r_bsp_irq_pending_get (IRQn_Type irq) +{ + GICD_Type * GICD; + GICR_SGI_PPI_Type * GICR_TARGET0_INTREG; + uint32_t value = 0; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_INTREG = BSP_PRV_GICR_TARGET0_INTREG_ADDRESS; + + if (irq >= 0) + { + uint32_t _irq = (uint32_t) irq; + uint32_t shift = (_irq % BSP_PRV_GIC_REG_STRIDE32); + value = (GICD->GICD_ISPENDR[_irq / BSP_PRV_GIC_REG_STRIDE32] >> shift) & (uint32_t) (BSP_PRV_GIC_REG_MASK_1BIT); + } + else + { + uint32_t _irq = (uint32_t) (irq + BSP_VECTOR_NUM_OFFSET); + uint32_t shift = _irq; + value = (GICR_TARGET0_INTREG->GICR_ISPENDR0 >> shift) & (uint32_t) (BSP_PRV_GIC_REG_MASK_1BIT); + } + + return value; +} + +/*******************************************************************************************************************//** + * Sets the interrupt priority and context. + * + * @param[in] irq The IRQ number to configure. + * @param[in] priority GIC priority of the interrupt + **********************************************************************************************************************/ +__STATIC_INLINE void r_bsp_irq_cfg (IRQn_Type const irq, uint32_t priority) +{ +#if (52U == __CORTEX_R) + GICD_Type * GICD; + GICR_SGI_PPI_Type * GICR_TARGET0_INTREG; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_INTREG = BSP_PRV_GICR_TARGET0_INTREG_ADDRESS; + + if (irq >= 0) + { + uint32_t _irq = (uint32_t) irq; + + /* Set the interrupt group to 1 (IRQ) */ + GICD->GICD_IGROUPR[_irq / BSP_PRV_GIC_REG_STRIDE32] |= + (uint32_t) (BSP_PRV_GIC_REG_BITS1 << (_irq % BSP_PRV_GIC_REG_STRIDE32)); + + /* Set the interrupt priority */ + GICD->GICD_IPRIORITYR[_irq / BSP_PRV_GIC_REG_STRIDE04] &= + (uint32_t) (~(BSP_PRV_IRQ_CONFIG_MASK << (BSP_PRV_GIC_REG_BITS8 * (_irq % BSP_PRV_GIC_REG_STRIDE04)))); + GICD->GICD_IPRIORITYR[_irq / BSP_PRV_GIC_REG_STRIDE04] |= + (priority << + (BSP_FEATURE_BSP_IRQ_PRIORITY_POS_BIT + (BSP_PRV_GIC_REG_BITS8 * (_irq % BSP_PRV_GIC_REG_STRIDE04)))); + } + else + { + uint32_t _irq = (uint32_t) (irq + BSP_VECTOR_NUM_OFFSET); + + /* Set the interrupt group to 1 (IRQ) */ + GICR_TARGET0_INTREG->GICR_IGROUPR0 |= (uint32_t) (BSP_PRV_GIC_REG_BITS1 << _irq); + + /* Set the interrupt priority */ + GICR_TARGET0_INTREG->GICR_IPRIORITYR[_irq / BSP_PRV_GIC_REG_STRIDE04] &= + (uint32_t) (~(BSP_PRV_IRQ_CONFIG_MASK << (BSP_PRV_GIC_REG_BITS8 * (_irq % BSP_PRV_GIC_REG_STRIDE04)))); + GICR_TARGET0_INTREG->GICR_IPRIORITYR[_irq / BSP_PRV_GIC_REG_STRIDE04] |= + (priority << + (BSP_FEATURE_BSP_IRQ_PRIORITY_POS_BIT + (BSP_PRV_GIC_REG_BITS8 * (_irq % BSP_PRV_GIC_REG_STRIDE04)))); + } +#endif +} + +/*******************************************************************************************************************//** + * Enable the IRQ in the GIC (Without clearing the pending bit). + * + * @param[in] irq The IRQ number to enable. Note that the enums listed for IRQn_Type are only those for the + * Cortex Processor Exceptions Numbers. + **********************************************************************************************************************/ +__STATIC_INLINE void r_bsp_irq_enable_no_clear (IRQn_Type const irq) +{ + GICD_Type * GICD; + GICR_SGI_PPI_Type * GICR_TARGET0_INTREG; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_INTREG = BSP_PRV_GICR_TARGET0_INTREG_ADDRESS; + + if (irq >= 0) + { + uint32_t _irq = (uint32_t) irq; + GICD->GICD_ISENABLER[_irq / BSP_PRV_GIC_REG_STRIDE32] |= + (uint32_t) (BSP_PRV_GIC_REG_BITS1 << (_irq % BSP_PRV_GIC_REG_STRIDE32)); + } + else + { + uint32_t _irq = (uint32_t) (irq + BSP_VECTOR_NUM_OFFSET); + GICR_TARGET0_INTREG->GICR_ISENABLER0 |= (uint32_t) (BSP_PRV_GIC_REG_BITS1 << _irq); + } +} + +/*******************************************************************************************************************//** + * Disables interrupts in the GIC. + * + * @param[in] irq The IRQ number to disable in the GIC. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + **********************************************************************************************************************/ +__STATIC_INLINE void r_bsp_irq_disable (IRQn_Type const irq) +{ + GICD_Type * GICD; + GICR_SGI_PPI_Type * GICR_TARGET0_INTREG; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_INTREG = BSP_PRV_GICR_TARGET0_INTREG_ADDRESS; + + if (irq >= 0) + { + uint32_t _irq = (uint32_t) irq; + GICD->GICD_ICENABLER[_irq / BSP_PRV_GIC_REG_STRIDE32] = + (uint32_t) (BSP_PRV_GIC_REG_BITS1 << (_irq % BSP_PRV_GIC_REG_STRIDE32)); + } + else + { + uint32_t _irq = (uint32_t) (irq + BSP_VECTOR_NUM_OFFSET); + GICR_TARGET0_INTREG->GICR_ICENABLER0 = (uint32_t) (BSP_PRV_GIC_REG_BITS1 << _irq); + } + + __DSB(); + __ISB(); +} + +/*******************************************************************************************************************//** + * Sets the interrupt detect type. + * + * @param[in] irq The IRQ number to configure. + * @param[in] detect_type GIC detect type of the interrupt (0 : active-HIGH level, 1 : rising edge-triggerd). + **********************************************************************************************************************/ +__STATIC_INLINE void r_bsp_irq_detect_type_set (IRQn_Type const irq, uint32_t detect_type) +{ + GICD_Type * GICD; + GICR_SGI_PPI_Type * GICR_TARGET0_INTREG; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_INTREG = BSP_PRV_GICR_TARGET0_INTREG_ADDRESS; + + if (irq >= 0) + { + uint32_t _irq = (uint32_t) irq; + if (0 != detect_type) + { + GICD->GICD_ICFGR[_irq / BSP_PRV_GIC_REG_STRIDE16] |= + (uint32_t) (BSP_PRV_GICD_ICFGR_INT_CONFIG_MASK << + (BSP_PRV_GIC_REG_BITS2 * (_irq % BSP_PRV_GIC_REG_STRIDE16))); + } + else + { + GICD->GICD_ICFGR[_irq / BSP_PRV_GIC_REG_STRIDE16] &= + ~((uint32_t) (BSP_PRV_GICD_ICFGR_INT_CONFIG_MASK << + (BSP_PRV_GIC_REG_BITS2 * (_irq % BSP_PRV_GIC_REG_STRIDE16)))); + } + } + else if (irq >= BSP_PRV_GIC_LOWEST_PPI_INTERRUPT_NUM) + { + uint32_t _irq = (uint32_t) (irq + BSP_VECTOR_NUM_OFFSET); + if (0 != detect_type) + { + GICR_TARGET0_INTREG->GICR_ICFGR1 |= + (uint32_t) (BSP_PRV_GICD_ICFGR_INT_CONFIG_MASK << + (BSP_PRV_GIC_REG_BITS2 * (_irq % BSP_PRV_GIC_REG_STRIDE16))); + } + else + { + GICR_TARGET0_INTREG->GICR_ICFGR1 &= + ~((uint32_t) (BSP_PRV_GICD_ICFGR_INT_CONFIG_MASK << + (BSP_PRV_GIC_REG_BITS2 * (_irq % BSP_PRV_GIC_REG_STRIDE16)))); + } + } + else + { + /* The register that sets the SGI interrupt type (GICR_ICFGR0) is read-only, so do not set it. */ + } +} + +/*******************************************************************************************************************//** + * Sets the interrupt Group. + * + * @param[in] irq The IRQ number to configure. + * @param[in] interrupt_group GIC interrupt group number ( 0 : FIQ, 1 : IRQ ). + **********************************************************************************************************************/ +__STATIC_INLINE void r_bsp_irq_group_set (IRQn_Type const irq, uint32_t interrupt_group) +{ + GICD_Type * GICD; + GICR_SGI_PPI_Type * GICR_TARGET0_INTREG; + + GICD = BSP_PRV_GICD_ADDRESS; + GICR_TARGET0_INTREG = BSP_PRV_GICR_TARGET0_INTREG_ADDRESS; + + if (irq >= 0) + { + uint32_t _irq = (uint32_t) irq; + GICD->GICD_IGROUPR[_irq / BSP_PRV_GIC_REG_STRIDE32] |= (interrupt_group << (_irq % BSP_PRV_GIC_REG_STRIDE32)); + } + else + { + uint32_t _irq = (uint32_t) (irq + BSP_VECTOR_NUM_OFFSET); + GICR_TARGET0_INTREG->GICR_IGROUPR0 |= interrupt_group << _irq; + } +} + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_irq_core_cfg(void); // Used internally by BSP +void bsp_common_interrupt_handler(uint32_t id); + +/** @} (end addtogroup BSP_MCU_PRV) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_elc.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_elc.h new file mode 100644 index 00000000000..8362b2fb7cc --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_elc.h @@ -0,0 +1,523 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_ELC_H +#define BSP_ELC_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU_RZN2L + * @{ + **********************************************************************************************************************/ + +/** Sources of event signals to be linked to other peripherals or the CPU + * @note This list may change based on based on the device. + * */ +typedef enum e_elc_event_rzn2l +{ + ELC_EVENT_INTCPU0 = (0), // Software interrupt 0 + ELC_EVENT_INTCPU1 = (1), // Software interrupt 1 + ELC_EVENT_INTCPU2 = (2), // Software interrupt 2 + ELC_EVENT_INTCPU3 = (3), // Software interrupt 3 + ELC_EVENT_INTCPU4 = (4), // Software interrupt 4 + ELC_EVENT_INTCPU5 = (5), // Software interrupt 5 + ELC_EVENT_IRQ0 = (6), // External pin interrupt 0 + ELC_EVENT_IRQ1 = (7), // External pin interrupt 1 + ELC_EVENT_IRQ2 = (8), // External pin interrupt 2 + ELC_EVENT_IRQ3 = (9), // External pin interrupt 3 + ELC_EVENT_IRQ4 = (10), // External pin interrupt 4 + ELC_EVENT_IRQ5 = (11), // External pin interrupt 5 + ELC_EVENT_IRQ6 = (12), // External pin interrupt 6 + ELC_EVENT_IRQ7 = (13), // External pin interrupt 7 + ELC_EVENT_IRQ8 = (14), // External pin interrupt 8 + ELC_EVENT_IRQ9 = (15), // External pin interrupt 9 + ELC_EVENT_IRQ10 = (16), // External pin interrupt 10 + ELC_EVENT_IRQ11 = (17), // External pin interrupt 11 + ELC_EVENT_IRQ12 = (18), // External pin interrupt 12 + ELC_EVENT_IRQ13 = (19), // External pin interrupt 13 + ELC_EVENT_BSC_CMI = (20), // Refresh compare match interrupt + ELC_EVENT_DMAC0_INT0 = (21), // DMAC0 transfer completion 0 + ELC_EVENT_DMAC0_INT1 = (22), // DMAC0 transfer completion 1 + ELC_EVENT_DMAC0_INT2 = (23), // DMAC0 transfer completion 2 + ELC_EVENT_DMAC0_INT3 = (24), // DMAC0 transfer completion 3 + ELC_EVENT_DMAC0_INT4 = (25), // DMAC0 transfer completion 4 + ELC_EVENT_DMAC0_INT5 = (26), // DMAC0 transfer completion 5 + ELC_EVENT_DMAC0_INT6 = (27), // DMAC0 transfer completion 6 + ELC_EVENT_DMAC0_INT7 = (28), // DMAC0 transfer completion 7 + ELC_EVENT_DMAC1_INT0 = (37), // DMAC1 transfer completion 0 + ELC_EVENT_DMAC1_INT1 = (38), // DMAC1 transfer completion 1 + ELC_EVENT_DMAC1_INT2 = (39), // DMAC1 transfer completion 2 + ELC_EVENT_DMAC1_INT3 = (40), // DMAC1 transfer completion 3 + ELC_EVENT_DMAC1_INT4 = (41), // DMAC1 transfer completion 4 + ELC_EVENT_DMAC1_INT5 = (42), // DMAC1 transfer completion 5 + ELC_EVENT_DMAC1_INT6 = (43), // DMAC1 transfer completion 6 + ELC_EVENT_DMAC1_INT7 = (44), // DMAC1 transfer completion 7 + ELC_EVENT_CMT0_CMI = (53), // CMT0 Compare match + ELC_EVENT_CMT1_CMI = (54), // CMT1 Compare match + ELC_EVENT_CMT2_CMI = (55), // CMT2 Compare match + ELC_EVENT_CMT3_CMI = (56), // CMT3 Compare match + ELC_EVENT_CMT4_CMI = (57), // CMT4 Compare match + ELC_EVENT_CMT5_CMI = (58), // CMT5 Compare match + ELC_EVENT_CMTW0_CMWI = (59), // CMTW0 Compare match + ELC_EVENT_CMTW0_IC0I = (60), // CMTW0 Input capture of register 0 + ELC_EVENT_CMTW0_IC1I = (61), // CMTW0 Input capture of register 1 + ELC_EVENT_CMTW0_OC0I = (62), // CMTW0 Output compare of register 0 + ELC_EVENT_CMTW0_OC1I = (63), // CMTW0 Output compare of register 1 + ELC_EVENT_CMTW1_CMWI = (64), // CMTW1 Compare match + ELC_EVENT_CMTW1_IC0I = (65), // CMTW1 Input capture of register 0 + ELC_EVENT_CMTW1_IC1I = (66), // CMTW1 Input capture of register 1 + ELC_EVENT_CMTW1_OC0I = (67), // CMTW1 Output compare of register 0 + ELC_EVENT_CMTW1_OC1I = (68), // CMTW1 Output compare of register 1 + ELC_EVENT_TGIA0 = (69), // MTU0.TGRA input capture/compare match + ELC_EVENT_TGIB0 = (70), // MTU0.TGRB input capture/compare match + ELC_EVENT_TGIC0 = (71), // MTU0.TGRC input capture/compare match + ELC_EVENT_TGID0 = (72), // MTU0.TGRD input capture/compare match + ELC_EVENT_TCIV0 = (73), // MTU0.TCNT overflow + ELC_EVENT_TGIE0 = (74), // MTU0.TGRE compare match + ELC_EVENT_TGIF0 = (75), // MTU0.TGRF compare match + ELC_EVENT_TGIA1 = (76), // MTU1.TGRA input capture/compare match + ELC_EVENT_TGIB1 = (77), // MTU1.TGRB input capture/compare match + ELC_EVENT_TCIV1 = (78), // MTU1.TCNT overflow + ELC_EVENT_TCIU1 = (79), // MTU1.TCNT underflow + ELC_EVENT_TGIA2 = (80), // MTU2.TGRA input capture/compare match + ELC_EVENT_TGIB2 = (81), // MTU2.TGRB input capture/compare match + ELC_EVENT_TCIV2 = (82), // MTU2.TCNT overflow + ELC_EVENT_TCIU2 = (83), // MTU2.TCNT underflow + ELC_EVENT_TGIA3 = (84), // MTU3.TGRA input capture/compare match + ELC_EVENT_TGIB3 = (85), // MTU3.TGRB input capture/compare match + ELC_EVENT_TGIC3 = (86), // MTU3.TGRC input capture/compare match + ELC_EVENT_TGID3 = (87), // MTU3.TGRD input capture/compare match + ELC_EVENT_TCIV3 = (88), // MTU3.TCNT overflow + ELC_EVENT_TGIA4 = (89), // MTU4.TGRA input capture/compare match + ELC_EVENT_TGIB4 = (90), // MTU4.TGRB input capture/compare match + ELC_EVENT_TGIC4 = (91), // MTU4.TGRC input capture/compare match + ELC_EVENT_TGID4 = (92), // MTU4.TGRD input capture/compare match + ELC_EVENT_TCIV4 = (93), // MTU4.TCNT overflow/underflow + ELC_EVENT_TGIU5 = (94), // MTU5.TGRU input capture/compare match + ELC_EVENT_TGIV5 = (95), // MTU5.TGRV input capture/compare match + ELC_EVENT_TGIW5 = (96), // MTU5.TGRW input capture/compare match + ELC_EVENT_TGIA6 = (97), // MTU6.TGRA input capture/compare match + ELC_EVENT_TGIB6 = (98), // MTU6.TGRB input capture/compare match + ELC_EVENT_TGIC6 = (99), // MTU6.TGRC input capture/compare match + ELC_EVENT_TGID6 = (100), // MTU6.TGRD input capture/compare match + ELC_EVENT_TCIV6 = (101), // MTU6.TCNT overflow + ELC_EVENT_TGIA7 = (102), // MTU7.TGRA input capture/compare match + ELC_EVENT_TGIB7 = (103), // MTU7.TGRB input capture/compare match + ELC_EVENT_TGIC7 = (104), // MTU7.TGRC input capture/compare match + ELC_EVENT_TGID7 = (105), // MTU7.TGRD input capture/compare match + ELC_EVENT_TCIV7 = (106), // MTU7.TCNT overflow/underflow + ELC_EVENT_TGIA8 = (107), // MTU8.TGRA input capture/compare match + ELC_EVENT_TGIB8 = (108), // MTU8.TGRB input capture/compare match + ELC_EVENT_TGIC8 = (109), // MTU8.TGRC input capture/compare match + ELC_EVENT_TGID8 = (110), // MTU8.TGRD input capture/compare match + ELC_EVENT_TCIV8 = (111), // MTU8.TCNT overflow + ELC_EVENT_OEI1 = (112), // Output enable interrupt 1 + ELC_EVENT_OEI2 = (113), // Output enable interrupt 2 + ELC_EVENT_OEI3 = (114), // Output enable interrupt 3 + ELC_EVENT_OEI4 = (115), // Output enable interrupt 4 + ELC_EVENT_GPT0_CCMPA = (116), // GPT0 GTCCRA input capture/compare match + ELC_EVENT_GPT0_CCMPB = (117), // GPT0 GTCCRB input capture/compare match + ELC_EVENT_GPT0_CMPC = (118), // GPT0 GTCCRC compare match + ELC_EVENT_GPT0_CMPD = (119), // GPT0 GTCCRD compare match + ELC_EVENT_GPT0_CMPE = (120), // GPT0 GTCCRE compare match + ELC_EVENT_GPT0_CMPF = (121), // GPT0 GTCCRF compare match + ELC_EVENT_GPT0_OVF = (122), // GPT0 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT0_UDF = (123), // GPT0 GTCNT underflow + ELC_EVENT_GPT0_DTE = (124), // GPT0 Dead time error + ELC_EVENT_GPT1_CCMPA = (125), // GPT1 GTCCRA input capture/compare match + ELC_EVENT_GPT1_CCMPB = (126), // GPT1 GTCCRB input capture/compare match + ELC_EVENT_GPT1_CMPC = (127), // GPT1 GTCCRC compare match + ELC_EVENT_GPT1_CMPD = (128), // GPT1 GTCCRD compare match + ELC_EVENT_GPT1_CMPE = (129), // GPT1 GTCCRE compare match + ELC_EVENT_GPT1_CMPF = (130), // GPT1 GTCCRF compare match + ELC_EVENT_GPT1_OVF = (131), // GPT1 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT1_UDF = (132), // GPT1 GTCNT underflow + ELC_EVENT_GPT1_DTE = (133), // GPT1 Dead time error + ELC_EVENT_GPT2_CCMPA = (134), // GPT2 GTCCRA input capture/compare match + ELC_EVENT_GPT2_CCMPB = (135), // GPT2 GTCCRB input capture/compare match + ELC_EVENT_GPT2_CMPC = (136), // GPT2 GTCCRC compare match + ELC_EVENT_GPT2_CMPD = (137), // GPT2 GTCCRD compare match + ELC_EVENT_GPT2_CMPE = (138), // GPT2 GTCCRE compare match + ELC_EVENT_GPT2_CMPF = (139), // GPT2 GTCCRF compare match + ELC_EVENT_GPT2_OVF = (140), // GPT2 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT2_UDF = (141), // GPT2 GTCNT underflow + ELC_EVENT_GPT2_DTE = (142), // GPT2 Dead time error + ELC_EVENT_GPT3_CCMPA = (143), // GPT3 GTCCRA input capture/compare match + ELC_EVENT_GPT3_CCMPB = (144), // GPT3 GTCCRB input capture/compare match + ELC_EVENT_GPT3_CMPC = (145), // GPT3 GTCCRC compare match + ELC_EVENT_GPT3_CMPD = (146), // GPT3 GTCCRD compare match + ELC_EVENT_GPT3_CMPE = (147), // GPT3 GTCCRE compare match + ELC_EVENT_GPT3_CMPF = (148), // GPT3 GTCCRF compare match + ELC_EVENT_GPT3_OVF = (149), // GPT3 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT3_UDF = (150), // GPT3 GTCNT underflow + ELC_EVENT_GPT3_DTE = (151), // GPT3 Dead time error + ELC_EVENT_GPT4_CCMPA = (152), // GPT4 GTCCRA input capture/compare match + ELC_EVENT_GPT4_CCMPB = (153), // GPT4 GTCCRB input capture/compare match + ELC_EVENT_GPT4_CMPC = (154), // GPT4 GTCCRC compare match + ELC_EVENT_GPT4_CMPD = (155), // GPT4 GTCCRD compare match + ELC_EVENT_GPT4_CMPE = (156), // GPT4 GTCCRE compare match + ELC_EVENT_GPT4_CMPF = (157), // GPT4 GTCCRF compare match + ELC_EVENT_GPT4_OVF = (158), // GPT4 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT4_UDF = (159), // GPT4 GTCNT underflow + ELC_EVENT_GPT4_DTE = (160), // GPT4 Dead time error + ELC_EVENT_GPT5_CCMPA = (161), // GPT5 GTCCRA input capture/compare match + ELC_EVENT_GPT5_CCMPB = (162), // GPT5 GTCCRB input capture/compare match + ELC_EVENT_GPT5_CMPC = (163), // GPT5 GTCCRC compare match + ELC_EVENT_GPT5_CMPD = (164), // GPT5 GTCCRD compare match + ELC_EVENT_GPT5_CMPE = (165), // GPT5 GTCCRE compare match + ELC_EVENT_GPT5_CMPF = (166), // GPT5 GTCCRF compare match + ELC_EVENT_GPT5_OVF = (167), // GPT5 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT5_UDF = (168), // GPT5 GTCNT underflow + ELC_EVENT_GPT5_DTE = (169), // GPT5 Dead time error + ELC_EVENT_GPT6_CCMPA = (170), // GPT6 GTCCRA input capture/compare match + ELC_EVENT_GPT6_CCMPB = (171), // GPT6 GTCCRB input capture/compare match + ELC_EVENT_GPT6_CMPC = (172), // GPT6 GTCCRC compare match + ELC_EVENT_GPT6_CMPD = (173), // GPT6 GTCCRD compare match + ELC_EVENT_GPT6_CMPE = (174), // GPT6 GTCCRE compare match + ELC_EVENT_GPT6_CMPF = (175), // GPT6 GTCCRF compare match + ELC_EVENT_GPT6_OVF = (176), // GPT6 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT6_UDF = (177), // GPT6 GTCNT underflow + ELC_EVENT_GPT6_DTE = (178), // GPT6 Dead time error + ELC_EVENT_GPT7_CCMPA = (179), // GPT7 GTCCRA input capture/compare match + ELC_EVENT_GPT7_CCMPB = (180), // GPT7 GTCCRB input capture/compare match + ELC_EVENT_GPT7_CMPC = (181), // GPT7 GTCCRC compare match + ELC_EVENT_GPT7_CMPD = (182), // GPT7 GTCCRD compare match + ELC_EVENT_GPT7_CMPE = (183), // GPT7 GTCCRE compare match + ELC_EVENT_GPT7_CMPF = (184), // GPT7 GTCCRF compare match + ELC_EVENT_GPT7_OVF = (185), // GPT7 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT7_UDF = (186), // GPT7 GTCNT underflow + ELC_EVENT_GPT7_DTE = (187), // GPT7 Dead time error + ELC_EVENT_GPT8_CCMPA = (188), // GPT8 GTCCRA input capture/compare match + ELC_EVENT_GPT8_CCMPB = (189), // GPT8 GTCCRB input capture/compare match + ELC_EVENT_GPT8_CMPC = (190), // GPT8 GTCCRC compare match + ELC_EVENT_GPT8_CMPD = (191), // GPT8 GTCCRD compare match + ELC_EVENT_GPT8_CMPE = (192), // GPT8 GTCCRE compare match + ELC_EVENT_GPT8_CMPF = (193), // GPT8 GTCCRF compare match + ELC_EVENT_GPT8_OVF = (194), // GPT8 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT8_UDF = (195), // GPT8 GTCNT underflow + ELC_EVENT_GPT8_DTE = (196), // GPT8 Dead time error + ELC_EVENT_GPT9_CCMPA = (197), // GPT9 GTCCRA input capture/compare match + ELC_EVENT_GPT9_CCMPB = (198), // GPT9 GTCCRB input capture/compare match + ELC_EVENT_GPT9_CMPC = (199), // GPT9 GTCCRC compare match + ELC_EVENT_GPT9_CMPD = (200), // GPT9 GTCCRD compare match + ELC_EVENT_GPT9_CMPE = (201), // GPT9 GTCCRE compare match + ELC_EVENT_GPT9_CMPF = (202), // GPT9 GTCCRF compare match + ELC_EVENT_GPT9_OVF = (203), // GPT9 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT9_UDF = (204), // GPT9 GTCNT underflow + ELC_EVENT_GPT9_DTE = (205), // GPT9 Dead time error + ELC_EVENT_GPT10_CCMPA = (206), // GPT10 GTCCRA input capture/compare match + ELC_EVENT_GPT10_CCMPB = (207), // GPT10 GTCCRB input capture/compare match + ELC_EVENT_GPT10_CMPC = (208), // GPT10 GTCCRC compare match + ELC_EVENT_GPT10_CMPD = (209), // GPT10 GTCCRD compare match + ELC_EVENT_GPT10_CMPE = (210), // GPT10 GTCCRE compare match + ELC_EVENT_GPT10_CMPF = (211), // GPT10 GTCCRF compare match + ELC_EVENT_GPT10_OVF = (212), // GPT10 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT10_UDF = (213), // GPT10 GTCNT underflow + ELC_EVENT_GPT10_DTE = (214), // GPT10 Dead time error + ELC_EVENT_GPT11_CCMPA = (215), // GPT11 GTCCRA input capture/compare match + ELC_EVENT_GPT11_CCMPB = (216), // GPT11 GTCCRB input capture/compare match + ELC_EVENT_GPT11_CMPC = (217), // GPT11 GTCCRC compare match + ELC_EVENT_GPT11_CMPD = (218), // GPT11 GTCCRD compare match + ELC_EVENT_GPT11_CMPE = (219), // GPT11 GTCCRE compare match + ELC_EVENT_GPT11_CMPF = (220), // GPT11 GTCCRF compare match + ELC_EVENT_GPT11_OVF = (221), // GPT11 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT11_UDF = (222), // GPT11 GTCNT underflow + ELC_EVENT_GPT11_DTE = (223), // GPT11 Dead time error + ELC_EVENT_GPT12_CCMPA = (224), // GPT12 GTCCRA input capture/compare match + ELC_EVENT_GPT12_CCMPB = (225), // GPT12 GTCCRB input capture/compare match + ELC_EVENT_GPT12_CMPC = (226), // GPT12 GTCCRC compare match + ELC_EVENT_GPT12_CMPD = (227), // GPT12 GTCCRD compare match + ELC_EVENT_GPT12_CMPE = (228), // GPT12 GTCCRE compare match + ELC_EVENT_GPT12_CMPF = (229), // GPT12 GTCCRF compare match + ELC_EVENT_GPT12_OVF = (230), // GPT12 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT12_UDF = (231), // GPT12 GTCNT underflow + ELC_EVENT_GPT12_DTE = (232), // GPT12 Dead time error + ELC_EVENT_GPT13_CCMPA = (233), // GPT13 GTCCRA input capture/compare match + ELC_EVENT_GPT13_CCMPB = (234), // GPT13 GTCCRB input capture/compare match + ELC_EVENT_GPT13_CMPC = (235), // GPT13 GTCCRC compare match + ELC_EVENT_GPT13_CMPD = (236), // GPT13 GTCCRD compare match + ELC_EVENT_GPT13_CMPE = (237), // GPT13 GTCCRE compare match + ELC_EVENT_GPT13_CMPF = (238), // GPT13 GTCCRF compare match + ELC_EVENT_GPT13_OVF = (239), // GPT13 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT13_UDF = (240), // GPT13 GTCNT underflow + ELC_EVENT_GPT13_DTE = (241), // GPT13 Dead time error + ELC_EVENT_POEG0_GROUP0 = (242), // POEG group A interrupt for channels in LLPP + ELC_EVENT_POEG0_GROUP1 = (243), // POEG group B interrupt for channels in LLPP + ELC_EVENT_POEG0_GROUP2 = (244), // POEG group C interrupt for channels in LLPP + ELC_EVENT_POEG0_GROUP3 = (245), // POEG group D interrupt for channels in LLPP + ELC_EVENT_POEG1_GROUP0 = (246), // POEG group A interrupt for channels in NONSAFETY + ELC_EVENT_POEG1_GROUP1 = (247), // POEG group B interrupt for channels in NONSAFETY + ELC_EVENT_POEG1_GROUP2 = (248), // POEG group C interrupt for channels in NONSAFETY + ELC_EVENT_POEG1_GROUP3 = (249), // POEG group D interrupt for channels in NONSAFETY + ELC_EVENT_GMAC_LPI = (250), // GMAC1 energy efficient + ELC_EVENT_GMAC_PMT = (251), // GMAC1 power management + ELC_EVENT_GMAC_SBD = (252), // GMAC1 general interrupt + ELC_EVENT_ETHSW_INTR = (253), // Ethernet Switch interrupt + ELC_EVENT_ETHSW_DLR = (254), // Ethernet Switch DLR interrupt + ELC_EVENT_ETHSW_PRP = (255), // Ethernet Switch PRP interrupt + ELC_EVENT_ETHSW_IHUB = (256), // Ethernet Switch Integrated Hub interrupt + ELC_EVENT_ETHSW_PTRN0 = (257), // Ethernet Switch RX Pattern Matcher interrupt 0 + ELC_EVENT_ETHSW_PTRN1 = (258), // Ethernet Switch RX Pattern Matcher interrupt 1 + ELC_EVENT_ETHSW_PTRN2 = (259), // Ethernet Switch RX Pattern Matcher interrupt 2 + ELC_EVENT_ETHSW_PTRN3 = (260), // Ethernet Switch RX Pattern Matcher interrupt 3 + ELC_EVENT_ETHSW_PTRN4 = (261), // Ethernet Switch RX Pattern Matcher interrupt 4 + ELC_EVENT_ETHSW_PTRN5 = (262), // Ethernet Switch RX Pattern Matcher interrupt 5 + ELC_EVENT_ETHSW_PTRN6 = (263), // Ethernet Switch RX Pattern Matcher interrupt 6 + ELC_EVENT_ETHSW_PTRN7 = (264), // Ethernet Switch RX Pattern Matcher interrupt 7 + ELC_EVENT_ETHSW_PTRN8 = (265), // Ethernet Switch RX Pattern Matcher interrupt 8 + ELC_EVENT_ETHSW_PTRN9 = (266), // Ethernet Switch RX Pattern Matcher interrupt 9 + ELC_EVENT_ETHSW_PTRN10 = (267), // Ethernet Switch RX Pattern Matcher interrupt 10 + ELC_EVENT_ETHSW_PTRN11 = (268), // Ethernet Switch RX Pattern Matcher interrupt 11 + ELC_EVENT_ETHSW_PTPOUT0 = (269), // Ethernet switch timer pulse output 0 + ELC_EVENT_ETHSW_PTPOUT1 = (270), // Ethernet switch timer pulse output 1 + ELC_EVENT_ETHSW_PTPOUT2 = (271), // Ethernet switch timer pulse output 2 + ELC_EVENT_ETHSW_PTPOUT3 = (272), // Ethernet switch timer pulse output 3 + ELC_EVENT_ETHSW_TDMAOUT0 = (273), // Ethernet Switch TDMA timer output 0 + ELC_EVENT_ETHSW_TDMAOUT1 = (274), // Ethernet Switch TDMA timer output 1 + ELC_EVENT_ETHSW_TDMAOUT2 = (275), // Ethernet Switch TDMA timer output 2 + ELC_EVENT_ETHSW_TDMAOUT3 = (276), // Ethernet Switch TDMA timer output 3 + ELC_EVENT_ESC_SYNC0 = (277), // EtherCAT Sync0 interrupt + ELC_EVENT_ESC_SYNC1 = (278), // EtherCAT Sync1 interrupt + ELC_EVENT_ESC_CAT = (279), // EtherCAT interrupt + ELC_EVENT_ESC_SOF = (280), // EtherCAT SOF interrupt + ELC_EVENT_ESC_EOF = (281), // EtherCAT EOF interrupt + ELC_EVENT_ESC_WDT = (282), // EtherCAT WDT interrupt + ELC_EVENT_ESC_RST = (283), // EtherCAT RESET interrupt + ELC_EVENT_USB_HI = (284), // USB (Host) interrupt + ELC_EVENT_USB_FI = (285), // USB (Function) interrupt + ELC_EVENT_USB_FDMA0 = (286), // USB (Function) DMA 0 transmit completion + ELC_EVENT_USB_FDMA1 = (287), // USB (Function) DMA 1 transmit completion + ELC_EVENT_SCI0_ERI = (288), // SCI0 Receive error + ELC_EVENT_SCI0_RXI = (289), // SCI0 Receive data full + ELC_EVENT_SCI0_TXI = (290), // SCI0 Transmit data empty + ELC_EVENT_SCI0_TEI = (291), // SCI0 Transmit end + ELC_EVENT_SCI1_ERI = (292), // SCI1 Receive error + ELC_EVENT_SCI1_RXI = (293), // SCI1 Receive data full + ELC_EVENT_SCI1_TXI = (294), // SCI1 Transmit data empty + ELC_EVENT_SCI1_TEI = (295), // SCI1 Transmit end + ELC_EVENT_SCI2_ERI = (296), // SCI2 Receive error + ELC_EVENT_SCI2_RXI = (297), // SCI2 Receive data full + ELC_EVENT_SCI2_TXI = (298), // SCI2 Transmit data empty + ELC_EVENT_SCI2_TEI = (299), // SCI2 Transmit end + ELC_EVENT_SCI3_ERI = (300), // SCI3 Receive error + ELC_EVENT_SCI3_RXI = (301), // SCI3 Receive data full + ELC_EVENT_SCI3_TXI = (302), // SCI3 Transmit data empty + ELC_EVENT_SCI3_TEI = (303), // SCI3 Transmit end + ELC_EVENT_SCI4_ERI = (304), // SCI4 Receive error + ELC_EVENT_SCI4_RXI = (305), // SCI4 Receive data full + ELC_EVENT_SCI4_TXI = (306), // SCI4 Transmit data empty + ELC_EVENT_SCI4_TEI = (307), // SCI4 Transmit end + ELC_EVENT_IIC0_EEI = (308), // IIC0 Transfer error or event generation + ELC_EVENT_IIC0_RXI = (309), // IIC0 Receive data full + ELC_EVENT_IIC0_TXI = (310), // IIC0 Transmit data empty + ELC_EVENT_IIC0_TEI = (311), // IIC0 Transmit end + ELC_EVENT_IIC1_EEI = (312), // IIC1 Transfer error or event generation + ELC_EVENT_IIC1_RXI = (313), // IIC1 Receive data full + ELC_EVENT_IIC1_TXI = (314), // IIC1 Transmit data empty + ELC_EVENT_IIC1_TEI = (315), // IIC1 Transmit end + ELC_EVENT_CAN_RXF = (316), // CANFD RX FIFO interrupt + ELC_EVENT_CAN_GLERR = (317), // CANFD Global error interrupt + ELC_EVENT_CAN0_TX = (318), // CAFND0 Channel TX interrupt + ELC_EVENT_CAN0_CHERR = (319), // CAFND0 Channel CAN error interrupt + ELC_EVENT_CAN0_COMFRX = (320), // CAFND0 Common RX FIFO or TXQ interrupt + ELC_EVENT_CAN1_TX = (321), // CAFND1 Channel TX interrupt + ELC_EVENT_CAN1_CHERR = (322), // CAFND1 Channel CAN error interrupt + ELC_EVENT_CAN1_COMFRX = (323), // CAFND1 Common RX FIFO or TXQ interrupt + ELC_EVENT_SPI0_SPRI = (324), // SPI0 Reception buffer full + ELC_EVENT_SPI0_SPTI = (325), // SPI0 Transmit buffer empty + ELC_EVENT_SPI0_SPII = (326), // SPI0 SPI idle + ELC_EVENT_SPI0_SPEI = (327), // SPI0 errors + ELC_EVENT_SPI0_SPCEND = (328), // SPI0 Communication complete + ELC_EVENT_SPI1_SPRI = (329), // SPI1 Reception buffer full + ELC_EVENT_SPI1_SPTI = (330), // SPI1 Transmit buffer empty + ELC_EVENT_SPI1_SPII = (331), // SPI1 SPI idle + ELC_EVENT_SPI1_SPEI = (332), // SPI1 errors + ELC_EVENT_SPI1_SPCEND = (333), // SPI1 Communication complete + ELC_EVENT_SPI2_SPRI = (334), // SPI2 Reception buffer full + ELC_EVENT_SPI2_SPTI = (335), // SPI2 Transmit buffer empty + ELC_EVENT_SPI2_SPII = (336), // SPI2 SPI idle + ELC_EVENT_SPI2_SPEI = (337), // SPI2 errors + ELC_EVENT_SPI2_SPCEND = (338), // SPI2 Communication complete + ELC_EVENT_XSPI0_INT = (339), // xSPI0 Interrupt + ELC_EVENT_XSPI0_INTERR = (340), // xSPI0 Error interrupt + ELC_EVENT_XSPI1_INT = (341), // xSPI1 Interrupt + ELC_EVENT_XSPI1_INTERR = (342), // xSPI1 Error interrupt + ELC_EVENT_DSMIF0_CDRUI = (343), // DSMIF0 current data register update (ORed ch0 to ch2) + ELC_EVENT_DSMIF1_CDRUI = (344), // DSMIF1 current data register update (ORed ch3 to ch5) + ELC_EVENT_ADC0_ADI = (345), // ADC0 A/D scan end interrupt + ELC_EVENT_ADC0_GBADI = (346), // ADC0 A/D scan end interrupt for Group B + ELC_EVENT_ADC0_GCADI = (347), // ADC0 A/D scan end interrupt for Group C + ELC_EVENT_ADC0_CMPAI = (348), // ADC0 Window A compare match + ELC_EVENT_ADC0_CMPBI = (349), // ADC0 Window B compare match + ELC_EVENT_ADC1_ADI = (350), // ADC1 A/D scan end interrupt + ELC_EVENT_ADC1_GBADI = (351), // ADC1 A/D scan end interrupt for Group B + ELC_EVENT_ADC1_GCADI = (352), // ADC1 A/D scan end interrupt for Group C + ELC_EVENT_ADC1_CMPAI = (353), // ADC1 Window A compare match + ELC_EVENT_ADC1_CMPBI = (354), // ADC1 Window B compare match + ELC_EVENT_MBX_INT0 = (372), // Mailbox (Host CPU to Cortex-R52) interrupt 0 + ELC_EVENT_MBX_INT1 = (373), // Mailbox (Host CPU to Cortex-R52) interrupt 1 + ELC_EVENT_MBX_INT2 = (374), // Mailbox (Host CPU to Cortex-R52) interrupt 2 + ELC_EVENT_MBX_INT3 = (375), // Mailbox (Host CPU to Cortex-R52) interrupt 3 + ELC_EVENT_CPU0_ERR0 = (384), // Cortex-R52 CPU0 error event 0 + ELC_EVENT_CPU0_ERR1 = (385), // Cortex-R52 CPU0 error event 1 + ELC_EVENT_PERI_ERR0 = (388), // Peripherals error event 0 + ELC_EVENT_PERI_ERR1 = (389), // Peripherals error event 1 + ELC_EVENT_SHOST_INT = (390), // SHOSTIF interrupt + ELC_EVENT_PHOST_INT = (391), // PHOSTIF interrupt + ELC_EVENT_INTCPU6 = (392), // Software interrupt 6 + ELC_EVENT_INTCPU7 = (393), // Software interrupt 7 + ELC_EVENT_IRQ14 = (394), // External pin interrupt 14 + ELC_EVENT_IRQ15 = (395), // External pin interrupt 15 + ELC_EVENT_GPT14_CCMPA = (396), // GPT14 GTCCRA input capture/compare match + ELC_EVENT_GPT14_CCMPB = (397), // GPT14 GTCCRB input capture/compare match + ELC_EVENT_GPT14_CMPC = (398), // GPT14 GTCCRC compare match + ELC_EVENT_GPT14_CMPD = (399), // GPT14 GTCCRD compare match + ELC_EVENT_GPT14_CMPE = (400), // GPT14 GTCCRE compare match + ELC_EVENT_GPT14_CMPF = (401), // GPT14 GTCCRF compare match + ELC_EVENT_GPT14_OVF = (402), // GPT14 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT14_UDF = (403), // GPT14 GTCNT underflow + ELC_EVENT_GPT15_CCMPA = (404), // GPT15 GTCCRA input capture/compare match + ELC_EVENT_GPT15_CCMPB = (405), // GPT15 GTCCRB input capture/compare match + ELC_EVENT_GPT15_CMPC = (406), // GPT15 GTCCRC compare match + ELC_EVENT_GPT15_CMPD = (407), // GPT15 GTCCRD compare match + ELC_EVENT_GPT15_CMPE = (408), // GPT15 GTCCRE compare match + ELC_EVENT_GPT15_CMPF = (409), // GPT15 GTCCRF compare match + ELC_EVENT_GPT15_OVF = (410), // GPT15 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT15_UDF = (411), // GPT15 GTCNT underflow + ELC_EVENT_GPT16_CCMPA = (412), // GPT16 GTCCRA input capture/compare match + ELC_EVENT_GPT16_CCMPB = (413), // GPT16 GTCCRB input capture/compare match + ELC_EVENT_GPT16_CMPC = (414), // GPT16 GTCCRC compare match + ELC_EVENT_GPT16_CMPD = (415), // GPT16 GTCCRD compare match + ELC_EVENT_GPT16_CMPE = (416), // GPT16 GTCCRE compare match + ELC_EVENT_GPT16_CMPF = (417), // GPT16 GTCCRF compare match + ELC_EVENT_GPT16_OVF = (418), // GPT16 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT16_UDF = (419), // GPT16 GTCNT underflow + ELC_EVENT_GPT17_CCMPA = (420), // GPT17 GTCCRA input capture/compare match + ELC_EVENT_GPT17_CCMPB = (421), // GPT17 GTCCRB input capture/compare match + ELC_EVENT_GPT17_CMPC = (422), // GPT17 GTCCRC compare match + ELC_EVENT_GPT17_CMPD = (423), // GPT17 GTCCRD compare match + ELC_EVENT_GPT17_CMPE = (424), // GPT17 GTCCRE compare match + ELC_EVENT_GPT17_CMPF = (425), // GPT17 GTCCRF compare match + ELC_EVENT_GPT17_OVF = (426), // GPT17 GTCNT overflow (GTPR compare match) + ELC_EVENT_GPT17_UDF = (427), // GPT17 GTCNT underflow + ELC_EVENT_POEG2_GROUP0 = (428), // POEG group A interrupt for channels in SAFETY + ELC_EVENT_POEG2_GROUP1 = (429), // POEG group B interrupt for channels in SAFETY + ELC_EVENT_POEG2_GROUP2 = (430), // POEG group C interrupt for channels in SAFETY + ELC_EVENT_POEG2_GROUP3 = (431), // POEG group D interrupt for channels in SAFETY + ELC_EVENT_RTC_ALM = (432), // Alarm interrupt + ELC_EVENT_RTC_1S = (433), // 1 second interrupt + ELC_EVENT_RTC_PRD = (434), // Fixed interval interrupt + ELC_EVENT_SCI5_ERI = (435), // SCI5 Receive error + ELC_EVENT_SCI5_RXI = (436), // SCI5 Receive data full + ELC_EVENT_SCI5_TXI = (437), // SCI5 Transmit data empty + ELC_EVENT_SCI5_TEI = (438), // SCI5 Transmit end + ELC_EVENT_IIC2_EEI = (439), // IIC2 Transfer error or event generation + ELC_EVENT_IIC2_RXI = (440), // IIC2 Receive data full + ELC_EVENT_IIC2_TXI = (441), // IIC2 Transmit data empty + ELC_EVENT_IIC2_TEI = (442), // IIC2 Transmit end + ELC_EVENT_SPI3_SPRI = (443), // SPI3 Reception buffer full + ELC_EVENT_SPI3_SPTI = (444), // SPI3 Transmit buffer empty + ELC_EVENT_SPI3_SPII = (445), // SPI3 SPI idle + ELC_EVENT_SPI3_SPEI = (446), // SPI3 errors + ELC_EVENT_SPI3_SPCEND = (447), // SPI3 Communication complete + ELC_EVENT_DREQ = (448), // External DMA request + ELC_EVENT_CAN_RF_DMAREQ0 = (449), // CAFND RX FIFO 0 DMA request + ELC_EVENT_CAN_RF_DMAREQ1 = (450), // CAFND RX FIFO 1 DMA request + ELC_EVENT_CAN_RF_DMAREQ2 = (451), // CAFND RX FIFO 2 DMA request + ELC_EVENT_CAN_RF_DMAREQ3 = (452), // CAFND RX FIFO 3 DMA request + ELC_EVENT_CAN_RF_DMAREQ4 = (453), // CAFND RX FIFO 4 DMA request + ELC_EVENT_CAN_RF_DMAREQ5 = (454), // CAFND RX FIFO 5 DMA request + ELC_EVENT_CAN_RF_DMAREQ6 = (455), // CAFND RX FIFO 6 DMA request + ELC_EVENT_CAN_RF_DMAREQ7 = (456), // CAFND RX FIFO 7 DMA request + ELC_EVENT_CAN0_CF_DMAREQ = (457), // CAFND0 First common FIFO DMA request + ELC_EVENT_CAN1_CF_DMAREQ = (458), // CAFND1 First common FIFO DMA request + ELC_EVENT_ADC0_WCMPM = (459), // ADC0 compare match + ELC_EVENT_ADC0_WCMPUM = (460), // ADC0 compare mismatch + ELC_EVENT_ADC1_WCMPM = (461), // ADC1 compare match + ELC_EVENT_ADC1_WCMPUM = (462), // ADC1 compare mismatch + ELC_EVENT_TCIV4_OF = (463), // MTU4.TCNT overflow + ELC_EVENT_TCIV4_UF = (464), // MTU4.TCNT underflow + ELC_EVENT_TCIV7_OF = (465), // MTU7.TCNT overflow + ELC_EVENT_TCIV7_UF = (466), // MTU7.TCNT underflow + ELC_EVENT_IOPORT_GROUP1 = (467), // Input edge detection of input port group 1 + ELC_EVENT_IOPORT_GROUP2 = (468), // Input edge detection of input port group 2 + ELC_EVENT_IOPORT_SINGLE0 = (469), // Input edge detection of single input port 0 + ELC_EVENT_IOPORT_SINGLE1 = (470), // Input edge detection of single input port 1 + ELC_EVENT_IOPORT_SINGLE2 = (471), // Input edge detection of single input port 2 + ELC_EVENT_IOPORT_SINGLE3 = (472), // Input edge detection of single input port 3 + ELC_EVENT_GPT0_ADTRGA = (473), // GPT0 GTADTRA compare match + ELC_EVENT_GPT0_ADTRGB = (474), // GPT0 GTADTRB compare match + ELC_EVENT_GPT1_ADTRGA = (475), // GPT1 GTADTRA compare match + ELC_EVENT_GPT1_ADTRGB = (476), // GPT1 GTADTRB compare match + ELC_EVENT_GPT2_ADTRGA = (477), // GPT2 GTADTRA compare match + ELC_EVENT_GPT2_ADTRGB = (478), // GPT2 GTADTRB compare match + ELC_EVENT_GPT3_ADTRGA = (479), // GPT3 GTADTRA compare match + ELC_EVENT_GPT3_ADTRGB = (480), // GPT3 GTADTRB compare match + ELC_EVENT_GPT4_ADTRGA = (481), // GPT4 GTADTRA compare match + ELC_EVENT_GPT4_ADTRGB = (482), // GPT4 GTADTRB compare match + ELC_EVENT_GPT5_ADTRGA = (483), // GPT5 GTADTRA compare match + ELC_EVENT_GPT5_ADTRGB = (484), // GPT5 GTADTRB compare match + ELC_EVENT_GPT6_ADTRGA = (485), // GPT6 GTADTRA compare match + ELC_EVENT_GPT6_ADTRGB = (486), // GPT6 GTADTRB compare match + ELC_EVENT_GPT7_ADTRGA = (487), // GPT7 GTADTRA compare match + ELC_EVENT_GPT7_ADTRGB = (488), // GPT7 GTADTRB compare match + ELC_EVENT_GPT8_ADTRGA = (489), // GPT8 GTADTRA compare match + ELC_EVENT_GPT8_ADTRGB = (490), // GPT8 GTADTRB compare match + ELC_EVENT_GPT9_ADTRGA = (491), // GPT9 GTADTRA compare match + ELC_EVENT_GPT9_ADTRGB = (492), // GPT9 GTADTRB compare match + ELC_EVENT_GPT10_ADTRGA = (493), // GPT10 GTADTRA compare match + ELC_EVENT_GPT10_ADTRGB = (494), // GPT10 GTADTRB compare match + ELC_EVENT_GPT11_ADTRGA = (495), // GPT11 GTADTRA compare match + ELC_EVENT_GPT11_ADTRGB = (496), // GPT11 GTADTRB compare match + ELC_EVENT_GPT12_ADTRGA = (497), // GPT12 GTADTRA compare match + ELC_EVENT_GPT12_ADTRGB = (498), // GPT12 GTADTRB compare match + ELC_EVENT_GPT13_ADTRGA = (499), // GPT13 GTADTRA compare match + ELC_EVENT_GPT13_ADTRGB = (500), // GPT13 GTADTRB compare match + ELC_EVENT_NONE +} elc_event_t; + +/** @} (end addtogroup BSP_MCU_RZN2L) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_feature.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_feature.h new file mode 100644 index 00000000000..f4a7fa9a188 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_feature.h @@ -0,0 +1,242 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +#ifndef BSP_FEATURE_H +#define BSP_FEATURE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKADC) +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_PGA (1U) +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) +#define BSP_FEATURE_ADC_REGISTER_MASK_TYPE (1U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (0U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0x00000FFFU) +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_SLOPE (4000U) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x000F) // 0 to 3 in unit 0 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0x00FF) // 0 to 7 in unit 1 +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (3U) + +#define BSP_FEATURE_BSP_IRQ_PRIORITY_MASK (0xF8U) +#define BSP_FEATURE_BSP_IRQ_PRIORITY_POS_BIT (3U) +#define BSP_FEATURE_BSP_MASTER_MPU0_SUPPORTED (1U) +#define BSP_FEATURE_BSP_MASTER_MPU1_SUPPORTED (1U) +#define BSP_FEATURE_BSP_MASTER_MPU2_SUPPORTED (1U) +#define BSP_FEATURE_BSP_MASTER_MPU3_SUPPORTED (1U) +#define BSP_FEATURE_BSP_MASTER_MPU4_SUPPORTED (1U) +#define BSP_FEATURE_BSP_MASTER_MPU6_SUPPORTED (1U) +#define BSP_FEATURE_BSP_MASTER_MPU7_SUPPORTED (1U) +#define BSP_FEATURE_BSP_MASTER_MPU8_SUPPORTED (1U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) +#define BSP_FEATURE_CAN_CLOCK (0U) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (2U) + +#define BSP_FEATURE_CANFD_NUM_CHANNELS (2U) + +#define BSP_FEATURE_CGC_HAS_BCLK (1U) +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLWT (1U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0U) +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) +#define BSP_FEATURE_CGC_LOCO_CONTROL_ADDRESS (0x81280070U) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) // This MCU does not have Low Voltage Mode +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) // This MCU does not have Middle Speed Mode +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) +#define BSP_FEATURE_CGC_MODRV_MASK (0x30U) +#define BSP_FEATURE_CGC_MODRV_SHIFT (0x4U) +#define BSP_FEATURE_CGC_PLL1_CONTROL_ADDRESS (0x81280050U) +#define BSP_FEATURE_CGC_PLLCCR_MAX_HZ (240000000U) +#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0U) +#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x1U) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0U) + +#define BSP_FEATURE_CMT_VALID_CHANNEL_MASK (0x3FU) + +#define BSP_FEATURE_CMTW_VALID_CHANNEL_MASK (0x3U) + +#define BSP_FEATURE_CRC_VALID_CHANNEL_MASK (0x3U) + +#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) +#define BSP_FEATURE_DMAC_MAX_UNIT (2U) +#define BSP_FEATURE_DMAC_UNIT0_ERROR_NUM (5U) + +#define BSP_FEATURE_DSMIF_CHANNEL_STATUS (1U) +#define BSP_FEATURE_DSMIF_DATA_FORMAT_SEL (0U) +#define BSP_FEATURE_DSMIF_ERROR_STATUS_CLR (5U) +#define BSP_FEATURE_DSMIF_OVERCURRENT_DETECT_CONTROL (1U) +#define BSP_FEATURE_DSMIF_OVERCURRENT_DETECT_ISR (1U) +#define BSP_FEATURE_DSMIF_OVERCURRENT_DETECT_NOTIFY (0U) +#define BSP_FEATURE_DSMIF_OVERCURRENT_ERROR_STATUS (1U) +#define BSP_FEATURE_DSMIF_OVERCURRENT_NOTIFY_STATUS (0U) + +#define BSP_FEATURE_ELC_ELC_SSEL_NUM (19) +#define BSP_FEATURE_ELC_EVENT_MASK_NUM (4U) +#define BSP_FEATURE_ELC_PERIPHERAL_0_MASK (0xFFFFFFFFU) // ELC event source no.0 to 31 available on this MCU +#define BSP_FEATURE_ELC_PERIPHERAL_1_MASK (0x007FF9FFU) // ELC event source no.32 to 63 available on this MCU. +#define BSP_FEATURE_ELC_PERIPHERAL_2_MASK (0x00000000U) // ELC event source no.64 to 95 available on this MCU. +#define BSP_FEATURE_ELC_PERIPHERAL_3_MASK (0x00000000U) // ELC event source no.96 to 127 available on this MCU. +#define BSP_FEATURE_ELC_PERIPHERAL_TYPE (1U) + +#define BSP_FEATURE_ESC_MAX_PORTS (3U) +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0x0000070FU) +#define BSP_FEATURE_ETHER_PHY_MAX_CHANNELS (3U) +#define BSP_FEATURE_ETHSS_MAX_PORTS (3U) +#define BSP_FEATURE_ETHSS_SWITCH_MODE_BIT_MASK (3U) + +#define BSP_FEATURE_ETHSW_MAX_CHANNELS (1U) +#define BSP_FEATURE_ETHSW_SUPPORTED (1U) +#define BSP_FEATURE_GMAC_MAX_CHANNELS (1U) +#define BSP_FEATURE_GMAC_MAX_PORTS (3U) + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x3FFFF) +#define BSP_FEATURE_GPT_LLPP_BASE_CHANNEL (0) // LLPP channel: ch0-6 +#define BSP_FEATURE_GPT_LLPP_CHANNEL_MASK (0x0007F) +#define BSP_FEATURE_GPT_NONSAFETY_BASE_CHANNEL (7) // Non-safety channel: ch7-13 +#define BSP_FEATURE_GPT_NONSAFETY_CHANNEL_MASK (0x0007F) +#define BSP_FEATURE_GPT_SAFETY_BASE_CHANNEL (14) // safety channel: ch14-17 +#define BSP_FEATURE_GPT_SAFETY_CHANNEL_MASK (0x0000F) +#define BSP_FEATURE_GPT_VALID_CHANNEL_MASK (0x3FFFF) + +#define BSP_FEATURE_GPTE_CHANNEL_MASK (0xF0) +#define BSP_FEATURE_GPTEH_CHANNEL_MASK (0xF) + +#define BSP_FEATURE_ICU_ERROR_PERI_ERR_REG_NUM (2U) +#define BSP_FEATURE_ICU_ERROR_PERI_ERR0_REG_MASK (0xFFFFFEFFU) +#define BSP_FEATURE_ICU_ERROR_PERI_ERR1_REG_MASK (0x19FFA3FFU) +#define BSP_FEATURE_ICU_ERROR_PERIPHERAL_TYPE (1U) +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0U) +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFFFU) +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFF4FFFFFU) + +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0U) +#define BSP_FEATURE_IIC_SAFETY_CHANNEL (2U) +#define BSP_FEATURE_IIC_SAFETY_CHANNEL_BASE_ADDRESS (R_IIC2_BASE) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x07) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (4U) +#define BSP_FEATURE_IOPORT_HAS_ETHERNET (1U) + +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {{0, 15}, {0, 13}, {1, 31}, {1, 6}, {1, 5}, {1, 4}, {2, 5}} +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (1U) +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00137FFFU) +#define BSP_FEATURE_LPM_DPSIER_MASK (0x071F7FFFU) +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (1U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STCONR (1U) +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0U) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x000000FFU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x7342FFFFU) + +#define BSP_FEATURE_MTU3_MAX_CHANNELS (9U) +#define BSP_FEATURE_MTU3_UVW_MAX_CHANNELS (3U) +#define BSP_FEATURE_MTU3_VALID_CHANNEL_MASK (0x01FF) + +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POE3_ERROR_SIGNAL_TYPE (1U) +#define BSP_FEATURE_POE3_PIN_SELECT_TYPE (1U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) +#define BSP_FEATURE_POEG_ERROR_SIGNAL_TYPE (1U) +#define BSP_FEATURE_POEG_GROUP_OFSSET_ADDRESS (0x400) +#define BSP_FEATURE_POEG_LLPP_UNIT (0U) +#define BSP_FEATURE_POEG_MAX_UNIT (2U) +#define BSP_FEATURE_POEG_NONSAFETY_UNIT (1U) +#define BSP_FEATURE_POEG_SAFETY_UNIT (2U) + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (BSP_FEATURE_SCI_CHANNELS) +#define BSP_FEATURE_SCI_CHANNELS (0x3FU) +#define BSP_FEATURE_SCI_SAFETY_CHANNEL (5U) +#define BSP_FEATURE_SCI_SAFETY_CHANNEL_BASE_ADDRESS (R_SCI5_BASE) +#define BSP_FEATURE_SCI_UART_CSTPEN_CHANNELS (0x03FU) +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x3FFU) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) + +#define BSP_FEATURE_SEM_SUPPORTED (0U) + +#define BSP_FEATURE_SPI_HAS_BYTE_SWAP (1U) +#define BSP_FEATURE_SPI_HAS_SPCR3 (0U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (4U) +#define BSP_FEATURE_SPI_SAFETY_CHANNEL (3U) +#define BSP_FEATURE_SPI_SAFETY_CHANNEL_BASE_ADDRESS (R_SPI3_BASE) + +#define BSP_FEATURE_TFU_SUPPORTED (1U) + +#define BSP_FEATURE_XSPI_CHANNELS (0x03U) +#define BSP_FEATURE_XSPI_NUM_CHIP_SELECT (2U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_irq_sense.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_irq_sense.c new file mode 100644 index 00000000000..b524d268706 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_irq_sense.c @@ -0,0 +1,86 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU_RZN2L + * @{ + **********************************************************************************************************************/ + +/** Array of GICD_ICFGR initialization value. */ +const uint32_t BSP_GICD_ICFGR_INIT[BSP_NON_SELECTABLE_ICFGR_MAX] = +{ + 0xAAAAAAAAUL, /* Event No. 0 to 15 */ + 0x000000AAUL, /* Event No. 16 to 31 */ + 0x00000000UL, /* Event No. 32 to 47 */ + 0xAAAAA800UL, /* Event No. 48 to 63 */ + 0xAAAAAAAAUL, /* Event No. 64 to 79 */ + 0xAAAAAAAAUL, /* Event No. 80 to 95 */ + 0xAAAAAAAAUL, /* Event No. 96 to 111 */ + 0xAAAAAA00UL, /* Event No. 112 to 127 */ + 0xAAAAAAAAUL, /* Event No. 128 to 143 */ + 0xAAAAAAAAUL, /* Event No. 144 to 159 */ + 0xAAAAAAAAUL, /* Event No. 160 to 175 */ + 0xAAAAAAAAUL, /* Event No. 176 to 191 */ + 0xAAAAAAAAUL, /* Event No. 192 to 207 */ + 0xAAAAAAAAUL, /* Event No. 208 to 223 */ + 0xAAAAAAAAUL, /* Event No. 224 to 239 */ + 0x0000000AUL, /* Event No. 240 to 255 */ + 0xA8000000UL, /* Event No. 256 to 271 */ + 0xA82A2AAAUL, /* Event No. 272 to 287 */ + 0x28282828UL, /* Event No. 288 to 303 */ + 0x00282828UL, /* Event No. 304 to 319 */ + 0xA82A0A00UL, /* Event No. 320 to 335 */ + 0xA0AA8020UL, /* Event No. 336 to 351 */ + 0x00000002UL, /* Event No. 352 to 367 */ + 0x00000000UL, /* Event No. 368 to 383 */ + 0xAAAA0A0AUL, /* Event No. 384 to 399 */ + 0xAAAAAAAAUL, /* Event No. 400 to 415 */ + 0x00AAAAAAUL, /* Event No. 416 to 431 */ + 0x828A0A2AUL, /* Event No. 432 to 447 */ +}; + +const uint32_t BSP_GICR_SGI_PPI_ICFGR_INIT[BSP_EVENT_SGI_PPI_ARRAY_NUM] = +{ + 0xAAAAAAAAUL, /* event SGI */ + 0x00020000UL, /* event PPI */ +}; + +/** @} (end addtogroup BSP_MCU_RZN2L) */ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_loader_param.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_loader_param.c new file mode 100644 index 00000000000..3933a103ba5 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_loader_param.c @@ -0,0 +1,69 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if !(BSP_CFG_RAM_EXECUTION) + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + #define BSP_LOADER_PARAM_MAX (19) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/* Parameter Information for the Loader. */ +BSP_DONT_REMOVE const uint32_t g_bsp_loader_param[BSP_LOADER_PARAM_MAX] BSP_PLACE_IN_SECTION(BSP_SECTION_LOADER_PARAM) = +{ + BSP_CFG_CACHE_FLG, + BSP_CFG_CS0BCR_V_WRAPCFG_V, + BSP_CFG_CS0WCR_V_COMCFG_V, + BSP_CFG_DUMMY0_BMCFG_V, + BSP_CFG_BSC_FLG_xSPI_FLG, + BSP_CFG_LDR_ADDR_NML, + BSP_CFG_LDR_SIZE_NML, + BSP_CFG_DEST_ADDR_NML, + BSP_CFG_DUMMY1, + BSP_CFG_DUMMY2, + BSP_CFG_DUMMY3_CSSCTL_V, + BSP_CFG_DUMMY4_LIOCFGCS0_V, + BSP_CFG_DUMMY5, + BSP_CFG_DUMMY6, + BSP_CFG_DUMMY7, + BSP_CFG_DUMMY8, + BSP_CFG_DUMMY9, + BSP_CFG_DUMMY10_ACCESS_SPEED, + BSP_CFG_CHECK_SUM +}; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h new file mode 100644 index 00000000000..e0b338a753e --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h @@ -0,0 +1,64 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BSP_MCU + * @defgroup BSP_MCU_RZN2L RZN2L + * @includedoc config_bsp_rzn2l_fsp.html + * @{ + **********************************************************************************************************************/ + +/** @} (end defgroup BSP_MCU_RZN2L) */ + +#ifndef BSP_MCU_INFO_H +#define BSP_MCU_INFO_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP MCU Specific Includes. */ +#include "bsp_elc.h" +#include "bsp_feature.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef elc_event_t bsp_interrupt_event_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_override.h b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_override.h new file mode 100644 index 00000000000..ea77b6eb9aa --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/bsp/mcu/rzn2l/bsp_override.h @@ -0,0 +1,1455 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU_RZN2L + * @{ + **********************************************************************************************************************/ + +/** @} (end addtogroup BSP_MCU_RZN2L) */ + +#ifndef BSP_OVERRIDE_H +#define BSP_OVERRIDE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP Common Includes. */ +#include "../../src/bsp/mcu/all/bsp_common.h" + +/* BSP MPU Specific Includes. */ +#include "../../src/bsp/mcu/all/bsp_register_protection.h" +#include "../../src/bsp/mcu/all/bsp_irq.h" +#include "../../src/bsp/mcu/all/bsp_io.h" +#include "../../src/bsp/mcu/all/bsp_clocks.h" +#include "../../src/bsp/mcu/all/bsp_module_stop.h" +#include "../../src/bsp/mcu/all/bsp_reset.h" +#include "../../src/bsp/mcu/all/bsp_cache.h" + +/* Factory MPU information. */ +#include "../../inc/fsp_features.h" + +/* BSP Common Includes (Other than bsp_common.h) */ +#include "../../src/bsp/mcu/all/bsp_delay.h" +#include "../../src/bsp/mcu/all/bsp_mcu_api.h" + +/* BSP TFU Includes. */ +#if BSP_FEATURE_TFU_SUPPORTED + #include "../../src/bsp/mcu/all/bsp_tfu.h" +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Define overrides required for this MPU. */ +#define BSP_OVERRIDE_ADC_MODE_T +#define BSP_OVERRIDE_ADC_CHANNEL_T +#define BSP_OVERRIDE_CGC_CLOCK_T +#define BSP_OVERRIDE_CGC_PLL_CFG_T +#define BSP_OVERRIDE_CGC_DIVIDER_CFG_T +#define BSP_OVERRIDE_CGC_CLOCK_CHANGE_T +#define BSP_OVERRIDE_CGC_CLOCKS_CFG_T +#define BSP_OVERRIDE_ELC_PERIPHERAL_T +#define BSP_OVERRIDE_ERROR_EVENT_T +#define BSP_OVERRIDE_ETHER_EVENT_T +#define BSP_OVERRIDE_ETHER_CALLBACK_ARGS_T +#define BSP_OVERRIDE_ETHER_PHY_LSI_TYPE_T +#define BSP_OVERRIDE_ETHER_SWITCH_CALLBACK_ARGS_T +#define BSP_OVERRIDE_POE3_STATE_T +#define BSP_OVERRIDE_POEG_STATE_T +#define BSP_OVERRIDE_POEG_TRIGGER_T +#define BSP_OVERRIDE_TRANSFER_MODE_T +#define BSP_OVERRIDE_TRANSFER_SIZE_T +#define BSP_OVERRIDE_TRANSFER_ADDR_MODE_T +#define BSP_OVERRIDE_TRANSFER_CALLBACK_ARGS_T +#define BSP_OVERRIDE_TRANSFER_INFO_T + +/* Override definitions. */ + +#define ELC_PERIPHERAL_NUM (55U) + +/* Private definition to set enumeration values. */ +#define IOPORT_P_OFFSET (0U) +#define IOPORT_PM_OFFSET (1U) +#define IOPORT_PMC_OFFSET (3U) +#define IOPORT_PFC_OFFSET (4U) +#define IOPORT_DRCTL_OFFSET (8U) +#define IOPORT_RSELP_OFFSET (14U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*============================================== + * ADC API Overrides + *==============================================*/ + +/** ADC operation mode definitions */ +typedef enum e_adc_mode +{ + ADC_MODE_SINGLE_SCAN = 0, ///< Single scan - one or more channels + ADC_MODE_GROUP_SCAN = 1, ///< Two trigger sources to trigger scan for two groups which contain one or more channels + ADC_MODE_CONTINUOUS_SCAN = 2, ///< Continuous scan - one or more channels + ADC_MODE_SYNCHRONIZE_SCAN = 3, ///< Channel synchronization control mode + ADC_MODE_INDIVIDUAL_SCAN = 4, ///< Channel individual control mode +} adc_mode_t; + +/** ADC channels */ +typedef enum e_adc_channel +{ + ADC_CHANNEL_0 = 0, ///< ADC channel 0 + ADC_CHANNEL_1 = 1, ///< ADC channel 1 + ADC_CHANNEL_2 = 2, ///< ADC channel 2 + ADC_CHANNEL_3 = 3, ///< ADC channel 3 + ADC_CHANNEL_4 = 4, ///< ADC channel 4 + ADC_CHANNEL_5 = 5, ///< ADC channel 5 + ADC_CHANNEL_6 = 6, ///< ADC channel 6 + ADC_CHANNEL_7 = 7, ///< ADC channel 7 + ADC_CHANNEL_8 = 8, ///< ADC channel 8 + ADC_CHANNEL_9 = 9, ///< ADC channel 9 + ADC_CHANNEL_10 = 10, ///< ADC channel 10 + ADC_CHANNEL_11 = 11, ///< ADC channel 11 + ADC_CHANNEL_12 = 12, ///< ADC channel 12 + ADC_CHANNEL_13 = 13, ///< ADC channel 13 + ADC_CHANNEL_14 = 14, ///< ADC channel 14 + ADC_CHANNEL_15 = 15, ///< ADC channel 15 + ADC_CHANNEL_16 = 16, ///< ADC channel 16 + ADC_CHANNEL_17 = 17, ///< ADC channel 17 + ADC_CHANNEL_18 = 18, ///< ADC channel 18 + ADC_CHANNEL_19 = 19, ///< ADC channel 19 + ADC_CHANNEL_20 = 20, ///< ADC channel 20 + ADC_CHANNEL_21 = 21, ///< ADC channel 21 + ADC_CHANNEL_22 = 22, ///< ADC channel 22 + ADC_CHANNEL_23 = 23, ///< ADC channel 23 + ADC_CHANNEL_24 = 24, ///< ADC channel 24 + ADC_CHANNEL_25 = 25, ///< ADC channel 25 + ADC_CHANNEL_26 = 26, ///< ADC channel 26 + ADC_CHANNEL_27 = 27, ///< ADC channel 27 + ADC_CHANNEL_DUPLEX_A = 50, ///< Data duplexing register A + ADC_CHANNEL_DUPLEX_B = 51, ///< Data duplexing register B + ADC_CHANNEL_DUPLEX = -4, ///< Data duplexing register + ADC_CHANNEL_TEMPERATURE = -3, ///< Temperature sensor output + ADC_CHANNEL_VOLT = -2, ///< Internal reference voltage + ADC_CHANNEL_0_DSMIF_CAPTURE_A = 0x100, ///< ADC channel 0 Capture Current Data Register A + ADC_CHANNEL_0_DSMIF_CAPTURE_B = 0x200, ///< ADC channel 0 Capture Current Data Register B + ADC_CHANNEL_1_DSMIF_CAPTURE_A = 0x101, ///< ADC channel 1 Capture Current Data Register A + ADC_CHANNEL_1_DSMIF_CAPTURE_B = 0x201, ///< ADC channel 1 Capture Current Data Register B + ADC_CHANNEL_2_DSMIF_CAPTURE_A = 0x102, ///< ADC channel 2 Capture Current Data Register A + ADC_CHANNEL_2_DSMIF_CAPTURE_B = 0x202, ///< ADC channel 2 Capture Current Data Register B +} adc_channel_t; + +/*============================================== + * CGC API Overrides + *==============================================*/ + +/** Divider values of clock provided to xSPI */ +typedef enum e_cgc_fsel_xspi_clock_div +{ + CGC_FSEL_XSPI_CLOCK_DIV_6 = 0x02, ///< XSPI_CLKn 133.3MHz (XSPI base clock divided by 3) + CGC_FSEL_XSPI_CLOCK_DIV_8 = 0x03, ///< XSPI_CLKn 100.0MHz / 75.0MHz (XSPI base clock divided by 3 / divided by 4) + CGC_FSEL_XSPI_CLOCK_DIV_16 = 0x04, ///< XSPI_CLKn 50.0MHz / 37.5MHz (XSPI base clock divided by 3 / divided by 4) + CGC_FSEL_XSPI_CLOCK_DIV_32 = 0x05, ///< XSPI_CLKn 25.0MHz (XSPI base clock divided by 3) + CGC_FSEL_XSPI_CLOCK_DIV_64 = 0x06, ///< XSPI_CLKn 12.5MHz (XSPI base clock divided by 3) +} cgc_fsel_xspi_clock_div_t; + +/** Divider values of base clock generated for xSPI */ +typedef enum e_cgc_divsel_xspi_clock_div +{ + CGC_DIVSEL_XSPI_CLOCK_DIV_3 = 0x00, ///< XSPI base clock divided by 3 + CGC_DIVSEL_XSPI_CLOCK_DIV_4 = 0x01, ///< XSPI base clock divided by 4 +} cgc_divsel_xspi_clock_div_t; + +/** Clock output divider values */ +typedef enum e_cgc_clock_out_clock_div +{ + CGC_CLOCK_OUT_CLOCK_DIV_2 = 0, ///< CKIO 100.0MHz / 75.0MHz (Base clock divided by 3 / divided by 4) + CGC_CLOCK_OUT_CLOCK_DIV_3 = 1, ///< CKIO 66.7MHz / 50.0MHz (Base clock divided by 3 / divided by 4) + CGC_CLOCK_OUT_CLOCK_DIV_4 = 2, ///< CKIO 50.0MHz / 37.5MHz (Base clock divided by 3 / divided by 4) + CGC_CLOCK_OUT_CLOCK_DIV_5 = 3, ///< CKIO 40.0MHz / 30.0MHz (Base clock divided by 3 / divided by 4) + CGC_CLOCK_OUT_CLOCK_DIV_6 = 4, ///< CKIO 33.3MHz / 25.0MHz (Base clock divided by 3 / divided by 4) + CGC_CLOCK_OUT_CLOCK_DIV_7 = 5, ///< CKIO 28.6MHz / 21.4MHz (Base clock divided by 3 / divided by 4) + CGC_CLOCK_OUT_CLOCK_DIV_8 = 6, ///< CKIO 25.0MHz / 18.75MHz (Base clock divided by 3 / divided by 4) +} cgc_clock_out_clock_div_t; + +/** CANFD clock divider values */ +typedef enum e_cgc_canfd_clock_div +{ + CGC_CANFD_CLOCK_DIV_10 = 0, ///< CANFD clock 80.0MHz + CGC_CANFD_CLOCK_DIV_20 = 1, ///< CANFD clock 40.0MHz +} cgc_canfd_clock_div_t; + +/** PHY clock source identifiers */ +typedef enum e_cgc_phy_clock +{ + CGC_PHY_CLOCK_PLL1 = 0, ///< PLL1 divider clock + CGC_PHY_CLOCK_MAIN_OSC = 1, ///< Main clock oscillator +} cgc_phy_clock_t; + +/** SPI asynchronous serial clock frequency */ +typedef enum e_cgc_spi_async_clock +{ + CGC_SPI_ASYNC_CLOCK_75MHZ = 0, ///< SPI asynchronous serial clock 75MHz + CGC_SPI_ASYNC_CLOCK_96MHZ = 1, ///< SPI asynchronous serial clock 96MHz +} cgc_spi_async_clock_t; + +/** SCI asynchronous serial clock frequency */ +typedef enum e_cgc_sci_async_clock +{ + CGC_SCI_ASYNC_CLOCK_75MHZ = 0, ///< SCI asynchronous serial clock 75MHz + CGC_SCI_ASYNC_CLOCK_96MHZ = 1, ///< SCI asynchronous serial clock 96MHz +} cgc_sci_async_clock_t; + +/** CPU clock divider values */ +typedef enum e_cgc_cpu_clock_div +{ + CGC_CPU_CLOCK_DIV_2 = 0, ///< CPU 200.0MHz / 150.0MHz (Base clock divided by 3 / divided by 4) + CGC_CPU_CLOCK_DIV_1 = 1, ///< CPU 400.0MHz / 300.0MHz (Base clock divided by 3 / divided by 4) +} cgc_cpu_clock_div_t; + +/** Base clock divider values */ +typedef enum e_cgc_baseclock_div +{ + CGC_BASECLOCK_DIV_3 = 0, ///< Base clock divided by 3 (ICLK=200.0MHz etc.) + CGC_BASECLOCK_DIV_4 = 1, ///< Base clock divided by 4 (ICLK=150.0MHz etc.) +} cgc_baseclock_div_t; + +/** System clock source identifiers */ +typedef enum e_cgc_clock +{ + CGC_CLOCK_LOCO = 0, ///< The low speed on chip oscillator + CGC_CLOCK_PLL0 = 1, ///< The PLL0 oscillator + CGC_CLOCK_PLL1 = 2, ///< The PLL1 oscillator +} cgc_clock_t; + +/** Clock configuration structure - Dummy definition because it is not used in this MPU. + * Set NULL as an input parameter to the @ref cgc_api_t::clockStart function for the PLL clock. */ +typedef struct st_cgc_pll_cfg +{ + uint32_t dummy; /* Dummy. */ +} cgc_pll_cfg_t; + +/** Clock configuration structure */ +typedef struct st_cgc_divider_cfg +{ + union + { + uint32_t sckcr_w; ///< System Clock Control Register + + struct + { + cgc_fsel_xspi_clock_div_t fselxspi0 : 3; ///< Divider value for XSPI_CLK0 + uint32_t : 3; + cgc_divsel_xspi_clock_div_t divselxspi0 : 1; ///< Divider base value for XSPI_CLK0 + uint32_t : 1; + cgc_fsel_xspi_clock_div_t fselxspi1 : 3; ///< Divider value for XSPI_CLK1 + uint32_t : 3; + cgc_divsel_xspi_clock_div_t divselxspi1 : 1; ///< Divider base value for XSPI_CLK1 + uint32_t : 1; + cgc_clock_out_clock_div_t ckio_div : 3; ///< Divider value for CKIO + uint32_t : 1; + cgc_canfd_clock_div_t fselcanfd_div : 1; ///< Divider value for CANFD clock + cgc_phy_clock_t phy_sel : 1; ///< Ethernet PHY reference clock output + uint32_t : 2; + cgc_spi_async_clock_t spi0_async_sel : 1; ///< SPI0 asynchronous serial clock + cgc_spi_async_clock_t spi1_async_sel : 1; ///< SPI1 asynchronous serial clock + cgc_spi_async_clock_t spi2_async_sel : 1; ///< SPI2 asynchronous serial clock + cgc_sci_async_clock_t sci0_async_sel : 1; ///< SCI0 asynchronous serial clock + cgc_sci_async_clock_t sci1_async_sel : 1; ///< SCI1 asynchronous serial clock + cgc_sci_async_clock_t sci2_async_sel : 1; ///< SCI2 asynchronous serial clock + cgc_sci_async_clock_t sci3_async_sel : 1; ///< SCI3 asynchronous serial clock + cgc_sci_async_clock_t sci4_async_sel : 1; ///< SCI4 asynchronous serial clock + } sckcr_b; + }; + + union + { + uint32_t sckcr2_w; ///< System Clock Control Register 2 + + struct + { + cgc_cpu_clock_div_t fsel0cr52 : 1; ///< Divider value for Cortex-R52 CPU0 + uint32_t : 4; + cgc_baseclock_div_t div_sub_sel : 1; ///< Divider value for base clock + uint32_t : 18; + cgc_spi_async_clock_t spi3_async_sel : 1; ///< SPI3 asynchronous serial clock + cgc_sci_async_clock_t sci5_async_sel : 1; ///< SCI5 asynchronous serial clock + uint32_t : 6; + } sckcr2_b; + }; +} cgc_divider_cfg_t; + +/** Clock options */ +typedef enum e_cgc_clock_change +{ + CGC_CLOCK_CHANGE_START = 0, ///< Start the clock + CGC_CLOCK_CHANGE_STOP = 1, ///< Stop the clock + CGC_CLOCK_CHANGE_NONE = 2, ///< No change to the clock +} cgc_clock_change_t; + +/** Clock configuration */ +typedef struct st_cgc_clocks_cfg +{ + cgc_divider_cfg_t divider_cfg; ///< Clock dividers structure + cgc_clock_change_t loco_state; ///< State of LOCO + cgc_clock_change_t pll1_state; ///< State of PLL1 +} cgc_clocks_cfg_t; + +/*============================================== + * ELC API Overrides + *==============================================*/ + +/** Possible peripherals to be linked to event signals (not all available on all MPUs) */ +typedef enum e_elc_peripheral +{ + ELC_PERIPHERAL_MTU0 = (0), + ELC_PERIPHERAL_MTU3 = (1), + ELC_PERIPHERAL_MTU4 = (2), + ELC_PERIPHERAL_LLPPGPT_A = (3), + ELC_PERIPHERAL_LLPPGPT_B = (4), + ELC_PERIPHERAL_LLPPGPT_C = (5), + ELC_PERIPHERAL_LLPPGPT_D = (6), + ELC_PERIPHERAL_LLPPGPT_E = (7), + ELC_PERIPHERAL_LLPPGPT_F = (8), + ELC_PERIPHERAL_LLPPGPT_G = (9), + ELC_PERIPHERAL_LLPPGPT_H = (10), + ELC_PERIPHERAL_NONSAFTYGPT_A = (11), + ELC_PERIPHERAL_NONSAFTYGPT_B = (12), + ELC_PERIPHERAL_NONSAFTYGPT_C = (13), + ELC_PERIPHERAL_NONSAFTYGPT_D = (14), + ELC_PERIPHERAL_NONSAFTYGPT_E = (15), + ELC_PERIPHERAL_NONSAFTYGPT_F = (16), + ELC_PERIPHERAL_NONSAFTYGPT_G = (17), + ELC_PERIPHERAL_NONSAFTYGPT_H = (18), + ELC_PERIPHERAL_ADC0_A = (19), + ELC_PERIPHERAL_ADC0_B = (20), + ELC_PERIPHERAL_ADC1_A = (21), + ELC_PERIPHERAL_ADC1_B = (22), + ELC_PERIPHERAL_DSMIF0_CAP0 = (23), + ELC_PERIPHERAL_DSMIF0_CAP1 = (24), + ELC_PERIPHERAL_DSMIF0_CAP2 = (25), + ELC_PERIPHERAL_DSMIF0_CAP3 = (26), + ELC_PERIPHERAL_DSMIF0_CAP4 = (27), + ELC_PERIPHERAL_DSMIF0_CAP5 = (28), + ELC_PERIPHERAL_DSMIF0_CDCNT0 = (29), + ELC_PERIPHERAL_DSMIF0_CDCNT1 = (30), + ELC_PERIPHERAL_DSMIF0_CDCNT2 = (31), + ELC_PERIPHERAL_DSMIF1_CAP0 = (32), + ELC_PERIPHERAL_DSMIF1_CAP1 = (33), + ELC_PERIPHERAL_DSMIF1_CAP2 = (34), + ELC_PERIPHERAL_DSMIF1_CAP3 = (35), + ELC_PERIPHERAL_DSMIF1_CAP4 = (36), + ELC_PERIPHERAL_DSMIF1_CAP5 = (37), + ELC_PERIPHERAL_DSMIF1_CDCNT0 = (38), + ELC_PERIPHERAL_DSMIF1_CDCNT1 = (39), + ELC_PERIPHERAL_DSMIF1_CDCNT2 = (40), + ELC_PERIPHERAL_ESC0 = (43), + ELC_PERIPHERAL_ESC1 = (44), + ELC_PERIPHERAL_GMA0 = (45), + ELC_PERIPHERAL_GMA1 = (46), + ELC_PERIPHERAL_OUTPORTGR1 = (47), + ELC_PERIPHERAL_OUTPORTGR2 = (48), + ELC_PERIPHERAL_INPORTGR1 = (49), + ELC_PERIPHERAL_INPORTGR2 = (50), + ELC_PERIPHERAL_SINGLEPORT0 = (51), + ELC_PERIPHERAL_SINGLEPORT1 = (52), + ELC_PERIPHERAL_SINGLEPORT2 = (53), + ELC_PERIPHERAL_SINGLEPORT3 = (54), +} elc_peripheral_t; + +/*============================================== + * ERROR API Overrides + *==============================================*/ + +/** Error event source. */ +typedef enum e_error_event +{ + ERROR_EVENT_CPU0, ///< Error event from CPU0 + ERROR_EVENT_PERIPHERAL_0, ///< Error event from Peripheral 0 + ERROR_EVENT_PERIPHERAL_1, ///< Error event from Peripheral 1 +} error_event_t; + +/*============================================== + * ETHER API Overrides + *==============================================*/ + +/** Event code of callback function */ +typedef enum e_ether_event +{ + ETHER_EVENT_WAKEON_LAN, ///< Magic packet detection event + ETHER_EVENT_LINK_ON, ///< Link up detection event + ETHER_EVENT_LINK_OFF, ///< Link down detection event + ETHER_EVENT_SBD_INTERRUPT, ///< SBD Interrupt event + ETHER_EVENT_PMT_INTERRUPT ///< PMT Interrupt event +} ether_event_t; + +/** Ether Callback function parameter data */ +typedef struct st_ether_callback_args +{ + uint32_t channel; ///< Device channel number + ether_event_t event; ///< Event code + + uint32_t status_ether; ///< Interrupt status of SDB or PMT + uint32_t status_link; ///< Link status + + void const * p_context; ///< Placeholder for user data. +} ether_callback_args_t; + +/*============================================== + * ETHER PHY API Overrides + *==============================================*/ + +/** Phy LSI */ +typedef enum e_ether_phy_lsi_type +{ + ETHER_PHY_LSI_TYPE_DEFAULT = 0, ///< Select default configuration. This type dose not change Phy LSI default setting by strapping option. + ETHER_PHY_LSI_TYPE_VSC8541 = 1, ///< Select configuration forVSC8541 + ETHER_PHY_LSI_TYPE_KSZ9131 = 2, ///< Select configuration forKSZ9131 + ETHER_PHY_LSI_TYPE_KSZ9031 = 3, ///< Select configuration forKSZ9031 + ETHER_PHY_LSI_TYPE_KSZ8081 = 4, ///< Select configuration forKSZ8081 + ETHER_PHY_LSI_TYPE_KSZ8041 = 5, ///< Select configuration forKSZ8041 + ETHER_PHY_LSI_TYPE_CUSTOM = 0xFFU, ///< Select configuration for User custom. +} ether_phy_lsi_type_t; + +/*============================================== + * ETHER SWITCH API Overrides + *==============================================*/ + +/** Ether Switch Event code of callback function */ +typedef enum e_ether_switch_event +{ + ETHER_SWITCH_EVENT_LINK_CHANGE ///< Change Link status +} ether_switch_event_t; + +/** Ether Switch Callback function parameter data */ +typedef struct st_ether_switch_callback_args +{ + uint32_t channel; ///< Device channel number + ether_switch_event_t event; ///< Event code + + uint32_t status_link; ///< Link status bit0:port0. bit1:port1. bit2:port2, bit3:port3 + + void const * p_context; ///< Placeholder for user data. +} ether_switch_callback_args_t; + +/*============================================== + * IOPORT API Overrides + *==============================================*/ + +/** Superset of all peripheral functions. */ +typedef enum e_ioport_pin_pfc +{ + IOPORT_PIN_P000_PFC_00_ETH2_RXD3 = (0x00U << IOPORT_PFC_OFFSET), ///< P00_0 / ETHER_ETHn / ETH2_RXD3 + IOPORT_PIN_P000_PFC_02_D15 = (0x02U << IOPORT_PFC_OFFSET), ///< P00_0 / BSC / D15 + IOPORT_PIN_P000_PFC_03_SCK2 = (0x03U << IOPORT_PFC_OFFSET), ///< P00_0 / SCIn / SCK2 + IOPORT_PIN_P000_PFC_04_DE2 = (0x04U << IOPORT_PFC_OFFSET), ///< P00_0 / SCIn / DE2 + IOPORT_PIN_P000_PFC_05_HD15 = (0x05U << IOPORT_PFC_OFFSET), ///< P00_0 / PHOSTIF / HD15 + IOPORT_PIN_P001_PFC_00_IRQ0 = (0x00U << IOPORT_PFC_OFFSET), ///< P00_1 / IRQ / IRQ0 + IOPORT_PIN_P001_PFC_01_ETH2_RXDV = (0x01U << IOPORT_PFC_OFFSET), ///< P00_1 / ETHER_ETHn / ETH2_RXDV + IOPORT_PIN_P001_PFC_03_A13 = (0x03U << IOPORT_PFC_OFFSET), ///< P00_1 / BSC / A13 + IOPORT_PIN_P001_PFC_04_MTIC5U = (0x04U << IOPORT_PFC_OFFSET), ///< P00_1 / MTU3n / MTIC5U + IOPORT_PIN_P001_PFC_05_RXD2_SCL2_MISO2 = (0x05U << IOPORT_PFC_OFFSET), ///< P00_1 / SCIn / RXD2_SCL2_MISO2 + IOPORT_PIN_P002_PFC_00_ETH2_TXEN = (0x00U << IOPORT_PFC_OFFSET), ///< P00_2 / ETHER_ETHn / ETH2_TXEN + IOPORT_PIN_P002_PFC_02_RD = (0x02U << IOPORT_PFC_OFFSET), ///< P00_2 / BSC / RD + IOPORT_PIN_P002_PFC_03_MTIC5V = (0x03U << IOPORT_PFC_OFFSET), ///< P00_2 / MTU3n / MTIC5V + IOPORT_PIN_P002_PFC_04_TXD2_SDA2_MOSI2 = (0x04U << IOPORT_PFC_OFFSET), ///< P00_2 / SCIn / TXD2_SDA2_MOSI2 + IOPORT_PIN_P002_PFC_05_USB_OVRCUR = (0x05U << IOPORT_PFC_OFFSET), ///< P00_2 / USB_HS / USB_OVRCUR + IOPORT_PIN_P003_PFC_00_IRQ1 = (0x00U << IOPORT_PFC_OFFSET), ///< P00_3 / IRQ / IRQ1 + IOPORT_PIN_P003_PFC_01_ETH2_REFCLK = (0x01U << IOPORT_PFC_OFFSET), ///< P00_3 / ETHER_ETHn / ETH2_REFCLK + IOPORT_PIN_P003_PFC_02_RMII2_REFCLK = (0x02U << IOPORT_PFC_OFFSET), ///< P00_3 / ETHER_ETHn / RMII2_REFCLK + IOPORT_PIN_P003_PFC_04_RD_WR = (0x04U << IOPORT_PFC_OFFSET), ///< P00_3 / BSC / RD_WR + IOPORT_PIN_P003_PFC_05_MTIC5W = (0x05U << IOPORT_PFC_OFFSET), ///< P00_3 / MTU3n / MTIC5W + IOPORT_PIN_P003_PFC_06_SS2_CTS2_RTS2 = (0x06U << IOPORT_PFC_OFFSET), ///< P00_3 / SCIn / SS2_CTS2_RTS2 + IOPORT_PIN_P004_PFC_00_IRQ13 = (0x00U << IOPORT_PFC_OFFSET), ///< P00_4 / IRQ / IRQ13 + IOPORT_PIN_P004_PFC_01_ETH2_RXER = (0x01U << IOPORT_PFC_OFFSET), ///< P00_4 / ETHER_ETHn / ETH2_RXER + IOPORT_PIN_P004_PFC_03_WAIT = (0x03U << IOPORT_PFC_OFFSET), ///< P00_4 / BSC / WAIT + IOPORT_PIN_P004_PFC_04_MTIOC3A = (0x04U << IOPORT_PFC_OFFSET), ///< P00_4 / MTU3n / MTIOC3A + IOPORT_PIN_P004_PFC_05_GTIOC0A = (0x05U << IOPORT_PFC_OFFSET), ///< P00_4 / GPTn / GTIOC0A + IOPORT_PIN_P004_PFC_06_MCLK0 = (0x06U << IOPORT_PFC_OFFSET), ///< P00_4 / DSMIFn / MCLK0 + IOPORT_PIN_P004_PFC_07_HWAIT = (0x07U << IOPORT_PFC_OFFSET), ///< P00_4 / PHOSTIF / HWAIT + IOPORT_PIN_P005_PFC_00_ETHSW_PHYLINK2 = (0x00U << IOPORT_PFC_OFFSET), ///< P00_5 / ETHER_ETHSW / ETHSW_PHYLINK2 + IOPORT_PIN_P005_PFC_02_CS0 = (0x02U << IOPORT_PFC_OFFSET), ///< P00_5 / BSC / CS0 + IOPORT_PIN_P005_PFC_03_ESC_PHYLINK2 = (0x03U << IOPORT_PFC_OFFSET), ///< P00_5 / ETHER_ESC / ESC_PHYLINK2 + IOPORT_PIN_P005_PFC_04_MTIOC3C = (0x04U << IOPORT_PFC_OFFSET), ///< P00_5 / MTU3n / MTIOC3C + IOPORT_PIN_P005_PFC_05_GTIOC0B = (0x05U << IOPORT_PFC_OFFSET), ///< P00_5 / GPTn / GTIOC0B + IOPORT_PIN_P005_PFC_06_MDAT0 = (0x06U << IOPORT_PFC_OFFSET), ///< P00_5 / DSMIFn / MDAT0 + IOPORT_PIN_P005_PFC_07_ETHSW_PHYLINK0 = (0x07U << IOPORT_PFC_OFFSET), ///< P00_5 / ETHER_ETHSW / ETHSW_PHYLINK0 + IOPORT_PIN_P005_PFC_08_ESC_PHYLINK0 = (0x08U << IOPORT_PFC_OFFSET), ///< P00_5 / ETHER_ESC / ESC_PHYLINK0 + IOPORT_PIN_P006_PFC_00_ETH2_TXCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P00_6 / ETHER_ETHn / ETH2_TXCLK + IOPORT_PIN_P006_PFC_01_CS5 = (0x01U << IOPORT_PFC_OFFSET), ///< P00_6 / BSC / CS5 + IOPORT_PIN_P006_PFC_02_MTIOC3B = (0x02U << IOPORT_PFC_OFFSET), ///< P00_6 / MTU3n / MTIOC3B + IOPORT_PIN_P006_PFC_03_GTIOC1A = (0x03U << IOPORT_PFC_OFFSET), ///< P00_6 / GPTn / GTIOC1A + IOPORT_PIN_P007_PFC_00_IRQ13 = (0x00U << IOPORT_PFC_OFFSET), ///< P00_7 / IRQ / IRQ13 + IOPORT_PIN_P007_PFC_01_RAS = (0x01U << IOPORT_PFC_OFFSET), ///< P00_7 / BSC / RAS + IOPORT_PIN_P007_PFC_02_MTIOC4A = (0x02U << IOPORT_PFC_OFFSET), ///< P00_7 / MTU3n / MTIOC4A + IOPORT_PIN_P007_PFC_03_GTIOC2A = (0x03U << IOPORT_PFC_OFFSET), ///< P00_7 / GPTn / GTIOC2A + IOPORT_PIN_P010_PFC_00_GMAC_MDIO = (0x00U << IOPORT_PFC_OFFSET), ///< P01_0 / ETHER_GMAC / GMAC_MDIO + IOPORT_PIN_P010_PFC_01_ETHSW_MDIO = (0x01U << IOPORT_PFC_OFFSET), ///< P01_0 / ETHER_ETHSW / ETHSW_MDIO + IOPORT_PIN_P010_PFC_02_CAS = (0x02U << IOPORT_PFC_OFFSET), ///< P01_0 / BSC / CAS + IOPORT_PIN_P010_PFC_03_ESC_MDIO = (0x03U << IOPORT_PFC_OFFSET), ///< P01_0 / ETHER_ESC / ESC_MDIO + IOPORT_PIN_P010_PFC_04_MTIOC4C = (0x04U << IOPORT_PFC_OFFSET), ///< P01_0 / MTU3n / MTIOC4C + IOPORT_PIN_P010_PFC_05_GTIOC3A = (0x05U << IOPORT_PFC_OFFSET), ///< P01_0 / GPTn / GTIOC3A + IOPORT_PIN_P010_PFC_06_CTS2 = (0x06U << IOPORT_PFC_OFFSET), ///< P01_0 / SCIn / CTS2 + IOPORT_PIN_P010_PFC_07_MCLK1 = (0x07U << IOPORT_PFC_OFFSET), ///< P01_0 / DSMIFn / MCLK1 + IOPORT_PIN_P011_PFC_00_GMAC_MDC = (0x00U << IOPORT_PFC_OFFSET), ///< P01_1 / ETHER_GMAC / GMAC_MDC + IOPORT_PIN_P011_PFC_01_ETHSW_MDC = (0x01U << IOPORT_PFC_OFFSET), ///< P01_1 / ETHER_ETHSW / ETHSW_MDC + IOPORT_PIN_P011_PFC_02_CKE = (0x02U << IOPORT_PFC_OFFSET), ///< P01_1 / BSC / CKE + IOPORT_PIN_P011_PFC_03_ESC_MDC = (0x03U << IOPORT_PFC_OFFSET), ///< P01_1 / ETHER_ESC / ESC_MDC + IOPORT_PIN_P011_PFC_04_MTIOC3D = (0x04U << IOPORT_PFC_OFFSET), ///< P01_1 / MTU3n / MTIOC3D + IOPORT_PIN_P011_PFC_05_GTIOC1B = (0x05U << IOPORT_PFC_OFFSET), ///< P01_1 / GPTn / GTIOC1B + IOPORT_PIN_P011_PFC_06_DE2 = (0x06U << IOPORT_PFC_OFFSET), ///< P01_1 / SCIn / DE2 + IOPORT_PIN_P011_PFC_07_MDAT1 = (0x07U << IOPORT_PFC_OFFSET), ///< P01_1 / DSMIFn / MDAT1 + IOPORT_PIN_P012_PFC_00_IRQ2 = (0x00U << IOPORT_PFC_OFFSET), ///< P01_2 / IRQ / IRQ2 + IOPORT_PIN_P012_PFC_01_ETH2_TXD3 = (0x01U << IOPORT_PFC_OFFSET), ///< P01_2 / ETHER_ETHn / ETH2_TXD3 + IOPORT_PIN_P012_PFC_02_CS2 = (0x02U << IOPORT_PFC_OFFSET), ///< P01_2 / BSC / CS2 + IOPORT_PIN_P012_PFC_03_MTIOC4B = (0x03U << IOPORT_PFC_OFFSET), ///< P01_2 / MTU3n / MTIOC4B + IOPORT_PIN_P012_PFC_04_GTIOC2B = (0x04U << IOPORT_PFC_OFFSET), ///< P01_2 / GPTn / GTIOC2B + IOPORT_PIN_P013_PFC_00_ETH2_TXD2 = (0x00U << IOPORT_PFC_OFFSET), ///< P01_3 / ETHER_ETHn / ETH2_TXD2 + IOPORT_PIN_P013_PFC_01_AH = (0x01U << IOPORT_PFC_OFFSET), ///< P01_3 / BSC / AH + IOPORT_PIN_P013_PFC_02_MTIOC4D = (0x02U << IOPORT_PFC_OFFSET), ///< P01_3 / MTU3n / MTIOC4D + IOPORT_PIN_P013_PFC_03_GTIOC3B = (0x03U << IOPORT_PFC_OFFSET), ///< P01_3 / GPTn / GTIOC3B + IOPORT_PIN_P014_PFC_00_IRQ3 = (0x00U << IOPORT_PFC_OFFSET), ///< P01_4 / IRQ / IRQ3 + IOPORT_PIN_P014_PFC_01_ETH2_TXD1 = (0x01U << IOPORT_PFC_OFFSET), ///< P01_4 / ETHER_ETHn / ETH2_TXD1 + IOPORT_PIN_P014_PFC_02_WE1_DQMLU = (0x02U << IOPORT_PFC_OFFSET), ///< P01_4 / BSC / WE1_DQMLU + IOPORT_PIN_P014_PFC_03_POE0 = (0x03U << IOPORT_PFC_OFFSET), ///< P01_4 / MTU_POE3 / POE0 + IOPORT_PIN_P015_PFC_00_ETH2_TXD0 = (0x00U << IOPORT_PFC_OFFSET), ///< P01_5 / ETHER_ETHn / ETH2_TXD0 + IOPORT_PIN_P015_PFC_01_WE0_DQMLL = (0x01U << IOPORT_PFC_OFFSET), ///< P01_5 / BSC / WE0_DQMLL + IOPORT_PIN_P016_PFC_00_GMAC_PTPTRG1 = (0x00U << IOPORT_PFC_OFFSET), ///< P01_6 / ETHER_GMAC / GMAC_PTPTRG1 + IOPORT_PIN_P016_PFC_01_TRACEDATA0 = (0x01U << IOPORT_PFC_OFFSET), ///< P01_6 / TRACE / TRACEDATA0 + IOPORT_PIN_P016_PFC_02_A20 = (0x02U << IOPORT_PFC_OFFSET), ///< P01_6 / BSC / A20 + IOPORT_PIN_P016_PFC_03_ESC_LATCH1 = (0x03U << IOPORT_PFC_OFFSET), ///< P01_6 / ETHER_ESC / ESC_LATCH1 + IOPORT_PIN_P016_PFC_04_ESC_LATCH0 = (0x04U << IOPORT_PFC_OFFSET), ///< P01_6 / ETHER_ESC / ESC_LATCH0 + IOPORT_PIN_P016_PFC_05_MTIOC1A = (0x05U << IOPORT_PFC_OFFSET), ///< P01_6 / MTU3n / MTIOC1A + IOPORT_PIN_P016_PFC_06_GTIOC9A = (0x06U << IOPORT_PFC_OFFSET), ///< P01_6 / GPTn / GTIOC9A + IOPORT_PIN_P016_PFC_07_CTS1 = (0x07U << IOPORT_PFC_OFFSET), ///< P01_6 / SCIn / CTS1 + IOPORT_PIN_P016_PFC_08_CANTXDP1 = (0x08U << IOPORT_PFC_OFFSET), ///< P01_6 / CANFDn / CANTXDP1 + IOPORT_PIN_P016_PFC_0A_HA20 = (0x0AU << IOPORT_PFC_OFFSET), ///< P01_6 / PHOSTIF / HA20 + IOPORT_PIN_P017_PFC_00_ETHSW_LPI1 = (0x00U << IOPORT_PFC_OFFSET), ///< P01_7 / ETHER_ETHSW / ETHSW_LPI1 + IOPORT_PIN_P017_PFC_01_TRACEDATA1 = (0x01U << IOPORT_PFC_OFFSET), ///< P01_7 / TRACE / TRACEDATA1 + IOPORT_PIN_P017_PFC_02_A19 = (0x02U << IOPORT_PFC_OFFSET), ///< P01_7 / BSC / A19 + IOPORT_PIN_P017_PFC_03_MTIOC1B = (0x03U << IOPORT_PFC_OFFSET), ///< P01_7 / MTU3n / MTIOC1B + IOPORT_PIN_P017_PFC_04_GTIOC9B = (0x04U << IOPORT_PFC_OFFSET), ///< P01_7 / GPTn / GTIOC9B + IOPORT_PIN_P017_PFC_05_ADTRG0 = (0x05U << IOPORT_PFC_OFFSET), ///< P01_7 / ADCn / ADTRG0 + IOPORT_PIN_P017_PFC_06_SCK1 = (0x06U << IOPORT_PFC_OFFSET), ///< P01_7 / SCIn / SCK1 + IOPORT_PIN_P017_PFC_07_SPI_RSPCK3 = (0x07U << IOPORT_PFC_OFFSET), ///< P01_7 / SPIn / SPI_RSPCK3 + IOPORT_PIN_P017_PFC_08_CANRX0 = (0x08U << IOPORT_PFC_OFFSET), ///< P01_7 / CANFDn / CANRX0 + IOPORT_PIN_P017_PFC_0A_HA19 = (0x0AU << IOPORT_PFC_OFFSET), ///< P01_7 / PHOSTIF / HA19 + IOPORT_PIN_P020_PFC_00_IRQ4 = (0x00U << IOPORT_PFC_OFFSET), ///< P02_0 / IRQ / IRQ4 + IOPORT_PIN_P020_PFC_01_ETHSW_LPI2 = (0x01U << IOPORT_PFC_OFFSET), ///< P02_0 / ETHER_ETHSW / ETHSW_LPI2 + IOPORT_PIN_P020_PFC_02_TRACEDATA2 = (0x02U << IOPORT_PFC_OFFSET), ///< P02_0 / TRACE / TRACEDATA2 + IOPORT_PIN_P020_PFC_03_A18 = (0x03U << IOPORT_PFC_OFFSET), ///< P02_0 / BSC / A18 + IOPORT_PIN_P020_PFC_04_GTADSML0 = (0x04U << IOPORT_PFC_OFFSET), ///< P02_0 / GPT / GTADSML0 + IOPORT_PIN_P020_PFC_05_RXD1_SCL1_MISO1 = (0x05U << IOPORT_PFC_OFFSET), ///< P02_0 / SCIn / RXD1_SCL1_MISO1 + IOPORT_PIN_P020_PFC_06_SPI_MISO3 = (0x06U << IOPORT_PFC_OFFSET), ///< P02_0 / SPIn / SPI_MISO3 + IOPORT_PIN_P020_PFC_07_CANTX1 = (0x07U << IOPORT_PFC_OFFSET), ///< P02_0 / CANFDn / CANTX1 + IOPORT_PIN_P020_PFC_08_USB_OTGID = (0x08U << IOPORT_PFC_OFFSET), ///< P02_0 / USB_HS / USB_OTGID + IOPORT_PIN_P020_PFC_0A_HA18 = (0x0AU << IOPORT_PFC_OFFSET), ///< P02_0 / PHOSTIF / HA18 + IOPORT_PIN_P021_PFC_00_ETHSW_PTPOUT1 = (0x00U << IOPORT_PFC_OFFSET), ///< P02_1 / ETHER_ETHSW / ETHSW_PTPOUT1 + IOPORT_PIN_P021_PFC_01_A17 = (0x01U << IOPORT_PFC_OFFSET), ///< P02_1 / BSC / A17 + IOPORT_PIN_P021_PFC_02_ESC_SYNC1 = (0x02U << IOPORT_PFC_OFFSET), ///< P02_1 / ETHER_ESC / ESC_SYNC1 + IOPORT_PIN_P021_PFC_03_ESC_SYNC0 = (0x03U << IOPORT_PFC_OFFSET), ///< P02_1 / ETHER_ESC / ESC_SYNC0 + IOPORT_PIN_P021_PFC_04_DE1 = (0x04U << IOPORT_PFC_OFFSET), ///< P02_1 / SCIn / DE1 + IOPORT_PIN_P021_PFC_05_HA17 = (0x05U << IOPORT_PFC_OFFSET), ///< P02_1 / PHOSTIF / HA17 + IOPORT_PIN_P022_PFC_00_IRQ14 = (0x00U << IOPORT_PFC_OFFSET), ///< P02_2 / IRQ / IRQ14 + IOPORT_PIN_P022_PFC_01_ETHSW_TDMAOUT0 = (0x01U << IOPORT_PFC_OFFSET), ///< P02_2 / ETHER_ETHSW / ETHSW_TDMAOUT0 + IOPORT_PIN_P022_PFC_02_A16 = (0x02U << IOPORT_PFC_OFFSET), ///< P02_2 / BSC / A16 + IOPORT_PIN_P022_PFC_03_MTIOC2A = (0x03U << IOPORT_PFC_OFFSET), ///< P02_2 / MTU3n / MTIOC2A + IOPORT_PIN_P022_PFC_04_GTIOC10A = (0x04U << IOPORT_PFC_OFFSET), ///< P02_2 / GPTn / GTIOC10A + IOPORT_PIN_P022_PFC_05_POE10 = (0x05U << IOPORT_PFC_OFFSET), ///< P02_2 / MTU_POE3 / POE10 + IOPORT_PIN_P022_PFC_06_TXD1_SDA1_MOSI1 = (0x06U << IOPORT_PFC_OFFSET), ///< P02_2 / SCIn / TXD1_SDA1_MOSI1 + IOPORT_PIN_P022_PFC_07_SPI_MOSI3 = (0x07U << IOPORT_PFC_OFFSET), ///< P02_2 / SPIn / SPI_MOSI3 + IOPORT_PIN_P022_PFC_08_CANTX0 = (0x08U << IOPORT_PFC_OFFSET), ///< P02_2 / CANFDn / CANTX0 + IOPORT_PIN_P022_PFC_0A_RTCAT1HZ = (0x0AU << IOPORT_PFC_OFFSET), ///< P02_2 / RTC / RTCAT1HZ + IOPORT_PIN_P022_PFC_0B_HA16 = (0x0BU << IOPORT_PFC_OFFSET), ///< P02_2 / PHOSTIF / HA16 + IOPORT_PIN_P023_PFC_00_IRQ15 = (0x00U << IOPORT_PFC_OFFSET), ///< P02_3 / IRQ / IRQ15 + IOPORT_PIN_P023_PFC_01_ETHSW_TDMAOUT1 = (0x01U << IOPORT_PFC_OFFSET), ///< P02_3 / ETHER_ETHSW / ETHSW_TDMAOUT1 + IOPORT_PIN_P023_PFC_02_A15 = (0x02U << IOPORT_PFC_OFFSET), ///< P02_3 / BSC / A15 + IOPORT_PIN_P023_PFC_03_AH = (0x03U << IOPORT_PFC_OFFSET), ///< P02_3 / BSC / AH + IOPORT_PIN_P023_PFC_04_MTIOC2B = (0x04U << IOPORT_PFC_OFFSET), ///< P02_3 / MTU3n / MTIOC2B + IOPORT_PIN_P023_PFC_05_GTIOC10B = (0x05U << IOPORT_PFC_OFFSET), ///< P02_3 / GPTn / GTIOC10B + IOPORT_PIN_P023_PFC_06_POE11 = (0x06U << IOPORT_PFC_OFFSET), ///< P02_3 / MTU_POE3 / POE11 + IOPORT_PIN_P023_PFC_07_SS1_CTS1_RTS1 = (0x07U << IOPORT_PFC_OFFSET), ///< P02_3 / SCIn / SS1_CTS1_RTS1 + IOPORT_PIN_P023_PFC_08_SPI_SSL30 = (0x08U << IOPORT_PFC_OFFSET), ///< P02_3 / SPIn / SPI_SSL30 + IOPORT_PIN_P023_PFC_09_CANRX1 = (0x09U << IOPORT_PFC_OFFSET), ///< P02_3 / CANFDn / CANRX1 + IOPORT_PIN_P023_PFC_0B_HA15 = (0x0BU << IOPORT_PFC_OFFSET), ///< P02_3 / PHOSTIF / HA15 + IOPORT_PIN_P024_PFC_00_TDO = (0x00U << IOPORT_PFC_OFFSET), ///< P02_4 / JTAG/SWD / TDO + IOPORT_PIN_P024_PFC_01_WE0_DQMLL = (0x01U << IOPORT_PFC_OFFSET), ///< P02_4 / BSC / WE0_DQMLL + IOPORT_PIN_P024_PFC_02_DE1 = (0x02U << IOPORT_PFC_OFFSET), ///< P02_4 / SCIn / DE1 + IOPORT_PIN_P024_PFC_03_SPI_SSL33 = (0x03U << IOPORT_PFC_OFFSET), ///< P02_4 / SPIn / SPI_SSL33 + IOPORT_PIN_P025_PFC_00_ETHSW_TDMAOUT3 = (0x00U << IOPORT_PFC_OFFSET), ///< P02_5 / ETHER_ETHSW / ETHSW_TDMAOUT3 + IOPORT_PIN_P025_PFC_01_TDI = (0x01U << IOPORT_PFC_OFFSET), ///< P02_5 / JTAG/SWD / TDI + IOPORT_PIN_P025_PFC_02_WE1_DQMLU = (0x02U << IOPORT_PFC_OFFSET), ///< P02_5 / BSC / WE1_DQMLU + IOPORT_PIN_P025_PFC_03_SCK5 = (0x03U << IOPORT_PFC_OFFSET), ///< P02_5 / SCIn / SCK5 + IOPORT_PIN_P025_PFC_04_SPI_SSL31 = (0x04U << IOPORT_PFC_OFFSET), ///< P02_5 / SPIn / SPI_SSL31 + IOPORT_PIN_P026_PFC_00_TMS_SWDIO = (0x00U << IOPORT_PFC_OFFSET), ///< P02_6 / JTAG/SWD / TMS_SWDIO + IOPORT_PIN_P026_PFC_01_RXD5_SCL5_MISO5 = (0x01U << IOPORT_PFC_OFFSET), ///< P02_6 / SCIn / RXD5_SCL5_MISO5 + IOPORT_PIN_P027_PFC_00_TCK_SWCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P02_7 / JTAG/SWD / TCK_SWCLK + IOPORT_PIN_P027_PFC_01_TXD5_SDA5_MOSI5 = (0x01U << IOPORT_PFC_OFFSET), ///< P02_7 / SCIn / TXD5_SDA5_MOSI5 + IOPORT_PIN_P030_PFC_00_IRQ14 = (0x00U << IOPORT_PFC_OFFSET), ///< P03_0 / IRQ / IRQ14 + IOPORT_PIN_P030_PFC_01_TRACEDATA3 = (0x01U << IOPORT_PFC_OFFSET), ///< P03_0 / TRACE / TRACEDATA3 + IOPORT_PIN_P030_PFC_02_A14 = (0x02U << IOPORT_PFC_OFFSET), ///< P03_0 / BSC / A14 + IOPORT_PIN_P030_PFC_03_CS5 = (0x03U << IOPORT_PFC_OFFSET), ///< P03_0 / BSC / CS5 + IOPORT_PIN_P030_PFC_04_GTADSML1 = (0x04U << IOPORT_PFC_OFFSET), ///< P03_0 / GPT / GTADSML1 + IOPORT_PIN_P030_PFC_05_SCK2 = (0x05U << IOPORT_PFC_OFFSET), ///< P03_0 / SCIn / SCK2 + IOPORT_PIN_P030_PFC_06_SPI_SSL32 = (0x06U << IOPORT_PFC_OFFSET), ///< P03_0 / SPIn / SPI_SSL32 + IOPORT_PIN_P030_PFC_07_CANTXDP1 = (0x07U << IOPORT_PFC_OFFSET), ///< P03_0 / CANFDn / CANTXDP1 + IOPORT_PIN_P030_PFC_09_HA14 = (0x09U << IOPORT_PFC_OFFSET), ///< P03_0 / PHOSTIF / HA14 + IOPORT_PIN_P035_PFC_00_IRQ5 = (0x00U << IOPORT_PFC_OFFSET), ///< P03_5 / IRQ / IRQ5 + IOPORT_PIN_P035_PFC_01_ETH2_CRS = (0x01U << IOPORT_PFC_OFFSET), ///< P03_5 / ETHER_ETHn / ETH2_CRS + IOPORT_PIN_P035_PFC_02_A12 = (0x02U << IOPORT_PFC_OFFSET), ///< P03_5 / BSC / A12 + IOPORT_PIN_P035_PFC_03_MTIOC3A = (0x03U << IOPORT_PFC_OFFSET), ///< P03_5 / MTU3n / MTIOC3A + IOPORT_PIN_P035_PFC_04_GTIOC4A = (0x04U << IOPORT_PFC_OFFSET), ///< P03_5 / GPTn / GTIOC4A + IOPORT_PIN_P035_PFC_05_RXD2_SCL2_MISO2 = (0x05U << IOPORT_PFC_OFFSET), ///< P03_5 / SCIn / RXD2_SCL2_MISO2 + IOPORT_PIN_P035_PFC_06_MCLK2 = (0x06U << IOPORT_PFC_OFFSET), ///< P03_5 / DSMIFn / MCLK2 + IOPORT_PIN_P035_PFC_07_HA12 = (0x07U << IOPORT_PFC_OFFSET), ///< P03_5 / PHOSTIF / HA12 + IOPORT_PIN_P036_PFC_00_IRQ8 = (0x00U << IOPORT_PFC_OFFSET), ///< P03_6 / IRQ / IRQ8 + IOPORT_PIN_P036_PFC_01_ETH2_COL = (0x01U << IOPORT_PFC_OFFSET), ///< P03_6 / ETHER_ETHn / ETH2_COL + IOPORT_PIN_P036_PFC_02_TRACEDATA4 = (0x02U << IOPORT_PFC_OFFSET), ///< P03_6 / TRACE / TRACEDATA4 + IOPORT_PIN_P036_PFC_03_A11 = (0x03U << IOPORT_PFC_OFFSET), ///< P03_6 / BSC / A11 + IOPORT_PIN_P036_PFC_04_MTIOC3B = (0x04U << IOPORT_PFC_OFFSET), ///< P03_6 / MTU3n / MTIOC3B + IOPORT_PIN_P036_PFC_05_GTIOC4B = (0x05U << IOPORT_PFC_OFFSET), ///< P03_6 / GPTn / GTIOC4B + IOPORT_PIN_P036_PFC_06_TXD2_SDA2_MOSI2 = (0x06U << IOPORT_PFC_OFFSET), ///< P03_6 / SCIn / TXD2_SDA2_MOSI2 + IOPORT_PIN_P036_PFC_07_SPI_SSL13 = (0x07U << IOPORT_PFC_OFFSET), ///< P03_6 / SPIn / SPI_SSL13 + IOPORT_PIN_P036_PFC_08_MDAT2 = (0x08U << IOPORT_PFC_OFFSET), ///< P03_6 / DSMIFn / MDAT2 + IOPORT_PIN_P036_PFC_09_HA11 = (0x09U << IOPORT_PFC_OFFSET), ///< P03_6 / PHOSTIF / HA11 + IOPORT_PIN_P037_PFC_00_IRQ9 = (0x00U << IOPORT_PFC_OFFSET), ///< P03_7 / IRQ / IRQ9 + IOPORT_PIN_P037_PFC_01_ETH2_TXER = (0x01U << IOPORT_PFC_OFFSET), ///< P03_7 / ETHER_ETHn / ETH2_TXER + IOPORT_PIN_P037_PFC_02_TRACEDATA5 = (0x02U << IOPORT_PFC_OFFSET), ///< P03_7 / TRACE / TRACEDATA5 + IOPORT_PIN_P037_PFC_03_A10 = (0x03U << IOPORT_PFC_OFFSET), ///< P03_7 / BSC / A10 + IOPORT_PIN_P037_PFC_04_MTIOC3C = (0x04U << IOPORT_PFC_OFFSET), ///< P03_7 / MTU3n / MTIOC3C + IOPORT_PIN_P037_PFC_05_GTIOC5A = (0x05U << IOPORT_PFC_OFFSET), ///< P03_7 / GPTn / GTIOC5A + IOPORT_PIN_P037_PFC_06_SCK3 = (0x06U << IOPORT_PFC_OFFSET), ///< P03_7 / SCIn / SCK3 + IOPORT_PIN_P037_PFC_07_HA10 = (0x07U << IOPORT_PFC_OFFSET), ///< P03_7 / PHOSTIF / HA10 + IOPORT_PIN_P040_PFC_00_TRACEDATA6 = (0x00U << IOPORT_PFC_OFFSET), ///< P04_0 / TRACE / TRACEDATA6 + IOPORT_PIN_P040_PFC_01_A9 = (0x01U << IOPORT_PFC_OFFSET), ///< P04_0 / BSC / A9 + IOPORT_PIN_P040_PFC_02_MTIOC3D = (0x02U << IOPORT_PFC_OFFSET), ///< P04_0 / MTU3n / MTIOC3D + IOPORT_PIN_P040_PFC_03_GTIOC5B = (0x03U << IOPORT_PFC_OFFSET), ///< P04_0 / GPTn / GTIOC5B + IOPORT_PIN_P040_PFC_04_RXD3_SCL3_MISO3 = (0x04U << IOPORT_PFC_OFFSET), ///< P04_0 / SCIn / RXD3_SCL3_MISO3 + IOPORT_PIN_P040_PFC_05_HA9 = (0x05U << IOPORT_PFC_OFFSET), ///< P04_0 / PHOSTIF / HA9 + IOPORT_PIN_P041_PFC_00_CKIO = (0x00U << IOPORT_PFC_OFFSET), ///< P04_1 / BSC / CKIO + IOPORT_PIN_P041_PFC_01_TXD3_SDA3_MOSI3 = (0x01U << IOPORT_PFC_OFFSET), ///< P04_1 / SCIn / TXD3_SDA3_MOSI3 + IOPORT_PIN_P041_PFC_02_SPI_MOSI0 = (0x02U << IOPORT_PFC_OFFSET), ///< P04_1 / SPIn / SPI_MOSI0 + IOPORT_PIN_P041_PFC_03_IIC_SDA2 = (0x03U << IOPORT_PFC_OFFSET), ///< P04_1 / IICn / IIC_SDA2 + IOPORT_PIN_P041_PFC_04_HCKIO = (0x04U << IOPORT_PFC_OFFSET), ///< P04_1 / PHOSTIF / HCKIO + IOPORT_PIN_P044_PFC_00_IRQ10 = (0x00U << IOPORT_PFC_OFFSET), ///< P04_4 / IRQ / IRQ10 + IOPORT_PIN_P044_PFC_01_TRACEDATA7 = (0x01U << IOPORT_PFC_OFFSET), ///< P04_4 / TRACE / TRACEDATA7 + IOPORT_PIN_P044_PFC_02_A8 = (0x02U << IOPORT_PFC_OFFSET), ///< P04_4 / BSC / A8 + IOPORT_PIN_P044_PFC_03_GTADSMP0 = (0x03U << IOPORT_PFC_OFFSET), ///< P04_4 / GPT / GTADSMP0 + IOPORT_PIN_P044_PFC_04_POE10 = (0x04U << IOPORT_PFC_OFFSET), ///< P04_4 / MTU_POE3 / POE10 + IOPORT_PIN_P044_PFC_05_CTS3 = (0x05U << IOPORT_PFC_OFFSET), ///< P04_4 / SCIn / CTS3 + IOPORT_PIN_P044_PFC_06_SPI_RSPCK1 = (0x06U << IOPORT_PFC_OFFSET), ///< P04_4 / SPIn / SPI_RSPCK1 + IOPORT_PIN_P044_PFC_08_HA8 = (0x08U << IOPORT_PFC_OFFSET), ///< P04_4 / PHOSTIF / HA8 + IOPORT_PIN_P045_PFC_00_A7 = (0x00U << IOPORT_PFC_OFFSET), ///< P04_5 / BSC / A7 + IOPORT_PIN_P045_PFC_01_DE3 = (0x01U << IOPORT_PFC_OFFSET), ///< P04_5 / SCIn / DE3 + IOPORT_PIN_P045_PFC_02_ETHSW_PTPOUT0 = (0x02U << IOPORT_PFC_OFFSET), ///< P04_5 / ETHER_ETHSW / ETHSW_PTPOUT0 + IOPORT_PIN_P045_PFC_03_ESC_SYNC0 = (0x03U << IOPORT_PFC_OFFSET), ///< P04_5 / ETHER_ESC / ESC_SYNC0 + IOPORT_PIN_P045_PFC_04_ESC_SYNC1 = (0x04U << IOPORT_PFC_OFFSET), ///< P04_5 / ETHER_ESC / ESC_SYNC1 + IOPORT_PIN_P045_PFC_05_HA7 = (0x05U << IOPORT_PFC_OFFSET), ///< P04_5 / PHOSTIF / HA7 + IOPORT_PIN_P046_PFC_00_ETH1_TXER = (0x00U << IOPORT_PFC_OFFSET), ///< P04_6 / ETHER_ETHn / ETH1_TXER + IOPORT_PIN_P046_PFC_01_A6 = (0x01U << IOPORT_PFC_OFFSET), ///< P04_6 / BSC / A6 + IOPORT_PIN_P046_PFC_02_DACK = (0x02U << IOPORT_PFC_OFFSET), ///< P04_6 / DMAC / DACK + IOPORT_PIN_P046_PFC_03_RTCAT1HZ = (0x03U << IOPORT_PFC_OFFSET), ///< P04_6 / RTC / RTCAT1HZ + IOPORT_PIN_P046_PFC_04_HA6 = (0x04U << IOPORT_PFC_OFFSET), ///< P04_6 / PHOSTIF / HA6 + IOPORT_PIN_P047_PFC_00_ETH0_TXER = (0x00U << IOPORT_PFC_OFFSET), ///< P04_7 / ETHER_ETHn / ETH0_TXER + IOPORT_PIN_P047_PFC_01_A5 = (0x01U << IOPORT_PFC_OFFSET), ///< P04_7 / BSC / A5 + IOPORT_PIN_P047_PFC_02_SPI_SSL21 = (0x02U << IOPORT_PFC_OFFSET), ///< P04_7 / SPIn / SPI_SSL21 + IOPORT_PIN_P047_PFC_03_ETH2_TXER = (0x03U << IOPORT_PFC_OFFSET), ///< P04_7 / ETHER_ETHn / ETH2_TXER + IOPORT_PIN_P047_PFC_04_HA5 = (0x04U << IOPORT_PFC_OFFSET), ///< P04_7 / PHOSTIF / HA5 + IOPORT_PIN_P050_PFC_00_IRQ12 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_0 / IRQ / IRQ12 + IOPORT_PIN_P050_PFC_01_ETH1_CRS = (0x01U << IOPORT_PFC_OFFSET), ///< P05_0 / ETHER_ETHn / ETH1_CRS + IOPORT_PIN_P050_PFC_02_A4 = (0x02U << IOPORT_PFC_OFFSET), ///< P05_0 / BSC / A4 + IOPORT_PIN_P050_PFC_03_MTIOC4A = (0x03U << IOPORT_PFC_OFFSET), ///< P05_0 / MTU3n / MTIOC4A + IOPORT_PIN_P050_PFC_04_GTIOC6A = (0x04U << IOPORT_PFC_OFFSET), ///< P05_0 / GPTn / GTIOC6A + IOPORT_PIN_P050_PFC_05_CMTW0_TOC0 = (0x05U << IOPORT_PFC_OFFSET), ///< P05_0 / CMTWn / CMTW0_TOC0 + IOPORT_PIN_P050_PFC_06_SS5_CTS5_RTS5 = (0x06U << IOPORT_PFC_OFFSET), ///< P05_0 / SCIn / SS5_CTS5_RTS5 + IOPORT_PIN_P050_PFC_07_CANTXDP0 = (0x07U << IOPORT_PFC_OFFSET), ///< P05_0 / CANFDn / CANTXDP0 + IOPORT_PIN_P050_PFC_08_USB_VBUSEN = (0x08U << IOPORT_PFC_OFFSET), ///< P05_0 / USB_HS / USB_VBUSEN + IOPORT_PIN_P050_PFC_09_MCLK3 = (0x09U << IOPORT_PFC_OFFSET), ///< P05_0 / DSMIFn / MCLK3 + IOPORT_PIN_P050_PFC_0B_HA4 = (0x0BU << IOPORT_PFC_OFFSET), ///< P05_0 / PHOSTIF / HA4 + IOPORT_PIN_P051_PFC_00_IRQ13 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_1 / IRQ / IRQ13 + IOPORT_PIN_P051_PFC_01_ETH1_COL = (0x01U << IOPORT_PFC_OFFSET), ///< P05_1 / ETHER_ETHn / ETH1_COL + IOPORT_PIN_P051_PFC_02_A3 = (0x02U << IOPORT_PFC_OFFSET), ///< P05_1 / BSC / A3 + IOPORT_PIN_P051_PFC_03_MTIOC4B = (0x03U << IOPORT_PFC_OFFSET), ///< P05_1 / MTU3n / MTIOC4B + IOPORT_PIN_P051_PFC_04_GTIOC6B = (0x04U << IOPORT_PFC_OFFSET), ///< P05_1 / GPTn / GTIOC6B + IOPORT_PIN_P051_PFC_05_CMTW0_TIC1 = (0x05U << IOPORT_PFC_OFFSET), ///< P05_1 / CMTWn / CMTW0_TIC1 + IOPORT_PIN_P051_PFC_06_CTS5 = (0x06U << IOPORT_PFC_OFFSET), ///< P05_1 / SCIn / CTS5 + IOPORT_PIN_P051_PFC_07_CANRXDP0 = (0x07U << IOPORT_PFC_OFFSET), ///< P05_1 / CANFDn / CANRXDP0 + IOPORT_PIN_P051_PFC_08_USB_EXICEN = (0x08U << IOPORT_PFC_OFFSET), ///< P05_1 / USB_HS / USB_EXICEN + IOPORT_PIN_P051_PFC_09_MDAT3 = (0x09U << IOPORT_PFC_OFFSET), ///< P05_1 / DSMIFn / MDAT3 + IOPORT_PIN_P051_PFC_0B_HA3 = (0x0BU << IOPORT_PFC_OFFSET), ///< P05_1 / PHOSTIF / HA3 + IOPORT_PIN_P052_PFC_00_IRQ14 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_2 / IRQ / IRQ14 + IOPORT_PIN_P052_PFC_01_ETH0_CRS = (0x01U << IOPORT_PFC_OFFSET), ///< P05_2 / ETHER_ETHn / ETH0_CRS + IOPORT_PIN_P052_PFC_02_A2 = (0x02U << IOPORT_PFC_OFFSET), ///< P05_2 / BSC / A2 + IOPORT_PIN_P052_PFC_03_MTIOC4C = (0x03U << IOPORT_PFC_OFFSET), ///< P05_2 / MTU3n / MTIOC4C + IOPORT_PIN_P052_PFC_04_GTETRGSA = (0x04U << IOPORT_PFC_OFFSET), ///< P05_2 / GPT_POEG / GTETRGSA + IOPORT_PIN_P052_PFC_05_GTIOC7A = (0x05U << IOPORT_PFC_OFFSET), ///< P05_2 / GPTn / GTIOC7A + IOPORT_PIN_P052_PFC_06_CMTW0_TOC0 = (0x06U << IOPORT_PFC_OFFSET), ///< P05_2 / CMTWn / CMTW0_TOC0 + IOPORT_PIN_P052_PFC_07_DE5 = (0x07U << IOPORT_PFC_OFFSET), ///< P05_2 / SCIn / DE5 + IOPORT_PIN_P052_PFC_08_IIC_SCL1 = (0x08U << IOPORT_PFC_OFFSET), ///< P05_2 / IICn / IIC_SCL1 + IOPORT_PIN_P052_PFC_09_CANRX0 = (0x09U << IOPORT_PFC_OFFSET), ///< P05_2 / CANFDn / CANRX0 + IOPORT_PIN_P052_PFC_0A_DREQ = (0x0AU << IOPORT_PFC_OFFSET), ///< P05_2 / DMAC / DREQ + IOPORT_PIN_P052_PFC_0B_USB_VBUSEN = (0x0BU << IOPORT_PFC_OFFSET), ///< P05_2 / USB_HS / USB_VBUSEN + IOPORT_PIN_P052_PFC_0D_HA2 = (0x0DU << IOPORT_PFC_OFFSET), ///< P05_2 / PHOSTIF / HA2 + IOPORT_PIN_P053_PFC_00_IRQ15 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_3 / IRQ / IRQ15 + IOPORT_PIN_P053_PFC_01_ETH0_COL = (0x01U << IOPORT_PFC_OFFSET), ///< P05_3 / ETHER_ETHn / ETH0_COL + IOPORT_PIN_P053_PFC_02_A1 = (0x02U << IOPORT_PFC_OFFSET), ///< P05_3 / BSC / A1 + IOPORT_PIN_P053_PFC_03_MTIOC4D = (0x03U << IOPORT_PFC_OFFSET), ///< P05_3 / MTU3n / MTIOC4D + IOPORT_PIN_P053_PFC_04_GTETRGSB = (0x04U << IOPORT_PFC_OFFSET), ///< P05_3 / GPT_POEG / GTETRGSB + IOPORT_PIN_P053_PFC_05_GTIOC7B = (0x05U << IOPORT_PFC_OFFSET), ///< P05_3 / GPTn / GTIOC7B + IOPORT_PIN_P053_PFC_06_POE11 = (0x06U << IOPORT_PFC_OFFSET), ///< P05_3 / MTU_POE3 / POE11 + IOPORT_PIN_P053_PFC_07_CMTW0_TIC0 = (0x07U << IOPORT_PFC_OFFSET), ///< P05_3 / CMTWn / CMTW0_TIC0 + IOPORT_PIN_P053_PFC_08_SCK4 = (0x08U << IOPORT_PFC_OFFSET), ///< P05_3 / SCIn / SCK4 + IOPORT_PIN_P053_PFC_09_IIC_SDA1 = (0x09U << IOPORT_PFC_OFFSET), ///< P05_3 / IICn / IIC_SDA1 + IOPORT_PIN_P053_PFC_0A_CANTX0 = (0x0AU << IOPORT_PFC_OFFSET), ///< P05_3 / CANFDn / CANTX0 + IOPORT_PIN_P053_PFC_0B_USB_EXICEN = (0x0BU << IOPORT_PFC_OFFSET), ///< P05_3 / USB_HS / USB_EXICEN + IOPORT_PIN_P053_PFC_0D_HA1 = (0x0DU << IOPORT_PFC_OFFSET), ///< P05_3 / PHOSTIF / HA1 + IOPORT_PIN_P054_PFC_00_IRQ12 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_4 / IRQ / IRQ12 + IOPORT_PIN_P054_PFC_01_ETHSW_LPI0 = (0x01U << IOPORT_PFC_OFFSET), ///< P05_4 / ETHER_ETHSW / ETHSW_LPI0 + IOPORT_PIN_P054_PFC_02_A0 = (0x02U << IOPORT_PFC_OFFSET), ///< P05_4 / BSC / A0 + IOPORT_PIN_P054_PFC_03_GTIOC14A = (0x03U << IOPORT_PFC_OFFSET), ///< P05_4 / GPTn / GTIOC14A + IOPORT_PIN_P054_PFC_04_RXD4_SCL4_MISO4 = (0x04U << IOPORT_PFC_OFFSET), ///< P05_4 / SCIn / RXD4_SCL4_MISO4 + IOPORT_PIN_P054_PFC_05_SPI_SSL00 = (0x05U << IOPORT_PFC_OFFSET), ///< P05_4 / SPIn / SPI_SSL00 + IOPORT_PIN_P054_PFC_06_CANTXDP0 = (0x06U << IOPORT_PFC_OFFSET), ///< P05_4 / CANFDn / CANTXDP0 + IOPORT_PIN_P054_PFC_07_DACK = (0x07U << IOPORT_PFC_OFFSET), ///< P05_4 / DMAC / DACK + IOPORT_PIN_P054_PFC_08_USB_OVRCUR = (0x08U << IOPORT_PFC_OFFSET), ///< P05_4 / USB_HS / USB_OVRCUR + IOPORT_PIN_P054_PFC_0A_HA0 = (0x0AU << IOPORT_PFC_OFFSET), ///< P05_4 / PHOSTIF / HA0 + IOPORT_PIN_P055_PFC_00_ETHSW_PHYLINK1 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_5 / ETHER_ETHSW / ETHSW_PHYLINK1 + IOPORT_PIN_P055_PFC_02_ESC_PHYLINK1 = (0x02U << IOPORT_PFC_OFFSET), ///< P05_5 / ETHER_ESC / ESC_PHYLINK1 + IOPORT_PIN_P055_PFC_03_GTIOC14B = (0x03U << IOPORT_PFC_OFFSET), ///< P05_5 / GPTn / GTIOC14B + IOPORT_PIN_P055_PFC_04_CMTW0_TOC1 = (0x04U << IOPORT_PFC_OFFSET), ///< P05_5 / CMTWn / CMTW0_TOC1 + IOPORT_PIN_P055_PFC_05_SPI_RSPCK2 = (0x05U << IOPORT_PFC_OFFSET), ///< P05_5 / SPIn / SPI_RSPCK2 + IOPORT_PIN_P056_PFC_00_IRQ12 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_6 / IRQ / IRQ12 + IOPORT_PIN_P056_PFC_01_ETH1_RXER = (0x01U << IOPORT_PFC_OFFSET), ///< P05_6 / ETHER_ETHn / ETH1_RXER + IOPORT_PIN_P056_PFC_03_GTIOC15A = (0x03U << IOPORT_PFC_OFFSET), ///< P05_6 / GPTn / GTIOC15A + IOPORT_PIN_P056_PFC_04_CMTW1_TIC0 = (0x04U << IOPORT_PFC_OFFSET), ///< P05_6 / CMTWn / CMTW1_TIC0 + IOPORT_PIN_P056_PFC_05_SPI_SSL22 = (0x05U << IOPORT_PFC_OFFSET), ///< P05_6 / SPIn / SPI_SSL22 + IOPORT_PIN_P057_PFC_00_ETH1_TXD2 = (0x00U << IOPORT_PFC_OFFSET), ///< P05_7 / ETHER_ETHn / ETH1_TXD2 + IOPORT_PIN_P057_PFC_02_GTIOC15B = (0x02U << IOPORT_PFC_OFFSET), ///< P05_7 / GPTn / GTIOC15B + IOPORT_PIN_P057_PFC_03_CMTW1_TOC1 = (0x03U << IOPORT_PFC_OFFSET), ///< P05_7 / CMTWn / CMTW1_TOC1 + IOPORT_PIN_P057_PFC_04_TXD4_SDA4_MOSI4 = (0x04U << IOPORT_PFC_OFFSET), ///< P05_7 / SCIn / TXD4_SDA4_MOSI4 + IOPORT_PIN_P057_PFC_05_SPI_SSL23 = (0x05U << IOPORT_PFC_OFFSET), ///< P05_7 / SPIn / SPI_SSL23 + IOPORT_PIN_P060_PFC_00_ETH1_TXD3 = (0x00U << IOPORT_PFC_OFFSET), ///< P06_0 / ETHER_ETHn / ETH1_TXD3 + IOPORT_PIN_P060_PFC_02_GTIOC16A = (0x02U << IOPORT_PFC_OFFSET), ///< P06_0 / GPTn / GTIOC16A + IOPORT_PIN_P060_PFC_03_CMTW1_TOC0 = (0x03U << IOPORT_PFC_OFFSET), ///< P06_0 / CMTWn / CMTW1_TOC0 + IOPORT_PIN_P060_PFC_04_SS4_CTS4_RTS4 = (0x04U << IOPORT_PFC_OFFSET), ///< P06_0 / SCIn / SS4_CTS4_RTS4 + IOPORT_PIN_P060_PFC_05_SPI_SSL23 = (0x05U << IOPORT_PFC_OFFSET), ///< P06_0 / SPIn / SPI_SSL23 + IOPORT_PIN_P060_PFC_06_CANRX1 = (0x06U << IOPORT_PFC_OFFSET), ///< P06_0 / CANFDn / CANRX1 + IOPORT_PIN_P061_PFC_00_ETH1_REFCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P06_1 / ETHER_ETHn / ETH1_REFCLK + IOPORT_PIN_P061_PFC_01_RMII1_REFCLK = (0x01U << IOPORT_PFC_OFFSET), ///< P06_1 / ETHER_ETHn / RMII1_REFCLK + IOPORT_PIN_P061_PFC_03_GTIOC16B = (0x03U << IOPORT_PFC_OFFSET), ///< P06_1 / GPTn / GTIOC16B + IOPORT_PIN_P061_PFC_04_CTS4 = (0x04U << IOPORT_PFC_OFFSET), ///< P06_1 / SCIn / CTS4 + IOPORT_PIN_P061_PFC_05_SPI_SSL22 = (0x05U << IOPORT_PFC_OFFSET), ///< P06_1 / SPIn / SPI_SSL22 + IOPORT_PIN_P061_PFC_06_CANTX1 = (0x06U << IOPORT_PFC_OFFSET), ///< P06_1 / CANFDn / CANTX1 + IOPORT_PIN_P062_PFC_00_ETH1_TXD1 = (0x00U << IOPORT_PFC_OFFSET), ///< P06_2 / ETHER_ETHn / ETH1_TXD1 + IOPORT_PIN_P062_PFC_02_GTIOC17A = (0x02U << IOPORT_PFC_OFFSET), ///< P06_2 / GPTn / GTIOC17A + IOPORT_PIN_P062_PFC_03_CANRXDP1 = (0x03U << IOPORT_PFC_OFFSET), ///< P06_2 / CANFDn / CANRXDP1 + IOPORT_PIN_P063_PFC_00_ETH1_TXD0 = (0x00U << IOPORT_PFC_OFFSET), ///< P06_3 / ETHER_ETHn / ETH1_TXD0 + IOPORT_PIN_P063_PFC_02_GTIOC17B = (0x02U << IOPORT_PFC_OFFSET), ///< P06_3 / GPTn / GTIOC17B + IOPORT_PIN_P063_PFC_03_CMTW1_TIC1 = (0x03U << IOPORT_PFC_OFFSET), ///< P06_3 / CMTWn / CMTW1_TIC1 + IOPORT_PIN_P063_PFC_04_DE4 = (0x04U << IOPORT_PFC_OFFSET), ///< P06_3 / SCIn / DE4 + IOPORT_PIN_P063_PFC_05_SPI_MISO1 = (0x05U << IOPORT_PFC_OFFSET), ///< P06_3 / SPIn / SPI_MISO1 + IOPORT_PIN_P063_PFC_06_CANTXDP1 = (0x06U << IOPORT_PFC_OFFSET), ///< P06_3 / CANFDn / CANTXDP1 + IOPORT_PIN_P064_PFC_00_ETH1_TXCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P06_4 / ETHER_ETHn / ETH1_TXCLK + IOPORT_PIN_P064_PFC_02_GTIOC11A = (0x02U << IOPORT_PFC_OFFSET), ///< P06_4 / GPTn / GTIOC11A + IOPORT_PIN_P064_PFC_03_SPI_MOSI1 = (0x03U << IOPORT_PFC_OFFSET), ///< P06_4 / SPIn / SPI_MOSI1 + IOPORT_PIN_P065_PFC_00_ETH1_TXEN = (0x00U << IOPORT_PFC_OFFSET), ///< P06_5 / ETHER_ETHn / ETH1_TXEN + IOPORT_PIN_P065_PFC_02_GTIOC11B = (0x02U << IOPORT_PFC_OFFSET), ///< P06_5 / GPTn / GTIOC11B + IOPORT_PIN_P066_PFC_00_ETH1_RXD0 = (0x00U << IOPORT_PFC_OFFSET), ///< P06_6 / ETHER_ETHn / ETH1_RXD0 + IOPORT_PIN_P066_PFC_02_GTIOC12A = (0x02U << IOPORT_PFC_OFFSET), ///< P06_6 / GPTn / GTIOC12A + IOPORT_PIN_P066_PFC_03_SPI_SSL10 = (0x03U << IOPORT_PFC_OFFSET), ///< P06_6 / SPIn / SPI_SSL10 + IOPORT_PIN_P067_PFC_00_ETH1_RXD1 = (0x00U << IOPORT_PFC_OFFSET), ///< P06_7 / ETHER_ETHn / ETH1_RXD1 + IOPORT_PIN_P067_PFC_02_GTIOC12B = (0x02U << IOPORT_PFC_OFFSET), ///< P06_7 / GPTn / GTIOC12B + IOPORT_PIN_P067_PFC_03_SPI_SSL11 = (0x03U << IOPORT_PFC_OFFSET), ///< P06_7 / SPIn / SPI_SSL11 + IOPORT_PIN_P070_PFC_00_ETH1_RXD2 = (0x00U << IOPORT_PFC_OFFSET), ///< P07_0 / ETHER_ETHn / ETH1_RXD2 + IOPORT_PIN_P070_PFC_02_GTIOC13A = (0x02U << IOPORT_PFC_OFFSET), ///< P07_0 / GPTn / GTIOC13A + IOPORT_PIN_P071_PFC_00_ETH1_RXD3 = (0x00U << IOPORT_PFC_OFFSET), ///< P07_1 / ETHER_ETHn / ETH1_RXD3 + IOPORT_PIN_P071_PFC_02_GTIOC13B = (0x02U << IOPORT_PFC_OFFSET), ///< P07_1 / GPTn / GTIOC13B + IOPORT_PIN_P072_PFC_00_ETH1_RXDV = (0x00U << IOPORT_PFC_OFFSET), ///< P07_2 / ETHER_ETHn / ETH1_RXDV + IOPORT_PIN_P073_PFC_00_ETH1_RXCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P07_3 / ETHER_ETHn / ETH1_RXCLK + IOPORT_PIN_P074_PFC_00_IRQ1 = (0x00U << IOPORT_PFC_OFFSET), ///< P07_4 / IRQ / IRQ1 + IOPORT_PIN_P074_PFC_01_ADTRG0 = (0x01U << IOPORT_PFC_OFFSET), ///< P07_4 / ADCn / ADTRG0 + IOPORT_PIN_P074_PFC_02_USB_VBUSIN = (0x02U << IOPORT_PFC_OFFSET), ///< P07_4 / USB_HS / USB_VBUSIN + IOPORT_PIN_P084_PFC_00_ETH0_RXD3 = (0x00U << IOPORT_PFC_OFFSET), ///< P08_4 / ETHER_ETHn / ETH0_RXD3 + IOPORT_PIN_P084_PFC_02_MTIOC6A = (0x02U << IOPORT_PFC_OFFSET), ///< P08_4 / MTU3n / MTIOC6A + IOPORT_PIN_P085_PFC_00_ETH0_RXDV = (0x00U << IOPORT_PFC_OFFSET), ///< P08_5 / ETHER_ETHn / ETH0_RXDV + IOPORT_PIN_P085_PFC_01_MTIOC6B = (0x01U << IOPORT_PFC_OFFSET), ///< P08_5 / MTU3n / MTIOC6B + IOPORT_PIN_P086_PFC_00_ETH0_RXCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P08_6 / ETHER_ETHn / ETH0_RXCLK + IOPORT_PIN_P086_PFC_01_MTIOC6C = (0x01U << IOPORT_PFC_OFFSET), ///< P08_6 / MTU3n / MTIOC6C + IOPORT_PIN_P087_PFC_00_GMAC_MDC = (0x00U << IOPORT_PFC_OFFSET), ///< P08_7 / ETHER_GMAC / GMAC_MDC + IOPORT_PIN_P087_PFC_01_ETHSW_MDC = (0x01U << IOPORT_PFC_OFFSET), ///< P08_7 / ETHER_ETHSW / ETHSW_MDC + IOPORT_PIN_P087_PFC_03_ESC_MDC = (0x03U << IOPORT_PFC_OFFSET), ///< P08_7 / ETHER_ESC / ESC_MDC + IOPORT_PIN_P087_PFC_04_MTIOC6D = (0x04U << IOPORT_PFC_OFFSET), ///< P08_7 / MTU3n / MTIOC6D + IOPORT_PIN_P090_PFC_00_GMAC_MDIO = (0x00U << IOPORT_PFC_OFFSET), ///< P09_0 / ETHER_GMAC / GMAC_MDIO + IOPORT_PIN_P090_PFC_01_ETHSW_MDIO = (0x01U << IOPORT_PFC_OFFSET), ///< P09_0 / ETHER_ETHSW / ETHSW_MDIO + IOPORT_PIN_P090_PFC_03_ESC_MDIO = (0x03U << IOPORT_PFC_OFFSET), ///< P09_0 / ETHER_ESC / ESC_MDIO + IOPORT_PIN_P090_PFC_04_MTIOC7A = (0x04U << IOPORT_PFC_OFFSET), ///< P09_0 / MTU3n / MTIOC7A + IOPORT_PIN_P091_PFC_00_ETH0_REFCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P09_1 / ETHER_ETHn / ETH0_REFCLK + IOPORT_PIN_P091_PFC_01_RMII0_REFCLK = (0x01U << IOPORT_PFC_OFFSET), ///< P09_1 / ETHER_ETHn / RMII0_REFCLK + IOPORT_PIN_P091_PFC_02_MTIOC7B = (0x02U << IOPORT_PFC_OFFSET), ///< P09_1 / MTU3n / MTIOC7B + IOPORT_PIN_P092_PFC_00_IRQ0 = (0x00U << IOPORT_PFC_OFFSET), ///< P09_2 / IRQ / IRQ0 + IOPORT_PIN_P092_PFC_01_ETH0_RXER = (0x01U << IOPORT_PFC_OFFSET), ///< P09_2 / ETHER_ETHn / ETH0_RXER + IOPORT_PIN_P092_PFC_03_MTIOC7C = (0x03U << IOPORT_PFC_OFFSET), ///< P09_2 / MTU3n / MTIOC7C + IOPORT_PIN_P093_PFC_00_ETH0_TXD3 = (0x00U << IOPORT_PFC_OFFSET), ///< P09_3 / ETHER_ETHn / ETH0_TXD3 + IOPORT_PIN_P093_PFC_01_MTIOC7D = (0x01U << IOPORT_PFC_OFFSET), ///< P09_3 / MTU3n / MTIOC7D + IOPORT_PIN_P094_PFC_00_ETH0_TXD2 = (0x00U << IOPORT_PFC_OFFSET), ///< P09_4 / ETHER_ETHn / ETH0_TXD2 + IOPORT_PIN_P095_PFC_00_ETH0_TXD1 = (0x00U << IOPORT_PFC_OFFSET), ///< P09_5 / ETHER_ETHn / ETH0_TXD1 + IOPORT_PIN_P096_PFC_00_ETH0_TXD0 = (0x00U << IOPORT_PFC_OFFSET), ///< P09_6 / ETHER_ETHn / ETH0_TXD0 + IOPORT_PIN_P097_PFC_00_ETH0_TXCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P09_7 / ETHER_ETHn / ETH0_TXCLK + IOPORT_PIN_P100_PFC_00_ETH0_TXEN = (0x00U << IOPORT_PFC_OFFSET), ///< P10_0 / ETHER_ETHn / ETH0_TXEN + IOPORT_PIN_P101_PFC_00_ETH0_RXD0 = (0x00U << IOPORT_PFC_OFFSET), ///< P10_1 / ETHER_ETHn / ETH0_RXD0 + IOPORT_PIN_P102_PFC_00_ETH0_RXD1 = (0x00U << IOPORT_PFC_OFFSET), ///< P10_2 / ETHER_ETHn / ETH0_RXD1 + IOPORT_PIN_P103_PFC_00_ETH0_RXD2 = (0x00U << IOPORT_PFC_OFFSET), ///< P10_3 / ETHER_ETHn / ETH0_RXD2 + IOPORT_PIN_P103_PFC_01_RTCAT1HZ = (0x01U << IOPORT_PFC_OFFSET), ///< P10_3 / RTC / RTCAT1HZ + IOPORT_PIN_P104_PFC_00_IRQ11 = (0x00U << IOPORT_PFC_OFFSET), ///< P10_4 / IRQ / IRQ11 + IOPORT_PIN_P104_PFC_01_ETHSW_PHYLINK0 = (0x01U << IOPORT_PFC_OFFSET), ///< P10_4 / ETHER_ETHSW / ETHSW_PHYLINK0 + IOPORT_PIN_P104_PFC_03_ESC_PHYLINK0 = (0x03U << IOPORT_PFC_OFFSET), ///< P10_4 / ETHER_ESC / ESC_PHYLINK0 + IOPORT_PIN_P124_PFC_01_ETH1_CRS = (0x01U << IOPORT_PFC_OFFSET), ///< P12_4 / ETHER_ETHn / ETH1_CRS + IOPORT_PIN_P124_PFC_02_TRACEDATA0 = (0x02U << IOPORT_PFC_OFFSET), ///< P12_4 / TRACE / TRACEDATA0 + IOPORT_PIN_P124_PFC_03_D15 = (0x03U << IOPORT_PFC_OFFSET), ///< P12_4 / BSC / D15 + IOPORT_PIN_P124_PFC_04_MTIOC8B = (0x04U << IOPORT_PFC_OFFSET), ///< P12_4 / MTU3n / MTIOC8B + IOPORT_PIN_P124_PFC_05_GTIOC8B = (0x05U << IOPORT_PFC_OFFSET), ///< P12_4 / GPTn / GTIOC8B + IOPORT_PIN_P124_PFC_06_SPI_SSL01 = (0x06U << IOPORT_PFC_OFFSET), ///< P12_4 / SPIn / SPI_SSL01 + IOPORT_PIN_P124_PFC_08_MBX_HINT = (0x08U << IOPORT_PFC_OFFSET), ///< P12_4 / MBXSEM / MBX_HINT + IOPORT_PIN_P132_PFC_00_IRQ5 = (0x00U << IOPORT_PFC_OFFSET), ///< P13_2 / IRQ / IRQ5 + IOPORT_PIN_P132_PFC_02_ETHSW_PTPOUT2 = (0x02U << IOPORT_PFC_OFFSET), ///< P13_2 / ETHER_ETHSW / ETHSW_PTPOUT2 + IOPORT_PIN_P132_PFC_03_TRACEDATA6 = (0x03U << IOPORT_PFC_OFFSET), ///< P13_2 / TRACE / TRACEDATA6 + IOPORT_PIN_P132_PFC_04_D9 = (0x04U << IOPORT_PFC_OFFSET), ///< P13_2 / BSC / D9 + IOPORT_PIN_P132_PFC_05_ESC_I2CCLK = (0x05U << IOPORT_PFC_OFFSET), ///< P13_2 / ETHER_ESC / ESC_I2CCLK + IOPORT_PIN_P132_PFC_06_MTIOC0A = (0x06U << IOPORT_PFC_OFFSET), ///< P13_2 / MTU3n / MTIOC0A + IOPORT_PIN_P132_PFC_07_GTIOC10A = (0x07U << IOPORT_PFC_OFFSET), ///< P13_2 / GPTn / GTIOC10A + IOPORT_PIN_P132_PFC_08_POE8 = (0x08U << IOPORT_PFC_OFFSET), ///< P13_2 / MTU_POE3 / POE8 + IOPORT_PIN_P132_PFC_09_SS1_CTS1_RTS1 = (0x09U << IOPORT_PFC_OFFSET), ///< P13_2 / SCIn / SS1_CTS1_RTS1 + IOPORT_PIN_P132_PFC_0A_SPI_MISO0 = (0x0AU << IOPORT_PFC_OFFSET), ///< P13_2 / SPIn / SPI_MISO0 + IOPORT_PIN_P132_PFC_0B_IIC_SCL0 = (0x0BU << IOPORT_PFC_OFFSET), ///< P13_2 / IICn / IIC_SCL0 + IOPORT_PIN_P132_PFC_0C_MCLK4 = (0x0CU << IOPORT_PFC_OFFSET), ///< P13_2 / DSMIFn / MCLK4 + IOPORT_PIN_P132_PFC_0E_A13 = (0x0EU << IOPORT_PFC_OFFSET), ///< P13_2 / BSC / A13 + IOPORT_PIN_P133_PFC_01_ETHSW_PTPOUT3 = (0x01U << IOPORT_PFC_OFFSET), ///< P13_3 / ETHER_ETHSW / ETHSW_PTPOUT3 + IOPORT_PIN_P133_PFC_02_TRACEDATA7 = (0x02U << IOPORT_PFC_OFFSET), ///< P13_3 / TRACE / TRACEDATA7 + IOPORT_PIN_P133_PFC_03_D8 = (0x03U << IOPORT_PFC_OFFSET), ///< P13_3 / BSC / D8 + IOPORT_PIN_P133_PFC_04_ESC_I2CDATA = (0x04U << IOPORT_PFC_OFFSET), ///< P13_3 / ETHER_ESC / ESC_I2CDATA + IOPORT_PIN_P133_PFC_05_MTIOC0C = (0x05U << IOPORT_PFC_OFFSET), ///< P13_3 / MTU3n / MTIOC0C + IOPORT_PIN_P133_PFC_06_MTIOC0B = (0x06U << IOPORT_PFC_OFFSET), ///< P13_3 / MTU3n / MTIOC0B + IOPORT_PIN_P133_PFC_07_GTIOC10B = (0x07U << IOPORT_PFC_OFFSET), ///< P13_3 / GPTn / GTIOC10B + IOPORT_PIN_P133_PFC_08_CMTW1_TOC0 = (0x08U << IOPORT_PFC_OFFSET), ///< P13_3 / CMTWn / CMTW1_TOC0 + IOPORT_PIN_P133_PFC_09_CTS1 = (0x09U << IOPORT_PFC_OFFSET), ///< P13_3 / SCIn / CTS1 + IOPORT_PIN_P133_PFC_0A_SPI_RSPCK0 = (0x0AU << IOPORT_PFC_OFFSET), ///< P13_3 / SPIn / SPI_RSPCK0 + IOPORT_PIN_P133_PFC_0B_IIC_SDA0 = (0x0BU << IOPORT_PFC_OFFSET), ///< P13_3 / IICn / IIC_SDA0 + IOPORT_PIN_P133_PFC_0C_MDAT4 = (0x0CU << IOPORT_PFC_OFFSET), ///< P13_3 / DSMIFn / MDAT4 + IOPORT_PIN_P133_PFC_0E_RD = (0x0EU << IOPORT_PFC_OFFSET), ///< P13_3 / BSC / RD + IOPORT_PIN_P134_PFC_01_ESC_RESETOUT = (0x01U << IOPORT_PFC_OFFSET), ///< P13_4 / ETHER_ESC / ESC_RESETOUT + IOPORT_PIN_P134_PFC_02_MTIOC0D = (0x02U << IOPORT_PFC_OFFSET), ///< P13_4 / MTU3n / MTIOC0D + IOPORT_PIN_P134_PFC_03_GTIOC8B = (0x03U << IOPORT_PFC_OFFSET), ///< P13_4 / GPTn / GTIOC8B + IOPORT_PIN_P134_PFC_05_A0 = (0x05U << IOPORT_PFC_OFFSET), ///< P13_4 / BSC / A0 + IOPORT_PIN_P135_PFC_00_XSPI0_WP1 = (0x00U << IOPORT_PFC_OFFSET), ///< P13_5 / XSPIn / XSPI0_WP1 + IOPORT_PIN_P135_PFC_01_GMAC_PTPTRG0 = (0x01U << IOPORT_PFC_OFFSET), ///< P13_5 / ETHER_GMAC / GMAC_PTPTRG0 + IOPORT_PIN_P135_PFC_02_ESC_LATCH0 = (0x02U << IOPORT_PFC_OFFSET), ///< P13_5 / ETHER_ESC / ESC_LATCH0 + IOPORT_PIN_P135_PFC_03_ESC_LATCH1 = (0x03U << IOPORT_PFC_OFFSET), ///< P13_5 / ETHER_ESC / ESC_LATCH1 + IOPORT_PIN_P135_PFC_04_MTCLKA = (0x04U << IOPORT_PFC_OFFSET), ///< P13_5 / MTU3 / MTCLKA + IOPORT_PIN_P135_PFC_05_SPI_RSPCK1 = (0x05U << IOPORT_PFC_OFFSET), ///< P13_5 / SPIn / SPI_RSPCK1 + IOPORT_PIN_P135_PFC_06_IIC_SCL2 = (0x06U << IOPORT_PFC_OFFSET), ///< P13_5 / IICn / IIC_SCL2 + IOPORT_PIN_P136_PFC_00_XSPI0_WP0 = (0x00U << IOPORT_PFC_OFFSET), ///< P13_6 / XSPIn / XSPI0_WP0 + IOPORT_PIN_P136_PFC_01_ETHSW_PTPOUT0 = (0x01U << IOPORT_PFC_OFFSET), ///< P13_6 / ETHER_ETHSW / ETHSW_PTPOUT0 + IOPORT_PIN_P136_PFC_02_ESC_SYNC0 = (0x02U << IOPORT_PFC_OFFSET), ///< P13_6 / ETHER_ESC / ESC_SYNC0 + IOPORT_PIN_P136_PFC_03_ESC_SYNC1 = (0x03U << IOPORT_PFC_OFFSET), ///< P13_6 / ETHER_ESC / ESC_SYNC1 + IOPORT_PIN_P136_PFC_04_MTCLKB = (0x04U << IOPORT_PFC_OFFSET), ///< P13_6 / MTU3 / MTCLKB + IOPORT_PIN_P137_PFC_00_XSPI0_ECS1 = (0x00U << IOPORT_PFC_OFFSET), ///< P13_7 / XSPIn / XSPI0_ECS1 + IOPORT_PIN_P137_PFC_01_GMAC_PTPTRG1 = (0x01U << IOPORT_PFC_OFFSET), ///< P13_7 / ETHER_GMAC / GMAC_PTPTRG1 + IOPORT_PIN_P137_PFC_02_ESC_LATCH1 = (0x02U << IOPORT_PFC_OFFSET), ///< P13_7 / ETHER_ESC / ESC_LATCH1 + IOPORT_PIN_P137_PFC_03_ESC_LATCH0 = (0x03U << IOPORT_PFC_OFFSET), ///< P13_7 / ETHER_ESC / ESC_LATCH0 + IOPORT_PIN_P137_PFC_04_MTCLKC = (0x04U << IOPORT_PFC_OFFSET), ///< P13_7 / MTU3 / MTCLKC + IOPORT_PIN_P137_PFC_05_MBX_HINT = (0x05U << IOPORT_PFC_OFFSET), ///< P13_7 / MBXSEM / MBX_HINT + IOPORT_PIN_P140_PFC_00_XSPI0_INT0 = (0x00U << IOPORT_PFC_OFFSET), ///< P14_0 / XSPIn / XSPI0_INT0 + IOPORT_PIN_P140_PFC_01_ETHSW_PTPOUT1 = (0x01U << IOPORT_PFC_OFFSET), ///< P14_0 / ETHER_ETHSW / ETHSW_PTPOUT1 + IOPORT_PIN_P140_PFC_02_ESC_SYNC1 = (0x02U << IOPORT_PFC_OFFSET), ///< P14_0 / ETHER_ESC / ESC_SYNC1 + IOPORT_PIN_P140_PFC_03_ESC_SYNC0 = (0x03U << IOPORT_PFC_OFFSET), ///< P14_0 / ETHER_ESC / ESC_SYNC0 + IOPORT_PIN_P140_PFC_04_MTCLKD = (0x04U << IOPORT_PFC_OFFSET), ///< P14_0 / MTU3 / MTCLKD + IOPORT_PIN_P141_PFC_00_XSPI0_INT1 = (0x00U << IOPORT_PFC_OFFSET), ///< P14_1 / XSPIn / XSPI0_INT1 + IOPORT_PIN_P141_PFC_01_ETH1_COL = (0x01U << IOPORT_PFC_OFFSET), ///< P14_1 / ETHER_ETHn / ETH1_COL + IOPORT_PIN_P141_PFC_03_MTIOC8A = (0x03U << IOPORT_PFC_OFFSET), ///< P14_1 / MTU3n / MTIOC8A + IOPORT_PIN_P141_PFC_04_GTIOC8A = (0x04U << IOPORT_PFC_OFFSET), ///< P14_1 / GPTn / GTIOC8A + IOPORT_PIN_P141_PFC_06_GMAC_PTPTRG1 = (0x06U << IOPORT_PFC_OFFSET), ///< P14_1 / ETHER_GMAC / GMAC_PTPTRG1 + IOPORT_PIN_P141_PFC_07_ESC_LATCH0 = (0x07U << IOPORT_PFC_OFFSET), ///< P14_1 / ETHER_ESC / ESC_LATCH0 + IOPORT_PIN_P141_PFC_08_ESC_LATCH1 = (0x08U << IOPORT_PFC_OFFSET), ///< P14_1 / ETHER_ESC / ESC_LATCH1 + IOPORT_PIN_P141_PFC_09_HSPI_IO0 = (0x09U << IOPORT_PFC_OFFSET), ///< P14_1 / SHOSTIF / HSPI_IO0 + IOPORT_PIN_P142_PFC_00_IRQ6 = (0x00U << IOPORT_PFC_OFFSET), ///< P14_2 / IRQ / IRQ6 + IOPORT_PIN_P142_PFC_01_XSPI0_ECS0 = (0x01U << IOPORT_PFC_OFFSET), ///< P14_2 / XSPIn / XSPI0_ECS0 + IOPORT_PIN_P142_PFC_02_ETH0_CRS = (0x02U << IOPORT_PFC_OFFSET), ///< P14_2 / ETHER_ETHn / ETH0_CRS + IOPORT_PIN_P142_PFC_04_MTIOC8B = (0x04U << IOPORT_PFC_OFFSET), ///< P14_2 / MTU3n / MTIOC8B + IOPORT_PIN_P142_PFC_05_GTIOC8B = (0x05U << IOPORT_PFC_OFFSET), ///< P14_2 / GPTn / GTIOC8B + IOPORT_PIN_P142_PFC_07_ETH2_CRS = (0x07U << IOPORT_PFC_OFFSET), ///< P14_2 / ETHER_ETHn / ETH2_CRS + IOPORT_PIN_P142_PFC_08_HSPI_CK = (0x08U << IOPORT_PFC_OFFSET), ///< P14_2 / SHOSTIF / HSPI_CK + IOPORT_PIN_P143_PFC_00_XSPI0_RSTO1 = (0x00U << IOPORT_PFC_OFFSET), ///< P14_3 / XSPIn / XSPI0_RSTO1 + IOPORT_PIN_P143_PFC_01_ETH0_COL = (0x01U << IOPORT_PFC_OFFSET), ///< P14_3 / ETHER_ETHn / ETH0_COL + IOPORT_PIN_P143_PFC_04_MTIOC0A = (0x04U << IOPORT_PFC_OFFSET), ///< P14_3 / MTU3n / MTIOC0A + IOPORT_PIN_P143_PFC_06_ETH2_COL = (0x06U << IOPORT_PFC_OFFSET), ///< P14_3 / ETHER_ETHn / ETH2_COL + IOPORT_PIN_P143_PFC_07_HSPI_IO1 = (0x07U << IOPORT_PFC_OFFSET), ///< P14_3 / SHOSTIF / HSPI_IO1 + IOPORT_PIN_P144_PFC_00_XSPI0_DS = (0x00U << IOPORT_PFC_OFFSET), ///< P14_4 / XSPIn / XSPI0_DS + IOPORT_PIN_P144_PFC_01_BS = (0x01U << IOPORT_PFC_OFFSET), ///< P14_4 / BSC / BS + IOPORT_PIN_P144_PFC_02_ESC_IRQ = (0x02U << IOPORT_PFC_OFFSET), ///< P14_4 / ETHER_ESC / ESC_IRQ + IOPORT_PIN_P144_PFC_03_MTIOC0B = (0x03U << IOPORT_PFC_OFFSET), ///< P14_4 / MTU3n / MTIOC0B + IOPORT_PIN_P144_PFC_04_HBS = (0x04U << IOPORT_PFC_OFFSET), ///< P14_4 / PHOSTIF / HBS + IOPORT_PIN_P145_PFC_00_XSPI0_CKN = (0x00U << IOPORT_PFC_OFFSET), ///< P14_5 / XSPIn / XSPI0_CKN + IOPORT_PIN_P145_PFC_01_CS3 = (0x01U << IOPORT_PFC_OFFSET), ///< P14_5 / BSC / CS3 + IOPORT_PIN_P145_PFC_02_POE8 = (0x02U << IOPORT_PFC_OFFSET), ///< P14_5 / MTU_POE3 / POE8 + IOPORT_PIN_P145_PFC_03_HSPI_INT = (0x03U << IOPORT_PFC_OFFSET), ///< P14_5 / SHOSTIF / HSPI_INT + IOPORT_PIN_P146_PFC_00_XSPI0_CKP = (0x00U << IOPORT_PFC_OFFSET), ///< P14_6 / XSPIn / XSPI0_CKP + IOPORT_PIN_P146_PFC_01_A21 = (0x01U << IOPORT_PFC_OFFSET), ///< P14_6 / BSC / A21 + IOPORT_PIN_P147_PFC_00_XSPI0_IO0 = (0x00U << IOPORT_PFC_OFFSET), ///< P14_7 / XSPIn / XSPI0_IO0 + IOPORT_PIN_P147_PFC_01_A22 = (0x01U << IOPORT_PFC_OFFSET), ///< P14_7 / BSC / A22 + IOPORT_PIN_P147_PFC_02_SCK5 = (0x02U << IOPORT_PFC_OFFSET), ///< P14_7 / SCIn / SCK5 + IOPORT_PIN_P147_PFC_03_SPI_MISO1 = (0x03U << IOPORT_PFC_OFFSET), ///< P14_7 / SPIn / SPI_MISO1 + IOPORT_PIN_P147_PFC_04_BS = (0x04U << IOPORT_PFC_OFFSET), ///< P14_7 / BSC / BS + IOPORT_PIN_P150_PFC_00_XSPI0_IO1 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_0 / XSPIn / XSPI0_IO1 + IOPORT_PIN_P150_PFC_01_A23 = (0x01U << IOPORT_PFC_OFFSET), ///< P15_0 / BSC / A23 + IOPORT_PIN_P150_PFC_02_RXD5_SCL5_MISO5 = (0x02U << IOPORT_PFC_OFFSET), ///< P15_0 / SCIn / RXD5_SCL5_MISO5 + IOPORT_PIN_P150_PFC_03_SPI_MOSI1 = (0x03U << IOPORT_PFC_OFFSET), ///< P15_0 / SPIn / SPI_MOSI1 + IOPORT_PIN_P150_PFC_04_CKE = (0x04U << IOPORT_PFC_OFFSET), ///< P15_0 / BSC / CKE + IOPORT_PIN_P151_PFC_00_XSPI0_IO2 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_1 / XSPIn / XSPI0_IO2 + IOPORT_PIN_P151_PFC_01_A24 = (0x01U << IOPORT_PFC_OFFSET), ///< P15_1 / BSC / A24 + IOPORT_PIN_P151_PFC_02_MTIOC0C = (0x02U << IOPORT_PFC_OFFSET), ///< P15_1 / MTU3n / MTIOC0C + IOPORT_PIN_P151_PFC_03_TXD5_SDA5_MOSI5 = (0x03U << IOPORT_PFC_OFFSET), ///< P15_1 / SCIn / TXD5_SDA5_MOSI5 + IOPORT_PIN_P151_PFC_04_SPI_SSL10 = (0x04U << IOPORT_PFC_OFFSET), ///< P15_1 / SPIn / SPI_SSL10 + IOPORT_PIN_P151_PFC_05_CAS = (0x05U << IOPORT_PFC_OFFSET), ///< P15_1 / BSC / CAS + IOPORT_PIN_P152_PFC_00_XSPI0_IO3 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_2 / XSPIn / XSPI0_IO3 + IOPORT_PIN_P152_PFC_01_A25 = (0x01U << IOPORT_PFC_OFFSET), ///< P15_2 / BSC / A25 + IOPORT_PIN_P152_PFC_02_MTIOC0D = (0x02U << IOPORT_PFC_OFFSET), ///< P15_2 / MTU3n / MTIOC0D + IOPORT_PIN_P152_PFC_03_SS5_CTS5_RTS5 = (0x03U << IOPORT_PFC_OFFSET), ///< P15_2 / SCIn / SS5_CTS5_RTS5 + IOPORT_PIN_P152_PFC_04_SPI_SSL11 = (0x04U << IOPORT_PFC_OFFSET), ///< P15_2 / SPIn / SPI_SSL11 + IOPORT_PIN_P152_PFC_05_RAS = (0x05U << IOPORT_PFC_OFFSET), ///< P15_2 / BSC / RAS + IOPORT_PIN_P153_PFC_00_XSPI0_IO4 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_3 / XSPIn / XSPI0_IO4 + IOPORT_PIN_P153_PFC_01_MTIOC8C = (0x01U << IOPORT_PFC_OFFSET), ///< P15_3 / MTU3n / MTIOC8C + IOPORT_PIN_P153_PFC_02_MCLK1 = (0x02U << IOPORT_PFC_OFFSET), ///< P15_3 / DSMIFn / MCLK1 + IOPORT_PIN_P153_PFC_03_D11 = (0x03U << IOPORT_PFC_OFFSET), ///< P15_3 / BSC / D11 + IOPORT_PIN_P154_PFC_00_XSPI0_IO5 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_4 / XSPIn / XSPI0_IO5 + IOPORT_PIN_P154_PFC_01_MTIOC8D = (0x01U << IOPORT_PFC_OFFSET), ///< P15_4 / MTU3n / MTIOC8D + IOPORT_PIN_P154_PFC_02_MDAT1 = (0x02U << IOPORT_PFC_OFFSET), ///< P15_4 / DSMIFn / MDAT1 + IOPORT_PIN_P154_PFC_03_D12 = (0x03U << IOPORT_PFC_OFFSET), ///< P15_4 / BSC / D12 + IOPORT_PIN_P155_PFC_00_XSPI0_IO6 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_5 / XSPIn / XSPI0_IO6 + IOPORT_PIN_P155_PFC_01_MCLK2 = (0x01U << IOPORT_PFC_OFFSET), ///< P15_5 / DSMIFn / MCLK2 + IOPORT_PIN_P155_PFC_02_D13 = (0x02U << IOPORT_PFC_OFFSET), ///< P15_5 / BSC / D13 + IOPORT_PIN_P156_PFC_00_XSPI0_IO7 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_6 / XSPIn / XSPI0_IO7 + IOPORT_PIN_P156_PFC_01_SPI_SSL12 = (0x01U << IOPORT_PFC_OFFSET), ///< P15_6 / SPIn / SPI_SSL12 + IOPORT_PIN_P156_PFC_02_MDAT2 = (0x02U << IOPORT_PFC_OFFSET), ///< P15_6 / DSMIFn / MDAT2 + IOPORT_PIN_P156_PFC_03_D14 = (0x03U << IOPORT_PFC_OFFSET), ///< P15_6 / BSC / D14 + IOPORT_PIN_P157_PFC_00_XSPI0_CS0 = (0x00U << IOPORT_PFC_OFFSET), ///< P15_7 / XSPIn / XSPI0_CS0 + IOPORT_PIN_P157_PFC_01_CTS5 = (0x01U << IOPORT_PFC_OFFSET), ///< P15_7 / SCIn / CTS5 + IOPORT_PIN_P157_PFC_02_SPI_SSL13 = (0x02U << IOPORT_PFC_OFFSET), ///< P15_7 / SPIn / SPI_SSL13 + IOPORT_PIN_P157_PFC_03_TEND = (0x03U << IOPORT_PFC_OFFSET), ///< P15_7 / DMAC / TEND + IOPORT_PIN_P160_PFC_00_XSPI0_CS1 = (0x00U << IOPORT_PFC_OFFSET), ///< P16_0 / XSPIn / XSPI0_CS1 + IOPORT_PIN_P160_PFC_01_ETH0_TXER = (0x01U << IOPORT_PFC_OFFSET), ///< P16_0 / ETHER_ETHn / ETH0_TXER + IOPORT_PIN_P160_PFC_02_TXD0_SDA0_MOSI0 = (0x02U << IOPORT_PFC_OFFSET), ///< P16_0 / SCIn / TXD0_SDA0_MOSI0 + IOPORT_PIN_P160_PFC_03_SPI_MOSI3 = (0x03U << IOPORT_PFC_OFFSET), ///< P16_0 / SPIn / SPI_MOSI3 + IOPORT_PIN_P160_PFC_04_MCLK3 = (0x04U << IOPORT_PFC_OFFSET), ///< P16_0 / DSMIFn / MCLK3 + IOPORT_PIN_P160_PFC_06_ETH2_REFCLK = (0x06U << IOPORT_PFC_OFFSET), ///< P16_0 / ETHER_ETHn / ETH2_REFCLK + IOPORT_PIN_P160_PFC_07_HSPI_CS = (0x07U << IOPORT_PFC_OFFSET), ///< P16_0 / SHOSTIF / HSPI_CS + IOPORT_PIN_P161_PFC_00_XSPI0_RESET0 = (0x00U << IOPORT_PFC_OFFSET), ///< P16_1 / XSPIn / XSPI0_RESET0 + IOPORT_PIN_P161_PFC_01_CMTW0_TOC1 = (0x01U << IOPORT_PFC_OFFSET), ///< P16_1 / CMTWn / CMTW0_TOC1 + IOPORT_PIN_P161_PFC_02_ADTRG0 = (0x02U << IOPORT_PFC_OFFSET), ///< P16_1 / ADCn / ADTRG0 + IOPORT_PIN_P161_PFC_03_RXD0_SCL0_MISO0 = (0x03U << IOPORT_PFC_OFFSET), ///< P16_1 / SCIn / RXD0_SCL0_MISO0 + IOPORT_PIN_P161_PFC_04_SPI_MISO3 = (0x04U << IOPORT_PFC_OFFSET), ///< P16_1 / SPIn / SPI_MISO3 + IOPORT_PIN_P161_PFC_05_MDAT3 = (0x05U << IOPORT_PFC_OFFSET), ///< P16_1 / DSMIFn / MDAT3 + IOPORT_PIN_P161_PFC_07_CS2 = (0x07U << IOPORT_PFC_OFFSET), ///< P16_1 / BSC / CS2 + IOPORT_PIN_P161_PFC_08_HCS1 = (0x08U << IOPORT_PFC_OFFSET), ///< P16_1 / PHOSTIF / HCS1 + IOPORT_PIN_P162_PFC_00_NMI = (0x00U << IOPORT_PFC_OFFSET), ///< P16_2 / IRQ / NMI + IOPORT_PIN_P162_PFC_01_XSPI0_RESET1 = (0x01U << IOPORT_PFC_OFFSET), ///< P16_2 / XSPIn / XSPI0_RESET1 + IOPORT_PIN_P162_PFC_02_CTS0 = (0x02U << IOPORT_PFC_OFFSET), ///< P16_2 / SCIn / CTS0 + IOPORT_PIN_P162_PFC_03_SPI_RSPCK3 = (0x03U << IOPORT_PFC_OFFSET), ///< P16_2 / SPIn / SPI_RSPCK3 + IOPORT_PIN_P162_PFC_04_USB_EXICEN = (0x04U << IOPORT_PFC_OFFSET), ///< P16_2 / USB_HS / USB_EXICEN + IOPORT_PIN_P162_PFC_06_HSPI_IO2 = (0x06U << IOPORT_PFC_OFFSET), ///< P16_2 / SHOSTIF / HSPI_IO2 + IOPORT_PIN_P162_PFC_07_HERROUT = (0x07U << IOPORT_PFC_OFFSET), ///< P16_2 / PHOSTIF / HERROUT + IOPORT_PIN_P163_PFC_00_IRQ7 = (0x00U << IOPORT_PFC_OFFSET), ///< P16_3 / IRQ / IRQ7 + IOPORT_PIN_P163_PFC_01_XSPI0_RSTO0 = (0x01U << IOPORT_PFC_OFFSET), ///< P16_3 / XSPIn / XSPI0_RSTO0 + IOPORT_PIN_P163_PFC_02_ETH1_TXER = (0x02U << IOPORT_PFC_OFFSET), ///< P16_3 / ETHER_ETHn / ETH1_TXER + IOPORT_PIN_P163_PFC_03_GTADSMP1 = (0x03U << IOPORT_PFC_OFFSET), ///< P16_3 / GPT / GTADSMP1 + IOPORT_PIN_P163_PFC_04_SCK0 = (0x04U << IOPORT_PFC_OFFSET), ///< P16_3 / SCIn / SCK0 + IOPORT_PIN_P163_PFC_05_SPI_SSL30 = (0x05U << IOPORT_PFC_OFFSET), ///< P16_3 / SPIn / SPI_SSL30 + IOPORT_PIN_P163_PFC_07_ETH1_CRS = (0x07U << IOPORT_PFC_OFFSET), ///< P16_3 / ETHER_ETHn / ETH1_CRS + IOPORT_PIN_P163_PFC_08_CS3 = (0x08U << IOPORT_PFC_OFFSET), ///< P16_3 / BSC / CS3 + IOPORT_PIN_P163_PFC_09_HSPI_IO3 = (0x09U << IOPORT_PFC_OFFSET), ///< P16_3 / SHOSTIF / HSPI_IO3 + IOPORT_PIN_P165_PFC_00_MTIC5U = (0x00U << IOPORT_PFC_OFFSET), ///< P16_5 / MTU3n / MTIC5U + IOPORT_PIN_P165_PFC_01_TXD0_SDA0_MOSI0 = (0x01U << IOPORT_PFC_OFFSET), ///< P16_5 / SCIn / TXD0_SDA0_MOSI0 + IOPORT_PIN_P165_PFC_02_A15 = (0x02U << IOPORT_PFC_OFFSET), ///< P16_5 / BSC / A15 + IOPORT_PIN_P165_PFC_03_HSPI_IO4 = (0x03U << IOPORT_PFC_OFFSET), ///< P16_5 / SHOSTIF / HSPI_IO4 + IOPORT_PIN_P166_PFC_00_IRQ8 = (0x00U << IOPORT_PFC_OFFSET), ///< P16_6 / IRQ / IRQ8 + IOPORT_PIN_P166_PFC_01_MTIC5V = (0x01U << IOPORT_PFC_OFFSET), ///< P16_6 / MTU3n / MTIC5V + IOPORT_PIN_P166_PFC_02_RXD0_SCL0_MISO0 = (0x02U << IOPORT_PFC_OFFSET), ///< P16_6 / SCIn / RXD0_SCL0_MISO0 + IOPORT_PIN_P166_PFC_03_CS0 = (0x03U << IOPORT_PFC_OFFSET), ///< P16_6 / BSC / CS0 + IOPORT_PIN_P166_PFC_04_HSPI_IO5 = (0x04U << IOPORT_PFC_OFFSET), ///< P16_6 / SHOSTIF / HSPI_IO5 + IOPORT_PIN_P166_PFC_05_HCS0 = (0x05U << IOPORT_PFC_OFFSET), ///< P16_6 / PHOSTIF / HCS0 + IOPORT_PIN_P167_PFC_00_MTIC5W = (0x00U << IOPORT_PFC_OFFSET), ///< P16_7 / MTU3n / MTIC5W + IOPORT_PIN_P167_PFC_01_SCK0 = (0x01U << IOPORT_PFC_OFFSET), ///< P16_7 / SCIn / SCK0 + IOPORT_PIN_P167_PFC_02_XSPI1_IO0 = (0x02U << IOPORT_PFC_OFFSET), ///< P16_7 / XSPIn / XSPI1_IO0 + IOPORT_PIN_P167_PFC_03_A13 = (0x03U << IOPORT_PFC_OFFSET), ///< P16_7 / BSC / A13 + IOPORT_PIN_P167_PFC_04_HA13 = (0x04U << IOPORT_PFC_OFFSET), ///< P16_7 / PHOSTIF / HA13 + IOPORT_PIN_P170_PFC_00_ESC_IRQ = (0x00U << IOPORT_PFC_OFFSET), ///< P17_0 / ETHER_ESC / ESC_IRQ + IOPORT_PIN_P170_PFC_01_SS0_CTS0_RTS0 = (0x01U << IOPORT_PFC_OFFSET), ///< P17_0 / SCIn / SS0_CTS0_RTS0 + IOPORT_PIN_P170_PFC_02_XSPI1_IO1 = (0x02U << IOPORT_PFC_OFFSET), ///< P17_0 / XSPIn / XSPI1_IO1 + IOPORT_PIN_P173_PFC_00_TRACECTL = (0x00U << IOPORT_PFC_OFFSET), ///< P17_3 / TRACE / TRACECTL + IOPORT_PIN_P173_PFC_01_GTETRGA = (0x01U << IOPORT_PFC_OFFSET), ///< P17_3 / GPT_POEG / GTETRGA + IOPORT_PIN_P173_PFC_02_POE0 = (0x02U << IOPORT_PFC_OFFSET), ///< P17_3 / MTU_POE3 / POE0 + IOPORT_PIN_P173_PFC_03_ADTRG1 = (0x03U << IOPORT_PFC_OFFSET), ///< P17_3 / ADCn / ADTRG1 + IOPORT_PIN_P173_PFC_04_SPI_SSL31 = (0x04U << IOPORT_PFC_OFFSET), ///< P17_3 / SPIn / SPI_SSL31 + IOPORT_PIN_P173_PFC_05_DREQ = (0x05U << IOPORT_PFC_OFFSET), ///< P17_3 / DMAC / DREQ + IOPORT_PIN_P173_PFC_07_XSPI1_IO2 = (0x07U << IOPORT_PFC_OFFSET), ///< P17_3 / XSPIn / XSPI1_IO2 + IOPORT_PIN_P174_PFC_00_TRACECLK = (0x00U << IOPORT_PFC_OFFSET), ///< P17_4 / TRACE / TRACECLK + IOPORT_PIN_P174_PFC_01_MTIOC3C = (0x01U << IOPORT_PFC_OFFSET), ///< P17_4 / MTU3n / MTIOC3C + IOPORT_PIN_P174_PFC_02_GTETRGB = (0x02U << IOPORT_PFC_OFFSET), ///< P17_4 / GPT_POEG / GTETRGB + IOPORT_PIN_P174_PFC_03_GTIOC0A = (0x03U << IOPORT_PFC_OFFSET), ///< P17_4 / GPTn / GTIOC0A + IOPORT_PIN_P174_PFC_04_CTS3 = (0x04U << IOPORT_PFC_OFFSET), ///< P17_4 / SCIn / CTS3 + IOPORT_PIN_P174_PFC_05_SPI_SSL32 = (0x05U << IOPORT_PFC_OFFSET), ///< P17_4 / SPIn / SPI_SSL32 + IOPORT_PIN_P174_PFC_07_XSPI1_IO3 = (0x07U << IOPORT_PFC_OFFSET), ///< P17_4 / XSPIn / XSPI1_IO3 + IOPORT_PIN_P174_PFC_08_DACK = (0x08U << IOPORT_PFC_OFFSET), ///< P17_4 / DMAC / DACK + IOPORT_PIN_P175_PFC_01_MTIOC3A = (0x01U << IOPORT_PFC_OFFSET), ///< P17_5 / MTU3n / MTIOC3A + IOPORT_PIN_P175_PFC_02_GTETRGC = (0x02U << IOPORT_PFC_OFFSET), ///< P17_5 / GPT_POEG / GTETRGC + IOPORT_PIN_P175_PFC_03_GTIOC0B = (0x03U << IOPORT_PFC_OFFSET), ///< P17_5 / GPTn / GTIOC0B + IOPORT_PIN_P175_PFC_04_TEND = (0x04U << IOPORT_PFC_OFFSET), ///< P17_5 / DMAC / TEND + IOPORT_PIN_P175_PFC_05_USB_OVRCUR = (0x05U << IOPORT_PFC_OFFSET), ///< P17_5 / USB_HS / USB_OVRCUR + IOPORT_PIN_P176_PFC_00_MTIOC3B = (0x00U << IOPORT_PFC_OFFSET), ///< P17_6 / MTU3n / MTIOC3B + IOPORT_PIN_P176_PFC_01_GTIOC1A = (0x01U << IOPORT_PFC_OFFSET), ///< P17_6 / GPTn / GTIOC1A + IOPORT_PIN_P176_PFC_02_SCK3 = (0x02U << IOPORT_PFC_OFFSET), ///< P17_6 / SCIn / SCK3 + IOPORT_PIN_P176_PFC_04_XSPI1_DS = (0x04U << IOPORT_PFC_OFFSET), ///< P17_6 / XSPIn / XSPI1_DS + IOPORT_PIN_P176_PFC_05_RD_WR = (0x05U << IOPORT_PFC_OFFSET), ///< P17_6 / BSC / RD_WR + IOPORT_PIN_P176_PFC_06_HWRSTB = (0x06U << IOPORT_PFC_OFFSET), ///< P17_6 / PHOSTIF / HWRSTB + IOPORT_PIN_P177_PFC_00_MTIOC4A = (0x00U << IOPORT_PFC_OFFSET), ///< P17_7 / MTU3n / MTIOC4A + IOPORT_PIN_P177_PFC_01_MTIOC4C = (0x01U << IOPORT_PFC_OFFSET), ///< P17_7 / MTU3n / MTIOC4C + IOPORT_PIN_P177_PFC_02_GTIOC2A = (0x02U << IOPORT_PFC_OFFSET), ///< P17_7 / GPTn / GTIOC2A + IOPORT_PIN_P177_PFC_03_GTIOC3A = (0x03U << IOPORT_PFC_OFFSET), ///< P17_7 / GPTn / GTIOC3A + IOPORT_PIN_P177_PFC_04_RXD3_SCL3_MISO3 = (0x04U << IOPORT_PFC_OFFSET), ///< P17_7 / SCIn / RXD3_SCL3_MISO3 + IOPORT_PIN_P177_PFC_05_DACK = (0x05U << IOPORT_PFC_OFFSET), ///< P17_7 / DMAC / DACK + IOPORT_PIN_P177_PFC_07_XSPI1_CKP = (0x07U << IOPORT_PFC_OFFSET), ///< P17_7 / XSPIn / XSPI1_CKP + IOPORT_PIN_P177_PFC_08_RD = (0x08U << IOPORT_PFC_OFFSET), ///< P17_7 / BSC / RD + IOPORT_PIN_P177_PFC_09_HRD = (0x09U << IOPORT_PFC_OFFSET), ///< P17_7 / PHOSTIF / HRD + IOPORT_PIN_P180_PFC_00_MTIOC4C = (0x00U << IOPORT_PFC_OFFSET), ///< P18_0 / MTU3n / MTIOC4C + IOPORT_PIN_P180_PFC_01_MTIOC4A = (0x01U << IOPORT_PFC_OFFSET), ///< P18_0 / MTU3n / MTIOC4A + IOPORT_PIN_P180_PFC_02_GTIOC3A = (0x02U << IOPORT_PFC_OFFSET), ///< P18_0 / GPTn / GTIOC3A + IOPORT_PIN_P180_PFC_03_GTIOC2A = (0x03U << IOPORT_PFC_OFFSET), ///< P18_0 / GPTn / GTIOC2A + IOPORT_PIN_P180_PFC_04_TXD3_SDA3_MOSI3 = (0x04U << IOPORT_PFC_OFFSET), ///< P18_0 / SCIn / TXD3_SDA3_MOSI3 + IOPORT_PIN_P180_PFC_05_WE0_DQMLL = (0x05U << IOPORT_PFC_OFFSET), ///< P18_0 / BSC / WE0_DQMLL + IOPORT_PIN_P180_PFC_06_HSPI_IO6 = (0x06U << IOPORT_PFC_OFFSET), ///< P18_0 / SHOSTIF / HSPI_IO6 + IOPORT_PIN_P180_PFC_07_HWR0 = (0x07U << IOPORT_PFC_OFFSET), ///< P18_0 / PHOSTIF / HWR0 + IOPORT_PIN_P181_PFC_00_IRQ10 = (0x00U << IOPORT_PFC_OFFSET), ///< P18_1 / IRQ / IRQ10 + IOPORT_PIN_P181_PFC_01_MTIOC3D = (0x01U << IOPORT_PFC_OFFSET), ///< P18_1 / MTU3n / MTIOC3D + IOPORT_PIN_P181_PFC_02_GTIOC1B = (0x02U << IOPORT_PFC_OFFSET), ///< P18_1 / GPTn / GTIOC1B + IOPORT_PIN_P181_PFC_03_ADTRG1 = (0x03U << IOPORT_PFC_OFFSET), ///< P18_1 / ADCn / ADTRG1 + IOPORT_PIN_P181_PFC_04_SS3_CTS3_RTS3 = (0x04U << IOPORT_PFC_OFFSET), ///< P18_1 / SCIn / SS3_CTS3_RTS3 + IOPORT_PIN_P181_PFC_06_WE1_DQMLU = (0x06U << IOPORT_PFC_OFFSET), ///< P18_1 / BSC / WE1_DQMLU + IOPORT_PIN_P181_PFC_07_HSPI_IO7 = (0x07U << IOPORT_PFC_OFFSET), ///< P18_1 / SHOSTIF / HSPI_IO7 + IOPORT_PIN_P181_PFC_08_HWR1 = (0x08U << IOPORT_PFC_OFFSET), ///< P18_1 / PHOSTIF / HWR1 + IOPORT_PIN_P182_PFC_00_MTIOC4B = (0x00U << IOPORT_PFC_OFFSET), ///< P18_2 / MTU3n / MTIOC4B + IOPORT_PIN_P182_PFC_01_MTIOC4D = (0x01U << IOPORT_PFC_OFFSET), ///< P18_2 / MTU3n / MTIOC4D + IOPORT_PIN_P182_PFC_02_GTIOC2B = (0x02U << IOPORT_PFC_OFFSET), ///< P18_2 / GPTn / GTIOC2B + IOPORT_PIN_P182_PFC_03_GTIOC3B = (0x03U << IOPORT_PFC_OFFSET), ///< P18_2 / GPTn / GTIOC3B + IOPORT_PIN_P182_PFC_05_XSPI1_CS0 = (0x05U << IOPORT_PFC_OFFSET), ///< P18_2 / XSPIn / XSPI1_CS0 + IOPORT_PIN_P182_PFC_06_ETH1_COL = (0x06U << IOPORT_PFC_OFFSET), ///< P18_2 / ETHER_ETHn / ETH1_COL + IOPORT_PIN_P182_PFC_07_BS = (0x07U << IOPORT_PFC_OFFSET), ///< P18_2 / BSC / BS + IOPORT_PIN_P182_PFC_08_SCK0 = (0x08U << IOPORT_PFC_OFFSET), ///< P18_2 / SCIn / SCK0 + IOPORT_PIN_P182_PFC_09_IIC_SDA2 = (0x09U << IOPORT_PFC_OFFSET), ///< P18_2 / IICn / IIC_SDA2 + IOPORT_PIN_P183_PFC_00_IRQ0 = (0x00U << IOPORT_PFC_OFFSET), ///< P18_3 / IRQ / IRQ0 + IOPORT_PIN_P183_PFC_01_MTIOC4D = (0x01U << IOPORT_PFC_OFFSET), ///< P18_3 / MTU3n / MTIOC4D + IOPORT_PIN_P183_PFC_02_MTIOC4B = (0x02U << IOPORT_PFC_OFFSET), ///< P18_3 / MTU3n / MTIOC4B + IOPORT_PIN_P183_PFC_03_GTIOC3B = (0x03U << IOPORT_PFC_OFFSET), ///< P18_3 / GPTn / GTIOC3B + IOPORT_PIN_P183_PFC_04_GTIOC2B = (0x04U << IOPORT_PFC_OFFSET), ///< P18_3 / GPTn / GTIOC2B + IOPORT_PIN_P183_PFC_05_CMTW1_TIC1 = (0x05U << IOPORT_PFC_OFFSET), ///< P18_3 / CMTWn / CMTW1_TIC1 + IOPORT_PIN_P183_PFC_06_CANRXDP1 = (0x06U << IOPORT_PFC_OFFSET), ///< P18_3 / CANFDn / CANRXDP1 + IOPORT_PIN_P183_PFC_08_XSPI1_IO4 = (0x08U << IOPORT_PFC_OFFSET), ///< P18_3 / XSPIn / XSPI1_IO4 + IOPORT_PIN_P183_PFC_09_ETH2_CRS = (0x09U << IOPORT_PFC_OFFSET), ///< P18_3 / ETHER_ETHn / ETH2_CRS + IOPORT_PIN_P183_PFC_0A_CKE = (0x0AU << IOPORT_PFC_OFFSET), ///< P18_3 / BSC / CKE + IOPORT_PIN_P184_PFC_00_IRQ1 = (0x00U << IOPORT_PFC_OFFSET), ///< P18_4 / IRQ / IRQ1 + IOPORT_PIN_P184_PFC_01_MTIC5U = (0x01U << IOPORT_PFC_OFFSET), ///< P18_4 / MTU3n / MTIC5U + IOPORT_PIN_P184_PFC_02_TXD4_SDA4_MOSI4 = (0x02U << IOPORT_PFC_OFFSET), ///< P18_4 / SCIn / TXD4_SDA4_MOSI4 + IOPORT_PIN_P184_PFC_03_SPI_RSPCK2 = (0x03U << IOPORT_PFC_OFFSET), ///< P18_4 / SPIn / SPI_RSPCK2 + IOPORT_PIN_P184_PFC_05_XSPI1_IO5 = (0x05U << IOPORT_PFC_OFFSET), ///< P18_4 / XSPIn / XSPI1_IO5 + IOPORT_PIN_P184_PFC_06_ETH1_CRS = (0x06U << IOPORT_PFC_OFFSET), ///< P18_4 / ETHER_ETHn / ETH1_CRS + IOPORT_PIN_P184_PFC_07_CAS = (0x07U << IOPORT_PFC_OFFSET), ///< P18_4 / BSC / CAS + IOPORT_PIN_P184_PFC_08_CANTX0 = (0x08U << IOPORT_PFC_OFFSET), ///< P18_4 / CANFDn / CANTX0 + IOPORT_PIN_P185_PFC_00_TRACECTL = (0x00U << IOPORT_PFC_OFFSET), ///< P18_5 / TRACE / TRACECTL + IOPORT_PIN_P185_PFC_01_MTIC5V = (0x01U << IOPORT_PFC_OFFSET), ///< P18_5 / MTU3n / MTIC5V + IOPORT_PIN_P185_PFC_02_RXD4_SCL4_MISO4 = (0x02U << IOPORT_PFC_OFFSET), ///< P18_5 / SCIn / RXD4_SCL4_MISO4 + IOPORT_PIN_P185_PFC_03_SPI_MOSI2 = (0x03U << IOPORT_PFC_OFFSET), ///< P18_5 / SPIn / SPI_MOSI2 + IOPORT_PIN_P185_PFC_05_XSPI1_IO6 = (0x05U << IOPORT_PFC_OFFSET), ///< P18_5 / XSPIn / XSPI1_IO6 + IOPORT_PIN_P185_PFC_06_ETH2_COL = (0x06U << IOPORT_PFC_OFFSET), ///< P18_5 / ETHER_ETHn / ETH2_COL + IOPORT_PIN_P185_PFC_07_RAS = (0x07U << IOPORT_PFC_OFFSET), ///< P18_5 / BSC / RAS + IOPORT_PIN_P185_PFC_08_CANRX0 = (0x08U << IOPORT_PFC_OFFSET), ///< P18_5 / CANFDn / CANRX0 + IOPORT_PIN_P186_PFC_00_IRQ11 = (0x00U << IOPORT_PFC_OFFSET), ///< P18_6 / IRQ / IRQ11 + IOPORT_PIN_P186_PFC_01_TRACECLK = (0x01U << IOPORT_PFC_OFFSET), ///< P18_6 / TRACE / TRACECLK + IOPORT_PIN_P186_PFC_02_MTIC5W = (0x02U << IOPORT_PFC_OFFSET), ///< P18_6 / MTU3n / MTIC5W + IOPORT_PIN_P186_PFC_03_ADTRG0 = (0x03U << IOPORT_PFC_OFFSET), ///< P18_6 / ADCn / ADTRG0 + IOPORT_PIN_P186_PFC_04_SCK4 = (0x04U << IOPORT_PFC_OFFSET), ///< P18_6 / SCIn / SCK4 + IOPORT_PIN_P186_PFC_05_SPI_MISO2 = (0x05U << IOPORT_PFC_OFFSET), ///< P18_6 / SPIn / SPI_MISO2 + IOPORT_PIN_P186_PFC_06_IIC_SCL2 = (0x06U << IOPORT_PFC_OFFSET), ///< P18_6 / IICn / IIC_SCL2 + IOPORT_PIN_P186_PFC_08_XSPI1_IO7 = (0x08U << IOPORT_PFC_OFFSET), ///< P18_6 / XSPIn / XSPI1_IO7 + IOPORT_PIN_P186_PFC_09_ETH1_COL = (0x09U << IOPORT_PFC_OFFSET), ///< P18_6 / ETHER_ETHn / ETH1_COL + IOPORT_PIN_P186_PFC_0A_DE4 = (0x0AU << IOPORT_PFC_OFFSET), ///< P18_6 / SCIn / DE4 + IOPORT_PIN_P190_PFC_00_USB_VBUSEN = (0x00U << IOPORT_PFC_OFFSET), ///< P19_0 / USB_HS / USB_VBUSEN + IOPORT_PIN_P201_PFC_00_ETHSW_TDMAOUT0 = (0x00U << IOPORT_PFC_OFFSET), ///< P20_1 / ETHER_ETHSW / ETHSW_TDMAOUT0 + IOPORT_PIN_P201_PFC_01_ESC_LINKACT0 = (0x01U << IOPORT_PFC_OFFSET), ///< P20_1 / ETHER_ESC / ESC_LINKACT0 + IOPORT_PIN_P201_PFC_02_ETHSW_PTPOUT3 = (0x02U << IOPORT_PFC_OFFSET), ///< P20_1 / ETHER_ETHSW / ETHSW_PTPOUT3 + IOPORT_PIN_P202_PFC_00_ETHSW_TDMAOUT1 = (0x00U << IOPORT_PFC_OFFSET), ///< P20_2 / ETHER_ETHSW / ETHSW_TDMAOUT1 + IOPORT_PIN_P202_PFC_01_ESC_LEDRUN = (0x01U << IOPORT_PFC_OFFSET), ///< P20_2 / ETHER_ESC / ESC_LEDRUN + IOPORT_PIN_P202_PFC_02_ESC_LEDSTER = (0x02U << IOPORT_PFC_OFFSET), ///< P20_2 / ETHER_ESC / ESC_LEDSTER + IOPORT_PIN_P202_PFC_03_DE3 = (0x03U << IOPORT_PFC_OFFSET), ///< P20_2 / SCIn / DE3 + IOPORT_PIN_P202_PFC_04_ETHSW_PTPOUT2 = (0x04U << IOPORT_PFC_OFFSET), ///< P20_2 / ETHER_ETHSW / ETHSW_PTPOUT2 + IOPORT_PIN_P203_PFC_00_ETHSW_TDMAOUT2 = (0x00U << IOPORT_PFC_OFFSET), ///< P20_3 / ETHER_ETHSW / ETHSW_TDMAOUT2 + IOPORT_PIN_P203_PFC_01_ESC_LEDERR = (0x01U << IOPORT_PFC_OFFSET), ///< P20_3 / ETHER_ESC / ESC_LEDERR + IOPORT_PIN_P203_PFC_02_ETHSW_PTPOUT1 = (0x02U << IOPORT_PFC_OFFSET), ///< P20_3 / ETHER_ETHSW / ETHSW_PTPOUT1 + IOPORT_PIN_P204_PFC_00_ETHSW_TDMAOUT3 = (0x00U << IOPORT_PFC_OFFSET), ///< P20_4 / ETHER_ETHSW / ETHSW_TDMAOUT3 + IOPORT_PIN_P204_PFC_01_ESC_LINKACT1 = (0x01U << IOPORT_PFC_OFFSET), ///< P20_4 / ETHER_ESC / ESC_LINKACT1 + IOPORT_PIN_P204_PFC_02_ETHSW_PTPOUT0 = (0x02U << IOPORT_PFC_OFFSET), ///< P20_4 / ETHER_ETHSW / ETHSW_PTPOUT0 + IOPORT_PIN_P211_PFC_00_TRACEDATA0 = (0x00U << IOPORT_PFC_OFFSET), ///< P21_1 / TRACE / TRACEDATA0 + IOPORT_PIN_P211_PFC_01_D0 = (0x01U << IOPORT_PFC_OFFSET), ///< P21_1 / BSC / D0 + IOPORT_PIN_P211_PFC_02_MTIOC6A = (0x02U << IOPORT_PFC_OFFSET), ///< P21_1 / MTU3n / MTIOC6A + IOPORT_PIN_P211_PFC_03_GTIOC14A = (0x03U << IOPORT_PFC_OFFSET), ///< P21_1 / GPTn / GTIOC14A + IOPORT_PIN_P211_PFC_04_CMTW0_TIC0 = (0x04U << IOPORT_PFC_OFFSET), ///< P21_1 / CMTWn / CMTW0_TIC0 + IOPORT_PIN_P211_PFC_05_SCK5 = (0x05U << IOPORT_PFC_OFFSET), ///< P21_1 / SCIn / SCK5 + IOPORT_PIN_P211_PFC_06_SPI_SSL20 = (0x06U << IOPORT_PFC_OFFSET), ///< P21_1 / SPIn / SPI_SSL20 + IOPORT_PIN_P211_PFC_07_IIC_SCL1 = (0x07U << IOPORT_PFC_OFFSET), ///< P21_1 / IICn / IIC_SCL1 + IOPORT_PIN_P211_PFC_08_MCLK0 = (0x08U << IOPORT_PFC_OFFSET), ///< P21_1 / DSMIFn / MCLK0 + IOPORT_PIN_P211_PFC_0A_ESC_SYNC0 = (0x0AU << IOPORT_PFC_OFFSET), ///< P21_1 / ETHER_ESC / ESC_SYNC0 + IOPORT_PIN_P211_PFC_0B_ESC_SYNC1 = (0x0BU << IOPORT_PFC_OFFSET), ///< P21_1 / ETHER_ESC / ESC_SYNC1 + IOPORT_PIN_P211_PFC_0C_HSPI_INT = (0x0CU << IOPORT_PFC_OFFSET), ///< P21_1 / SHOSTIF / HSPI_INT + IOPORT_PIN_P211_PFC_0D_HD0 = (0x0DU << IOPORT_PFC_OFFSET), ///< P21_1 / PHOSTIF / HD0 + IOPORT_PIN_P212_PFC_00_TRACEDATA1 = (0x00U << IOPORT_PFC_OFFSET), ///< P21_2 / TRACE / TRACEDATA1 + IOPORT_PIN_P212_PFC_01_D1 = (0x01U << IOPORT_PFC_OFFSET), ///< P21_2 / BSC / D1 + IOPORT_PIN_P212_PFC_02_MTIOC6B = (0x02U << IOPORT_PFC_OFFSET), ///< P21_2 / MTU3n / MTIOC6B + IOPORT_PIN_P212_PFC_03_GTIOC14B = (0x03U << IOPORT_PFC_OFFSET), ///< P21_2 / GPTn / GTIOC14B + IOPORT_PIN_P212_PFC_04_CMTW0_TIC1 = (0x04U << IOPORT_PFC_OFFSET), ///< P21_2 / CMTWn / CMTW0_TIC1 + IOPORT_PIN_P212_PFC_05_RXD5_SCL5_MISO5 = (0x05U << IOPORT_PFC_OFFSET), ///< P21_2 / SCIn / RXD5_SCL5_MISO5 + IOPORT_PIN_P212_PFC_06_SPI_MISO2 = (0x06U << IOPORT_PFC_OFFSET), ///< P21_2 / SPIn / SPI_MISO2 + IOPORT_PIN_P212_PFC_07_IIC_SDA1 = (0x07U << IOPORT_PFC_OFFSET), ///< P21_2 / IICn / IIC_SDA1 + IOPORT_PIN_P212_PFC_08_MDAT0 = (0x08U << IOPORT_PFC_OFFSET), ///< P21_2 / DSMIFn / MDAT0 + IOPORT_PIN_P212_PFC_0A_ESC_SYNC0 = (0x0AU << IOPORT_PFC_OFFSET), ///< P21_2 / ETHER_ESC / ESC_SYNC0 + IOPORT_PIN_P212_PFC_0B_ESC_SYNC1 = (0x0BU << IOPORT_PFC_OFFSET), ///< P21_2 / ETHER_ESC / ESC_SYNC1 + IOPORT_PIN_P212_PFC_0C_HD1 = (0x0CU << IOPORT_PFC_OFFSET), ///< P21_2 / PHOSTIF / HD1 + IOPORT_PIN_P213_PFC_00_TRACEDATA2 = (0x00U << IOPORT_PFC_OFFSET), ///< P21_3 / TRACE / TRACEDATA2 + IOPORT_PIN_P213_PFC_01_D2 = (0x01U << IOPORT_PFC_OFFSET), ///< P21_3 / BSC / D2 + IOPORT_PIN_P213_PFC_02_MTIOC6C = (0x02U << IOPORT_PFC_OFFSET), ///< P21_3 / MTU3n / MTIOC6C + IOPORT_PIN_P213_PFC_03_GTIOC15A = (0x03U << IOPORT_PFC_OFFSET), ///< P21_3 / GPTn / GTIOC15A + IOPORT_PIN_P213_PFC_04_TXD5_SDA5_MOSI5 = (0x04U << IOPORT_PFC_OFFSET), ///< P21_3 / SCIn / TXD5_SDA5_MOSI5 + IOPORT_PIN_P213_PFC_05_SPI_SSL33 = (0x05U << IOPORT_PFC_OFFSET), ///< P21_3 / SPIn / SPI_SSL33 + IOPORT_PIN_P213_PFC_06_MCLK1 = (0x06U << IOPORT_PFC_OFFSET), ///< P21_3 / DSMIFn / MCLK1 + IOPORT_PIN_P213_PFC_08_NMI = (0x08U << IOPORT_PFC_OFFSET), ///< P21_3 / IRQ / NMI + IOPORT_PIN_P213_PFC_09_HD2 = (0x09U << IOPORT_PFC_OFFSET), ///< P21_3 / PHOSTIF / HD2 + IOPORT_PIN_P214_PFC_00_TRACEDATA3 = (0x00U << IOPORT_PFC_OFFSET), ///< P21_4 / TRACE / TRACEDATA3 + IOPORT_PIN_P214_PFC_01_D3 = (0x01U << IOPORT_PFC_OFFSET), ///< P21_4 / BSC / D3 + IOPORT_PIN_P214_PFC_02_MTIOC6D = (0x02U << IOPORT_PFC_OFFSET), ///< P21_4 / MTU3n / MTIOC6D + IOPORT_PIN_P214_PFC_03_GTIOC15B = (0x03U << IOPORT_PFC_OFFSET), ///< P21_4 / GPTn / GTIOC15B + IOPORT_PIN_P214_PFC_04_SS5_CTS5_RTS5 = (0x04U << IOPORT_PFC_OFFSET), ///< P21_4 / SCIn / SS5_CTS5_RTS5 + IOPORT_PIN_P214_PFC_05_SPI_SSL02 = (0x05U << IOPORT_PFC_OFFSET), ///< P21_4 / SPIn / SPI_SSL02 + IOPORT_PIN_P214_PFC_06_MDAT1 = (0x06U << IOPORT_PFC_OFFSET), ///< P21_4 / DSMIFn / MDAT1 + IOPORT_PIN_P214_PFC_08_ETHSW_PTPOUT1 = (0x08U << IOPORT_PFC_OFFSET), ///< P21_4 / ETHER_ETHSW / ETHSW_PTPOUT1 + IOPORT_PIN_P214_PFC_09_ESC_SYNC0 = (0x09U << IOPORT_PFC_OFFSET), ///< P21_4 / ETHER_ESC / ESC_SYNC0 + IOPORT_PIN_P214_PFC_0A_ESC_SYNC1 = (0x0AU << IOPORT_PFC_OFFSET), ///< P21_4 / ETHER_ESC / ESC_SYNC1 + IOPORT_PIN_P214_PFC_0B_HD3 = (0x0BU << IOPORT_PFC_OFFSET), ///< P21_4 / PHOSTIF / HD3 + IOPORT_PIN_P214_PFC_0C_MBX_HINT = (0x0CU << IOPORT_PFC_OFFSET), ///< P21_4 / MBXSEM / MBX_HINT + IOPORT_PIN_P215_PFC_00_IRQ6 = (0x00U << IOPORT_PFC_OFFSET), ///< P21_5 / IRQ / IRQ6 + IOPORT_PIN_P215_PFC_01_TRACEDATA4 = (0x01U << IOPORT_PFC_OFFSET), ///< P21_5 / TRACE / TRACEDATA4 + IOPORT_PIN_P215_PFC_02_D4 = (0x02U << IOPORT_PFC_OFFSET), ///< P21_5 / BSC / D4 + IOPORT_PIN_P215_PFC_03_MTIOC7A = (0x03U << IOPORT_PFC_OFFSET), ///< P21_5 / MTU3n / MTIOC7A + IOPORT_PIN_P215_PFC_04_GTIOC16A = (0x04U << IOPORT_PFC_OFFSET), ///< P21_5 / GPTn / GTIOC16A + IOPORT_PIN_P215_PFC_05_CMTW1_TOC1 = (0x05U << IOPORT_PFC_OFFSET), ///< P21_5 / CMTWn / CMTW1_TOC1 + IOPORT_PIN_P215_PFC_06_ADTRG1 = (0x06U << IOPORT_PFC_OFFSET), ///< P21_5 / ADCn / ADTRG1 + IOPORT_PIN_P215_PFC_07_CTS5 = (0x07U << IOPORT_PFC_OFFSET), ///< P21_5 / SCIn / CTS5 + IOPORT_PIN_P215_PFC_08_SPI_MISO0 = (0x08U << IOPORT_PFC_OFFSET), ///< P21_5 / SPIn / SPI_MISO0 + IOPORT_PIN_P215_PFC_09_MCLK2 = (0x09U << IOPORT_PFC_OFFSET), ///< P21_5 / DSMIFn / MCLK2 + IOPORT_PIN_P215_PFC_0B_HD4 = (0x0BU << IOPORT_PFC_OFFSET), ///< P21_5 / PHOSTIF / HD4 + IOPORT_PIN_P216_PFC_00_IRQ9 = (0x00U << IOPORT_PFC_OFFSET), ///< P21_6 / IRQ / IRQ9 + IOPORT_PIN_P216_PFC_01_TRACEDATA5 = (0x01U << IOPORT_PFC_OFFSET), ///< P21_6 / TRACE / TRACEDATA5 + IOPORT_PIN_P216_PFC_02_D5 = (0x02U << IOPORT_PFC_OFFSET), ///< P21_6 / BSC / D5 + IOPORT_PIN_P216_PFC_03_MTIOC7B = (0x03U << IOPORT_PFC_OFFSET), ///< P21_6 / MTU3n / MTIOC7B + IOPORT_PIN_P216_PFC_04_GTIOC16B = (0x04U << IOPORT_PFC_OFFSET), ///< P21_6 / GPTn / GTIOC16B + IOPORT_PIN_P216_PFC_05_CTS0 = (0x05U << IOPORT_PFC_OFFSET), ///< P21_6 / SCIn / CTS0 + IOPORT_PIN_P216_PFC_06_TEND = (0x06U << IOPORT_PFC_OFFSET), ///< P21_6 / DMAC / TEND + IOPORT_PIN_P216_PFC_07_MDAT2 = (0x07U << IOPORT_PFC_OFFSET), ///< P21_6 / DSMIFn / MDAT2 + IOPORT_PIN_P216_PFC_08_HD5 = (0x08U << IOPORT_PFC_OFFSET), ///< P21_6 / PHOSTIF / HD5 + IOPORT_PIN_P217_PFC_00_IRQ10 = (0x00U << IOPORT_PFC_OFFSET), ///< P21_7 / IRQ / IRQ10 + IOPORT_PIN_P217_PFC_01_TRACEDATA6 = (0x01U << IOPORT_PFC_OFFSET), ///< P21_7 / TRACE / TRACEDATA6 + IOPORT_PIN_P217_PFC_02_D6 = (0x02U << IOPORT_PFC_OFFSET), ///< P21_7 / BSC / D6 + IOPORT_PIN_P217_PFC_03_MTIOC7C = (0x03U << IOPORT_PFC_OFFSET), ///< P21_7 / MTU3n / MTIOC7C + IOPORT_PIN_P217_PFC_04_GTIOC17A = (0x04U << IOPORT_PFC_OFFSET), ///< P21_7 / GPTn / GTIOC17A + IOPORT_PIN_P217_PFC_05_DE0 = (0x05U << IOPORT_PFC_OFFSET), ///< P21_7 / SCIn / DE0 + IOPORT_PIN_P217_PFC_06_DREQ = (0x06U << IOPORT_PFC_OFFSET), ///< P21_7 / DMAC / DREQ + IOPORT_PIN_P217_PFC_07_MCLK3 = (0x07U << IOPORT_PFC_OFFSET), ///< P21_7 / DSMIFn / MCLK3 + IOPORT_PIN_P217_PFC_08_HD6 = (0x08U << IOPORT_PFC_OFFSET), ///< P21_7 / PHOSTIF / HD6 + IOPORT_PIN_P220_PFC_00_IRQ15 = (0x00U << IOPORT_PFC_OFFSET), ///< P22_0 / IRQ / IRQ15 + IOPORT_PIN_P220_PFC_01_TRACEDATA7 = (0x01U << IOPORT_PFC_OFFSET), ///< P22_0 / TRACE / TRACEDATA7 + IOPORT_PIN_P220_PFC_02_D7 = (0x02U << IOPORT_PFC_OFFSET), ///< P22_0 / BSC / D7 + IOPORT_PIN_P220_PFC_03_MTIOC7D = (0x03U << IOPORT_PFC_OFFSET), ///< P22_0 / MTU3n / MTIOC7D + IOPORT_PIN_P220_PFC_04_GTIOC17B = (0x04U << IOPORT_PFC_OFFSET), ///< P22_0 / GPTn / GTIOC17B + IOPORT_PIN_P220_PFC_05_DE5 = (0x05U << IOPORT_PFC_OFFSET), ///< P22_0 / SCIn / DE5 + IOPORT_PIN_P220_PFC_06_MDAT3 = (0x06U << IOPORT_PFC_OFFSET), ///< P22_0 / DSMIFn / MDAT3 + IOPORT_PIN_P220_PFC_07_HD7 = (0x07U << IOPORT_PFC_OFFSET), ///< P22_0 / PHOSTIF / HD7 + IOPORT_PIN_P221_PFC_00_TRACECTL = (0x00U << IOPORT_PFC_OFFSET), ///< P22_1 / TRACE / TRACECTL + IOPORT_PIN_P221_PFC_01_D8 = (0x01U << IOPORT_PFC_OFFSET), ///< P22_1 / BSC / D8 + IOPORT_PIN_P221_PFC_02_ESC_LINKACT2 = (0x02U << IOPORT_PFC_OFFSET), ///< P22_1 / ETHER_ESC / ESC_LINKACT2 + IOPORT_PIN_P221_PFC_03_POE4 = (0x03U << IOPORT_PFC_OFFSET), ///< P22_1 / MTU_POE3 / POE4 + IOPORT_PIN_P221_PFC_04_SS4_CTS4_RTS4 = (0x04U << IOPORT_PFC_OFFSET), ///< P22_1 / SCIn / SS4_CTS4_RTS4 + IOPORT_PIN_P221_PFC_05_HD8 = (0x05U << IOPORT_PFC_OFFSET), ///< P22_1 / PHOSTIF / HD8 + IOPORT_PIN_P221_PFC_06_GTETRGB = (0x06U << IOPORT_PFC_OFFSET), ///< P22_1 / GPT_POEG / GTETRGB + IOPORT_PIN_P222_PFC_00_IRQ4 = (0x00U << IOPORT_PFC_OFFSET), ///< P22_2 / IRQ / IRQ4 + IOPORT_PIN_P222_PFC_01_TRACECLK = (0x01U << IOPORT_PFC_OFFSET), ///< P22_2 / TRACE / TRACECLK + IOPORT_PIN_P222_PFC_02_D9 = (0x02U << IOPORT_PFC_OFFSET), ///< P22_2 / BSC / D9 + IOPORT_PIN_P222_PFC_03_MTIOC8C = (0x03U << IOPORT_PFC_OFFSET), ///< P22_2 / MTU3n / MTIOC8C + IOPORT_PIN_P222_PFC_04_GTETRGSA = (0x04U << IOPORT_PFC_OFFSET), ///< P22_2 / GPT_POEG / GTETRGSA + IOPORT_PIN_P222_PFC_05_SPI_SSL12 = (0x05U << IOPORT_PFC_OFFSET), ///< P22_2 / SPIn / SPI_SSL12 + IOPORT_PIN_P222_PFC_07_HD9 = (0x07U << IOPORT_PFC_OFFSET), ///< P22_2 / PHOSTIF / HD9 + IOPORT_PIN_P222_PFC_08_MCLK1 = (0x08U << IOPORT_PFC_OFFSET), ///< P22_2 / DSMIFn / MCLK1 + IOPORT_PIN_P223_PFC_00_D10 = (0x00U << IOPORT_PFC_OFFSET), ///< P22_3 / BSC / D10 + IOPORT_PIN_P223_PFC_01_MTIOC8D = (0x01U << IOPORT_PFC_OFFSET), ///< P22_3 / MTU3n / MTIOC8D + IOPORT_PIN_P223_PFC_02_GTETRGSB = (0x02U << IOPORT_PFC_OFFSET), ///< P22_3 / GPT_POEG / GTETRGSB + IOPORT_PIN_P223_PFC_04_RXD5_SCL5_MISO5 = (0x04U << IOPORT_PFC_OFFSET), ///< P22_3 / SCIn / RXD5_SCL5_MISO5 + IOPORT_PIN_P223_PFC_05_HD10 = (0x05U << IOPORT_PFC_OFFSET), ///< P22_3 / PHOSTIF / HD10 + IOPORT_PIN_P237_PFC_00_ETH2_RXD0 = (0x00U << IOPORT_PFC_OFFSET), ///< P23_7 / ETHER_ETHn / ETH2_RXD0 + IOPORT_PIN_P237_PFC_02_D11 = (0x02U << IOPORT_PFC_OFFSET), ///< P23_7 / BSC / D11 + IOPORT_PIN_P237_PFC_03_BS = (0x03U << IOPORT_PFC_OFFSET), ///< P23_7 / BSC / BS + IOPORT_PIN_P237_PFC_04_MTIOC0A = (0x04U << IOPORT_PFC_OFFSET), ///< P23_7 / MTU3n / MTIOC0A + IOPORT_PIN_P237_PFC_05_GTETRGA = (0x05U << IOPORT_PFC_OFFSET), ///< P23_7 / GPT_POEG / GTETRGA + IOPORT_PIN_P237_PFC_06_SCK1 = (0x06U << IOPORT_PFC_OFFSET), ///< P23_7 / SCIn / SCK1 + IOPORT_PIN_P237_PFC_07_MCLK4 = (0x07U << IOPORT_PFC_OFFSET), ///< P23_7 / DSMIFn / MCLK4 + IOPORT_PIN_P237_PFC_09_HD11 = (0x09U << IOPORT_PFC_OFFSET), ///< P23_7 / PHOSTIF / HD11 + IOPORT_PIN_P240_PFC_00_ETH2_RXD1 = (0x00U << IOPORT_PFC_OFFSET), ///< P24_0 / ETHER_ETHn / ETH2_RXD1 + IOPORT_PIN_P240_PFC_02_D12 = (0x02U << IOPORT_PFC_OFFSET), ///< P24_0 / BSC / D12 + IOPORT_PIN_P240_PFC_03_CKE = (0x03U << IOPORT_PFC_OFFSET), ///< P24_0 / BSC / CKE + IOPORT_PIN_P240_PFC_04_MTIOC0B = (0x04U << IOPORT_PFC_OFFSET), ///< P24_0 / MTU3n / MTIOC0B + IOPORT_PIN_P240_PFC_05_GTETRGB = (0x05U << IOPORT_PFC_OFFSET), ///< P24_0 / GPT_POEG / GTETRGB + IOPORT_PIN_P240_PFC_06_RXD1_SCL1_MISO1 = (0x06U << IOPORT_PFC_OFFSET), ///< P24_0 / SCIn / RXD1_SCL1_MISO1 + IOPORT_PIN_P240_PFC_07_DREQ = (0x07U << IOPORT_PFC_OFFSET), ///< P24_0 / DMAC / DREQ + IOPORT_PIN_P240_PFC_08_MDAT4 = (0x08U << IOPORT_PFC_OFFSET), ///< P24_0 / DSMIFn / MDAT4 + IOPORT_PIN_P240_PFC_0A_HD12 = (0x0AU << IOPORT_PFC_OFFSET), ///< P24_0 / PHOSTIF / HD12 + IOPORT_PIN_P241_PFC_00_ETH2_RXCLK = (0x00U << IOPORT_PFC_OFFSET), ///< P24_1 / ETHER_ETHn / ETH2_RXCLK + IOPORT_PIN_P241_PFC_02_D13 = (0x02U << IOPORT_PFC_OFFSET), ///< P24_1 / BSC / D13 + IOPORT_PIN_P241_PFC_03_CAS = (0x03U << IOPORT_PFC_OFFSET), ///< P24_1 / BSC / CAS + IOPORT_PIN_P241_PFC_04_MTIOC0C = (0x04U << IOPORT_PFC_OFFSET), ///< P24_1 / MTU3n / MTIOC0C + IOPORT_PIN_P241_PFC_05_GTETRGC = (0x05U << IOPORT_PFC_OFFSET), ///< P24_1 / GPT_POEG / GTETRGC + IOPORT_PIN_P241_PFC_06_POE8 = (0x06U << IOPORT_PFC_OFFSET), ///< P24_1 / MTU_POE3 / POE8 + IOPORT_PIN_P241_PFC_07_MCLK5 = (0x07U << IOPORT_PFC_OFFSET), ///< P24_1 / DSMIFn / MCLK5 + IOPORT_PIN_P241_PFC_09_HD13 = (0x09U << IOPORT_PFC_OFFSET), ///< P24_1 / PHOSTIF / HD13 + IOPORT_PIN_P242_PFC_00_ETH2_RXD2 = (0x00U << IOPORT_PFC_OFFSET), ///< P24_2 / ETHER_ETHn / ETH2_RXD2 + IOPORT_PIN_P242_PFC_02_D14 = (0x02U << IOPORT_PFC_OFFSET), ///< P24_2 / BSC / D14 + IOPORT_PIN_P242_PFC_03_RAS = (0x03U << IOPORT_PFC_OFFSET), ///< P24_2 / BSC / RAS + IOPORT_PIN_P242_PFC_04_MTIOC0D = (0x04U << IOPORT_PFC_OFFSET), ///< P24_2 / MTU3n / MTIOC0D + IOPORT_PIN_P242_PFC_05_GTETRGD = (0x05U << IOPORT_PFC_OFFSET), ///< P24_2 / GPT_POEG / GTETRGD + IOPORT_PIN_P242_PFC_06_TXD1_SDA1_MOSI1 = (0x06U << IOPORT_PFC_OFFSET), ///< P24_2 / SCIn / TXD1_SDA1_MOSI1 + IOPORT_PIN_P242_PFC_07_MDAT5 = (0x07U << IOPORT_PFC_OFFSET), ///< P24_2 / DSMIFn / MDAT5 + IOPORT_PIN_P242_PFC_09_HD14 = (0x09U << IOPORT_PFC_OFFSET), ///< P24_2 / PHOSTIF / HD14 + + /** Marks end of enum - used by parameter checking */ + IOPORT_PERIPHERAL_END +} ioport_pin_pfc_t; + +/** Options to configure pin functions */ +typedef enum e_ioport_cfg_options +{ + IOPORT_CFG_PORT_DIRECTION_HIZ = 0x00000000 << IOPORT_PM_OFFSET, ///< Sets the pin direction to Hi-Z + IOPORT_CFG_PORT_DIRECTION_INPUT = 0x00000001 << IOPORT_PM_OFFSET, ///< Sets the pin direction to input (default) + IOPORT_CFG_PORT_DIRECTION_OUTPUT = 0x00000002 << IOPORT_PM_OFFSET, ///< Sets the pin direction to output + IOPORT_CFG_PORT_DIRECTION_OUTPUT_INPUT = 0x00000003 << IOPORT_PM_OFFSET, ///< Sets the pin direction to output (data is input to input buffer) + IOPORT_CFG_PORT_OUTPUT_LOW = 0x00000000 << IOPORT_P_OFFSET, ///< Sets the pin level to low + IOPORT_CFG_PORT_OUTPUT_HIGH = 0x00000001 << IOPORT_P_OFFSET, ///< Sets the pin level to high + IOPORT_CFG_PORT_GPIO = 0x00000000 << IOPORT_PMC_OFFSET, ///< Enables pin to operate as an GPIO pin + IOPORT_CFG_PORT_PERI = 0x00000001 << IOPORT_PMC_OFFSET, ///< Enables pin to operate as a peripheral pin + IOPORT_CFG_DRIVE_LOW = 0x00000000 << IOPORT_DRCTL_OFFSET, ///< Sets pin drive output to low + IOPORT_CFG_DRIVE_MID = 0x00000001 << IOPORT_DRCTL_OFFSET, ///< Sets pin drive output to medium + IOPORT_CFG_DRIVE_HIGH = 0x00000002 << IOPORT_DRCTL_OFFSET, ///< Sets pin drive output to high + IOPORT_CFG_DRIVE_UHIGH = 0x00000003 << IOPORT_DRCTL_OFFSET, ///< Sets pin drive output to ultra high + IOPORT_CFG_PULLUP_DOWN_DISABLE = 0x00000000 << IOPORT_DRCTL_OFFSET, ///< Disables the pin's pull-up / pull-down + IOPORT_CFG_PULLUP_ENABLE = 0x00000004 << IOPORT_DRCTL_OFFSET, ///< Enables the pin's internal pull-up + IOPORT_CFG_PULLDOWN_ENABLE = 0x00000008 << IOPORT_DRCTL_OFFSET, ///< Enables the pin's pull-down + IOPORT_CFG_SCHMITT_TRIGGER_DISABLE = 0x00000000 << IOPORT_DRCTL_OFFSET, ///< Disables schmitt trigger input + IOPORT_CFG_SCHMITT_TRIGGER_ENABLE = 0x00000010 << IOPORT_DRCTL_OFFSET, ///< Enables schmitt trigger input + IOPORT_CFG_SLEW_RATE_SLOW = 0x00000000 << IOPORT_DRCTL_OFFSET, ///< Sets the slew rate to slow + IOPORT_CFG_SLEW_RATE_FAST = 0x00000020 << IOPORT_DRCTL_OFFSET, ///< Sets the slew rate to fast + IOPORT_CFG_REGION_SAFETY = 0x00000000 << IOPORT_RSELP_OFFSET, ///< Selects safety region + IOPORT_CFG_REGION_NSAFETY = 0x00000001 << IOPORT_RSELP_OFFSET, ///< Selects non safety region + IOPORT_CFG_PIM_TTL = 0x00000020, ///< This macro has been unsupported + IOPORT_CFG_NMOS_ENABLE = 0x00000040, ///< This macro has been unsupported + IOPORT_CFG_PMOS_ENABLE = 0x00000080, ///< This macro has been unsupported + IOPORT_CFG_DRIVE_HS_HIGH = 0x00000800, ///< This macro has been unsupported + IOPORT_CFG_DRIVE_MID_IIC = 0x00000C00, ///< This macro has been unsupported + IOPORT_CFG_EVENT_RISING_EDGE = 0x00001000, ///< This macro has been unsupported + IOPORT_CFG_EVENT_FALLING_EDGE = 0x00002000, ///< This macro has been unsupported + IOPORT_CFG_EVENT_BOTH_EDGES = 0x00003000, ///< This macro has been unsupported + IOPORT_CFG_IRQ_ENABLE = 0x00004000, ///< This macro has been unsupported + IOPORT_CFG_ANALOG_ENABLE = 0x00008000, ///< This macro has been unsupported + IOPORT_CFG_PERIPHERAL_PIN = 0x00010000 ///< This macro has been unsupported +} ioport_cfg_options_t; + +/*============================================== + * POE3 API Overrides + *==============================================*/ + +/** POE3 states. */ +typedef enum e_poe3_state +{ + POE3_STATE_NO_DISABLE_REQUEST = 0, ///< Timer output is not disabled by POE3 + POE3_STATE_POE0_HIGH_IMPEDANCE_REQUEST = 1U, ///< Timer output disabled due to POE0# pin + POE3_STATE_POE4_HIGH_IMPEDANCE_REQUEST = 1U << 1, ///< Timer output disabled due to POE4# pin + POE3_STATE_POE8_HIGH_IMPEDANCE_REQUEST = 1U << 2, ///< Timer output disabled due to POE8# pin + POE3_STATE_POE10_HIGH_IMPEDANCE_REQUEST = 1U << 3, ///< Timer output disabled due to POE10# pin + POE3_STATE_POE11_HIGH_IMPEDANCE_REQUEST = 1U << 4, ///< Timer output disabled due to POE11# pin + + POE3_STATE_SOFTWARE_STOP_DISABLE_REQUEST = 1U << 5, ///< Timer output disabled due to poe3_api_t::outputDisable() + POE3_STATE_OSCILLATION_STOP_DISABLE_REQUEST = 1U << 6, ///< Timer output disabled due to main oscillator stop + + POE3_STATE_DSMIF0_ERROR_REQUEST = 1U << 7, ///< Timer output disabled due to DSMIF0 error + POE3_STATE_DSMIF1_ERROR_REQUEST = 1U << 8, ///< Timer output disabled due to DSMIF1 error + + POE3_STATE_OUTPUT_SHORT_CIRCUIT_1_ERROR_REQUEST = 1U << 9, ///< Timer output disabled due to output short circuit 1 + POE3_STATE_OUTPUT_SHORT_CIRCUIT_2_ERROR_REQUEST = 1U << 10, ///< Timer output disabled due to output short circuit 2 +} poe3_state_t; + +/*============================================== + * POEG API Overrides + *==============================================*/ + +/** POEG states. */ +typedef enum e_poeg_state +{ + POEG_STATE_NO_DISABLE_REQUEST = 0, ///< GPT output is not disabled by POEG + POEG_STATE_PIN_DISABLE_REQUEST = 1U << 0, ///< GPT output disabled due to GTETRG pin level + POEG_STATE_GPT_OR_COMPARATOR_DISABLE_REQUEST = 1U << 1, ///< GPT output disabled due to high speed analog comparator or GPT + POEG_STATE_OSCILLATION_STOP_DISABLE_REQUEST = 1U << 2, ///< GPT output disabled due to main oscillator stop + POEG_STATE_SOFTWARE_STOP_DISABLE_REQUEST = 1U << 3, ///< GPT output disabled due to poeg_api_t::outputDisable() + + /** GPT output disable request active from the GTETRG pin. If a filter is used, this flag represents the state of + * the filtered input. */ + POEG_STATE_PIN_DISABLE_REQUEST_ACTIVE = 1U << 16, + POEG_STATE_DSMIF0_DISABLE_REQUEST = 1U << 24, ///< GPT output disabled due to DSMIF0 error 0 + POEG_STATE_DSMIF1_DISABLE_REQUEST = 1U << 25, ///< GPT output disabled due to DSMIF1 error 0 +} poeg_state_t; + +/** Triggers that will disable GPT output pins. */ +typedef enum e_poeg_trigger +{ + /** Software disable is always supported with POEG. Select this option if no other triggers are used. */ + POEG_TRIGGER_SOFTWARE = 0U, + POEG_TRIGGER_PIN = 1U << 0, ///< Disable GPT output based on GTETRG input level + POEG_TRIGGER_GPT_OUTPUT_LEVEL = 1U << 1, ///< Disable GPT output based on GPT output pin levels + POEG_TRIGGER_OSCILLATION_STOP = 1U << 2, ///< Disable GPT output based on main oscillator stop + POEG_TRIGGER_ACMPHS0 = 1U << 4, ///< Disable GPT output based on ACMPHS0 comparator result + POEG_TRIGGER_ACMPHS1 = 1U << 5, ///< Disable GPT output based on ACMPHS1 comparator result + POEG_TRIGGER_ACMPHS2 = 1U << 6, ///< Disable GPT output based on ACMPHS2 comparator result + POEG_TRIGGER_ACMPHS3 = 1U << 7, ///< Disable GPT output based on ACMPHS3 comparator result + POEG_TRIGGER_ACMPHS4 = 1U << 8, ///< Disable GPT output based on ACMPHS4 comparator result + POEG_TRIGGER_ACMPHS5 = 1U << 9, ///< Disable GPT output based on ACMPHS5 comparator result + + /** The GPT output pins can be disabled when DSMIF error occurs (LLPP only). */ + POEG_TRIGGER_DERR0E = 1U << 22, ///< Permit output disabled by DSMIF0 error detection + POEG_TRIGGER_DERR1E = 1U << 23, ///< Permit output disabled by DSMIF1 error detection +} poeg_trigger_t; + +/*============================================== + * Transfer API Overrides + *==============================================*/ + +/** Events that can trigger a callback function. */ +typedef enum e_transfer_event +{ + TRANSFER_EVENT_TRANSFER_END = 0, ///< Transfer has completed. + TRANSFER_EVENT_TRANSFER_ERROR = 1, ///< Transfer error has occurred. +} transfer_event_t; + +/** Transfer mode describes what will happen when a transfer request occurs. */ +typedef enum e_transfer_mode +{ + /** Normal mode. */ + TRANSFER_MODE_NORMAL = 0, + + /** Block mode. */ + TRANSFER_MODE_BLOCK = 1 +} transfer_mode_t; + +/** Transfer size specifies the size of each individual transfer. */ +typedef enum e_transfer_size +{ + TRANSFER_SIZE_1_BYTE = 0, ///< Each transfer transfers a 8-bit value + TRANSFER_SIZE_2_BYTE = 1, ///< Each transfer transfers a 16-bit value + TRANSFER_SIZE_4_BYTE = 2, ///< Each transfer transfers a 32-bit value + TRANSFER_SIZE_8_BYTE = 3, ///< Each transfer transfers a 64-bit value + TRANSFER_SIZE_16_BYTE = 4, ///< Each transfer transfers a 128-bit value + TRANSFER_SIZE_32_BYTE = 5, ///< Each transfer transfers a 256-bit value + TRANSFER_SIZE_64_BYTE = 6 ///< Each transfer transfers a 512-bit value +} transfer_size_t; + +/** Address mode specifies whether to modify (increment or decrement) pointer after each transfer. */ +typedef enum e_transfer_addr_mode +{ + /** Address pointer is incremented by associated @ref transfer_size_t after each transfer. */ + TRANSFER_ADDR_MODE_INCREMENTED = 0, + + /** Address pointer remains fixed after each transfer. */ + TRANSFER_ADDR_MODE_FIXED = 1 +} transfer_addr_mode_t; + +/** Callback function parameter data. */ +typedef struct st_transfer_callback_args_t +{ + transfer_event_t event; ///< Event code + void const * p_context; ///< Placeholder for user data. Set in transfer_api_t::open function in ::transfer_cfg_t. +} transfer_callback_args_t; + +/** This structure specifies the properties of the transfer. */ +typedef struct st_transfer_info +{ + /** Select what happens to destination pointer after each transfer. */ + transfer_addr_mode_t dest_addr_mode; + + /** Select what happens to source pointer after each transfer. */ + transfer_addr_mode_t src_addr_mode; + + /** Select mode from @ref transfer_mode_t. */ + transfer_mode_t mode; + + /** Source pointer. */ + void const * volatile p_src; + + /** Destination pointer. */ + void * volatile p_dest; + + /** Length of each transfer. */ + volatile uint32_t length; + + /** Select number of source bytes to transfer at once. */ + transfer_size_t src_size; + + /** Select number of destination bytes to transfer at once. */ + transfer_size_t dest_size; + + /** Next1 Register set settings */ + void const * p_next1_src; + void * p_next1_dest; + uint32_t next1_length; +} transfer_info_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_ioport/r_ioport.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_ioport/r_ioport.c new file mode 100644 index 00000000000..a192ee17d4d --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_ioport/r_ioport.c @@ -0,0 +1,957 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include +#include "bsp_api.h" +#include "r_ioport.h" +#include "r_ioport_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* "PORT" in ASCII, used to determine if the module is open */ +#define IOPORT_OPEN (0x504F5254U) +#define IOPORT_CLOSED (0x00000000U) + +/* Shift to get port in bsp_io_port_t and bsp_io_port_pin_t enums. */ +#define IOPORT_PRV_PORT_OFFSET (8U) + +#define IOPORT_PRV_PORT_BITS (0xFF00U) +#define IOPORT_PRV_PIN_BITS (0x00FFU) + +#define IOPORT_PRV_8BIT_MASK (0x00FFU) + +/* Added definitions */ +#define IOPORT_PIN_NUM_MUX (8U) +#define IOPORT_REGION_SEL_SAFE (0U) +#define IOPORT_REGION_SEL_NSAFE (1U) +#define IOPORT_RSEL_MASK (0x01U) +#define IOPORT_PM_BIT_MASK (0x0003U) +#define IOPORT_PFC_BIT_MASK (0x0000000FU) +#define IOPORT_DRTCL_BIT_MASK (0x000000FFU) +#define IOPORT_ELC_PEL_MASK (0x80) +#define IOOPRT_ELC_PGC_MASK (0x88) +#define IOPORT_ELC_PEL_PSM_HIGH (0x20) + +/* Switch IOPORT register region either safety or non safety */ +#define IOPORT_PRV_PORT_ADDRESS(region_sel) (region_sel == 1 ? (R_PORT_NSR) : (R_PORT_SR)) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef struct st_ioport_cfg_data +{ + uint32_t p_reg : 1; + uint32_t pm_reg : 2; + uint32_t pmc_reg : 1; + uint32_t pfc_reg : 4; + uint32_t drct_reg : 6; + uint32_t rsel_reg : 1; + uint32_t reserved : 17; +} ioport_cfg_data_t; + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +static void r_ioport_pins_config(const ioport_cfg_t * p_cfg); +static void r_ioport_pin_set(bsp_io_port_pin_t pin, ioport_cfg_data_t * p_cfg_data); +static void r_ioport_event_config(const ioport_extend_cfg_t * p_extend_cfg_data); + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Global Variables + **********************************************************************************************************************/ + +/* IOPort Implementation of IOPort Driver */ +const ioport_api_t g_ioport_on_ioport = +{ + .open = R_IOPORT_Open, + .close = R_IOPORT_Close, + .pinsCfg = R_IOPORT_PinsCfg, + .pinCfg = R_IOPORT_PinCfg, + .pinEventInputRead = R_IOPORT_PinEventInputRead, + .pinEventOutputWrite = R_IOPORT_PinEventOutputWrite, + .pinRead = R_IOPORT_PinRead, + .pinWrite = R_IOPORT_PinWrite, + .portDirectionSet = R_IOPORT_PortDirectionSet, + .portEventInputRead = R_IOPORT_PortEventInputRead, + .portEventOutputWrite = R_IOPORT_PortEventOutputWrite, + .portRead = R_IOPORT_PortRead, + .portWrite = R_IOPORT_PortWrite, +}; + +/*******************************************************************************************************************//** + * @addtogroup IOPORT + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Initializes internal driver data, then calls pin configuration function to configure pins. + * + * @retval FSP_SUCCESS Pin configuration data written to the multiple registers + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_ALREADY_OPEN Module is already open. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_Open (ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg) +{ + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_cfg); + FSP_ASSERT(NULL != p_cfg->p_pin_cfg_data); + FSP_ERROR_RETURN(IOPORT_OPEN != p_instance_ctrl->open, FSP_ERR_ALREADY_OPEN); +#endif + + /* Set driver status to open */ + p_instance_ctrl->open = IOPORT_OPEN; + + p_instance_ctrl->p_cfg = p_cfg; + + r_ioport_pins_config(p_cfg); + + r_ioport_event_config(p_cfg->p_extend); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Resets IOPORT registers. Implements @ref ioport_api_t::close + * + * @retval FSP_SUCCESS The IOPORT was successfully uninitialized + * @retval FSP_ERR_ASSERTION p_ctrl was NULL + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_Close (ioport_ctrl_t * const p_ctrl) +{ + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + /* Set state to closed */ + p_instance_ctrl->open = IOPORT_CLOSED; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Configures the functions of multiple pins by loading configuration data into the multiple registers. + * Implements @ref ioport_api_t::pinsCfg. + * + * This function initializes the supplied list of the multiple registers with the supplied values. This data can be generated + * by the Pins tab of the RZ/N2L Configuration editor or manually by the developer. Different pin configurations can be + * loaded for different situations such as low power modes and testing. + * + * @retval FSP_SUCCESS Pin configuration data written to the multiple registers + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinsCfg (ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_cfg); + FSP_ASSERT(NULL != p_cfg->p_pin_cfg_data); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + r_ioport_pins_config(p_cfg); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Configures the settings of a pin. Implements @ref ioport_api_t::pinCfg. + * + * @retval FSP_SUCCESS Pin configured + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different pins. + * This function will change the configuration of the pin with the new configuration. For example it is not possible + * with this function to change the drive strength of a pin while leaving all the other pin settings unchanged. To + * achieve this the original settings with the required change will need to be written using this function. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinCfg (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + R_BSP_PinAccessEnable(); + + r_ioport_pin_set(pin, (ioport_cfg_data_t *) &cfg); + + R_BSP_PinAccessDisable(); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Reads the level on a pin. Implements @ref ioport_api_t::pinRead. + * + * The level for the specifed pin will be reterned by PINm register. + * + * @retval FSP_SUCCESS Pin read + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * + * @note This function is re-entrant for different pins. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_pin_value); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + *p_pin_value = (bsp_io_level_t) R_BSP_FastPinRead(R_BSP_IoRegionGet(pin), pin); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Reads the value on an IO port. Implements @ref ioport_api_t::portRead. + * + * The specified port will be read, and the levels for all the pins will be returned by PINm register. + * Each bit in the returned value corresponds to a pin on the port. For example, bit 7 corresponds + * to pin 7, bit 6 to pin 6, and so on. + * + * @retval FSP_SUCCESS Port read + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * + * @note This function is re-entrant for different ports. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_port_value); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + R_PORT_COMMON_Type * p_ioport_regs; + ioport_size_t safe_value; + ioport_size_t nsafe_value; + + /* Get port number */ + uint32_t port_num = (IOPORT_PRV_PORT_BITS & (ioport_size_t) port) >> IOPORT_PRV_PORT_OFFSET; + + /* Get the RSELP register value */ + ioport_size_t rselp_value = (ioport_size_t) R_PTADR->RSELP[port_num]; + + /* Get the port register address in non safety region */ + p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + + /* Read the specified port states in non safety region */ + nsafe_value = (ioport_size_t) (p_ioport_regs->PIN[port_num] & rselp_value); + + /* Get the port register address in safety region */ + p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_SAFE); + + /* Read the specified port states in safety region */ + safe_value = (ioport_size_t) (p_ioport_regs->PIN[port_num] & ~(rselp_value)); + + /* Read the specified port states */ + *p_port_value = nsafe_value | safe_value; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Writes to multiple pins on a port. Implements @ref ioport_api_t::portWrite. + * + * The output value will be written to the specified port. Each bit in the value parameter corresponds to a bit + * on the port. For example, bit 7 corresponds to pin 7, bit 6 to pin 6, and so on. + * Each bit in the mask parameter corresponds to a pin on the port. + * + * Only the bits with the corresponding bit in the mask value set will be updated. + * For example, value = 0x00FF, mask = 0x0003 results in only bits 0 and 1 being updated. + * + * @retval FSP_SUCCESS Port written to + * @retval FSP_ERR_INVALID_ARGUMENT The port and/or mask not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointerd + * + * @note This function is re-entrant for different ports. This function makes use of the Pm register to atomically + * modify the levels on the specified pins on a port. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask > (ioport_size_t) 0, FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + R_PORT_COMMON_Type * p_ioport_regs; + ioport_size_t temp_value; + ioport_size_t write_mask; + + /* mask value: lower word is valid, upper word is invalid */ + mask &= IOPORT_PRV_8BIT_MASK; + + /* Get port number */ + uint32_t port_num = (IOPORT_PRV_PORT_BITS & (ioport_size_t) port) >> IOPORT_PRV_PORT_OFFSET; + + /* Get the RSELP register value */ + ioport_size_t rselp_value = R_PTADR->RSELP[port_num]; + + /* Set value to non safety region register */ + write_mask = rselp_value & mask; + if (write_mask) + { + /* Get the port register address */ + p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + + /* Output data store of the specified pins sets to low output */ + temp_value = (ioport_size_t) (p_ioport_regs->P[port_num] & (~write_mask)); + + /* Write output data to P register of the specified pins */ + p_ioport_regs->P[port_num] = (uint8_t) (temp_value | (value & write_mask)); + } + + /* Set value to safety region register */ + write_mask = (ioport_size_t) ((~rselp_value) & mask); + if (write_mask) + { + /* Get the port register address */ + p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_SAFE); + + /* Output data store of the specified pins sets to low output */ + temp_value = (ioport_size_t) (p_ioport_regs->P[port_num] & (~write_mask)); + + /* Write output data to P register of the specified pins */ + p_ioport_regs->P[port_num] = (uint8_t) (temp_value | (value & write_mask)); + } + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Sets a pin's output either high or low. Implements @ref ioport_api_t::pinWrite. + * + * @retval FSP_SUCCESS Pin written to + * @retval FSP_ERR_INVALID_ARGUMENT The pin and/or level not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opene + * @retval FSP_ERR_ASSERTION NULL pointerd + * + * @note This function is re-entrant for different pins. This function makes use of the Pm register to atomically + * modify the level on the specified pin on a port. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(level <= BSP_IO_LEVEL_HIGH, FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + R_PORT_COMMON_Type * p_ioport_regs; + + /* Get port and pin number */ + uint32_t port_num = (IOPORT_PRV_PORT_BITS & (ioport_size_t) pin) >> IOPORT_PRV_PORT_OFFSET; + uint32_t pin_num = (IOPORT_PRV_PIN_BITS & (ioport_size_t) pin); + + /* Get the port register address */ + p_ioport_regs = (IOPORT_PRV_PORT_ADDRESS(((uint16_t) (R_PTADR->RSELP[port_num] >> pin_num) & + IOPORT_RSEL_MASK))); + + /* Set output level to P register of the specified pin */ + if (BSP_IO_LEVEL_LOW == level) + { + p_ioport_regs->P[port_num] &= (uint8_t) (~(1U << pin_num)); + } + else + { + p_ioport_regs->P[port_num] |= (uint8_t) (1U << pin_num); + } + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Sets the direction of individual pins on a port. Implements @ref ioport_api_t::portDirectionSet(). + * + * Multiple pins on a port can be set to inputs or outputs at once. + * Each bit in the mask parameter corresponds to a pin on the port. For example, bit 7 corresponds to + * pin 7, bit 6 to pin 6, and so on. If a mask bit is set to 1 then the corresponding pin will be changed to + * an input or an output as specified by the direction values. If a mask bit is set to 0 then the direction of + * the pin will not be changed. + * + * @retval FSP_SUCCESS Port direction updated + * @retval FSP_ERR_INVALID_ARGUMENT The port and/or mask not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different ports. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortDirectionSet (ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t direction_values, + ioport_size_t mask) +{ + uint32_t pin_num; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask > (uint16_t) 0, FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + /* mask value: lower word is valid, upper word is invalid */ + mask &= IOPORT_PRV_8BIT_MASK; + + for (pin_num = 0U; pin_num < IOPORT_PIN_NUM_MUX; pin_num++) + { + if (mask & (1U << pin_num)) + { + /* Get port number */ + uint32_t port_num = (IOPORT_PRV_PORT_BITS & (ioport_size_t) port) >> IOPORT_PRV_PORT_OFFSET; + + /* Get the port register address */ + R_PORT_COMMON_Type * p_ioport_regs = + IOPORT_PRV_PORT_ADDRESS(((uint16_t) (R_PTADR->RSELP[port_num] >> pin_num) & + IOPORT_RSEL_MASK)); + + /* Set */ + uint16_t set_bits = (uint16_t) (direction_values & (IOPORT_PM_BIT_MASK << (pin_num * 2U))); + + /* Set the direction value */ + uint16_t temp_value = (uint16_t) (p_ioport_regs->PM[port_num] & ~(IOPORT_PM_BIT_MASK << (pin_num * 2U))); + p_ioport_regs->PM[port_num] = temp_value | set_bits; + } + } + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Reads the value of the event input data. Implements @ref ioport_api_t::portEventInputRead(). + * + * The event input data for the port will be read. Each bit in the returned value corresponds to a pin on the port. + * For example, bit 7 corresponds to pin 7, bit 6 to pin 6, and so on. + * + * The port event data is captured in response to a trigger from the ELC. This function enables this data to be read. + * Using the event system allows the captured data to be stored when it occurs and then read back at a later time. + * + * @retval FSP_SUCCESS Port read + * @retval FSP_ERR_INVALID_ARGUMENT Port not a valid ELC port + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortEventInputRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data) +{ + uint8_t portgroup = 0U; + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_event_data); + FSP_ERROR_RETURN((port == BSP_IO_PORT_16) || (port == BSP_IO_PORT_18), FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + const ioport_extend_cfg_t * elc_cfg = p_instance_ctrl->p_cfg->p_extend; + + /* Get register address */ + R_PORT_COMMON_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + + /* Get port group number for the specified port */ + if (BSP_IO_PORT_16 == port) + { + portgroup = 0U; + } + else if (BSP_IO_PORT_18 == port) + { + portgroup = 1U; + } + else + { + /* Do Nothing */ + } + + /* Read current value of buffer value from ELC_PDBF register for the specified port group */ + *p_event_data = + (uint16_t) (p_ioport_regs->ELC_PDBF[portgroup].BY & elc_cfg->port_group_input_cfg[portgroup].pin_select); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Reads the value of the event input data of a specific pin. Implements @ref ioport_api_t::pinEventInputRead. + * + * The pin event data is captured in response to a trigger from the ELC. This function enables this data to be read. + * Using the event system allows the captured data to be stored when it occurs and then read back at a later time. + * + * @retval FSP_SUCCESS Pin read + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_INVALID_ARGUMENT Port is not valid ELC PORT. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinEventInputRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event) +{ + uint8_t portgroup = 0U; + uint8_t portvalue; + uint8_t mask; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_pin_event); + uint32_t port_number = pin >> IOPORT_PRV_PORT_OFFSET; + FSP_ERROR_RETURN((port_number == BSP_IO_PORT_16 >> IOPORT_PRV_PORT_OFFSET) || + (port_number == BSP_IO_PORT_18 >> IOPORT_PRV_PORT_OFFSET), + FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + /* Get port and pin number */ + uint32_t port_num = (IOPORT_PRV_PORT_BITS & (ioport_size_t) pin); + uint32_t pin_num = (IOPORT_PRV_PIN_BITS & (ioport_size_t) pin); + + /* Get register address */ + R_PORT_COMMON_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + + /* Get port group number for the specified port */ + if (BSP_IO_PORT_16 == port_num) + { + portgroup = 0U; + } + else if (BSP_IO_PORT_18 == port_num) + { + portgroup = 1U; + } + else + { + /* Do Nothing */ + } + + /* Read current value of buffer value from ELC_PDBF register for the specified port group */ + portvalue = p_ioport_regs->ELC_PDBF[portgroup].BY; + mask = (uint8_t) (1U << pin_num); + + if ((portvalue & mask) == mask) + { + *p_pin_event = BSP_IO_LEVEL_HIGH; + } + else + { + *p_pin_event = BSP_IO_LEVEL_LOW; + } + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * This function writes the set and reset event output data for a port. Implements + * @ref ioport_api_t::portEventOutputWrite. + * + * Using the event system enables a port state to be stored by this function in advance of being output on the port. + * The output to the port will occur when the ELC event occurs. + * + * The input value will be written to the specified port when an ELC event configured for that port occurs. + * Each bit in the value parameter corresponds to a bit on the port. For example, bit 7 corresponds to pin 7, + * bit 6 to pin 6, and so on. Each bit in the mask parameter corresponds to a pin on the port. + * + * @retval FSP_SUCCESS Port event data written + * @retval FSP_ERR_INVALID_ARGUMENT Port or Mask not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortEventOutputWrite (ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t event_data, + ioport_size_t mask_value) +{ + uint8_t portgroup = 0U; + ioport_size_t temp_value; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask_value > (ioport_size_t) 0, FSP_ERR_INVALID_ARGUMENT); + FSP_ERROR_RETURN((port == BSP_IO_PORT_16) || (port == BSP_IO_PORT_18), FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + R_BSP_PinAccessEnable(); // Unlock Register Write Protection + + /* Get register address */ + R_PORT_COMMON_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + + /* Get port group number for the specified port */ + if (BSP_IO_PORT_16 == port) + { + portgroup = 0U; + } + else if (BSP_IO_PORT_18 == port) + { + portgroup = 1U; + } + else + { + /* Do Nothing */ + } + + temp_value = p_ioport_regs->ELC_PDBF[portgroup].BY; + temp_value &= (ioport_size_t) (~mask_value); + + p_ioport_regs->ELC_PDBF[portgroup].BY = (uint8_t) (temp_value | event_data); + + R_BSP_PinAccessDisable(); // Lock Register Write Protection + + return FSP_SUCCESS; +} + +/**********************************************************************************************************************//** + * This function writes the event output data value to a pin. Implements @ref ioport_api_t::pinEventOutputWrite. + * + * Using the event system enables a pin state to be stored by this function in advance of being output on the pin. + * The output to the pin will occur when the ELC event occurs. + * + * @retval FSP_SUCCESS Pin event data written + * @retval FSP_ERR_INVALID_ARGUMENT Port or Pin or value not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinEventOutputWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value) +{ + uint8_t singleport = 0U; + uint8_t cnt; + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN((pin_value == BSP_IO_LEVEL_HIGH) || (pin_value == BSP_IO_LEVEL_LOW), FSP_ERR_INVALID_ARGUMENT); + uint32_t port_number = pin >> IOPORT_PRV_PORT_OFFSET; + FSP_ERROR_RETURN((port_number == BSP_IO_PORT_16 >> IOPORT_PRV_PORT_OFFSET) || + (port_number == BSP_IO_PORT_18 >> IOPORT_PRV_PORT_OFFSET), + FSP_ERR_INVALID_ARGUMENT); +#endif + + const ioport_extend_cfg_t * elc_cfg = p_instance_ctrl->p_cfg->p_extend; + + R_BSP_PinAccessEnable(); // Unlock Register Write Protection + + /* Get register address */ + R_PORT_COMMON_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + + for (cnt = 0; cnt < IOPORT_SINGLE_PORT_NUM; cnt++) + { + if ((bsp_io_port_pin_t) elc_cfg->single_port_cfg[cnt].port_num == pin) + { + singleport = cnt; + } + } + + if (BSP_IO_LEVEL_HIGH == pin_value) + { + p_ioport_regs->ELC_PEL[singleport] |= (uint8_t) IOPORT_ELC_PEL_PSM_HIGH; + } + else + { + p_ioport_regs->ELC_PEL[singleport] &= (uint8_t) (~IOPORT_ELC_PEL_PSM_HIGH); + } + + R_BSP_PinAccessDisable(); // Lock Register Write Protection + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @} (end addtogroup IOPORT) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Configures pins. + * + * @param[in] p_cfg Pin configuration data + **********************************************************************************************************************/ +void r_ioport_pins_config (const ioport_cfg_t * p_cfg) +{ + uint16_t pin_count; + ioport_cfg_t * p_pin_data; + + p_pin_data = (ioport_cfg_t *) p_cfg; + + R_BSP_PinAccessEnable(); // Unlock Register Write Protection + + for (pin_count = 0U; pin_count < p_pin_data->number_of_pins; pin_count++) + { + r_ioport_pin_set(p_pin_data->p_pin_cfg_data[pin_count].pin, + (ioport_cfg_data_t *) &p_pin_data->p_pin_cfg_data[pin_count].pin_cfg); + } + + R_BSP_PinAccessDisable(); // Lock Register Write Protection +} + +/*******************************************************************************************************************//** + * Writes to the specified pin's multiple registers + * + * @param[in] pin Pin to write parameter data for + * @param[in] p_cfg_data Value to be written to the multiple registers + * + **********************************************************************************************************************/ +static void r_ioport_pin_set (bsp_io_port_pin_t pin, ioport_cfg_data_t * p_cfg_data) +{ + R_PORT_COMMON_Type * p_ioport_regs; + uint32_t temp_value; + + /* Get port and pin number */ + uint32_t port = (IOPORT_PRV_PORT_BITS & (ioport_size_t) pin) >> IOPORT_PRV_PORT_OFFSET; + uint32_t pin_num = (IOPORT_PRV_PIN_BITS & (ioport_size_t) pin); + + /* Setting for Safety region or Non safety region */ + if (p_cfg_data->rsel_reg == 1U) // Setting for Non safety region + { + R_PTADR->RSELP[port] |= (uint8_t) (1U << pin_num); + p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + } + else // Setting for Safety region + { + R_PTADR->RSELP[port] &= (uint8_t) (~(1U << pin_num)); + p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_SAFE); + } + + /* Setting DRCTL register */ + if (3U >= pin_num) + { + temp_value = p_ioport_regs->DRCTL[port].L & ~(IOPORT_DRTCL_BIT_MASK << (pin_num * 8U)); + p_ioport_regs->DRCTL[port].L = temp_value | (uint32_t) (p_cfg_data->drct_reg << (pin_num * 8U)); + } + else if (3U < pin_num) + { + temp_value = p_ioport_regs->DRCTL[port].H & ~(IOPORT_DRTCL_BIT_MASK << ((pin_num - 4U) * 8U)); + p_ioport_regs->DRCTL[port].H = temp_value | (uint32_t) (p_cfg_data->drct_reg << ((pin_num - 4U) * 8U)); + } + else + { + /* Do Nothing */ + } + + /* Setting for GPIO or peripheral */ + if (1U == p_cfg_data->pmc_reg) // Setting for peripheral + { + temp_value = p_ioport_regs->PFC[port] & ~(IOPORT_PFC_BIT_MASK << (pin_num * 4U)); + p_ioport_regs->PFC[port] = temp_value | (uint32_t) (p_cfg_data->pfc_reg << (pin_num * 4U)); // Setting PFC register + + /* Setting peripheral for port mode */ + p_ioport_regs->PMC[port] |= (uint8_t) (p_cfg_data->pmc_reg << pin_num); // Setting PMC register + } + else // Setting for GPIO + { + /* Setting GPIO for port mode */ + p_ioport_regs->PMC[port] &= (uint8_t) (~(1U << pin_num)); // Setting PMC register + + /* Setting for input or output */ + if (1U == p_cfg_data->pm_reg) // Setting for input + { + /* Setting PM register. */ + /* 01b: Input */ + temp_value = (uint32_t) (p_ioport_regs->PM[port] & ~(IOPORT_PM_BIT_MASK << (pin_num * 2U))); + p_ioport_regs->PM[port] = (uint16_t) (temp_value | (uint32_t) (1U << (pin_num * 2U))); + } + else if (1U < p_cfg_data->pm_reg) // Setting for two kinds of Output + { + /* Setting P register */ + if (0U == p_cfg_data->p_reg) // Low output setting + { + p_ioport_regs->P[port] &= (uint8_t) (~(1U << pin_num)); + } + else if (1U == p_cfg_data->p_reg) // High output setting + { + p_ioport_regs->P[port] |= (uint8_t) (1U << pin_num); + } + else + { + /* Do Nothing */ + } + + /* Setting PM register. */ + /* 10b: Output */ + /* 11b: Output(output data is input to input buffer) */ + temp_value = (uint32_t) (p_ioport_regs->PM[port] & ~(IOPORT_PM_BIT_MASK << (pin_num * 2U))); + p_ioport_regs->PM[port] = (uint16_t) (temp_value | (uint32_t) (p_cfg_data->pm_reg << (pin_num * 2U))); + } + else + { + /* Do Nothing */ + } + } +} + +/*******************************************************************************************************************//** + * Writes to the specified pin's multiple registers to generate event link function + * + * @param[in] p_extend_cfg_data Value to be written to the multiple registers + * + **********************************************************************************************************************/ +static void r_ioport_event_config (const ioport_extend_cfg_t * p_extend_cfg_data) +{ + uint8_t event_num; + uint8_t temp_value = 0x00; + uint8_t single_enable = 0x00; + uint8_t group_enable = 0x00; + R_PORT_COMMON_Type * p_ioport_regs; + ioport_extend_cfg_t * ex_cfg; + + ex_cfg = (ioport_extend_cfg_t *) p_extend_cfg_data; + + R_BSP_PinAccessEnable(); // Unlock Register Write Protection + + /* Get register address */ + p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(IOPORT_REGION_SEL_NSAFE); + + /* Single port configuration */ + for (event_num = 0U; event_num < IOPORT_SINGLE_PORT_NUM; event_num++) + { + uint8_t port = + (uint8_t) ((ex_cfg->single_port_cfg[event_num].port_num & IOPORT_PRV_PORT_BITS) >> IOPORT_PRV_PORT_OFFSET); + uint8_t pin_num = (uint8_t) ex_cfg->single_port_cfg[event_num].port_num & IOPORT_PRV_PIN_BITS; + + temp_value = p_ioport_regs->ELC_PEL[event_num] & IOPORT_ELC_PEL_MASK; + + /* Port selection */ + if ((BSP_IO_PORT_16 >> IOPORT_PRV_PORT_OFFSET) == port) + { + temp_value |= 1U << 3; + } + else if ((BSP_IO_PORT_18 >> IOPORT_PRV_PORT_OFFSET) == port) + { + temp_value |= 1U << 4; + } + else + { + /* Do Nothing */ + } + + temp_value |= pin_num; // Pin number setting + + /* When the pin specified as single input port, Set edge detection */ + /* When the pin specified as single output port, Set output operation */ + if (IOPORT_EVENT_DIRECTION_INPUT == ex_cfg->single_port_cfg[event_num].direction) + { + temp_value |= (uint8_t) (ex_cfg->single_port_cfg[event_num].edge_detection << 5); // Edge detection + + /* Edge detection enable */ + p_ioport_regs->ELC_DPTC |= (uint8_t) (1U << event_num); + } + else + { + temp_value |= (uint8_t) (ex_cfg->single_port_cfg[event_num].operation << 5); // Output operation + } + + /* Set to ELC port setting register */ + p_ioport_regs->ELC_PEL[event_num] = temp_value; + + /* Single port event link function enable */ + if (IOPORT_EVENT_CONTROL_ENABLE == ex_cfg->single_port_cfg[event_num].event_control) + { + single_enable |= (uint8_t) (1U << event_num); + } + } + + /* Port group configuration */ + for (event_num = 0U; event_num < IOPORT_PORT_GROUP_NUM; event_num++) + { + /* Pin selection */ + uint8_t group_pin = ex_cfg->port_group_input_cfg[event_num].pin_select | + ex_cfg->port_group_output_cfg[event_num].pin_select; + p_ioport_regs->ELC_PGR[event_num] = group_pin; + + if (IOPORT_EVENT_CONTROL_ENABLE == ex_cfg->port_group_input_cfg[event_num].event_control) + { + /* Input port group control */ + temp_value = p_ioport_regs->ELC_PGC[event_num] & IOOPRT_ELC_PGC_MASK; + temp_value |= ex_cfg->port_group_input_cfg[event_num].edge_detection; // Edge detection + temp_value |= (uint8_t) (ex_cfg->port_group_input_cfg[event_num].overwrite_control << 2U); // Overwrite setting + + /* Buffer register initialization */ + p_ioport_regs->ELC_PDBF[event_num].BY = ex_cfg->port_group_input_cfg[event_num].buffer_init_value; + + /* Input port group event link function enable */ + group_enable |= (uint8_t) (1U << event_num); + } + + /* Output port group operation */ + temp_value |= (uint8_t) (ex_cfg->port_group_output_cfg[event_num].operation << 4); + + /* Set to port group control register */ + p_ioport_regs->ELC_PGC[event_num] = temp_value; + } + + /* Set to ELC port event control register */ + p_ioport_regs->ELC_ELSR2 = (uint8_t) ((single_enable << 4) | (group_enable << 2)); + + R_BSP_PinAccessDisable(); // Lock Register Write Protection +} diff --git a/bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_sci_uart/r_sci_uart.c b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_sci_uart/r_sci_uart.c new file mode 100644 index 00000000000..dff83ec6b74 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn/fsp/src/r_sci_uart/r_sci_uart.c @@ -0,0 +1,1934 @@ +/*********************************************************************************************************************** + * Copyright [2020-2024] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved. + * + * This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only + * be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized. + * Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for + * the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any + * intellectual property right is granted by Renesas. This software is protected under all applicable laws, including + * copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation. + * THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND + * TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY, + * INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE + * SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH. + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR + * DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER, + * INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY + * LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE + * POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS. + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "r_sci_uart.h" +#include + +#if SCI_UART_CFG_DMAC_SUPPORTED + #include "r_dmac.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#ifndef SCI_UART_CFG_RX_ENABLE + #define SCI_UART_CFG_RX_ENABLE 1 +#endif +#ifndef SCI_UART_CFG_TX_ENABLE + #define SCI_UART_CFG_TX_ENABLE 1 +#endif + +/** Number of divisors in the data table used for baud rate calculation. */ +#define SCI_UART_NUM_DIVISORS_ASYNC (13U) + +/** Valid range of values for the modulation duty register is 128 - 256 (256 = modulation disabled). */ +#define SCI_UART_MDDR_MIN (128U) +#define SCI_UART_MDDR_MAX (256U) + +/** The bit rate register is 8-bits, so the maximum value is 255. */ +#define SCI_UART_BRR_MAX (255U) + +/** No limit to the number of bytes to read or write if DMAC is not used. */ +#define SCI_UART_MAX_READ_WRITE_NO_DMAC (0xFFFFFFFFU) + +/** Mask of invalid data bits in 9-bit mode. */ +#define SCI_UART_ALIGN_2_BYTES (0x1U) + +/** Clock frequency 96MHz. */ +#define SCI_UART_CLOCK_96MHZ (96000000) + +/** "SCIU" in ASCII. Used to determine if the control block is open. */ +#define SCI_UART_OPEN (0x53434955U) + +#define SCI_UART_BRR_DEFAULT_VALUE (0xFFU) +#define SCI_UART_MDDR_DEFAULT_VALUE (0xFFU) +#define SCI_UART_FCR_DEFAULT_VALUE (0x1F1F0000) + +#define SCI_UART_CCR0_DEFAULT_VALUE (0x00000000) +#define SCI_UART_CCR1_DEFAULT_VALUE (0x00000010) +#define SCI_UART_CCR2_DEFAULT_VALUE (0xFF00FF04) +#define SCI_UART_CCR3_DEFAULT_VALUE (0x00001203) +#define SCI_UART_CCR4_DEFAULT_VALUE (0x00000000) + +#define SCI_UART_CFCLR_ALL_FLAG_CLEAR (0xBD070010) +#define SCI_UART_FFCLR_ALL_FLAG_CLEAR (0x00000001) + +/** SCI CCR0 register bit masks */ +#define SCI_UART_CCR0_IDSEL_MASK (0x00000400) +#define SCI_UART_CCR0_TEIE_MASK (0x00200000) +#define SCI_UART_CCR0_RE_MASK (0x00000001) +#define SCI_UART_CCR0_TE_MASK (0x00000010) +#define SCI_UART_CCR0_RIE_MASK (0x00010000) +#define SCI_UART_CCR0_TIE_MASK (0x00100000) + +/** SCI CCR1 register bit offsets */ +#define SCI_UART_CCR1_CTSE_OFFSET (0U) +#define SCI_UART_CCR1_SPB2DT_BIT (4U) +#define SCI_UART_CCR1_OUTPUT_ENABLE_MASK (0x00000020) +#define SCI_UART_CCR1_PARITY_OFFSET (8U) +#define SCI_UART_CCR1_PARITY_MASK (0x00000300U) +#define SCI_UART_CCR1_FLOW_CTSRTS_MASK (0x00000003U) +#define SCI_UART_CCR1_NFCS_OFFSET (24U) +#define SCI_UART_CCR1_NFCS_VALUE_MASK (0x07U) +#define SCI_UART_CCR1_NFEN_OFFSET (28U) + +/** SCI CCR2 register bit offsets */ +#define SCI_UART_CCR2_BRME_OFFSET (16U) +#define SCI_UART_CCR2_ABCSE_OFFSET (6U) +#define SCI_UART_CCR2_ABCS_OFFSET (5U) +#define SCI_UART_CCR2_BDGM_OFFSET (4U) +#define SCI_UART_CCR2_CKS_OFFSET (20U) +#define SCI_UART_CCR2_CKS_VALUE_MASK (0x03U) ///< CKS: 2 bits +#define SCI_UART_CCR2_BRR_OFFSET (8U) +#define SCI_UART_CCR2_BRR_VALUE_MASK (0xFFU) ///< BRR: 8bits +#define SCI_UART_CCR2_MDDR_OFFSET (24U) +#define SCI_UART_CCR2_MDDR_VALUE_MASK (0xFFU) ///< MDDR: 8bits + +#define SCI_UART_CCR2_BAUD_SETTING_MASK ((1U << SCI_UART_CCR2_BRME_OFFSET) | \ + (1U << SCI_UART_CCR2_ABCSE_OFFSET) | \ + (1U << SCI_UART_CCR2_ABCS_OFFSET) | \ + (1U << SCI_UART_CCR2_BDGM_OFFSET) | \ + (SCI_UART_CCR2_CKS_VALUE_MASK << SCI_UART_CCR2_CKS_OFFSET) | \ + (SCI_UART_CCR2_BRR_VALUE_MASK << SCI_UART_CCR2_BRR_OFFSET) | \ + (SCI_UART_CCR2_MDDR_VALUE_MASK << SCI_UART_CCR2_MDDR_OFFSET)) + +/** SCI CCR3 register bit masks */ +#define SCI_UART_CCR3_BPEN_OFFSET (7U) +#define SCI_UART_CCR3_CHR_OFFSET (8U) +#define SCI_UART_CCR3_STP_OFFSET (14U) +#define SCI_UART_CCR3_RxDSEL_OFFSET (15U) +#define SCI_UART_CCR3_FM_OFFSET (20U) +#define SCI_UART_CCR3_CKE_OFFSET (24U) +#define SCI_UART_CCR3_CKE_MASK (0x03000000U) +#define SCI_UART_CCR3_CKE_VALUE_MASK (0x03U) + +/** SCI CSR register receiver error bit masks */ +#define SCI_UART_CSR_ORER_MASK (0x01000000) +#define SCI_UART_CSR_FER_MASK (0x10000000) +#define SCI_UART_CSR_PER_MASK (0x08000000) +#define SCI_UART_RCVR_ERR_MASK (SCI_UART_CSR_ORER_MASK | SCI_UART_CSR_FER_MASK | SCI_UART_CSR_PER_MASK) + +/** SCI CFCLR register receiver clear error bit masks */ +#define SCI_UART_CFCLR_ORERC_MASK (0x01000000) +#define SCI_UART_CFCLR_FERC_MASK (0x10000000) +#define SCI_UART_CFCLE_PERC_MASK (0x08000000) +#define SCI_UART_RCVR_ERRCLR_MASK (SCI_UART_CFCLR_ORERC_MASK | SCI_UART_CFCLR_FERC_MASK | \ + SCI_UART_CFCLE_PERC_MASK) + +#define SCI_REG_SIZE (R_SCI1_BASE - R_SCI0_BASE) + +#define SCI_UART_INVALID_8BIT_PARAM (0xFFU) +#define SCI_UART_INVALID_16BIT_PARAM (0xFFFFU) + +#define SCI_UART_TDR_9BIT_MASK (0x1FFU) + +#define SCI_UART_FCR_TRIGGER_MASK (0xF) +#define SCI_UART_FCR_RSTRG_OFFSET (24U) +#define SCI_UART_FCR_RTRG_OFFSET (16U) +#define SCI_UART_FCR_TTRG_OFFSET (8U) +#define SCI_UART_FCR_TTRG_DMAC_VALUE (0x0F) +#define SCI_UART_FCR_RESET_TX_RX (0x00808000) + +#define SCI_UART_DMAC_MAX_TRANSFER (0xFFFFFFFFU) + +/*********************************************************************************************************************** + * Private constants + **********************************************************************************************************************/ +static const int32_t SCI_UART_100_PERCENT_X_1000 = 100000; +static const int32_t SCI_UART_MDDR_DIVISOR = 256; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) +static const uint32_t SCI_UART_MAX_BAUD_RATE_ERROR_X_1000 = 15000; +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef struct st_baud_setting_const_t +{ + uint8_t bgdm : 1; /**< BGDM value to get divisor */ + uint8_t abcs : 1; /**< ABCS value to get divisor */ + uint8_t abcse : 1; /**< ABCSE value to get divisor */ + uint8_t cks : 2; /**< CKS value to get divisor (CKS = N) */ +} baud_setting_const_t; + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + +static fsp_err_t r_sci_read_write_param_check(sci_uart_instance_ctrl_t const * const p_instance_ctrl, + uint8_t const * const addr, + uint32_t const bytes); + +#endif + +static void r_sci_uart_config_set(sci_uart_instance_ctrl_t * const p_instance_ctrl, uart_cfg_t const * const p_cfg); + +#if SCI_UART_CFG_DMAC_SUPPORTED +static fsp_err_t r_sci_uart_transfer_configure(sci_uart_instance_ctrl_t * const p_instance_ctrl, + transfer_instance_t const * p_transfer, + uint32_t * p_transfer_reg, + uint32_t address); + +static fsp_err_t r_sci_uart_transfer_open(sci_uart_instance_ctrl_t * const p_instance_ctrl, + uart_cfg_t const * const p_cfg); + +static void r_sci_uart_transfer_close(sci_uart_instance_ctrl_t * p_instance_ctrl); + +#endif + +static void r_sci_uart_baud_set(R_SCI0_Type * p_sci_reg, sci_baud_setting_t const * const p_baud_setting); +static void r_sci_uart_call_callback(sci_uart_instance_ctrl_t * p_instance_ctrl, uint32_t data, uart_event_t event); + +#if SCI_UART_CFG_FIFO_SUPPORT +static void r_sci_uart_fifo_cfg(sci_uart_instance_ctrl_t * const p_instance_ctrl); + +#endif + +static void r_sci_irq_cfg(sci_uart_instance_ctrl_t * const p_instance_ctrl, uint8_t const ipl, IRQn_Type const p_irq); + +static void r_sci_irqs_cfg(sci_uart_instance_ctrl_t * const p_instance_ctrl, uart_cfg_t const * const p_cfg); + +#if (SCI_UART_CFG_TX_ENABLE) +void r_sci_uart_write_no_transfer(sci_uart_instance_ctrl_t * const p_instance_ctrl); + +#endif + +#if (SCI_UART_CFG_RX_ENABLE) +void r_sci_uart_rxi_read_no_transfer(sci_uart_instance_ctrl_t * const p_instance_ctrl); + +static void sci_uart_rxi_common(sci_uart_instance_ctrl_t * p_instance_ctrl); + +void sci_uart_rxi_isr(void); + +void sci_uart_rx_dmac_callback(sci_uart_instance_ctrl_t * p_instance_ctrl); + +void r_sci_uart_read_data(sci_uart_instance_ctrl_t * const p_instance_ctrl, uint32_t * const p_data); + +void sci_uart_eri_isr(void); + +#endif + +#if (SCI_UART_CFG_TX_ENABLE) +static void sci_uart_txi_common(sci_uart_instance_ctrl_t * p_instance_ctrl); + +void sci_uart_txi_isr(void); + +void sci_uart_tx_dmac_callback(sci_uart_instance_ctrl_t * p_instance_ctrl); + +void sci_uart_tei_isr(void); + +#endif + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/** Name of module used by error logger macro */ +#if BSP_CFG_ERROR_LOG != 0 +static const char g_module_name[] = "sci_uart"; +#endif + +/** Baud rate divisor information (UART mode) */ +static const baud_setting_const_t g_async_baud[SCI_UART_NUM_DIVISORS_ASYNC] = +{ + {0U, 0U, 1U, 0U}, /* BGDM, ABCS, ABCSE, n */ + {1U, 1U, 0U, 0U}, + {1U, 0U, 0U, 0U}, + {0U, 0U, 1U, 1U}, + {0U, 0U, 0U, 0U}, + {1U, 0U, 0U, 1U}, + {0U, 0U, 1U, 2U}, + {0U, 0U, 0U, 1U}, + {1U, 0U, 0U, 2U}, + {0U, 0U, 1U, 3U}, + {0U, 0U, 0U, 2U}, + {1U, 0U, 0U, 3U}, + {0U, 0U, 0U, 3U} +}; + +static const uint16_t g_div_coefficient[SCI_UART_NUM_DIVISORS_ASYNC] = +{ + 6U, + 8U, + 16U, + 24U, + 32U, + 64U, + 96U, + 128U, + 256U, + 384U, + 512U, + 1024U, + 2048U, +}; + +/** UART on SCI HAL API mapping for UART interface */ +const uart_api_t g_uart_on_sci = +{ + .open = R_SCI_UART_Open, + .close = R_SCI_UART_Close, + .write = R_SCI_UART_Write, + .read = R_SCI_UART_Read, + .infoGet = R_SCI_UART_InfoGet, + .baudSet = R_SCI_UART_BaudSet, + .communicationAbort = R_SCI_UART_Abort, + .callbackSet = R_SCI_UART_CallbackSet, + .readStop = R_SCI_UART_ReadStop, +}; + +/*******************************************************************************************************************//** + * @addtogroup SCI_UART + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Configures the UART driver based on the input configurations. If reception is enabled at compile time, reception is + * enabled at the end of this function. Implements @ref uart_api_t::open + * + * @retval FSP_SUCCESS Channel opened successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block or configuration structure is NULL. + * @retval FSP_ERR_IP_CHANNEL_NOT_PRESENT The requested channel does not exist on this MCU. + * @retval FSP_ERR_ALREADY_OPEN Control block has already been opened or channel is being used by another + * instance. Call close() then open() to reconfigure. + * @retval FSP_ERR_INVALID_ARGUMENT Invalid input parameter. + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::open + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Open (uart_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg) +{ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + + /* Check parameters. */ + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_cfg); + FSP_ASSERT(p_cfg->p_callback); + FSP_ASSERT(p_cfg->p_extend); + FSP_ASSERT(((sci_uart_extended_cfg_t *) p_cfg->p_extend)->p_baud_setting); + FSP_ERROR_RETURN(SCI_UART_OPEN != p_instance_ctrl->open, FSP_ERR_ALREADY_OPEN); + + /* Make sure this channel exists. */ + FSP_ERROR_RETURN(BSP_FEATURE_SCI_CHANNELS & (1U << p_cfg->channel), FSP_ERR_IP_CHANNEL_NOT_PRESENT); + + #if SCI_UART_CFG_DMAC_SUPPORTED + #if (SCI_UART_CFG_RX_ENABLE) + if (NULL != p_cfg->p_transfer_rx) + { + /* DMAC activation is not available for safety channel. */ + FSP_ERROR_RETURN(BSP_FEATURE_SCI_SAFETY_CHANNEL != p_cfg->channel, FSP_ERR_INVALID_ARGUMENT); + } + #endif + #if (SCI_UART_CFG_TX_ENABLE) + if (NULL != p_cfg->p_transfer_tx) + { + /* DMAC activation is not available for safety channel. */ + FSP_ERROR_RETURN(BSP_FEATURE_SCI_SAFETY_CHANNEL != p_cfg->channel, FSP_ERR_INVALID_ARGUMENT); + } + #endif + #endif + + if (SCI_UART_FLOW_CONTROL_CTSRTS == ((sci_uart_extended_cfg_t *) p_cfg->p_extend)->flow_control) + { + FSP_ERROR_RETURN( + ((sci_uart_extended_cfg_t *) p_cfg->p_extend)->flow_control_pin != (bsp_io_port_pin_t) SCI_UART_INVALID_16BIT_PARAM, + FSP_ERR_INVALID_ARGUMENT); + } + + if (SCI_UART_FLOW_CONTROL_HARDWARE_CTSRTS == ((sci_uart_extended_cfg_t *) p_cfg->p_extend)->flow_control) + { + FSP_ERROR_RETURN((0U != (((1U << (p_cfg->channel)) & BSP_FEATURE_SCI_UART_CSTPEN_CHANNELS))), + FSP_ERR_INVALID_ARGUMENT); + } + + FSP_ASSERT(UART_PARITY_ZERO != p_cfg->parity); + FSP_ASSERT(p_cfg->rxi_irq >= 0); + FSP_ASSERT(p_cfg->txi_irq >= 0); + FSP_ASSERT(p_cfg->tei_irq >= 0); + FSP_ASSERT(p_cfg->eri_irq >= 0); +#endif + + p_instance_ctrl->fifo_depth = 0U; +#if SCI_UART_CFG_FIFO_SUPPORT + + /* Check if the channel supports fifo */ + if (BSP_FEATURE_SCI_UART_FIFO_CHANNELS & (1U << p_cfg->channel)) + { + p_instance_ctrl->fifo_depth = BSP_FEATURE_SCI_UART_FIFO_DEPTH; + } +#endif + + p_instance_ctrl->p_cfg = p_cfg; + + p_instance_ctrl->p_callback = p_cfg->p_callback; + p_instance_ctrl->p_context = p_cfg->p_context; + p_instance_ctrl->p_callback_memory = NULL; + sci_uart_extended_cfg_t * p_extend = (sci_uart_extended_cfg_t *) p_cfg->p_extend; + + p_instance_ctrl->data_bytes = 1U; + if (UART_DATA_BITS_9 == p_cfg->data_bits) + { + p_instance_ctrl->data_bytes = 2U; + } + + /* Configure the interrupts. */ + r_sci_irqs_cfg(p_instance_ctrl, p_cfg); + + /* Enable the SCI channel and reset the registers to their initial state. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET); + R_BSP_MODULE_START(FSP_IP_SCI, p_cfg->channel); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET); + + if (p_cfg->channel != BSP_FEATURE_SCI_SAFETY_CHANNEL) + { + /* Non-Safety Peripheral */ + p_instance_ctrl->p_reg = + (R_SCI0_Type *) ((uint32_t) R_SCI0 + (p_cfg->channel * ((uint32_t) R_SCI1 - (uint32_t) R_SCI0))); + } + else + { + /* Safety Peripheral */ + p_instance_ctrl->p_reg = (R_SCI0_Type *) BSP_FEATURE_SCI_SAFETY_CHANNEL_BASE_ADDRESS; + } + +#if SCI_UART_CFG_DMAC_SUPPORTED + + /* Configure the transfer interface for transmission and reception if provided. */ + fsp_err_t err = r_sci_uart_transfer_open(p_instance_ctrl, p_cfg); + + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); +#endif + + p_instance_ctrl->p_reg->CCR0 = SCI_UART_CCR0_DEFAULT_VALUE; + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.RE, 0); + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.TE, 0); + p_instance_ctrl->p_reg->CCR1 = SCI_UART_CCR1_DEFAULT_VALUE; + p_instance_ctrl->p_reg->CCR2 = SCI_UART_CCR2_DEFAULT_VALUE; + p_instance_ctrl->p_reg->CCR3 = SCI_UART_CCR3_DEFAULT_VALUE; + p_instance_ctrl->p_reg->CCR4 = SCI_UART_CCR4_DEFAULT_VALUE; + + /* Set the UART configuration settings provided in ::uart_cfg_t and ::sci_uart_extended_cfg_t. */ + r_sci_uart_config_set(p_instance_ctrl, p_cfg); + + p_instance_ctrl->p_reg->CFCLR = SCI_UART_CFCLR_ALL_FLAG_CLEAR; + +#if SCI_UART_CFG_FIFO_SUPPORT + p_instance_ctrl->p_reg->FFCLR = SCI_UART_FFCLR_ALL_FLAG_CLEAR; +#endif + + p_instance_ctrl->p_tx_src = NULL; + p_instance_ctrl->tx_src_bytes = 0U; + p_instance_ctrl->p_rx_dest = NULL; + p_instance_ctrl->rx_dest_bytes = 0; + + uint32_t ccr0 = SCI_UART_CCR0_IDSEL_MASK; +#if (SCI_UART_CFG_RX_ENABLE) + + /* If reception is enabled at build time, enable reception. */ + /* NOTE: Transmitter and its interrupt are enabled in R_SCI_UART_Write(). */ + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->rxi_irq); + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->eri_irq); + + ccr0 |= (SCI_UART_CCR0_RIE_MASK | SCI_UART_CCR0_RE_MASK); +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->txi_irq); + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->tei_irq); + + ccr0 |= SCI_UART_CCR0_TE_MASK; +#endif + p_instance_ctrl->p_reg->CCR0 = ccr0; + + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.RE, 1); + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.TE, 1); + + /* Set flow control pins. */ + p_instance_ctrl->flow_pin = p_extend->flow_control_pin; + +#if SCI_UART_CFG_FLOW_CONTROL_SUPPORT + if (p_instance_ctrl->flow_pin != (bsp_io_port_pin_t) SCI_UART_INVALID_16BIT_PARAM) + { + R_BSP_PinAccessEnable(); + R_BSP_PinClear(R_BSP_IoRegionGet(p_instance_ctrl->flow_pin), p_instance_ctrl->flow_pin); + R_BSP_PinAccessDisable(); + } +#endif + + p_instance_ctrl->open = SCI_UART_OPEN; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Aborts any in progress transfers. Disables interrupts, receiver, and transmitter. Closes lower level transfer + * drivers if used. Removes power. Implements @ref uart_api_t::close + * + * @retval FSP_SUCCESS Channel successfully closed. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Close (uart_ctrl_t * const p_ctrl) +{ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_instance_ctrl); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Mark the channel not open so other APIs cannot use it. */ + p_instance_ctrl->open = 0U; + + /* Disable interrupts, receiver, and transmitter. Disable baud clock output.*/ + p_instance_ctrl->p_reg->CCR0 = SCI_UART_CCR0_DEFAULT_VALUE; + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.RE, 0); + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.TE, 0); + p_instance_ctrl->p_reg->CCR3 &= ~(SCI_UART_CCR3_CKE_MASK); + +#if (SCI_UART_CFG_RX_ENABLE) + + /* If reception is enabled at build time, disable reception irqs. */ + R_BSP_IrqDisable(p_instance_ctrl->p_cfg->rxi_irq); + R_BSP_IrqDisable(p_instance_ctrl->p_cfg->eri_irq); +#endif +#if (SCI_UART_CFG_TX_ENABLE) + + /* If transmission is enabled at build time, disable transmission irqs. */ + R_BSP_IrqDisable(p_instance_ctrl->p_cfg->txi_irq); + R_BSP_IrqDisable(p_instance_ctrl->p_cfg->tei_irq); +#endif +#if SCI_UART_CFG_DMAC_SUPPORTED + + /* Close the lower level transfer instances. */ + r_sci_uart_transfer_close(p_instance_ctrl); +#endif + + /* Remove power to the channel. */ + /* Disable the clock to the SCI channel. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_LPC_RESET); + R_BSP_MODULE_STOP(FSP_IP_SCI, p_instance_ctrl->p_cfg->channel); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_LPC_RESET); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Receives user specified number of bytes into destination buffer pointer. Implements @ref uart_api_t::read + * + * @retval FSP_SUCCESS Data reception successfully ends. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_INVALID_ARGUMENT Destination address or data size is not valid for 9-bit mode. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_IN_USE A previous read operation is still in progress. + * @retval FSP_ERR_UNSUPPORTED SCI_UART_CFG_RX_ENABLE is set to 0 + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::reconfigure + * + * @note If 9-bit data length is specified at R_SCI_UART_Open call, p_dest must be aligned 16-bit boundary. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Read (uart_ctrl_t * const p_ctrl, uint8_t * const p_dest, uint32_t const bytes) +{ +#if (SCI_UART_CFG_RX_ENABLE) + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; + fsp_err_t err = FSP_SUCCESS; + + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + err = r_sci_read_write_param_check(p_instance_ctrl, p_dest, bytes); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + FSP_ERROR_RETURN(0U == p_instance_ctrl->rx_dest_bytes, FSP_ERR_IN_USE); + #endif + + #if SCI_UART_CFG_DMAC_SUPPORTED + + /* Configure transfer instance to receive the requested number of bytes if transfer is used for reception. */ + if (NULL != p_instance_ctrl->p_cfg->p_transfer_rx) + { + p_instance_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info->p_dest = (void *) p_dest; + p_instance_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info->length = bytes; + + /* Disable the corresponding IRQ when transferring using DMAC. */ + R_BSP_IrqDisable(p_instance_ctrl->p_cfg->rxi_irq); + + err = p_instance_ctrl->p_cfg->p_transfer_rx->p_api->reconfigure(p_instance_ctrl->p_cfg->p_transfer_rx->p_ctrl, + p_instance_ctrl->p_cfg->p_transfer_rx->p_cfg->p_info); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + + /* Save the destination address and size for use in rxi_isr. */ + p_instance_ctrl->p_rx_dest = p_dest; + p_instance_ctrl->rx_dest_bytes = bytes; + + return err; +#else + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(p_dest); + FSP_PARAMETER_NOT_USED(bytes); + + return FSP_ERR_UNSUPPORTED; +#endif +} + +/*******************************************************************************************************************//** + * Transmits user specified number of bytes from the source buffer pointer. Implements @ref uart_api_t::write + * + * @retval FSP_SUCCESS Data transmission finished successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_INVALID_ARGUMENT Source address or data size is not valid for 9-bit mode. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_IN_USE A UART transmission is in progress + * @retval FSP_ERR_UNSUPPORTED SCI_UART_CFG_TX_ENABLE is set to 0 + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::reconfigure + * + * @note If 9-bit data length is specified at R_SCI_UART_Open call, p_src must be aligned on a 16-bit boundary. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Write (uart_ctrl_t * const p_ctrl, uint8_t const * const p_src, uint32_t const bytes) +{ +#if (SCI_UART_CFG_TX_ENABLE) + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; + #if SCI_UART_CFG_PARAM_CHECKING_ENABLE || SCI_UART_CFG_DMAC_SUPPORTED + fsp_err_t err = FSP_SUCCESS; + #endif + + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + err = r_sci_read_write_param_check(p_instance_ctrl, p_src, bytes); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + FSP_ERROR_RETURN(0U == p_instance_ctrl->tx_src_bytes, FSP_ERR_IN_USE); + #endif + + /* Transmit interrupts must be disabled to start with. */ + p_instance_ctrl->p_reg->CCR0 &= (uint32_t) ~(SCI_UART_CCR0_TIE_MASK | SCI_UART_CCR0_TEIE_MASK); + + p_instance_ctrl->tx_src_bytes = bytes - p_instance_ctrl->data_bytes; + p_instance_ctrl->p_tx_src = p_src + p_instance_ctrl->data_bytes; + + #if SCI_UART_CFG_DMAC_SUPPORTED + + /* If a transfer instance is used for transmission, reset the transfer instance to transmit the requested + * data. */ + if ((NULL != p_instance_ctrl->p_cfg->p_transfer_tx) && p_instance_ctrl->tx_src_bytes) + { + uint32_t num_transfers = p_instance_ctrl->tx_src_bytes; + p_instance_ctrl->tx_src_bytes = 0U; + + p_instance_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info->p_src = (void const *) p_instance_ctrl->p_tx_src; + p_instance_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info->length = num_transfers; + + /* Disable the corresponding IRQ when transferring using DMAC. */ + R_BSP_IrqDisable(p_instance_ctrl->p_cfg->txi_irq); + + err = p_instance_ctrl->p_cfg->p_transfer_tx->p_api->reconfigure(p_instance_ctrl->p_cfg->p_transfer_tx->p_ctrl, + p_instance_ctrl->p_cfg->p_transfer_tx->p_cfg->p_info); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + + /* Trigger a TXI interrupt. This triggers the transfer instance or a TXI interrupt if the transfer instance is + * not used. */ + p_instance_ctrl->p_reg->CCR0 |= SCI_UART_CCR0_TIE_MASK; + + /* The first byte is sent from this function to trigger the first TXI event. This + * method is used instead of setting TE and TIE at the same time as recommended in the hardware manual to avoid + * the one frame delay that occurs when the TE bit is set. */ + if (2U == p_instance_ctrl->data_bytes) + { + p_instance_ctrl->p_reg->TDR_b.TDAT = (*(uint16_t *) (p_src)) & SCI_UART_TDR_9BIT_MASK; + } + else + { + p_instance_ctrl->p_reg->TDR_b.TDAT = *(p_src); + } + + #if SCI_UART_CFG_FIFO_SUPPORT + + /* The behavior of the TDRE flag differs between when FIFO is used and not used. + * When using FIFO, clear the flag manually to detect the interrupt at the edge. */ + p_instance_ctrl->p_reg->CFCLR_b.TDREC = 1; + #endif + + return FSP_SUCCESS; +#else + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(p_src); + FSP_PARAMETER_NOT_USED(bytes); + + return FSP_ERR_UNSUPPORTED; +#endif +} + +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements uart_api_t::callbackSet + * + * @retval FSP_SUCCESS Callback updated successfully. + * @retval FSP_ERR_ASSERTION A required pointer is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_CallbackSet (uart_ctrl_t * const p_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void const * const p_context, + uart_callback_args_t * const p_callback_memory) +{ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Store callback and context */ + p_instance_ctrl->p_callback = p_callback; + p_instance_ctrl->p_context = p_context; + p_instance_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Updates the baud rate using the clock selected in Open. p_baud_setting is a pointer to a sci_baud_setting_t structure. + * Implements @ref uart_api_t::baudSet + * + * @warning This terminates any in-progress transmission. + * + * @retval FSP_SUCCESS Baud rate was successfully changed. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL or the UART is not configured to use the + * internal clock. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_BaudSet (uart_ctrl_t * const p_ctrl, void const * const p_baud_setting) +{ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_instance_ctrl); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + + /* Verify that the On-Chip baud rate generator is currently selected. */ + FSP_ASSERT((p_instance_ctrl->p_reg->CCR3_b.CKE & 0x2) == 0U); +#endif + + /* Save CCR0 configurations except transmit interrupts. Resuming transmission after reconfiguring baud settings is + * not supported. */ + uint32_t preserved_ccr0 = p_instance_ctrl->p_reg->CCR0 & (uint32_t) ~(R_SCI0_CCR0_TIE_Msk | R_SCI0_CCR0_TEIE_Msk); + + /* Disables transmitter and receiver. This terminates any in-progress transmission. */ + p_instance_ctrl->p_reg->CCR0 = preserved_ccr0 & + (uint32_t) ~(R_SCI0_CCR0_TE_Msk | R_SCI0_CCR0_RE_Msk | R_SCI0_CCR0_RIE_Msk); + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.RE, 0); + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CCR0_b.TE, 0); + p_instance_ctrl->p_tx_src = NULL; + + /* Apply new baud rate register settings. */ + r_sci_uart_baud_set(p_instance_ctrl->p_reg, p_baud_setting); + + /* Restore all settings except transmit interrupts. */ + p_instance_ctrl->p_reg->CCR0 = preserved_ccr0; + FSP_HARDWARE_REGISTER_WAIT((p_instance_ctrl->p_reg->CCR0 & R_SCI0_CCR0_RE_Msk), + (preserved_ccr0 & R_SCI0_CCR0_RE_Msk)); + FSP_HARDWARE_REGISTER_WAIT((p_instance_ctrl->p_reg->CCR0 & R_SCI0_CCR0_TE_Msk), + (preserved_ccr0 & R_SCI0_CCR0_TE_Msk)); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Provides the driver information, including the maximum number of bytes that can be received or transmitted at a time. + * Implements @ref uart_api_t::infoGet + * + * @retval FSP_SUCCESS Information stored in provided p_info. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_InfoGet (uart_ctrl_t * const p_ctrl, uart_info_t * const p_info) +{ +#if SCI_UART_CFG_PARAM_CHECKING_ENABLE || SCI_UART_CFG_DMAC_SUPPORTED + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(p_info); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + p_info->read_bytes_max = SCI_UART_MAX_READ_WRITE_NO_DMAC; + p_info->write_bytes_max = SCI_UART_MAX_READ_WRITE_NO_DMAC; + +#if (SCI_UART_CFG_RX_ENABLE) + + /* Store number of bytes that can be read at a time. */ + #if SCI_UART_CFG_DMAC_SUPPORTED + if (NULL != p_instance_ctrl->p_cfg->p_transfer_rx) + { + p_info->read_bytes_max = SCI_UART_DMAC_MAX_TRANSFER; + } + #endif +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + + /* Store number of bytes that can be written at a time. */ + #if SCI_UART_CFG_DMAC_SUPPORTED + if (NULL != p_instance_ctrl->p_cfg->p_transfer_tx) + { + p_info->write_bytes_max = SCI_UART_DMAC_MAX_TRANSFER; + } + #endif +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Provides API to abort ongoing transfer. Transmission is aborted after the current character is transmitted. + * Reception is still enabled after abort(). Any characters received after abort() and before the transfer + * is reset in the next call to read(), will arrive via the callback function with event UART_EVENT_RX_CHAR. + * Implements @ref uart_api_t::communicationAbort + * + * @retval FSP_SUCCESS UART transaction aborted successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @retval FSP_ERR_UNSUPPORTED The requested Abort direction is unsupported. + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::disable + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Abort (uart_ctrl_t * const p_ctrl, uart_dir_t communication_to_abort) +{ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; + fsp_err_t err = FSP_ERR_UNSUPPORTED; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_instance_ctrl); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + if (UART_DIR_TX & communication_to_abort) + { + err = FSP_SUCCESS; + p_instance_ctrl->p_reg->CCR0 &= (uint32_t) ~(SCI_UART_CCR0_TIE_MASK | SCI_UART_CCR0_TEIE_MASK); + + /* Make sure no transmission is in progress. */ + FSP_HARDWARE_REGISTER_WAIT(p_instance_ctrl->p_reg->CSR_b.TEND, 1U); + + #if SCI_UART_CFG_DMAC_SUPPORTED + if (NULL != p_instance_ctrl->p_cfg->p_transfer_tx) + { + err = p_instance_ctrl->p_cfg->p_transfer_tx->p_api->disable(p_instance_ctrl->p_cfg->p_transfer_tx->p_ctrl); + + /* Now that the transfer using DMAC is finished, enable the corresponding IRQ. */ + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->txi_irq); + } + #endif + + #if SCI_UART_CFG_FIFO_SUPPORT + if (0U != p_instance_ctrl->fifo_depth) + { + /* Reset the transmit fifo */ + p_instance_ctrl->p_reg->FCR_b.TFRST = 1U; + } + #endif + p_instance_ctrl->tx_src_bytes = 0U; + + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } +#endif +#if (SCI_UART_CFG_RX_ENABLE) + if (UART_DIR_RX & communication_to_abort) + { + err = FSP_SUCCESS; + + p_instance_ctrl->rx_dest_bytes = 0U; + + #if SCI_UART_CFG_DMAC_SUPPORTED + if (NULL != p_instance_ctrl->p_cfg->p_transfer_rx) + { + err = p_instance_ctrl->p_cfg->p_transfer_rx->p_api->disable(p_instance_ctrl->p_cfg->p_transfer_rx->p_ctrl); + + /* Now that the transfer using DMAC is finished, enable the corresponding IRQ. */ + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->rxi_irq); + } + #endif + + #if SCI_UART_CFG_FIFO_SUPPORT + if (0U != p_instance_ctrl->fifo_depth) + { + /* Reset the receive fifo */ + p_instance_ctrl->p_reg->FCR_b.RFRST = 1U; + } + #endif + } +#endif + + return err; +} + +/*******************************************************************************************************************//** + * Provides API to abort ongoing read. Reception is still enabled after abort(). Any characters received after abort() + * and before the transfer is reset in the next call to read(), will arrive via the callback function with event + * UART_EVENT_RX_CHAR. + * Implements @ref uart_api_t::readStop + * + * @retval FSP_SUCCESS UART transaction aborted successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block or remaining_bytes is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @retval FSP_ERR_UNSUPPORTED The requested Abort direction is unsupported. + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::disable + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_ReadStop (uart_ctrl_t * const p_ctrl, uint32_t * remaining_bytes) +{ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) p_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(remaining_bytes); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if (SCI_UART_CFG_RX_ENABLE) + *remaining_bytes = p_instance_ctrl->rx_dest_bytes; + p_instance_ctrl->rx_dest_bytes = 0U; + #if SCI_UART_CFG_DMAC_SUPPORTED + if (NULL != p_instance_ctrl->p_cfg->p_transfer_rx) + { + fsp_err_t err = p_instance_ctrl->p_cfg->p_transfer_rx->p_api->disable( + p_instance_ctrl->p_cfg->p_transfer_rx->p_ctrl); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + /* Now that the transfer using DMAC is finished, enable the corresponding IRQ. */ + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->rxi_irq); + + transfer_properties_t transfer_info; + err = p_instance_ctrl->p_cfg->p_transfer_rx->p_api->infoGet(p_instance_ctrl->p_cfg->p_transfer_rx->p_ctrl, + &transfer_info); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + *remaining_bytes = transfer_info.transfer_length_remaining; + } + #endif + #if SCI_UART_CFG_FIFO_SUPPORT + if (0U != p_instance_ctrl->fifo_depth) + { + /* Reset the receive fifo */ + p_instance_ctrl->p_reg->FCR_b.RFRST = 1U; + } + #endif +#else + + return FSP_ERR_UNSUPPORTED; +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Calculates baud rate register settings. Evaluates and determines the best possible settings set to the baud rate + * related registers. + * + * @param[in] p_baud_target Baudrate calculation configuration. + * @param[in] clock_source Clock source (PCLKM or SCInASYNCCLK) used for baudrate calculation. + * @param[out] p_baud_setting Baud setting information stored here if successful + * + * @retval FSP_SUCCESS Baud rate is set successfully + * @retval FSP_ERR_ASSERTION Null pointer + * @retval FSP_ERR_INVALID_ARGUMENT Baud rate is '0', error in calculated baud rate is larger than requested + * max error, or requested max error in baud rate is larger than 15%. + * Clock source frequency could not be get. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_BaudCalculate (sci_uart_baud_calculation_t const * const p_baud_target, + sci_uart_clock_source_t clock_source, + sci_baud_setting_t * const p_baud_setting) +{ +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_baud_target); + FSP_ASSERT(p_baud_setting); + FSP_ERROR_RETURN(SCI_UART_MAX_BAUD_RATE_ERROR_X_1000 >= p_baud_target->baud_rate_error_x_1000, + FSP_ERR_INVALID_ARGUMENT); + FSP_ERROR_RETURN((0U != p_baud_target->baudrate), FSP_ERR_INVALID_ARGUMENT); +#endif + + p_baud_setting->baudrate_bits_b.brr = SCI_UART_BRR_MAX; + p_baud_setting->baudrate_bits_b.brme = 0U; + p_baud_setting->baudrate_bits_b.mddr = SCI_UART_MDDR_MIN; + + /* Find the best BRR (bit rate register) value. + * In table g_async_baud, divisor values are stored for BGDM, ABCS, ABCSE and N values. Each set of divisors + * is tried, and the settings with the lowest bit rate error are stored. The formula to calculate BRR is as + * follows and it must be 255 or less: + * BRR = (PCLK / (div_coefficient * baud)) - 1 + */ + int32_t hit_bit_err = SCI_UART_100_PERCENT_X_1000; + uint32_t hit_mddr = 0U; + uint32_t divisor = 0U; + + uint32_t freq_hz = 0U; + if (SCI_UART_CLOCK_SOURCE_PCLKM == clock_source) + { + freq_hz = R_FSP_SystemClockHzGet(FSP_PRIV_CLOCK_PCLKM); + } + else + { + freq_hz = + R_FSP_SystemClockHzGet((fsp_priv_clock_t) ((uint8_t) FSP_PRIV_CLOCK_PCLKSCI0 + (uint8_t) clock_source)); + } + + FSP_ERROR_RETURN(0U != freq_hz, FSP_ERR_INVALID_ARGUMENT); + + for (uint32_t select_16_base_clk_cycles = 0U; + select_16_base_clk_cycles <= 1U && (hit_bit_err > ((int32_t) p_baud_target->baud_rate_error_x_1000)); + select_16_base_clk_cycles++) + { + for (uint32_t i = 0U; i < SCI_UART_NUM_DIVISORS_ASYNC; i++) + { + /* if select_16_base_clk_cycles == true: Skip this calculation for divisors that are not acheivable with 16 base clk cycles per bit. + * if select_16_base_clk_cycles == false: Skip this calculation for divisors that are only acheivable without 16 base clk cycles per bit. + */ + if (((uint8_t) select_16_base_clk_cycles) ^ (g_async_baud[i].abcs | g_async_baud[i].abcse)) + { + continue; + } + + divisor = (uint32_t) g_div_coefficient[i] * p_baud_target->baudrate; + uint32_t temp_brr = freq_hz / divisor; + + if (temp_brr <= (SCI_UART_BRR_MAX + 1U)) + { + while (temp_brr > 0U) + { + temp_brr -= 1U; + + /* Calculate the bit rate error. The formula is as follows: + * bit rate error[%] = {(PCLK / (baud * div_coefficient * (BRR + 1)) - 1} x 100 + * calculates bit rate error[%] to three decimal places + */ + int32_t err_divisor = (int32_t) (divisor * (temp_brr + 1U)); + + /* Promoting to 64 bits for calculation, but the final value can never be more than 32 bits, as + * described below, so this cast is safe. + * 1. (temp_brr + 1) can be off by an upper limit of 1 due to rounding from the calculation: + * freq_hz / divisor, or: + * freq_hz / divisor <= (temp_brr + 1) < (freq_hz / divisor) + 1 + * 2. Solving for err_divisor: + * freq_hz <= err_divisor < freq_hz + divisor + * 3. Solving for bit_err: + * 0 >= bit_err >= (freq_hz * 100000 / (freq_hz + divisor)) - 100000 + * 4. freq_hz >= divisor (or temp_brr would be -1 and we would never enter this while loop), so: + * 0 >= bit_err >= 100000 / freq_hz - 100000 + * 5. Larger frequencies yield larger bit errors (absolute value). As the frequency grows, + * the bit_err approaches -100000, so: + * 0 >= bit_err >= -100000 + * 6. bit_err is between -100000 and 0. This entire range fits in an int32_t type, so the cast + * to (int32_t) is safe. + */ + int32_t bit_err = (int32_t) (((((int64_t) freq_hz) * SCI_UART_100_PERCENT_X_1000) / + err_divisor) - SCI_UART_100_PERCENT_X_1000); + + uint32_t mddr = 0U; + if (p_baud_target->bitrate_modulation) + { + /* Calculate the MDDR (M) value if bit rate modulation is enabled, + * The formula to calculate MBBR (from the M and N relationship given in the hardware manual) is as follows + * and it must be between 128 and 256. + * MDDR = ((div_coefficient * baud * 256) * (BRR + 1)) / PCLK */ + mddr = (uint32_t) err_divisor / (freq_hz / SCI_UART_MDDR_MAX); + + /* The maximum value that could result from the calculation above is 256, which is a valid MDDR + * value, so only the lower bound is checked. */ + if (mddr < SCI_UART_MDDR_MIN) + { + break; + } + + /* Adjust bit rate error for bit rate modulation. The following formula is used: + * bit rate error [%] = ((bit rate error [%, no modulation] + 100) * MDDR / 256) - 100 + */ + bit_err = (((bit_err + SCI_UART_100_PERCENT_X_1000) * (int32_t) mddr) / + SCI_UART_MDDR_DIVISOR) - SCI_UART_100_PERCENT_X_1000; + } + + /* Take the absolute value of the bit rate error. */ + if (bit_err < 0) + { + bit_err = -bit_err; + } + + /* If the absolute value of the bit rate error is less than the previous lowest absolute value of + * bit rate error, then store these settings as the best value. + */ + if (bit_err < hit_bit_err) + { + p_baud_setting->baudrate_bits_b.bgdm = g_async_baud[i].bgdm; + p_baud_setting->baudrate_bits_b.abcs = g_async_baud[i].abcs; + p_baud_setting->baudrate_bits_b.abcse = g_async_baud[i].abcse; + p_baud_setting->baudrate_bits_b.cks = g_async_baud[i].cks; + p_baud_setting->baudrate_bits_b.brr = (uint8_t) temp_brr; + hit_bit_err = bit_err; + hit_mddr = mddr; + } + + if (p_baud_target->bitrate_modulation) + { + p_baud_setting->baudrate_bits_b.brme = 1U; + p_baud_setting->baudrate_bits_b.mddr = (uint8_t) hit_mddr; + } + else + { + break; + } + } + } + } + } + + /* Return an error if the percent error is larger than the maximum percent error allowed for this instance */ + FSP_ERROR_RETURN((hit_bit_err <= (int32_t) p_baud_target->baud_rate_error_x_1000), FSP_ERR_INVALID_ARGUMENT); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @} (end addtogroup SCI_UART) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private Functions + **********************************************************************************************************************/ + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + +/*******************************************************************************************************************//** + * Parameter error check function for read/write. + * + * @param[in] p_instance_ctrl Pointer to the control block for the channel + * @param[in] addr Pointer to the buffer + * @param[in] bytes Number of bytes to read or write + * + * @retval FSP_SUCCESS No parameter error found + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_ASSERTION Pointer to UART control block or configuration structure is NULL + * @retval FSP_ERR_INVALID_ARGUMENT Address is not aligned to 2-byte boundary or size is the odd number when the data + * length is 9-bit + **********************************************************************************************************************/ +static fsp_err_t r_sci_read_write_param_check (sci_uart_instance_ctrl_t const * const p_instance_ctrl, + uint8_t const * const addr, + uint32_t const bytes) +{ + FSP_ASSERT(p_instance_ctrl); + FSP_ASSERT(addr); + FSP_ASSERT(0U != bytes); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + + if (2U == p_instance_ctrl->data_bytes) + { + /* Do not allow odd buffer address if data length is 9 bits. */ + FSP_ERROR_RETURN((0U == ((uint32_t) addr & SCI_UART_ALIGN_2_BYTES)), FSP_ERR_INVALID_ARGUMENT); + + /* Do not allow odd number of data bytes if data length is 9 bits. */ + FSP_ERROR_RETURN(0U == (bytes % 2U), FSP_ERR_INVALID_ARGUMENT); + } + + return FSP_SUCCESS; +} + +#endif + +#if SCI_UART_CFG_DMAC_SUPPORTED + +/*******************************************************************************************************************//** + * Subroutine to apply common UART transfer settings. + * + * @param[in] p_cfg Pointer to UART specific configuration structure + * @param[in] p_transfer Pointer to transfer instance to configure + * + * @retval FSP_SUCCESS UART transfer drivers successfully configured + * @retval FSP_ERR_ASSERTION Invalid pointer + **********************************************************************************************************************/ +static fsp_err_t r_sci_uart_transfer_configure (sci_uart_instance_ctrl_t * const p_instance_ctrl, + transfer_instance_t const * p_transfer, + uint32_t * p_transfer_reg, + uint32_t sci_buffer_address) +{ + /* Configure the transfer instance, if enabled. */ + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_transfer->p_api); + FSP_ASSERT(NULL != p_transfer->p_ctrl); + FSP_ASSERT(NULL != p_transfer->p_cfg); + FSP_ASSERT(NULL != p_transfer->p_cfg->p_info); + FSP_ASSERT(NULL != p_transfer->p_cfg->p_extend); + #endif + + /* Casting for compatibility with 7 or 8 bit mode. */ + *p_transfer_reg = sci_buffer_address; + + transfer_info_t * p_info = p_transfer->p_cfg->p_info; + if (UART_DATA_BITS_9 == p_instance_ctrl->p_cfg->data_bits) + { + p_info->src_size = TRANSFER_SIZE_2_BYTE; + p_info->dest_size = TRANSFER_SIZE_2_BYTE; + } + else + { + p_info->src_size = TRANSFER_SIZE_1_BYTE; + p_info->dest_size = TRANSFER_SIZE_1_BYTE; + } + + fsp_err_t err = p_transfer->p_api->open(p_transfer->p_ctrl, p_transfer->p_cfg); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + return FSP_SUCCESS; +} + +#endif + +#if SCI_UART_CFG_DMAC_SUPPORTED + +/*******************************************************************************************************************//** + * Configures UART related transfer drivers (if enabled). + * + * @param[in] p_instance_ctrl Pointer to UART control structure + * @param[in] p_cfg Pointer to UART specific configuration structure + * + * @retval FSP_SUCCESS UART transfer drivers successfully configured + * @retval FSP_ERR_ASSERTION Invalid pointer or required interrupt not enabled in vector table + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::open + **********************************************************************************************************************/ +static fsp_err_t r_sci_uart_transfer_open (sci_uart_instance_ctrl_t * const p_instance_ctrl, + uart_cfg_t const * const p_cfg) +{ + fsp_err_t err = FSP_SUCCESS; + + #if (SCI_UART_CFG_RX_ENABLE) + + /* If a transfer instance is used for reception, apply UART specific settings and open the transfer instance. */ + if (NULL != p_cfg->p_transfer_rx) + { + transfer_info_t * p_info = p_cfg->p_transfer_rx->p_cfg->p_info; + + p_info->mode = TRANSFER_MODE_NORMAL; + p_info->src_addr_mode = TRANSFER_ADDR_MODE_FIXED; + p_info->dest_addr_mode = TRANSFER_ADDR_MODE_INCREMENTED; + + err = + r_sci_uart_transfer_configure(p_instance_ctrl, + p_cfg->p_transfer_rx, + (uint32_t *) &p_info->p_src, + (uint32_t) &(p_instance_ctrl->p_reg->RDR)); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + #if (SCI_UART_CFG_TX_ENABLE) + + /* If a transfer instance is used for transmission, apply UART specific settings and open the transfer instance. */ + if (NULL != p_cfg->p_transfer_tx) + { + transfer_info_t * p_info = p_cfg->p_transfer_tx->p_cfg->p_info; + + p_info->mode = TRANSFER_MODE_NORMAL; + p_info->src_addr_mode = TRANSFER_ADDR_MODE_INCREMENTED; + p_info->dest_addr_mode = TRANSFER_ADDR_MODE_FIXED; + + err = + r_sci_uart_transfer_configure(p_instance_ctrl, + p_cfg->p_transfer_tx, + (uint32_t *) &p_info->p_dest, + (uint32_t) &p_instance_ctrl->p_reg->TDR); + + #if (SCI_UART_CFG_RX_ENABLE) + if ((err != FSP_SUCCESS) && (NULL != p_cfg->p_transfer_rx)) + { + p_cfg->p_transfer_rx->p_api->close(p_cfg->p_transfer_rx->p_ctrl); + } + #endif + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + + return err; +} + +#endif + +/*******************************************************************************************************************//** + * Configures UART related registers based on user configurations. + * + * @param[in] p_instance_ctrl Pointer to UART control structure + * @param[in] p_cfg Pointer to UART specific configuration structure + **********************************************************************************************************************/ +static void r_sci_uart_config_set (sci_uart_instance_ctrl_t * const p_instance_ctrl, uart_cfg_t const * const p_cfg) +{ + /* CCR3 register setting. */ + uint32_t ccr3 = SCI_UART_CCR3_DEFAULT_VALUE; + +#if SCI_UART_CFG_FIFO_SUPPORT + ccr3 |= (1U << SCI_UART_CCR3_FM_OFFSET); + + /* Configure FIFO related registers. */ + r_sci_uart_fifo_cfg(p_instance_ctrl); +#else + + /* If fifo support is disabled and the current channel supports fifo make sure it's disabled. */ + if (BSP_FEATURE_SCI_UART_FIFO_CHANNELS & (1U << p_cfg->channel)) + { + p_instance_ctrl->p_reg->FCR = SCI_UART_FCR_DEFAULT_VALUE; + } +#endif + + /* Configure data size. */ + if (UART_DATA_BITS_7 == p_cfg->data_bits) + { + ccr3 |= (1U << SCI_UART_CCR3_CHR_OFFSET); + } + else if (UART_DATA_BITS_9 == p_cfg->data_bits) + { + ccr3 &= ~(1U << (SCI_UART_CCR3_CHR_OFFSET + 1)); + } + else + { + /* Do nothing. Default is 8-bit mode. */ + } + + /* Configure stop bits. */ + ccr3 |= (uint32_t) p_cfg->stop_bits << SCI_UART_CCR3_STP_OFFSET; + + /* Configure CKE bits. */ + sci_uart_extended_cfg_t * p_extend = (sci_uart_extended_cfg_t *) p_cfg->p_extend; + ccr3 |= (p_extend->clock & SCI_UART_CCR3_CKE_VALUE_MASK) << SCI_UART_CCR3_CKE_OFFSET; + + /* Starts reception on falling edge of RXD if enabled in extension (otherwise reception starts at low level + * of RXD). */ + ccr3 |= (p_extend->rx_edge_start & 1U) << SCI_UART_CCR3_RxDSEL_OFFSET; + + ccr3 |= ((uint32_t) p_extend->rs485_setting.enable << R_SCI0_CCR3_DEN_Pos) & R_SCI0_CCR3_DEN_Msk; + + /* Configure SPEN bit. */ + if (SCI_UART_CLOCK_SOURCE_PCLKM == p_extend->clock_source) + { + ccr3 |= 1U << SCI_UART_CCR3_BPEN_OFFSET; + } + + /* Write to the CCR3 register. */ + p_instance_ctrl->p_reg->CCR3 = ccr3; + + /* CCR1 register setting. */ + uint32_t ccr1 = SCI_UART_CCR1_DEFAULT_VALUE; + + /* Configure flow control pin. */ + ccr1 |= ((uint32_t) (p_extend->flow_control << R_SCI0_CCR1_CTSE_Pos) & SCI_UART_CCR1_FLOW_CTSRTS_MASK); + + /* Set the default level of the TX pin to 1. */ + ccr1 |= (uint32_t) (1U << SCI_UART_CCR1_SPB2DT_BIT | SCI_UART_CCR1_OUTPUT_ENABLE_MASK); + + /* Configure parity bits. */ + if (0 != p_cfg->parity) + { + ccr1 |= + (((UART_PARITY_EVEN == + p_cfg->parity) ? 1U : 3U) << SCI_UART_CCR1_PARITY_OFFSET) & SCI_UART_CCR1_PARITY_MASK; + } + + if (SCI_UART_NOISE_CANCELLATION_DISABLE != p_extend->noise_cancel) + { + /* Select noise filter clock */ + ccr1 |= (uint32_t) (((p_extend->noise_cancel & 0x07U) - 1) & SCI_UART_CCR1_NFCS_VALUE_MASK) << + SCI_UART_CCR1_NFCS_OFFSET; + + /* Enables the noise cancellation */ + ccr1 |= (uint32_t) 1 << SCI_UART_CCR1_NFEN_OFFSET; + } + + p_instance_ctrl->p_reg->CCR1 = ccr1; + + if ((SCI_UART_CLOCK_EXT8X == p_extend->clock) || (SCI_UART_CLOCK_EXT16X == p_extend->clock)) + { + /* Use external clock for baud rate */ + p_instance_ctrl->p_reg->CCR2_b.BRR = SCI_UART_BRR_DEFAULT_VALUE; + + if (SCI_UART_CLOCK_EXT8X == p_extend->clock) + { + /* Set baud rate as (external clock / 8) */ + p_instance_ctrl->p_reg->CCR2 |= 1U << SCI_UART_CCR2_ABCS_OFFSET; + } + } + else + { + /* Set the baud rate settings for the internal baud rate generator. */ + r_sci_uart_baud_set(p_instance_ctrl->p_reg, p_extend->p_baud_setting); + } + + /* Configure RS-485 DE assertion settings. */ + uint32_t dcr = ((uint32_t) (p_extend->rs485_setting.polarity << R_SCI0_DCR_DEPOL_Pos)) & R_SCI0_DCR_DEPOL_Msk; + dcr |= ((uint32_t) p_extend->rs485_setting.assertion_time << R_SCI0_DCR_DEAST_Pos) & + R_SCI0_DCR_DEAST_Msk; + dcr |= ((uint32_t) p_extend->rs485_setting.negation_time << R_SCI0_DCR_DENGT_Pos) & + R_SCI0_DCR_DENGT_Msk; + p_instance_ctrl->p_reg->DCR = dcr; +} + +#if SCI_UART_CFG_FIFO_SUPPORT + +/*******************************************************************************************************************//** + * Resets FIFO related registers. + * + * @param[in] p_instance_ctrl Pointer to UART instance control + * @param[in] p_cfg Pointer to UART configuration structure + **********************************************************************************************************************/ +static void r_sci_uart_fifo_cfg (sci_uart_instance_ctrl_t * const p_instance_ctrl) +{ + if (0U != p_instance_ctrl->fifo_depth) + { + /* Set the tx and rx reset bits */ + uint32_t fcr = 0U; + + #if (SCI_UART_CFG_TX_ENABLE) + #if SCI_UART_CFG_DMAC_SUPPORTED + if (NULL != p_instance_ctrl->p_cfg->p_transfer_tx) + { + /* When DMAC transfer is used, set TTRG[4:0] = 0x0F. */ + fcr |= SCI_UART_FCR_TTRG_DMAC_VALUE << SCI_UART_FCR_TTRG_OFFSET; + } + #endif + #endif + + #if (SCI_UART_CFG_RX_ENABLE) + #if SCI_UART_CFG_DMAC_SUPPORTED + + /* If DMAC is used keep the receive trigger at the default level of 0. */ + if (NULL == p_instance_ctrl->p_cfg->p_transfer_rx) + #endif + { + /* Otherwise, set receive trigger number as configured by the user. */ + sci_uart_extended_cfg_t const * p_extend = p_instance_ctrl->p_cfg->p_extend; + + /* RTRG(Receive FIFO Data Trigger Number) controls when the RXI interrupt will be generated. If data is + * received but the trigger number is not met the RXI interrupt will be generated after 15 ETUs from + * the last stop bit in asynchronous mode. */ + fcr |= (((p_instance_ctrl->fifo_depth - 1U) & p_extend->rx_fifo_trigger) & SCI_UART_FCR_TRIGGER_MASK) << + SCI_UART_FCR_RTRG_OFFSET; + } + + /* RTS asserts when the amount of received data stored in the fifo is equal or less than this value. */ + fcr |= ((p_instance_ctrl->fifo_depth - 1U) & SCI_UART_FCR_TRIGGER_MASK) << SCI_UART_FCR_RSTRG_OFFSET; + #endif + + /* Set the FCR and reset the fifos. */ + p_instance_ctrl->p_reg->FCR = (uint32_t) (fcr | SCI_UART_FCR_RESET_TX_RX); + } +} + +#endif + +/*******************************************************************************************************************//** + * Sets interrupt priority and initializes vector info. + * + * @param[in] p_instance_ctrl Pointer to driver control block + * @param[in] ipl Interrupt priority level + * @param[in] irq IRQ number for this interrupt + **********************************************************************************************************************/ +static void r_sci_irq_cfg (sci_uart_instance_ctrl_t * const p_instance_ctrl, uint8_t const ipl, IRQn_Type const irq) +{ + /* Disable interrupts, set priority, and store control block in the vector information so it can be accessed + * from the callback. */ + R_BSP_IrqDisable(irq); + + R_BSP_IrqCfg(irq, ipl, p_instance_ctrl); +} + +/*******************************************************************************************************************//** + * Sets interrupt priority and initializes vector info for all interrupts. + * + * @param[in] p_instance_ctrl Pointer to UART instance control block + * @param[in] p_cfg Pointer to UART specific configuration structure + **********************************************************************************************************************/ +static void r_sci_irqs_cfg (sci_uart_instance_ctrl_t * const p_instance_ctrl, uart_cfg_t const * const p_cfg) +{ +#if (SCI_UART_CFG_RX_ENABLE) + + /* ERI is optional. */ + r_sci_irq_cfg(p_instance_ctrl, p_cfg->eri_ipl, p_cfg->eri_irq); + r_sci_irq_cfg(p_instance_ctrl, p_cfg->rxi_ipl, p_cfg->rxi_irq); +#endif +#if (SCI_UART_CFG_TX_ENABLE) + r_sci_irq_cfg(p_instance_ctrl, p_cfg->txi_ipl, p_cfg->txi_irq); + + r_sci_irq_cfg(p_instance_ctrl, p_cfg->tei_ipl, p_cfg->tei_irq); +#endif +} + +#if SCI_UART_CFG_DMAC_SUPPORTED + +/*******************************************************************************************************************//** + * Closes transfer interfaces. + * + * @param[in] p_instance_ctrl Pointer to UART instance control block + **********************************************************************************************************************/ +static void r_sci_uart_transfer_close (sci_uart_instance_ctrl_t * p_instance_ctrl) +{ + #if (SCI_UART_CFG_RX_ENABLE) + if (NULL != p_instance_ctrl->p_cfg->p_transfer_rx) + { + p_instance_ctrl->p_cfg->p_transfer_rx->p_api->close(p_instance_ctrl->p_cfg->p_transfer_rx->p_ctrl); + } + #endif + #if (SCI_UART_CFG_TX_ENABLE) + if (NULL != p_instance_ctrl->p_cfg->p_transfer_tx) + { + p_instance_ctrl->p_cfg->p_transfer_tx->p_api->close(p_instance_ctrl->p_cfg->p_transfer_tx->p_ctrl); + } + #endif +} + +#endif + +/*******************************************************************************************************************//** + * Changes baud rate based on predetermined register settings. + * + * @param[in] p_sci_reg Base pointer for SCI registers + * @param[in] p_baud_setting Pointer to other divisor related settings + * + * @note The transmitter and receiver (TE and RE bits in SCR) must be disabled prior to calling this function. + **********************************************************************************************************************/ +static void r_sci_uart_baud_set (R_SCI0_Type * p_sci_reg, sci_baud_setting_t const * const p_baud_setting) +{ + p_sci_reg->CCR2 = (uint32_t) ((p_sci_reg->CCR2 & ~(SCI_UART_CCR2_BAUD_SETTING_MASK)) | + (p_baud_setting->baudrate_bits & SCI_UART_CCR2_BAUD_SETTING_MASK)); +} + +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_instance_ctrl Pointer to UART instance control block + * @param[in] data See uart_callback_args_t in r_uart_api.h + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_sci_uart_call_callback (sci_uart_instance_ctrl_t * p_instance_ctrl, uint32_t data, uart_event_t event) +{ + uart_callback_args_t args; + + /* Store callback arguments in memory provided by user if available. */ + uart_callback_args_t * p_args = p_instance_ctrl->p_callback_memory; + if (NULL == p_args) + { + /* Store on stack */ + p_args = &args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args; + } + + p_args->channel = p_instance_ctrl->p_cfg->channel; + p_args->data = data; + p_args->event = event; + p_args->p_context = p_instance_ctrl->p_context; + + p_instance_ctrl->p_callback(p_args); + + if (NULL != p_instance_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_instance_ctrl->p_callback_memory = args; + } +} + +#if (SCI_UART_CFG_TX_ENABLE) + +/*******************************************************************************************************************//** + * Common processing for TXI interrupt and DMA transfer completion interrupt in UART write mode. This function writes + * the next data. After the last data byte is written, this function disables the TXI interrupt and enables the TEI + * (transmit end) interrupt. + **********************************************************************************************************************/ +static void sci_uart_txi_common (sci_uart_instance_ctrl_t * p_instance_ctrl) +{ + if ((NULL == p_instance_ctrl->p_cfg->p_transfer_tx) && (0U != p_instance_ctrl->tx_src_bytes)) + { + if (2U == p_instance_ctrl->data_bytes) + { + p_instance_ctrl->p_reg->TDR_b.TDAT = (*(uint16_t *) (p_instance_ctrl->p_tx_src)) & SCI_UART_TDR_9BIT_MASK; + } + else + { + p_instance_ctrl->p_reg->TDR_b.TDAT = *(p_instance_ctrl->p_tx_src); + } + + /* Update pointer to the next data and number of remaining bytes in the control block. */ + p_instance_ctrl->tx_src_bytes -= p_instance_ctrl->data_bytes; + p_instance_ctrl->p_tx_src += p_instance_ctrl->data_bytes; + + /* If transfer is not used, write data until FIFO is full. */ + #if SCI_UART_CFG_FIFO_SUPPORT + if (0U != p_instance_ctrl->fifo_depth) + { + uint32_t fifo_count = p_instance_ctrl->p_reg->FTSR_b.T; + for (uint32_t cnt = fifo_count; (cnt < p_instance_ctrl->fifo_depth) && p_instance_ctrl->tx_src_bytes; cnt++) + { + if (2U == p_instance_ctrl->data_bytes) + { + p_instance_ctrl->p_reg->TDR_b.TDAT = (*(uint16_t *) (p_instance_ctrl->p_tx_src)) & + SCI_UART_TDR_9BIT_MASK; + } + else + { + p_instance_ctrl->p_reg->TDR_b.TDAT = *(p_instance_ctrl->p_tx_src); + } + + p_instance_ctrl->tx_src_bytes -= p_instance_ctrl->data_bytes; + p_instance_ctrl->p_tx_src += p_instance_ctrl->data_bytes; + } + + /* Clear TDRE flag */ + p_instance_ctrl->p_reg->CFCLR_b.TDREC = 1; + } + #endif + } + + if (0U == p_instance_ctrl->tx_src_bytes) + { + /* After all data has been transmitted, disable transmit interrupts and enable the transmit end interrupt. */ + uint32_t ccr0_temp = p_instance_ctrl->p_reg->CCR0; + ccr0_temp |= SCI_UART_CCR0_TEIE_MASK; + ccr0_temp &= (uint32_t) ~SCI_UART_CCR0_TIE_MASK; + p_instance_ctrl->p_reg->CCR0 = ccr0_temp; + + p_instance_ctrl->p_tx_src = NULL; + r_sci_uart_call_callback(p_instance_ctrl, 0U, UART_EVENT_TX_DATA_EMPTY); + } +} + +/*******************************************************************************************************************//** + * TXI interrupt handler for UART mode. TXI interrupt fires when the data in the data register or FIFO register has been + * transferred to the data shift register, and the next data can be written. This function calls sci_uart_txi_common(). + **********************************************************************************************************************/ +void sci_uart_txi_isr (void) +{ + SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE; + + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE; + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + sci_uart_txi_common(p_instance_ctrl); + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE; + + SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE; +} + +/*******************************************************************************************************************//** + * Callback that must be called after a TX DMAC transfer completes. + * + * @param[in] p_instance_ctrl Pointer to SCI_UART instance control block + **********************************************************************************************************************/ +void sci_uart_tx_dmac_callback (sci_uart_instance_ctrl_t * p_instance_ctrl) +{ + SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE; + + /* Now that the transfer using DMAC is finished, enable the corresponding IRQ. */ + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->txi_irq); + + sci_uart_txi_common(p_instance_ctrl); + + SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE; +} + +#endif + +#if (SCI_UART_CFG_RX_ENABLE) + +/*******************************************************************************************************************//** + * Common processing for RXI interrupt and DMA transfer completion interrupt in UART read mode. This function calls + * callback function when it meets conditions below. + * - UART_EVENT_RX_COMPLETE: The number of data which has been read reaches to the number specified in R_SCI_UART_Read() + * if a transfer instance is used for reception. + * - UART_EVENT_RX_CHAR: Data is received asynchronously (read has not been called) + * + * This function also calls the callback function for RTS pin control if it is registered in R_SCI_UART_Open(). This is + * special functionality to expand SCI hardware capability and make RTS/CTS hardware flow control possible. If macro + * 'SCI_UART_CFG_FLOW_CONTROL_SUPPORT' is set, it is called at the beginning in this function to set the RTS pin high, + * then it is called again just before leaving this function to set the RTS pin low. + * @retval none + **********************************************************************************************************************/ +static void sci_uart_rxi_common (sci_uart_instance_ctrl_t * p_instance_ctrl) +{ + #if SCI_UART_CFG_DMAC_SUPPORTED + if ((p_instance_ctrl->p_cfg->p_transfer_rx == NULL) || (0 == p_instance_ctrl->rx_dest_bytes)) + #endif + { + #if (SCI_UART_CFG_FLOW_CONTROL_SUPPORT) + if (p_instance_ctrl->flow_pin != (bsp_io_port_pin_t) SCI_UART_INVALID_16BIT_PARAM) + { + R_BSP_PinAccessEnable(); + + /* Pause the transmission of data from the other device. */ + R_BSP_PinSet(R_BSP_IoRegionGet(p_instance_ctrl->flow_pin), p_instance_ctrl->flow_pin); + } + #endif + + uint32_t data; + #if SCI_UART_CFG_FIFO_SUPPORT + do + { + if ((p_instance_ctrl->fifo_depth > 0U)) + { + if (p_instance_ctrl->p_reg->FRSR_b.R > 0U) + { + data = p_instance_ctrl->p_reg->RDR_b.RDAT; + } + else + { + break; + } + } + else + { + data = p_instance_ctrl->p_reg->RDR_b.RDAT; + } + + #else + { + data = p_instance_ctrl->p_reg->RDR_b.RDAT; + #endif + if (0 == p_instance_ctrl->rx_dest_bytes) + { + /* Call user callback with the data. */ + r_sci_uart_call_callback(p_instance_ctrl, data, UART_EVENT_RX_CHAR); + } + else + { + memcpy((void *) p_instance_ctrl->p_rx_dest, &data, p_instance_ctrl->data_bytes); + p_instance_ctrl->p_rx_dest += p_instance_ctrl->data_bytes; + p_instance_ctrl->rx_dest_bytes -= p_instance_ctrl->data_bytes; + + if (0 == p_instance_ctrl->rx_dest_bytes) + { + r_sci_uart_call_callback(p_instance_ctrl, 0U, UART_EVENT_RX_COMPLETE); + } + } + + #if SCI_UART_CFG_FIFO_SUPPORT + } while ((p_instance_ctrl->fifo_depth > 0U) && ((p_instance_ctrl->p_reg->FRSR_b.R) > 0U)); + + if (p_instance_ctrl->fifo_depth > 0U) + { + p_instance_ctrl->p_reg->CFCLR_b.RDRFC = 1; + } + + #else + } + #endif + #if (SCI_UART_CFG_FLOW_CONTROL_SUPPORT) + if (p_instance_ctrl->flow_pin != (bsp_io_port_pin_t) SCI_UART_INVALID_16BIT_PARAM) + { + /* Resume the transmission of data from the other device. */ + R_BSP_PinClear(R_BSP_IoRegionGet(p_instance_ctrl->flow_pin), p_instance_ctrl->flow_pin); + R_BSP_PinAccessDisable(); + } + #endif + } + + #if SCI_UART_CFG_DMAC_SUPPORTED + else + { + p_instance_ctrl->rx_dest_bytes = 0; + p_instance_ctrl->p_rx_dest = NULL; + + /* Call callback */ + r_sci_uart_call_callback(p_instance_ctrl, 0U, UART_EVENT_RX_COMPLETE); + } + #endif +} + +/*******************************************************************************************************************//** + * RXI interrupt handler for UART mode. RXI interrupt happens when data arrives to the data register or the FIFO + * register. This function calls sci_uart_rxi_common(). + **********************************************************************************************************************/ +void sci_uart_rxi_isr (void) +{ + SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE; + + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE; + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + sci_uart_rxi_common(p_instance_ctrl); + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE; + + SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE; +} + +/*******************************************************************************************************************//** + * Callback that must be called after a RX DMAC transfer completes. + * + * @param[in] p_instance_ctrl Pointer to SCI_UART instance control block + **********************************************************************************************************************/ +void sci_uart_rx_dmac_callback (sci_uart_instance_ctrl_t * p_instance_ctrl) +{ + SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE; + + /* Now that the transfer using DMAC is finished, enable the corresponding IRQ. */ + R_BSP_IrqEnable(p_instance_ctrl->p_cfg->rxi_irq); + + sci_uart_rxi_common(p_instance_ctrl); + + SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE; +} + +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + +/*******************************************************************************************************************//** + * TEI interrupt processing for UART mode. The TEI interrupt fires after the last byte is transmitted on the TX pin. + * The user callback function is called with the UART_EVENT_TX_COMPLETE event code (if it is registered in + * R_SCI_UART_Open()). + **********************************************************************************************************************/ +void sci_uart_tei_isr (void) +{ + SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE; + + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE; + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + /* Receiving TEI(transmit end interrupt) means the completion of transmission, so call callback function here. */ + p_instance_ctrl->p_reg->CCR0 &= (uint32_t) ~(SCI_UART_CCR0_TIE_MASK | SCI_UART_CCR0_TEIE_MASK); + + /* Dummy read to ensure that interrupts are disabled. */ + volatile uint32_t dummy = p_instance_ctrl->p_reg->CCR0; + FSP_PARAMETER_NOT_USED(dummy); + + r_sci_uart_call_callback(p_instance_ctrl, 0U, UART_EVENT_TX_COMPLETE); + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE; + + SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE; +} + +#endif + +#if (SCI_UART_CFG_RX_ENABLE) + +/*******************************************************************************************************************//** + * ERI interrupt processing for UART mode. When an ERI interrupt fires, the user callback function is called if it is + * registered in R_SCI_UART_Open() with the event code that triggered the interrupt. + **********************************************************************************************************************/ +void sci_uart_eri_isr (void) +{ + SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE; + + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE; + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_instance_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + uint32_t data = 0U; + uart_event_t event = (uart_event_t) 0U; + + /* Read data. */ + data = p_instance_ctrl->p_reg->RDR_b.RDAT; + + /* Determine cause of error. */ + uint32_t csr = p_instance_ctrl->p_reg->CSR & SCI_UART_RCVR_ERR_MASK; + + if (csr & SCI_UART_CSR_ORER_MASK) + { + event |= UART_EVENT_ERR_OVERFLOW; + } + + if (csr & SCI_UART_CSR_FER_MASK) + { + event |= UART_EVENT_ERR_FRAMING; + } + + if (csr & SCI_UART_CSR_PER_MASK) + { + event |= UART_EVENT_ERR_PARITY; + } + + /* Check if there is a break detected. */ + if ((UART_EVENT_ERR_FRAMING == (event & UART_EVENT_ERR_FRAMING)) && (0U == p_instance_ctrl->p_reg->CSR_b.RXDMON)) + { + event |= UART_EVENT_BREAK_DETECT; + } + + /* Clear error condition. */ + p_instance_ctrl->p_reg->CFCLR |= (uint32_t) (SCI_UART_RCVR_ERRCLR_MASK); + + /* Dummy read to ensure that interrupt event is cleared. */ + volatile uint32_t dummy = p_instance_ctrl->p_reg->CSR; + FSP_PARAMETER_NOT_USED(dummy); + + /* Call callback. */ + r_sci_uart_call_callback(p_instance_ctrl, data, event); + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE; + + SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE; +} + +#endif diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg.txt b/bsp/renesas/rzn2l_rsk/rzn_cfg.txt new file mode 100644 index 00000000000..91026057183 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg.txt @@ -0,0 +1,1158 @@ +FSP Configuration + Board "RSK+RZN2L (xSPI0 x1 boot mode)" + Parameter information for the loader: CACHE_FLG: 0x00000000 + Parameter information for the loader: WRAPCFG_V: 0x00000000 + Parameter information for the loader: COMCFG_V: 0x00000000 + Parameter information for the loader: BMCFG_V: 0x00000000 + Parameter information for the loader: xSPI_FLG: 0x00000000 + Parameter information for the loader: LDR_ADDR_NML: 0x6000004C + Parameter information for the loader: LDR_SIZE_NML: 0x00006000 + Parameter information for the loader: DEST_ADDR_NML: 0x00102000 + Parameter information for the loader: CSSCTL_V: 0x0000003F + Parameter information for the loader: LIOCFGCS0_V: 0x00070000 + Parameter information for the loader: ACCESS_SPEED: 0x00000006 + Parameter information for the loader: CHECK_SUM: Auto Calculate. + + R9A07G084M04GBG + part_number: R9A07G084M04GBG + atcm_size_bytes: 131072 + btcm_size_bytes: 131072 + system_ram_size_bytes: 1572864 + package_style: FBGA + package_pins: 225 + Cortex-R52 CPU core: CPU0 + + RZN2L Memory Config + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 0: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 0: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 0 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 0 End: 0x00000C00 + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 1: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 1: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 1 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 1 End: 0x00000C00 + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 2: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 2: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 2 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 2 End: 0x00000C00 + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 3: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 3: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 3 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 3 End: 0x00000C00 + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 4: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 4: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 4 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 4 End: 0x00000C00 + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 5: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 5: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 5 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 5 End: 0x00000C00 + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 6: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 6: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 6 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 6 End: 0x00000C00 + Master MPU: MPU0 : DMAC Unit0: Enable or disable read control for Region 7: Disabled + Master MPU: MPU0 : DMAC Unit0: Enable or disable write control for Region 7: Disabled + Master MPU: MPU0 : DMAC Unit0: Region 7 Start: 0x00000000 + Master MPU: MPU0 : DMAC Unit0: Region 7 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 0: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 0: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 0 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 0 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 1: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 1: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 1 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 1 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 2: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 2: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 2 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 2 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 3: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 3: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 3 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 3 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 4: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 4: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 4 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 4 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 5: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 5: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 5 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 5 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 6: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 6: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 6 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 6 End: 0x00000C00 + Master MPU: MPU1 : DMAC Unit1: Enable or disable read control for Region 7: Disabled + Master MPU: MPU1 : DMAC Unit1: Enable or disable write control for Region 7: Disabled + Master MPU: MPU1 : DMAC Unit1: Region 7 Start: 0x00000000 + Master MPU: MPU1 : DMAC Unit1: Region 7 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 0: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 0: Disabled + Master MPU: MPU2 : GMAC: Region 0 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 0 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 1: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 1: Disabled + Master MPU: MPU2 : GMAC: Region 1 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 1 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 2: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 2: Disabled + Master MPU: MPU2 : GMAC: Region 2 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 2 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 3: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 3: Disabled + Master MPU: MPU2 : GMAC: Region 3 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 3 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 4: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 4: Disabled + Master MPU: MPU2 : GMAC: Region 4 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 4 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 5: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 5: Disabled + Master MPU: MPU2 : GMAC: Region 5 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 5 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 6: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 6: Disabled + Master MPU: MPU2 : GMAC: Region 6 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 6 End: 0x00000C00 + Master MPU: MPU2 : GMAC: Enable or disable read control for Region 7: Disabled + Master MPU: MPU2 : GMAC: Enable or disable write control for Region 7: Disabled + Master MPU: MPU2 : GMAC: Region 7 Start: 0x00000000 + Master MPU: MPU2 : GMAC: Region 7 End: 0x00000C00 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 0: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 0: Disabled + Master MPU: MPU3 : USB Host: Region 0 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 0 End: 0x00000000 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 1: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 1: Disabled + Master MPU: MPU3 : USB Host: Region 1 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 1 End: 0x00000000 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 2: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 2: Disabled + Master MPU: MPU3 : USB Host: Region 2 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 2 End: 0x00000000 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 3: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 3: Disabled + Master MPU: MPU3 : USB Host: Region 3 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 3 End: 0x00000000 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 4: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 4: Disabled + Master MPU: MPU3 : USB Host: Region 4 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 4 End: 0x00000000 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 5: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 5: Disabled + Master MPU: MPU3 : USB Host: Region 5 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 5 End: 0x00000000 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 6: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 6: Disabled + Master MPU: MPU3 : USB Host: Region 6 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 6 End: 0x00000000 + Master MPU: MPU3 : USB Host: Enable or disable read control for Region 7: Disabled + Master MPU: MPU3 : USB Host: Enable or disable write control for Region 7: Disabled + Master MPU: MPU3 : USB Host: Region 7 Start: 0x00000000 + Master MPU: MPU3 : USB Host: Region 7 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 0: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 0: Disabled + Master MPU: MPU4 : USB Function: Region 0 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 0 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 1: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 1: Disabled + Master MPU: MPU4 : USB Function: Region 1 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 1 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 2: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 2: Disabled + Master MPU: MPU4 : USB Function: Region 2 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 2 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 3: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 3: Disabled + Master MPU: MPU4 : USB Function: Region 3 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 3 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 4: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 4: Disabled + Master MPU: MPU4 : USB Function: Region 4 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 4 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 5: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 5: Disabled + Master MPU: MPU4 : USB Function: Region 5 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 5 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 6: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 6: Disabled + Master MPU: MPU4 : USB Function: Region 6 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 6 End: 0x00000000 + Master MPU: MPU4 : USB Function: Enable or disable read control for Region 7: Disabled + Master MPU: MPU4 : USB Function: Enable or disable write control for Region 7: Disabled + Master MPU: MPU4 : USB Function: Region 7 Start: 0x00000000 + Master MPU: MPU4 : USB Function: Region 7 End: 0x00000000 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 0: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 0: Disabled + Master MPU: MPU6 : CoreSight: Region 0 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 0 End: 0x00000C00 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 1: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 1: Disabled + Master MPU: MPU6 : CoreSight: Region 1 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 1 End: 0x00000C00 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 2: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 2: Disabled + Master MPU: MPU6 : CoreSight: Region 2 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 2 End: 0x00000C00 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 3: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 3: Disabled + Master MPU: MPU6 : CoreSight: Region 3 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 3 End: 0x00000C00 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 4: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 4: Disabled + Master MPU: MPU6 : CoreSight: Region 4 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 4 End: 0x00000C00 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 5: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 5: Disabled + Master MPU: MPU6 : CoreSight: Region 5 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 5 End: 0x00000C00 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 6: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 6: Disabled + Master MPU: MPU6 : CoreSight: Region 6 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 6 End: 0x00000C00 + Master MPU: MPU6 : CoreSight: Enable or disable read control for Region 7: Disabled + Master MPU: MPU6 : CoreSight: Enable or disable write control for Region 7: Disabled + Master MPU: MPU6 : CoreSight: Region 7 Start: 0x00000000 + Master MPU: MPU6 : CoreSight: Region 7 End: 0x00000C00 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 0: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 0: Disabled + Master MPU: MPU7 : SHOSTIF: Region 0 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 0 End: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 1: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 1: Disabled + Master MPU: MPU7 : SHOSTIF: Region 1 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 1 End: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 2: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 2: Disabled + Master MPU: MPU7 : SHOSTIF: Region 2 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 2 End: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 3: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 3: Disabled + Master MPU: MPU7 : SHOSTIF: Region 3 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 3 End: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 4: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 4: Disabled + Master MPU: MPU7 : SHOSTIF: Region 4 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 4 End: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 5: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 5: Disabled + Master MPU: MPU7 : SHOSTIF: Region 5 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 5 End: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 6: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 6: Disabled + Master MPU: MPU7 : SHOSTIF: Region 6 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 6 End: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Enable or disable read control for Region 7: Disabled + Master MPU: MPU7 : SHOSTIF: Enable or disable write control for Region 7: Disabled + Master MPU: MPU7 : SHOSTIF: Region 7 Start: 0x00000000 + Master MPU: MPU7 : SHOSTIF: Region 7 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 0: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 0: Disabled + Master MPU: MPU8 : PHOSTIF: Region 0 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 0 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 1: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 1: Disabled + Master MPU: MPU8 : PHOSTIF: Region 1 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 1 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 2: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 2: Disabled + Master MPU: MPU8 : PHOSTIF: Region 2 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 2 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 3: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 3: Disabled + Master MPU: MPU8 : PHOSTIF: Region 3 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 3 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 4: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 4: Disabled + Master MPU: MPU8 : PHOSTIF: Region 4 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 4 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 5: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 5: Disabled + Master MPU: MPU8 : PHOSTIF: Region 5 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 5 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 6: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 6: Disabled + Master MPU: MPU8 : PHOSTIF: Region 6 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 6 End: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Enable or disable read control for Region 7: Disabled + Master MPU: MPU8 : PHOSTIF: Enable or disable write control for Region 7: Disabled + Master MPU: MPU8 : PHOSTIF: Region 7 Start: 0x00000000 + Master MPU: MPU8 : PHOSTIF: Region 7 End: 0x00000000 + CPU MPU: Attribute: Attribute 0: Memory Type: Normal memory + CPU MPU: Attribute: Attribute 0: Normal Memory: Inner: Memory Attribute Indirection: Write-Back non-transient + CPU MPU: Attribute: Attribute 0: Normal Memory: Inner: Read: Allocate + CPU MPU: Attribute: Attribute 0: Normal Memory: Inner: Write: Allocate + CPU MPU: Attribute: Attribute 0: Normal Memory: Outer: Memory Attribute Indirection: Write-Back non-transient + CPU MPU: Attribute: Attribute 0: Normal Memory: Outer: Read: Allocate + CPU MPU: Attribute: Attribute 0: Normal Memory: Outer: Write: Allocate + CPU MPU: Attribute: Attribute 0: Device Memory: Device Type: Device-nGnRnE memory + CPU MPU: Attribute: Attribute 1: Memory Type: Normal memory + CPU MPU: Attribute: Attribute 1: Normal Memory: Inner: Memory Attribute Indirection: Write-Through non-transient + CPU MPU: Attribute: Attribute 1: Normal Memory: Inner: Read: Allocate + CPU MPU: Attribute: Attribute 1: Normal Memory: Inner: Write: Allocate + CPU MPU: Attribute: Attribute 1: Normal Memory: Outer: Memory Attribute Indirection: Write-Through non-transient + CPU MPU: Attribute: Attribute 1: Normal Memory: Outer: Read: Allocate + CPU MPU: Attribute: Attribute 1: Normal Memory: Outer: Write: Allocate + CPU MPU: Attribute: Attribute 1: Device Memory: Device Type: Device-nGnRnE memory + CPU MPU: Attribute: Attribute 2: Memory Type: Normal memory + CPU MPU: Attribute: Attribute 2: Normal Memory: Inner: Memory Attribute Indirection: Write-Through non-transient + CPU MPU: Attribute: Attribute 2: Normal Memory: Inner: Read: Do not allocate + CPU MPU: Attribute: Attribute 2: Normal Memory: Inner: Write: Do not allocate + CPU MPU: Attribute: Attribute 2: Normal Memory: Outer: Memory Attribute Indirection: Write-Through non-transient + CPU MPU: Attribute: Attribute 2: Normal Memory: Outer: Read: Do not allocate + CPU MPU: Attribute: Attribute 2: Normal Memory: Outer: Write: Do not allocate + CPU MPU: Attribute: Attribute 2: Device Memory: Device Type: Device-nGnRnE memory + CPU MPU: Attribute: Attribute 3: Memory Type: Normal memory + CPU MPU: Attribute: Attribute 3: Normal Memory: Inner: Memory Attribute Indirection: Non-Cacheable + CPU MPU: Attribute: Attribute 3: Normal Memory: Inner: Read: Do not allocate + CPU MPU: Attribute: Attribute 3: Normal Memory: Inner: Write: Do not allocate + CPU MPU: Attribute: Attribute 3: Normal Memory: Outer: Memory Attribute Indirection: Non-Cacheable + CPU MPU: Attribute: Attribute 3: Normal Memory: Outer: Read: Do not allocate + CPU MPU: Attribute: Attribute 3: Normal Memory: Outer: Write: Do not allocate + CPU MPU: Attribute: Attribute 3: Device Memory: Device Type: Device-nGnRnE memory + CPU MPU: Attribute: Attribute 4: Memory Type: Device memory + CPU MPU: Attribute: Attribute 4: Normal Memory: Inner: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 4: Normal Memory: Inner: Read: Do not allocate + CPU MPU: Attribute: Attribute 4: Normal Memory: Inner: Write: Do not allocate + CPU MPU: Attribute: Attribute 4: Normal Memory: Outer: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 4: Normal Memory: Outer: Read: Do not allocate + CPU MPU: Attribute: Attribute 4: Normal Memory: Outer: Write: Do not allocate + CPU MPU: Attribute: Attribute 4: Device Memory: Device Type: Device-nGnRnE memory + CPU MPU: Attribute: Attribute 5: Memory Type: Device memory + CPU MPU: Attribute: Attribute 5: Normal Memory: Inner: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 5: Normal Memory: Inner: Read: Do not allocate + CPU MPU: Attribute: Attribute 5: Normal Memory: Inner: Write: Do not allocate + CPU MPU: Attribute: Attribute 5: Normal Memory: Outer: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 5: Normal Memory: Outer: Read: Do not allocate + CPU MPU: Attribute: Attribute 5: Normal Memory: Outer: Write: Do not allocate + CPU MPU: Attribute: Attribute 5: Device Memory: Device Type: Device-nGnRE memory + CPU MPU: Attribute: Attribute 6: Memory Type: Device memory + CPU MPU: Attribute: Attribute 6: Normal Memory: Inner: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 6: Normal Memory: Inner: Read: Do not allocate + CPU MPU: Attribute: Attribute 6: Normal Memory: Inner: Write: Do not allocate + CPU MPU: Attribute: Attribute 6: Normal Memory: Outer: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 6: Normal Memory: Outer: Read: Do not allocate + CPU MPU: Attribute: Attribute 6: Normal Memory: Outer: Write: Do not allocate + CPU MPU: Attribute: Attribute 6: Device Memory: Device Type: Device-nGRE memory + CPU MPU: Attribute: Attribute 7: Memory Type: Device memory + CPU MPU: Attribute: Attribute 7: Normal Memory: Inner: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 7: Normal Memory: Inner: Read: Do not allocate + CPU MPU: Attribute: Attribute 7: Normal Memory: Inner: Write: Do not allocate + CPU MPU: Attribute: Attribute 7: Normal Memory: Outer: Memory Attribute Indirection: Write-Through transient + CPU MPU: Attribute: Attribute 7: Normal Memory: Outer: Read: Do not allocate + CPU MPU: Attribute: Attribute 7: Normal Memory: Outer: Write: Do not allocate + CPU MPU: Attribute: Attribute 7: Device Memory: Device Type: Device-GRE memory + CPU MPU: Region: Region 00: Name: ATCM + CPU MPU: Region: Region 00: Base: 0x00000000 + CPU MPU: Region: Region 00: Limit: 0x0001FFFF + CPU MPU: Region: Region 00: Sharebility field: Outer Shareable + CPU MPU: Region: Region 00: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 00: Execute never: Execute Enable + CPU MPU: Region: Region 00: Attribute Index: Attribute 3 + CPU MPU: Region: Region 00: Region enable: Enabled + CPU MPU: Region: Region 01: Name: BTCM + CPU MPU: Region: Region 01: Base: 0x00100000 + CPU MPU: Region: Region 01: Limit: 0x0011FFFF + CPU MPU: Region: Region 01: Sharebility field: Outer Shareable + CPU MPU: Region: Region 01: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 01: Execute never: Execute Enable + CPU MPU: Region: Region 01: Attribute Index: Attribute 3 + CPU MPU: Region: Region 01: Region enable: Enabled + CPU MPU: Region: Region 02: Name: System RAM + CPU MPU: Region: Region 02: Base: 0x10000000 + CPU MPU: Region: Region 02: Limit: 0x1017FFFF + CPU MPU: Region: Region 02: Sharebility field: Non-shareable + CPU MPU: Region: Region 02: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 02: Execute never: Execute Enable + CPU MPU: Region: Region 02: Attribute Index: Attribute 1 + CPU MPU: Region: Region 02: Region enable: Enabled + CPU MPU: Region: Region 03: Name: Mirror area of System RAM + CPU MPU: Region: Region 03: Base: 0x30000000 + CPU MPU: Region: Region 03: Limit: 0x3017FFFF + CPU MPU: Region: Region 03: Sharebility field: Outer Shareable + CPU MPU: Region: Region 03: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 03: Execute never: Execute Enable + CPU MPU: Region: Region 03: Attribute Index: Attribute 3 + CPU MPU: Region: Region 03: Region enable: Enabled + CPU MPU: Region: Region 04: Name: Mirror area of external address space + CPU MPU: Region: Region 04: Base: 0x40000000 + CPU MPU: Region: Region 04: Limit: 0x5FFFFFFF + CPU MPU: Region: Region 04: Sharebility field: Outer Shareable + CPU MPU: Region: Region 04: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 04: Execute never: Execute Enable + CPU MPU: Region: Region 04: Attribute Index: Attribute 3 + CPU MPU: Region: Region 04: Region enable: Enabled + CPU MPU: Region: Region 05: Name: External address space + CPU MPU: Region: Region 05: Base: 0x60000000 + CPU MPU: Region: Region 05: Limit: 0x7FFFFFFF + CPU MPU: Region: Region 05: Sharebility field: Non-shareable + CPU MPU: Region: Region 05: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 05: Execute never: Execute Enable + CPU MPU: Region: Region 05: Attribute Index: Attribute 1 + CPU MPU: Region: Region 05: Region enable: Enabled + CPU MPU: Region: Region 06: Name: Non-Safety Peripheral + CPU MPU: Region: Region 06: Base: 0x80000000 + CPU MPU: Region: Region 06: Limit: 0x80FFFFFF + CPU MPU: Region: Region 06: Sharebility field: Outer Shareable + CPU MPU: Region: Region 06: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 06: Execute never: Execute Never + CPU MPU: Region: Region 06: Attribute Index: Attribute 5 + CPU MPU: Region: Region 06: Region enable: Enabled + CPU MPU: Region: Region 07: Name: Safety Peripheral + CPU MPU: Region: Region 07: Base: 0x81000000 + CPU MPU: Region: Region 07: Limit: 0x81FFFFFF + CPU MPU: Region: Region 07: Sharebility field: Outer Shareable + CPU MPU: Region: Region 07: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 07: Execute never: Execute Never + CPU MPU: Region: Region 07: Attribute Index: Attribute 5 + CPU MPU: Region: Region 07: Region enable: Enabled + CPU MPU: Region: Region 08: Name: LLPP Peripheral + CPU MPU: Region: Region 08: Base: 0x90000000 + CPU MPU: Region: Region 08: Limit: 0x901FFFFF + CPU MPU: Region: Region 08: Sharebility field: Outer Shareable + CPU MPU: Region: Region 08: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 08: Execute never: Execute Never + CPU MPU: Region: Region 08: Attribute Index: Attribute 5 + CPU MPU: Region: Region 08: Region enable: Enabled + CPU MPU: Region: Region 09: Name: GIC0 + CPU MPU: Region: Region 09: Base: 0x94000000 + CPU MPU: Region: Region 09: Limit: 0x941FFFFF + CPU MPU: Region: Region 09: Sharebility field: Outer Shareable + CPU MPU: Region: Region 09: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 09: Execute never: Execute Never + CPU MPU: Region: Region 09: Attribute Index: Attribute 4 + CPU MPU: Region: Region 09: Region enable: Enabled + CPU MPU: Region: Region 10: Name: Debug Private + CPU MPU: Region: Region 10: Base: 0xC0000000 + CPU MPU: Region: Region 10: Limit: 0xC0FFFFFF + CPU MPU: Region: Region 10: Sharebility field: Outer Shareable + CPU MPU: Region: Region 10: Access Permission(EL1 / EL0): ReadWrite / ReadWrite + CPU MPU: Region: Region 10: Execute never: Execute Never + CPU MPU: Region: Region 10: Attribute Index: Attribute 4 + CPU MPU: Region: Region 10: Region enable: Enabled + CPU MPU: Region: Region 11: Name: Not Used + CPU MPU: Region: Region 11: Base: 0x00000000 + CPU MPU: Region: Region 11: Limit: 0x00000000 + CPU MPU: Region: Region 11: Sharebility field: Non-shareable + CPU MPU: Region: Region 11: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 11: Execute never: Execute Enable + CPU MPU: Region: Region 11: Attribute Index: Attribute 0 + CPU MPU: Region: Region 11: Region enable: Disabled + CPU MPU: Region: Region 12: Name: Not Used + CPU MPU: Region: Region 12: Base: 0x00000000 + CPU MPU: Region: Region 12: Limit: 0x00000000 + CPU MPU: Region: Region 12: Sharebility field: Non-shareable + CPU MPU: Region: Region 12: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 12: Execute never: Execute Enable + CPU MPU: Region: Region 12: Attribute Index: Attribute 0 + CPU MPU: Region: Region 12: Region enable: Disabled + CPU MPU: Region: Region 13: Name: Not Used + CPU MPU: Region: Region 13: Base: 0x00000000 + CPU MPU: Region: Region 13: Limit: 0x00000000 + CPU MPU: Region: Region 13: Sharebility field: Non-shareable + CPU MPU: Region: Region 13: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 13: Execute never: Execute Enable + CPU MPU: Region: Region 13: Attribute Index: Attribute 0 + CPU MPU: Region: Region 13: Region enable: Disabled + CPU MPU: Region: Region 14: Name: Not Used + CPU MPU: Region: Region 14: Base: 0x00000000 + CPU MPU: Region: Region 14: Limit: 0x00000000 + CPU MPU: Region: Region 14: Sharebility field: Non-shareable + CPU MPU: Region: Region 14: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 14: Execute never: Execute Enable + CPU MPU: Region: Region 14: Attribute Index: Attribute 0 + CPU MPU: Region: Region 14: Region enable: Disabled + CPU MPU: Region: Region 15: Name: Not Used + CPU MPU: Region: Region 15: Base: 0x00000000 + CPU MPU: Region: Region 15: Limit: 0x00000000 + CPU MPU: Region: Region 15: Sharebility field: Non-shareable + CPU MPU: Region: Region 15: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 15: Execute never: Execute Enable + CPU MPU: Region: Region 15: Attribute Index: Attribute 0 + CPU MPU: Region: Region 15: Region enable: Disabled + CPU MPU: Region: Region 16: Name: Not Used + CPU MPU: Region: Region 16: Base: 0x00000000 + CPU MPU: Region: Region 16: Limit: 0x00000000 + CPU MPU: Region: Region 16: Sharebility field: Non-shareable + CPU MPU: Region: Region 16: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 16: Execute never: Execute Enable + CPU MPU: Region: Region 16: Attribute Index: Attribute 0 + CPU MPU: Region: Region 16: Region enable: Disabled + CPU MPU: Region: Region 17: Name: Not Used + CPU MPU: Region: Region 17: Base: 0x00000000 + CPU MPU: Region: Region 17: Limit: 0x00000000 + CPU MPU: Region: Region 17: Sharebility field: Non-shareable + CPU MPU: Region: Region 17: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 17: Execute never: Execute Enable + CPU MPU: Region: Region 17: Attribute Index: Attribute 0 + CPU MPU: Region: Region 17: Region enable: Disabled + CPU MPU: Region: Region 18: Name: Not Used + CPU MPU: Region: Region 18: Base: 0x00000000 + CPU MPU: Region: Region 18: Limit: 0x00000000 + CPU MPU: Region: Region 18: Sharebility field: Non-shareable + CPU MPU: Region: Region 18: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 18: Execute never: Execute Enable + CPU MPU: Region: Region 18: Attribute Index: Attribute 0 + CPU MPU: Region: Region 18: Region enable: Disabled + CPU MPU: Region: Region 19: Name: Not Used + CPU MPU: Region: Region 19: Base: 0x00000000 + CPU MPU: Region: Region 19: Limit: 0x00000000 + CPU MPU: Region: Region 19: Sharebility field: Non-shareable + CPU MPU: Region: Region 19: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 19: Execute never: Execute Enable + CPU MPU: Region: Region 19: Attribute Index: Attribute 0 + CPU MPU: Region: Region 19: Region enable: Disabled + CPU MPU: Region: Region 20: Name: Not Used + CPU MPU: Region: Region 20: Base: 0x00000000 + CPU MPU: Region: Region 20: Limit: 0x00000000 + CPU MPU: Region: Region 20: Sharebility field: Non-shareable + CPU MPU: Region: Region 20: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 20: Execute never: Execute Enable + CPU MPU: Region: Region 20: Attribute Index: Attribute 0 + CPU MPU: Region: Region 20: Region enable: Disabled + CPU MPU: Region: Region 21: Name: Not Used + CPU MPU: Region: Region 21: Base: 0x00000000 + CPU MPU: Region: Region 21: Limit: 0x00000000 + CPU MPU: Region: Region 21: Sharebility field: Non-shareable + CPU MPU: Region: Region 21: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 21: Execute never: Execute Enable + CPU MPU: Region: Region 21: Attribute Index: Attribute 0 + CPU MPU: Region: Region 21: Region enable: Disabled + CPU MPU: Region: Region 22: Name: Not Used + CPU MPU: Region: Region 22: Base: 0x00000000 + CPU MPU: Region: Region 22: Limit: 0x00000000 + CPU MPU: Region: Region 22: Sharebility field: Non-shareable + CPU MPU: Region: Region 22: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 22: Execute never: Execute Enable + CPU MPU: Region: Region 22: Attribute Index: Attribute 0 + CPU MPU: Region: Region 22: Region enable: Disabled + CPU MPU: Region: Region 23: Name: Not Used + CPU MPU: Region: Region 23: Base: 0x00000000 + CPU MPU: Region: Region 23: Limit: 0x00000000 + CPU MPU: Region: Region 23: Sharebility field: Non-shareable + CPU MPU: Region: Region 23: Access Permission(EL1 / EL0): ReadWrite / None + CPU MPU: Region: Region 23: Execute never: Execute Enable + CPU MPU: Region: Region 23: Attribute Index: Attribute 0 + CPU MPU: Region: Region 23: Region enable: Disabled + CPU MPU: Background Region: Disabled + CPU MPU: Instruction Cache: Enabled + CPU MPU: Data Cache: Enabled + + RZN2L + stack size (bytes): FIQ stack size: 0x400 + stack size (bytes): IRQ stack size: 0x400 + stack size (bytes): ABT stack size: 0x400 + stack size (bytes): UND stack size: 0x400 + stack size (bytes): SYS stack size: 0x400 + stack size (bytes): SVC stack size: 0x400 + Heap size (bytes): 0x2000 + C Runtime Initialization : Enabled + TFU Mathlib: Enabled + + RZN2L Family + + RZN Common + MCU Vcc (mV): 3300 + Parameter checking: Disabled + Assert Failures: Return FSP_ERR_ASSERTION + Error Log: No Error Log + Soft Reset: Disabled + Port Protect: Enabled + Early BSP Initialization : Disabled + Multiplex Interrupt: Disabled + + Clocks + LOCO Enabled + PLL1 is initial state + Ethernet Clock src: Main clock oscillator + CLMA0 Enabled + CLMA0 error not mask + CLMA3 error not mask + CLMA1 error mask + CLMA3 Enabled + CLMA1 Enabled + CLMA2 Enabled + CLMA0 CMPL 1 + CLMA1 CMPL 1 + CLMA2 CMPL 1 + CLMA3 CMPL 1 + Alternative clock: LOCO + CLMA0 CMPH 1023 + CLMA1 CMPH 1023 + CLMA2 CMPH 1023 + CLMA3 CMPH 1023 + ICLK 200MHz + CPU0CLK Mulx2 + CKIO Div/4 + SCI0ASYNCCLK: 96MHz + SCI1ASYNCCLK: 96MHz + SCI2ASYNCCLK: 96MHz + SCI3ASYNCCLK: 96MHz + SCI4ASYNCCLK: 96MHz + SCI5ASYNCCLK: 96MHz + SPI0ASYNCCLK: 96MHz + SPI1ASYNCCLK: 96MHz + SPI2ASYNCCLK: 96MHz + SPI3ASYNCCLK: 96MHz + PCLKCAN 40MHz + XSPI_CLK0 12.5MHz + XSPI_CLK1 12.5MHz + + Pin Configurations + RSK+RZN2L -> g_bsp_pin_cfg + AN000 B13 SYSTEM_AN000 - - - - - - - - I "Read only" - + AN001 C12 SYSTEM_AN001 - - - - - - - - I "Read only" - + AN002 B14 SYSTEM_AN002 - - - - - - - - I "Read only" - + AN003 C13 SYSTEM_AN003 - - - - - - - - I "Read only" - + AN100 B12 SYSTEM_AN100 - - - - - - - - I "Read only" - + AN101 A14 SYSTEM_AN101 - - - - - - - - I "Read only" - + AN102 B11 SYSTEM_AN102 - - - - - - - - I "Read only" - + AN103 A13 SYSTEM_AN103 - - - - - - - - I "Read only" - + AN104 A12 SYSTEM_AN104 - - - - - - - - I "Read only" - + AN105 B10 SYSTEM_AN105 - - - - - - - - I "Read only" - + AN106 A11 SYSTEM_AN106 - - - - - - - - I "Read only" - + AN107 C9 SYSTEM_AN107 - - - - - - - - I "Read only" - + AVCC18_TSU C14 SYSTEM_AVCC18_TSU - - - - - - - - I "Read only" - + AVCC18_USB P10 SYSTEM_AVCC18_USB - - - - - - - - I "Read only" - + AVCC18_USB R10 SYSTEM_AVCC18_USB - - - - - - - - I "Read only" - + BSCANP G2 SYSTEM_BSCANP - - - - - - - - I "Read only" - + EXTAL R7 CGC_EXTAL - - - - - - - - I "Read only" - + EXTCLKIN R6 CGC_EXTCLKIN - - - - - - - - I "Read only" - + MDX P5 SYSTEM_MDX - - - - - - - - IO "Read only" - + P00_0 C4 - ETH2_RXD3 - - Disabled - - "BSC: D15; ETHER_ETH2: ETH2_RXD3; PHOSTIF: HD15; SCI2: DE2; SCI2: SCK2" - None - - + P00_1 D5 - ETH2_RXDV - - Disabled - - "BSC: A13; ETHER_ETH2: ETH2_RXDV_CRSDV_RXCTL; IRQ: IRQ0; MTU35: MTIC5U; SCI2: RXD_MISO2; SCI2: SCL2" - None - - + P00_2 A3 - ETH2_TXEN - - Disabled - - "BSC: RD#; ETHER_ETH2: ETH2_TXEN_TXCTL; MTU35: MTIC5V; SCI2: SDA2; SCI2: TXD_MOSI2; USB_HS: USB_OVRCUR" - None - - + P00_3 B3 - ETH2_REFCLK - - Disabled - - "BSC: RD_WR#; ETHER_ETH2: ETH2_REFCLK; ETHER_ETH2: ETH2_RMII2_REFCLK; IRQ: IRQ1; MTU35: MTIC5W; SCI2: CTS_RTS_SS2#" - None - - + P00_4 A4 - - - - Disabled - - "BSC: WAIT#; DSMIF0: MCLK0; ETHER_ETH2: ETH2_RXER; GPT0: GTIOC0A; IRQ: IRQ13; MTU33: MTIOC3A; PHOSTIF: HWAIT#" - None - - + P00_5 B4 - ETH2_LINK - - Disabled - - "BSC: CS0#; DSMIF0: MDAT0; ETHER_ESC: ESC_PHYLINK0; ETHER_ESC: ESC_PHYLINK2; ETHER_ETHSW: ETHSW_PHYLINK0; ETHER_ETHSW: ETHSW_PHYLINK2; GPT0: GTIOC0B; MTU33: MTIOC3C" - None - - + P00_6 C3 - ETH2_TXCLK - - Disabled - - "BSC: CS5#; ETHER_ETH2: ETH2_TXCLK_TXC; GPT1: GTIOC1A; MTU33: MTIOC3B" - None - - + P00_7 D4 - - - - Disabled - - "BSC: RAS#; GPT2: GTIOC2A; IRQ: IRQ13; MTU34: MTIOC4A" - None - - + P01_0 A2 - - - - Disabled - - "BSC: CAS#; DSMIF1: MCLK1; ETHER_ESC: ESC_MDIO; ETHER_ETHSW: ETHSW_MDIO; ETHER_GMAC: GMAC_MDIO; GPT3: GTIOC3A; MTU34: MTIOC4C; SCI2: CTS2#" - None - - + P01_1 D3 - - - - Disabled - - "BSC: CKE; DSMIF1: MDAT1; ETHER_ESC: ESC_MDC; ETHER_ETHSW: ETHSW_MDC; ETHER_GMAC: GMAC_MDC; GPT1: GTIOC1B; MTU33: MTIOC3D; SCI2: DE2" - None - - + P01_2 B2 - ETH2_TXD3 - - Disabled - - "BSC: CS2#; ETHER_ETH2: ETH2_TXD3; GPT2: GTIOC2B; IRQ: IRQ2; MTU34: MTIOC4B" - None - - + P01_3 C2 - ETH2_TXD2 - - Disabled - - "BSC: AH#; ETHER_ETH2: ETH2_TXD2; GPT3: GTIOC3B; MTU34: MTIOC4D" - None - - + P01_4 E4 - ETH2_TXD1 - - Disabled - - "BSC: WE1#_DQMLU; ETHER_ETH2: ETH2_TXD1; IRQ: IRQ3; MTU_POE3: POE0#" - None - - + P01_5 B1 - ETH2_TXD0 - - Disabled - - "BSC: WE0#_DQMLL; ETHER_ETH2: ETH2_TXD0" - None - - + P01_6 D2 - - - - Disabled - - "BSC: A20; CANFD1: CANTXDP1; ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_GMAC: GMAC_PTPTRG1; GPT9: GTIOC9A; MTU31: MTIOC1A; PHOSTIF: HA20; SCI1: CTS1#; TRACE: TRACEDATA0" - None - - + P01_7 C1 CANFD0_CANRX0 CAN_RX Middle - "Peripheral mode" - - "ADC0: ADTRG0#; BSC: A19; CANFD0: CANRX0; ETHER_ETHSW: ETHSW_LPI1; GPT9: GTIOC9B; MTU31: MTIOC1B; PHOSTIF: HA19; SCI1: SCK1; SPI3: SPI_RSPCK3; TRACE: TRACEDATA1" - I - - + P02_0 E3 - - - - Disabled - - "BSC: A18; CANFD1: CANTX1; ETHER_ETHSW: ETHSW_LPI2; GPT: GTADSML0; IRQ: IRQ4; PHOSTIF: HA18; SCI1: RXD_MISO1; SCI1: SCL1; SPI3: SPI_MISO3; TRACE: TRACEDATA2; USB_HS: USB_OTGID" - None - - + P02_1 D1 - - - - Disabled - - "BSC: A17; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT1; PHOSTIF: HA17; SCI1: DE1" - None - - + P02_2 F3 CANFD0_CANTX0 CAN_TX Middle - "Peripheral mode" - - "BSC: A16; CANFD0: CANTX0; ETHER_ETHSW: ETHSW_TDMAOUT0; GPT10: GTIOC10A; IRQ: IRQ14; MTU32: MTIOC2A; MTU_POE3: POE10#; PHOSTIF: HA16; RTC: RTCAT1HZ; SCI1: SDA1; SCI1: TXD_MOSI1; SPI3: SPI_MOSI3" - O - - + P02_3 E1 - - - - Disabled - - "BSC: A15; BSC: AH#; CANFD1: CANRX1; ETHER_ETHSW: ETHSW_TDMAOUT1; GPT10: GTIOC10B; IRQ: IRQ15; MTU32: MTIOC2B; MTU_POE3: POE11#; PHOSTIF: HA15; SCI1: CTS_RTS_SS1#; SPI3: SPI_SSL30" - None - - + P02_4 F4 JTAG/SWD_TDO TDO High - "Peripheral mode" - - "BSC: WE0#_DQMLL; JTAG/SWD: TDO; SCI1: DE1; SPI3: SPI_SSL33" - O - - + P02_5 F2 JTAG/SWD_TDI TDI Low - "Peripheral mode" - - "BSC: WE1#_DQMLU; ETHER_ETHSW: ETHSW_TDMAOUT3; JTAG/SWD: TDI; SCI5: SCK5; SPI3: SPI_SSL31" - I - - + P02_6 F5 JTAG/SWD_TMS_SWDIO TMS High - "Peripheral mode" - - "JTAG/SWD: TMS_SWDIO; SCI5: RXD_MISO5; SCI5: SCL5" - IO - - + P02_7 F1 JTAG/SWD_TCK_SWCLK TCK Low - "Peripheral mode" - - "JTAG/SWD: TCK_SWCLK; SCI5: SDA5; SCI5: TXD_MOSI5" - I - - + P03_0 G3 GPIO ETH_LED4 Low - "Output mode (Low & Not Into Input)" - - "BSC: A14; BSC: CS5#; CANFD1: CANTXDP1; GPT: GTADSML1; IRQ: IRQ14; PHOSTIF: HA14; SCI2: SCK2; SPI3: SPI_SSL32; TRACE: TRACEDATA3" - IO - - + P03_5 G1 - - - - Disabled - - "BSC: A12; DSMIF2: MCLK2; ETHER_ETH2: ETH2_CRS; GPT4: GTIOC4A; IRQ: IRQ5; MTU33: MTIOC3A; PHOSTIF: HA12; SCI2: RXD_MISO2; SCI2: SCL2" - None - - + P03_6 G4 - - - - Disabled - - "BSC: A11; DSMIF2: MDAT2; ETHER_ETH2: ETH2_COL; GPT4: GTIOC4B; IRQ: IRQ8; MTU33: MTIOC3B; PHOSTIF: HA11; SCI2: SDA2; SCI2: TXD_MOSI2; SPI1: SPI_SSL13; TRACE: TRACEDATA4" - None - - + P03_7 G5 - - - - Disabled - - "BSC: A10; ETHER_ETH2: ETH2_TXER; GPT5: GTIOC5A; IRQ: IRQ9; MTU33: MTIOC3C; PHOSTIF: HA10; SCI3: SCK3; TRACE: TRACEDATA5" - None - - + P04_0 H1 - - - - Disabled - - "BSC: A9; GPT5: GTIOC5B; MTU33: MTIOC3D; PHOSTIF: HA9; SCI3: RXD_MISO3; SCI3: SCL3; TRACE: TRACEDATA6" - None - - + P04_1 H2 GPIO LED_RED1 Low - "Output mode (Low & Not Into Input)" - - "BSC: CKIO; IIC2: IIC_SDA2; PHOSTIF: HCKIO; SCI3: SDA3; SCI3: TXD_MOSI3; SPI0: SPI_MOSI0" - IO - - + P04_4 H4 GPIO ETH_LED6 Low - "Output mode (Low & Not Into Input)" - - "BSC: A8; GPT: GTADSMP0; IRQ: IRQ10; MTU_POE3: POE10#; PHOSTIF: HA8; SCI3: CTS3#; SPI1: SPI_RSPCK1; TRACE: TRACEDATA7" - IO - - + P04_5 H3 - - - - Disabled - - "BSC: A7; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT0; PHOSTIF: HA7; SCI3: DE3" - None - - + P04_6 H5 - - - - Disabled - - "BSC: A6; DMAC: DACK; ETHER_ETH1: ETH1_TXER; PHOSTIF: HA6; RTC: RTCAT1HZ" - None - - + P04_7 J1 - - - - Disabled - - "BSC: A5; ETHER_ETH0: ETH0_TXER; ETHER_ETH2: ETH2_TXER; PHOSTIF: HA5; SPI2: SPI_SSL21" - None - - + P05_0 J5 GPIO ETH_LED7 Low - "Output mode (Low & Not Into Input)" - - "BSC: A4; CANFD0: CANTXDP0; CMTW0: CMTW0_TOC0; DSMIF3: MCLK3; ETHER_ETH1: ETH1_CRS; GPT6: GTIOC6A; IRQ: IRQ12; MTU34: MTIOC4A; PHOSTIF: HA4; SCI5: CTS_RTS_SS5#; USB_HS: USB_VBUSEN" - IO - - + P05_1 J2 - - - - Disabled - - "BSC: A3; CANFD0: CANRXDP0; CMTW0: CMTW0_TIC1; DSMIF3: MDAT3; ETHER_ETH1: ETH1_COL; GPT6: GTIOC6B; IRQ: IRQ13; MTU34: MTIOC4B; PHOSTIF: HA3; SCI5: CTS5#; USB_HS: USB_EXICEN" - None - - + P05_2 J4 IIC1_IIC_SCL1 SCL Middle - "Peripheral mode" - - "BSC: A2; CANFD0: CANRX0; CMTW0: CMTW0_TOC0; DMAC: DREQ; ETHER_ETH0: ETH0_CRS; GPT7: GTIOC7A; GPT_POEG: GTETRGSA; IIC1: IIC_SCL1; IRQ: IRQ14; MTU34: MTIOC4C; PHOSTIF: HA2; SCI5: DE5; USB_HS: USB_VBUSEN" - IO - - + P05_3 J3 IIC1_IIC_SDA1 SDA Middle - "Peripheral mode" - - "BSC: A1; CANFD0: CANTX0; CMTW0: CMTW0_TIC0; ETHER_ETH0: ETH0_COL; GPT7: GTIOC7B; GPT_POEG: GTETRGSB; IIC1: IIC_SDA1; IRQ: IRQ15; MTU34: MTIOC4D; MTU_POE3: POE11#; PHOSTIF: HA1; SCI4: SCK4; USB_HS: USB_EXICEN" - IO - - + P05_4 K1 GPIO SW2 - - "Input mode" - - "BSC: A0; CANFD0: CANTXDP0; DMAC: DACK; ETHER_ETHSW: ETHSW_LPI0; GPT14: GTIOC14A; IRQ: IRQ12; PHOSTIF: HA0; SCI4: RXD_MISO4; SCI4: SCL4; SPI0: SPI_SSL00; USB_HS: USB_OVRCUR" - IO - - + P05_5 K2 - ETH1_LINK - - Disabled - - "CMTW0: CMTW0_TOC1; ETHER_ESC: ESC_PHYLINK1; ETHER_ETHSW: ETHSW_PHYLINK1; GPT14: GTIOC14B; SPI2: SPI_RSPCK2" - None - - + P05_6 K3 - - - - Disabled - - "CMTW1: CMTW1_TIC0; ETHER_ETH1: ETH1_RXER; GPT15: GTIOC15A; IRQ: IRQ12; SPI2: SPI_SSL22" - None - - + P05_7 M1 - ETH1_TXD2 - - Disabled - - "CMTW1: CMTW1_TOC1; ETHER_ETH1: ETH1_TXD2; GPT15: GTIOC15B; SCI4: SDA4; SCI4: TXD_MOSI4; SPI2: SPI_SSL23" - None - - + P06_0 L2 - ETH1_TXD3 - - Disabled - - "CANFD1: CANRX1; CMTW1: CMTW1_TOC0; ETHER_ETH1: ETH1_TXD3; GPT16: GTIOC16A; SCI4: CTS_RTS_SS4#; SPI2: SPI_SSL23" - None - - + P06_1 L3 - ETH1_REFCLK - - Disabled - - "CANFD1: CANTX1; ETHER_ETH1: ETH1_REFCLK; ETHER_ETH1: ETH1_RMII1_REFCLK; GPT16: GTIOC16B; SCI4: CTS4#; SPI2: SPI_SSL22" - None - - + P06_2 M2 - ETH1_TXD1 - - Disabled - - "CANFD1: CANRXDP1; ETHER_ETH1: ETH1_TXD1; GPT17: GTIOC17A" - None - - + P06_3 K4 - ETH1_TXD0 - - Disabled - - "CANFD1: CANTXDP1; CMTW1: CMTW1_TIC1; ETHER_ETH1: ETH1_TXD0; GPT17: GTIOC17B; SCI4: DE4; SPI1: SPI_MISO1" - None - - + P06_4 N1 - ETH1_TXCLK - - Disabled - - "ETHER_ETH1: ETH1_TXCLK_TXC; GPT11: GTIOC11A; SPI1: SPI_MOSI1" - None - - + P06_5 N2 - ETH1_TXEN - - Disabled - - "ETHER_ETH1: ETH1_TXEN_TXCTL; GPT11: GTIOC11B" - None - - + P06_6 L4 - ETH1_RXD0 - - Disabled - - "ETHER_ETH1: ETH1_RXD0; GPT12: GTIOC12A; SPI1: SPI_SSL10" - None - - + P06_7 M3 - ETH1_RXD1 - - Disabled - - "ETHER_ETH1: ETH1_RXD1; GPT12: GTIOC12B; SPI1: SPI_SSL11" - None - - + P07_0 P1 - ETH1_RXD2 - - Disabled - - "ETHER_ETH1: ETH1_RXD2; GPT13: GTIOC13A" - None - - + P07_1 N3 - ETH1_RXD3 - - Disabled - - "ETHER_ETH1: ETH1_RXD3; GPT13: GTIOC13B" - None - - + P07_2 P2 - ETH1_RXDV - - Disabled - - "ETHER_ETH1: ETH1_RXDV_CRSDV_RXCTL" - None - - + P07_3 M4 - ETH1_RXCLK - - Disabled - - "ETHER_ETH1: ETH1_RXCLK_REF_CLK_RXC" - None - - + P07_4 R2 USB_HS_USB_VBUSIN USB_VBUSIN - - "Peripheral mode" - - "ADC0: ADTRG0#; IRQ: IRQ1; USB_HS: USB_VBUSIN" - I - - + P08_4 N4 - ETH0_RXD3 - - Disabled - - "ETHER_ETH0: ETH0_RXD3; MTU36: MTIOC6A" - None - - + P08_5 P3 - ETH0_RXDV - - Disabled - - "ETHER_ETH0: ETH0_RXDV_CRSDV_RXCTL; MTU36: MTIOC6B" - None - - + P08_6 M5 - ETH0_RXCLK - - Disabled - - "ETHER_ETH0: ETH0_RXCLK_REF_CLK_RXC; MTU36: MTIOC6C" - None - - + P08_7 N5 ETHER_GMAC_GMAC_MDC ETH_MDC Low - "Peripheral mode" - - "ETHER_ESC: ESC_MDC; ETHER_ETHSW: ETHSW_MDC; ETHER_GMAC: GMAC_MDC; MTU36: MTIOC6D" - O - - + P09_0 P4 ETHER_GMAC_GMAC_MDIO ETH_MDIO Low - "Peripheral mode" - - "ETHER_ESC: ESC_MDIO; ETHER_ETHSW: ETHSW_MDIO; ETHER_GMAC: GMAC_MDIO; MTU37: MTIOC7A" - IO - - + P09_1 R3 - ETH0_REFCLK - - Disabled - - "ETHER_ETH0: ETH0_REFCLK; ETHER_ETH0: ETH0_RMII0_REFCLK; MTU37: MTIOC7B" - None - - + P09_2 N6 - - - - Disabled - - "ETHER_ETH0: ETH0_RXER; IRQ: IRQ0; MTU37: MTIOC7C" - None - - + P09_3 R4 - ETH0_TXD3 - - Disabled - - "ETHER_ETH0: ETH0_TXD3; MTU37: MTIOC7D" - None - - + P09_4 M6 - ETH0_TXD2 - - Disabled - - "ETHER_ETH0: ETH0_TXD2" - None - - + P09_5 N7 - ETH0_TXD1 - - Disabled - - "ETHER_ETH0: ETH0_TXD1" - None - - + P09_6 M7 - ETH0_TXD0 - - Disabled - - "ETHER_ETH0: ETH0_TXD0" - None - - + P09_7 L7 - ETH0_TXCLK - - Disabled - - "ETHER_ETH0: ETH0_TXCLK_TXC" - None - - + P10_0 N8 - ETH0_TXEN - - Disabled - - "ETHER_ETH0: ETH0_TXEN_TXCTL" - None - - + P10_1 M8 - ETH0_RXD0 - - Disabled - - "ETHER_ETH0: ETH0_RXD0" - None - - + P10_2 L8 - ETH0_RXD1 - - Disabled - - "ETHER_ETH0: ETH0_RXD1" - None - - + P10_3 L9 - ETH0_RXD2 - - Disabled - - "ETHER_ETH0: ETH0_RXD2; RTC: RTCAT1HZ" - None - - + P10_4 M9 - ETH0_LINK - - Disabled - - "ETHER_ESC: ESC_PHYLINK0; ETHER_ETHSW: ETHSW_PHYLINK0; IRQ: IRQ11" - None - - + P12_4 N11 - - - - Disabled - - "BSC: D15; ETHER_ETH1: ETH1_CRS; GPT8: GTIOC8B; MBXSEM: MBX_HINT#; MTU38: MTIOC8B; SPI0: SPI_SSL01; TRACE: TRACEDATA0" - None - - + P13_2 L10 IIC0_IIC_SCL0 EEPROM_SCL Middle - "Peripheral mode" - - "BSC: A13; BSC: D9; DSMIF4: MCLK4; ETHER_ESC: ESC_I2CCLK; ETHER_ETHSW: ETHSW_PTPOUT2; GPT10: GTIOC10A; IIC0: IIC_SCL0; IRQ: IRQ5; MTU30: MTIOC0A; MTU_POE3: POE8#; SCI1: CTS_RTS_SS1#; SPI0: SPI_MISO0; TRACE: TRACEDATA6" - IO - - + P13_3 N12 IIC0_IIC_SDA0 EEPROM_SDA Middle - "Peripheral mode" - - "BSC: D8; BSC: RD#; CMTW1: CMTW1_TOC0; DSMIF4: MDAT4; ETHER_ESC: ESC_I2CDATA; ETHER_ETHSW: ETHSW_PTPOUT3; GPT10: GTIOC10B; IIC0: IIC_SDA0; MTU30: MTIOC0B; MTU30: MTIOC0C; SCI1: CTS1#; SPI0: SPI_RSPCK0; TRACE: TRACEDATA7" - IO - - + P13_4 L12 GPIO ESC_RESETOUT Low - "Output mode (Low & Not Into Input)" - - "BSC: A0; ETHER_ESC: ESC_RESETOUT#; GPT8: GTIOC8B; MTU30: MTIOC0D" - IO - - + P13_5 M12 GPIO SW3_Pin2 - - "Input mode" - - "ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_GMAC: GMAC_PTPTRG0; IIC2: IIC_SCL2; MTU3: MTCLKA; SPI1: SPI_RSPCK1; XSPI0: XSPI0_WP1#" - IO - - + P13_6 M13 GPIO SW3_Pin1 - - "Input mode" - - "ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT0; MTU3: MTCLKB; XSPI0: XSPI0_WP0#" - IO - - + P13_7 M11 GPIO SW3_Pin4 - - "Input mode" - - "ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_GMAC: GMAC_PTPTRG1; MBXSEM: MBX_HINT#; MTU3: MTCLKC; XSPI0: XSPI0_ECS1#" - IO - - + P14_0 L13 GPIO SW3_Pin3 - - "Input mode" - - "ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT1; MTU3: MTCLKD; XSPI0: XSPI0_INT0#" - IO - - + P14_1 L14 - - - - Disabled - - "ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_ETH1: ETH1_COL; ETHER_GMAC: GMAC_PTPTRG1; GPT8: GTIOC8A; MTU38: MTIOC8A; SHOSTIF: HSPI_IO0; XSPI0: XSPI0_INT1#" - None - - + P14_2 K12 XSPI0_XSPI0_ECS0# XSPI0_ECS Low - "Peripheral mode" - - "ETHER_ETH0: ETH0_CRS; ETHER_ETH2: ETH2_CRS; GPT8: GTIOC8B; IRQ: IRQ6; MTU38: MTIOC8B; SHOSTIF: HSPI_CK; XSPI0: XSPI0_ECS0#" - I - - + P14_3 M14 - - - - Disabled - - "ETHER_ETH0: ETH0_COL; ETHER_ETH2: ETH2_COL; MTU30: MTIOC0A; SHOSTIF: HSPI_IO1; XSPI0: XSPI0_RSTO1#" - None - - + P14_4 J13 XSPI0_XSPI0_DS XSPI0_DS High - "Peripheral mode" - - "BSC: BS#; ETHER_ESC: ESC_IRQ; MTU30: MTIOC0B; PHOSTIF: HBS#; XSPI0: XSPI0_DS" - IO - - + P14_5 J12 XSPI0_XSPI0_CKN XSPI0_CKN High - "Peripheral mode" - - "BSC: CS3#; MTU_POE3: POE8#; SHOSTIF: HSPI_INT#; XSPI0: XSPI0_CKN" - O - - + P14_6 K13 XSPI0_XSPI0_CKP XSPI0_CKP High - "Peripheral mode" - - "BSC: A21; XSPI0: XSPI0_CKP" - O - - + P14_7 M15 XSPI0_XSPI0_IO0 XSPI0_IO0 High - "Peripheral mode" - - "BSC: A22; BSC: BS#; SCI5: SCK5; SPI1: SPI_MISO1; XSPI0: XSPI0_IO0" - IO - - + P15_0 L11 XSPI0_XSPI0_IO1 XSPI0_IO1 High - "Peripheral mode" - - "BSC: A23; BSC: CKE; SCI5: RXD_MISO5; SCI5: SCL5; SPI1: SPI_MOSI1; XSPI0: XSPI0_IO1" - IO - - + P15_1 K14 XSPI0_XSPI0_IO2 XSPI0_IO2 High - "Peripheral mode" - - "BSC: A24; BSC: CAS#; MTU30: MTIOC0C; SCI5: SDA5; SCI5: TXD_MOSI5; SPI1: SPI_SSL10; XSPI0: XSPI0_IO2" - IO - - + P15_2 K15 XSPI0_XSPI0_IO3 XSPI0_IO3 High - "Peripheral mode" - - "BSC: A25; BSC: RAS#; MTU30: MTIOC0D; SCI5: CTS_RTS_SS5#; SPI1: SPI_SSL11; XSPI0: XSPI0_IO3" - IO - - + P15_3 K11 XSPI0_XSPI0_IO4 XSPI0_IO4 High - "Peripheral mode" - - "BSC: D11; DSMIF1: MCLK1; MTU38: MTIOC8C; XSPI0: XSPI0_IO4" - IO - - + P15_4 H13 XSPI0_XSPI0_IO5 XSPI0_IO5 High - "Peripheral mode" - - "BSC: D12; DSMIF1: MDAT1; MTU38: MTIOC8D; XSPI0: XSPI0_IO5" - IO - - + P15_5 J14 XSPI0_XSPI0_IO6 XSPI0_IO6 High - "Peripheral mode" - - "BSC: D13; DSMIF2: MCLK2; XSPI0: XSPI0_IO6" - IO - - + P15_6 H12 XSPI0_XSPI0_IO7 XSPI0_IO7 High - "Peripheral mode" - - "BSC: D14; DSMIF2: MDAT2; SPI1: SPI_SSL12; XSPI0: XSPI0_IO7" - IO - - + P15_7 J15 XSPI0_XSPI0_CS0# OSPI_CS High - "Peripheral mode" - - "DMAC: TEND; SCI5: CTS5#; SPI1: SPI_SSL13; XSPI0: XSPI0_CS0#" - O - - + P16_0 G13 XSPI0_XSPI0_CS1# ORAM_CS0 High - "Peripheral mode" - - "DSMIF3: MCLK3; ETHER_ETH0: ETH0_TXER; ETHER_ETH2: ETH2_REFCLK; SCI0: SDA0; SCI0: TXD_MOSI0; SHOSTIF: HSPI_CS#; SPI3: SPI_MOSI3; XSPI0: XSPI0_CS1#" - O - - + P16_1 H11 XSPI0_XSPI0_RESET0# XSPI0_RESET0 Low - "Peripheral mode" - - "ADC0: ADTRG0#; BSC: CS2#; CMTW0: CMTW0_TOC1; DSMIF3: MDAT3; PHOSTIF: HCS1#; SCI0: RXD_MISO0; SCI0: SCL0; SPI3: SPI_MISO3; XSPI0: XSPI0_RESET0#" - O - - + P16_2 H14 - - - - Disabled - - "IRQ: NMI; PHOSTIF: HERROUT#; SCI0: CTS0#; SHOSTIF: HSPI_IO2; SPI3: SPI_RSPCK3; USB_HS: USB_EXICEN; XSPI0: XSPI0_RESET1#" - None - - + P16_3 G12 GPIO SW1 - - "Input mode" - - "BSC: CS3#; ETHER_ETH1: ETH1_CRS; ETHER_ETH1: ETH1_TXER; GPT: GTADSMP1; IRQ: IRQ7; SCI0: SCK0; SHOSTIF: HSPI_IO3; SPI3: SPI_SSL30; XSPI0: XSPI0_RSTO0#" - IO - - + P16_5 H15 SCI0_TXD_MOSI0 UART_USB_TX High - "Peripheral mode" - - "BSC: A15; MTU35: MTIC5U; SCI0: SDA0; SCI0: TXD_MOSI0; SHOSTIF: HSPI_IO4" - IO - - + P16_6 G11 SCI0_RXD_MISO0 UART_USB_RX High - "Peripheral mode" - - "BSC: CS0#; IRQ: IRQ8; MTU35: MTIC5V; PHOSTIF: HCS0#; SCI0: RXD_MISO0; SCI0: SCL0; SHOSTIF: HSPI_IO5" - IO - - + P16_7 G14 - - - - Disabled - - "BSC: A13; MTU35: MTIC5W; PHOSTIF: HA13; SCI0: SCK0; XSPI1: XSPI1_IO0" - None - - + P17_0 F12 - - - - Disabled - - "ETHER_ESC: ESC_IRQ; SCI0: CTS_RTS_SS0#; XSPI1: XSPI1_IO1" - None - - + P17_3 F14 GPIO LED_RED2 Low - "Output mode (Low & Not Into Input)" - - "ADC1: ADTRG1#; DMAC: DREQ; GPT_POEG: GTETRGA; MTU_POE3: POE0#; SPI3: SPI_SSL31; TRACE: TRACECTL; XSPI1: XSPI1_IO2" - IO - - + P17_4 F13 - - - - Disabled - - "DMAC: DACK; GPT0: GTIOC0A; GPT_POEG: GTETRGB; MTU33: MTIOC3C; SCI3: CTS3#; SPI3: SPI_SSL32; TRACE: TRACECLK; XSPI1: XSPI1_IO3" - None - - + P17_5 F15 USB_HS_USB_OVRCUR USB_OVRCUR Low - "Peripheral mode" - - "DMAC: TEND; GPT0: GTIOC0B; GPT_POEG: GTETRGC; MTU33: MTIOC3A; USB_HS: USB_OVRCUR" - I - - + P17_6 G15 - - - - Disabled - - "BSC: RD_WR#; GPT1: GTIOC1A; MTU33: MTIOC3B; PHOSTIF: HWRSTB#; SCI3: SCK3; XSPI1: XSPI1_DS" - None - - + P17_7 E15 SCI3_RXD_MISO3 SCI_RXD High - "Peripheral mode" - - "BSC: RD#; DMAC: DACK; GPT2: GTIOC2A; GPT3: GTIOC3A; MTU34: MTIOC4A; MTU34: MTIOC4C; PHOSTIF: HRD#; SCI3: RXD_MISO3; SCI3: SCL3; XSPI1: XSPI1_CKP" - IO - - + P18_0 E14 SCI3_TXD_MOSI3 SCI_TXD High - "Peripheral mode" - - "BSC: WE0#_DQMLL; GPT2: GTIOC2A; GPT3: GTIOC3A; MTU34: MTIOC4A; MTU34: MTIOC4C; PHOSTIF: HWR0#; SCI3: SDA3; SCI3: TXD_MOSI3; SHOSTIF: HSPI_IO6" - IO - - + P18_1 D15 - - - - Disabled - - "ADC1: ADTRG1#; BSC: WE1#_DQMLU; GPT1: GTIOC1B; IRQ: IRQ10; MTU33: MTIOC3D; PHOSTIF: HWR1#; SCI3: CTS_RTS_SS3#; SHOSTIF: HSPI_IO7" - None - - + P18_2 D14 GPIO LED_GREEN Low - "Output mode (Low & Not Into Input)" - - "BSC: BS#; ETHER_ETH1: ETH1_COL; GPT2: GTIOC2B; GPT3: GTIOC3B; IIC2: IIC_SDA2; MTU34: MTIOC4B; MTU34: MTIOC4D; SCI0: SCK0; XSPI1: XSPI1_CS0#" - IO - - + P18_3 E13 - - - - Disabled - - "BSC: CKE; CANFD1: CANRXDP1; CMTW1: CMTW1_TIC1; ETHER_ETH2: ETH2_CRS; GPT2: GTIOC2B; GPT3: GTIOC3B; IRQ: IRQ0; MTU34: MTIOC4B; MTU34: MTIOC4D; XSPI1: XSPI1_IO4" - None - - + P18_4 E12 SPI2_SPI_RSPCK2 SCK High - "Peripheral mode" - - "BSC: CAS#; CANFD0: CANTX0; ETHER_ETH1: ETH1_CRS; IRQ: IRQ1; MTU35: MTIC5U; SCI4: SDA4; SCI4: TXD_MOSI4; SPI2: SPI_RSPCK2; XSPI1: XSPI1_IO5" - IO - - + P18_5 D13 SPI2_SPI_MOSI2 MOSI High - "Peripheral mode" - - "BSC: RAS#; CANFD0: CANRX0; ETHER_ETH2: ETH2_COL; MTU35: MTIC5V; SCI4: RXD_MISO4; SCI4: SCL4; SPI2: SPI_MOSI2; TRACE: TRACECTL; XSPI1: XSPI1_IO6" - IO - - + P18_6 C15 SPI2_SPI_MISO2 MISO High - "Peripheral mode" - - "ADC0: ADTRG0#; ETHER_ETH1: ETH1_COL; IIC2: IIC_SCL2; IRQ: IRQ11; MTU35: MTIC5W; SCI4: DE4; SCI4: SCK4; SPI2: SPI_MISO2; TRACE: TRACECLK; XSPI1: XSPI1_IO7" - IO - - + P19_0 B15 USB_HS_USB_VBUSEN USB_VBUSEN Low - "Peripheral mode" - - "USB_HS: USB_VBUSEN" - O - - + P20_1 B9 - ETH_LED2_MDV0 - - Disabled - - "ETHER_ESC: ESC_LINKACT0; ETHER_ETHSW: ETHSW_PTPOUT3; ETHER_ETHSW: ETHSW_TDMAOUT0" - None - - + P20_2 D8 - ETH_LED0_MDV1 - - Disabled - - "ETHER_ESC: ESC_LEDRUN; ETHER_ESC: ESC_LEDSTER; ETHER_ETHSW: ETHSW_PTPOUT2; ETHER_ETHSW: ETHSW_TDMAOUT1; SCI3: DE3" - None - - + P20_3 D9 - ETH_LED1_MDV2 - - Disabled - - "ETHER_ESC: ESC_LEDERR; ETHER_ETHSW: ETHSW_PTPOUT1; ETHER_ETHSW: ETHSW_TDMAOUT2" - None - - + P20_4 A9 - ETH_LED3_MDV3 - - Disabled - - "ETHER_ESC: ESC_LINKACT1; ETHER_ETHSW: ETHSW_PTPOUT0; ETHER_ETHSW: ETHSW_TDMAOUT3" - None - - + P21_1 B8 SPI2_SPI_SSL20 CS High - "Peripheral mode" - - "BSC: D0; CMTW0: CMTW0_TIC0; DSMIF0: MCLK0; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; GPT14: GTIOC14A; IIC1: IIC_SCL1; MTU36: MTIOC6A; PHOSTIF: HD0; SCI5: SCK5; SHOSTIF: HSPI_INT#; SPI2: SPI_SSL20; TRACE: TRACEDATA0" - IO - - + P21_2 C8 - - - - Disabled - - "BSC: D1; CMTW0: CMTW0_TIC1; DSMIF0: MDAT0; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; GPT14: GTIOC14B; IIC1: IIC_SDA1; MTU36: MTIOC6B; PHOSTIF: HD1; SCI5: RXD_MISO5; SCI5: SCL5; SPI2: SPI_MISO2; TRACE: TRACEDATA1" - None - - + P21_3 A8 - - - - Disabled - - "BSC: D2; DSMIF1: MCLK1; GPT15: GTIOC15A; IRQ: NMI; MTU36: MTIOC6C; PHOSTIF: HD2; SCI5: SDA5; SCI5: TXD_MOSI5; SPI3: SPI_SSL33; TRACE: TRACEDATA2" - None - - + P21_4 E7 - - - - Disabled - - "BSC: D3; DSMIF1: MDAT1; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT1; GPT15: GTIOC15B; MBXSEM: MBX_HINT#; MTU36: MTIOC6D; PHOSTIF: HD3; SCI5: CTS_RTS_SS5#; SPI0: SPI_SSL02; TRACE: TRACEDATA3" - None - - + P21_5 C7 - - - - Disabled - - "ADC1: ADTRG1#; BSC: D4; CMTW1: CMTW1_TOC1; DSMIF2: MCLK2; GPT16: GTIOC16A; IRQ: IRQ6; MTU37: MTIOC7A; PHOSTIF: HD4; SCI5: CTS5#; SPI0: SPI_MISO0; TRACE: TRACEDATA4" - None - - + P21_6 D7 - - - - Disabled - - "BSC: D5; DMAC: TEND; DSMIF2: MDAT2; GPT16: GTIOC16B; IRQ: IRQ9; MTU37: MTIOC7B; PHOSTIF: HD5; SCI0: CTS0#; TRACE: TRACEDATA5" - None - - + P21_7 B7 - - - - Disabled - - "BSC: D6; DMAC: DREQ; DSMIF3: MCLK3; GPT17: GTIOC17A; IRQ: IRQ10; MTU37: MTIOC7C; PHOSTIF: HD6; SCI0: DE0; TRACE: TRACEDATA6" - None - - + P22_0 A7 - - - - Disabled - - "BSC: D7; DSMIF3: MDAT3; GPT17: GTIOC17B; IRQ: IRQ15; MTU37: MTIOC7D; PHOSTIF: HD7; SCI5: DE5; TRACE: TRACEDATA7" - None - - + P22_1 A6 GPIO ETH_LED5 Low - "Output mode (Low & Not Into Input)" - - "BSC: D8; ETHER_ESC: ESC_LINKACT2; GPT_POEG: GTETRGB; MTU_POE3: POE4#; PHOSTIF: HD8; SCI4: CTS_RTS_SS4#; TRACE: TRACECTL" - IO - - + P22_2 C6 - - - - Disabled - - "BSC: D9; DSMIF1: MCLK1; GPT_POEG: GTETRGSA; IRQ: IRQ4; MTU38: MTIOC8C; PHOSTIF: HD9; SPI1: SPI_SSL12; TRACE: TRACECLK" - None - - + P22_3 B6 GPIO LED_ORANGE Low - "Output mode (Low & Not Into Input)" - - "BSC: D10; GPT_POEG: GTETRGSB; MTU38: MTIOC8D; PHOSTIF: HD10; SCI5: RXD_MISO5; SCI5: SCL5" - IO - - + P23_7 D6 - ETH2_RXD0 - - Disabled - - "BSC: BS#; BSC: D11; DSMIF4: MCLK4; ETHER_ETH2: ETH2_RXD0; GPT_POEG: GTETRGA; MTU30: MTIOC0A; PHOSTIF: HD11; SCI1: SCK1" - None - - + P24_0 A5 - ETH2_RXD1 - - Disabled - - "BSC: CKE; BSC: D12; DMAC: DREQ; DSMIF4: MDAT4; ETHER_ETH2: ETH2_RXD1; GPT_POEG: GTETRGB; MTU30: MTIOC0B; PHOSTIF: HD12; SCI1: RXD_MISO1; SCI1: SCL1" - None - - + P24_1 B5 - ETH2_RXCLK - - Disabled - - "BSC: CAS#; BSC: D13; DSMIF5: MCLK5; ETHER_ETH2: ETH2_RXCLK_REF_CLK_RXC; GPT_POEG: GTETRGC; MTU30: MTIOC0C; MTU_POE3: POE8#; PHOSTIF: HD13" - None - - + P24_2 C5 - ETH2_RXD2 - - Disabled - - "BSC: D14; BSC: RAS#; DSMIF5: MDAT5; ETHER_ETH2: ETH2_RXD2; GPT_POEG: GTETRGD; MTU30: MTIOC0D; PHOSTIF: HD14; SCI1: SDA1; SCI1: TXD_MOSI1" - None - - + RES# P6 SYSTEM_RES# - - - - - - - - I "Read only" - + TRST# E2 SYSTEM_TRST# - - - - - - - - I "Read only" - + USB_DM P13 SYSTEM_USB_DM - - - - - - - - IO "Read only" - + USB_DP R13 SYSTEM_USB_DP - - - - - - - - IO "Read only" - + USB_RREF P15 SYSTEM_USB_RREF - - - - - - - - I "Read only" - + VCC1833_0 L6 SYSTEM_VCC1833_0 - - - - - - - - I "Read only" - + VCC1833_1 K5 SYSTEM_VCC1833_1 - - - - - - - - I "Read only" - + VCC1833_2 E5 SYSTEM_VCC1833_2 - - - - - - - - I "Read only" - + VCC1833_3 J11 SYSTEM_VCC1833_3 - - - - - - - - I "Read only" - + VCC1833_4 F11 SYSTEM_VCC1833_4 - - - - - - - - I "Read only" - + VCC18_ADC0 E11 SYSTEM_VCC18_ADC0 - - - - - - - - I "Read only" - + VCC18_ADC1 E9 SYSTEM_VCC18_ADC1 - - - - - - - - I "Read only" - + VCC18_PLL0 P9 SYSTEM_VCC18_PLL0 - - - - - - - - I "Read only" - + VCC18_PLL1 N9 SYSTEM_VCC18_PLL1 - - - - - - - - I "Read only" - + VCC18_USB P11 SYSTEM_VCC18_USB - - - - - - - - I "Read only" - + VCC33 E6 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33 E8 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33 M10 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33 L5 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33_USB R11 SYSTEM_VCC33_USB - - - - - - - - I "Read only" - + VDD H10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD G10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F8 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F9 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD G6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD H6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD J6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K7 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K8 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD P7 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD J10 SYSTEM_VDD - - - - - - - - I "Read only" - + VREFH0 C11 SYSTEM_VREFH0 - - - - - - - - I "Read only" - + VREFH1 C10 SYSTEM_VREFH1 - - - - - - - - I "Read only" - + VSS A1 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R1 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS A10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R5 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS A15 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS F7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS G7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS G8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS G9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS N10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS H7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS N14 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS H8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS H9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS E10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS J7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS J8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS J9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS K9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS D10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS D11 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS L1 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS L15 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS P8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R15 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS_ADC D12 SYSTEM_VSS_ADC - - - - - - - - I "Read only" - + VSS_USB P12 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB P14 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB N13 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB N15 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB R12 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB R14 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + XTAL R8 CGC_XTAL - - - - - - - - O "Read only" - + R9A07G084M04GBG.pincfg -> + AN000 B13 SYSTEM_AN000 - - - - - - - - I "Read only" - + AN001 C12 SYSTEM_AN001 - - - - - - - - I "Read only" - + AN002 B14 SYSTEM_AN002 - - - - - - - - I "Read only" - + AN003 C13 SYSTEM_AN003 - - - - - - - - I "Read only" - + AN100 B12 SYSTEM_AN100 - - - - - - - - I "Read only" - + AN101 A14 SYSTEM_AN101 - - - - - - - - I "Read only" - + AN102 B11 SYSTEM_AN102 - - - - - - - - I "Read only" - + AN103 A13 SYSTEM_AN103 - - - - - - - - I "Read only" - + AN104 A12 SYSTEM_AN104 - - - - - - - - I "Read only" - + AN105 B10 SYSTEM_AN105 - - - - - - - - I "Read only" - + AN106 A11 SYSTEM_AN106 - - - - - - - - I "Read only" - + AN107 C9 SYSTEM_AN107 - - - - - - - - I "Read only" - + AVCC18_TSU C14 SYSTEM_AVCC18_TSU - - - - - - - - I "Read only" - + AVCC18_USB P10 SYSTEM_AVCC18_USB - - - - - - - - I "Read only" - + AVCC18_USB R10 SYSTEM_AVCC18_USB - - - - - - - - I "Read only" - + BSCANP G2 SYSTEM_BSCANP - - - - - - - - I "Read only" - + EXTAL R7 CGC_EXTAL - - - - - - - - I "Read only" - + EXTCLKIN R6 CGC_EXTCLKIN - - - - - - - - I "Read only" - + MDX P5 SYSTEM_MDX - - - - - - - - IO "Read only" - + P00_0 C4 - ETH2_RXD3 - - Disabled - - "BSC: D15; ETHER_ETH2: ETH2_RXD3; PHOSTIF: HD15; SCI2: DE2; SCI2: SCK2" - None - - + P00_1 D5 - ETH2_RXDV - - Disabled - - "BSC: A13; ETHER_ETH2: ETH2_RXDV_CRSDV_RXCTL; IRQ: IRQ0; MTU35: MTIC5U; SCI2: RXD_MISO2; SCI2: SCL2" - None - - + P00_2 A3 - ETH2_TXEN - - Disabled - - "BSC: RD#; ETHER_ETH2: ETH2_TXEN_TXCTL; MTU35: MTIC5V; SCI2: SDA2; SCI2: TXD_MOSI2; USB_HS: USB_OVRCUR" - None - - + P00_3 B3 - ETH2_REFCLK - - Disabled - - "BSC: RD_WR#; ETHER_ETH2: ETH2_REFCLK; ETHER_ETH2: ETH2_RMII2_REFCLK; IRQ: IRQ1; MTU35: MTIC5W; SCI2: CTS_RTS_SS2#" - None - - + P00_4 A4 - - - - Disabled - - "BSC: WAIT#; DSMIF0: MCLK0; ETHER_ETH2: ETH2_RXER; GPT0: GTIOC0A; IRQ: IRQ13; MTU33: MTIOC3A; PHOSTIF: HWAIT#" - None - - + P00_5 B4 - ETH2_LINK - - Disabled - - "BSC: CS0#; DSMIF0: MDAT0; ETHER_ESC: ESC_PHYLINK0; ETHER_ESC: ESC_PHYLINK2; ETHER_ETHSW: ETHSW_PHYLINK0; ETHER_ETHSW: ETHSW_PHYLINK2; GPT0: GTIOC0B; MTU33: MTIOC3C" - None - - + P00_6 C3 - ETH2_TXCLK - - Disabled - - "BSC: CS5#; ETHER_ETH2: ETH2_TXCLK_TXC; GPT1: GTIOC1A; MTU33: MTIOC3B" - None - - + P00_7 D4 - - - - Disabled - - "BSC: RAS#; GPT2: GTIOC2A; IRQ: IRQ13; MTU34: MTIOC4A" - None - - + P01_0 A2 - - - - Disabled - - "BSC: CAS#; DSMIF1: MCLK1; ETHER_ESC: ESC_MDIO; ETHER_ETHSW: ETHSW_MDIO; ETHER_GMAC: GMAC_MDIO; GPT3: GTIOC3A; MTU34: MTIOC4C; SCI2: CTS2#" - None - - + P01_1 D3 - - - - Disabled - - "BSC: CKE; DSMIF1: MDAT1; ETHER_ESC: ESC_MDC; ETHER_ETHSW: ETHSW_MDC; ETHER_GMAC: GMAC_MDC; GPT1: GTIOC1B; MTU33: MTIOC3D; SCI2: DE2" - None - - + P01_2 B2 - ETH2_TXD3 - - Disabled - - "BSC: CS2#; ETHER_ETH2: ETH2_TXD3; GPT2: GTIOC2B; IRQ: IRQ2; MTU34: MTIOC4B" - None - - + P01_3 C2 - ETH2_TXD2 - - Disabled - - "BSC: AH#; ETHER_ETH2: ETH2_TXD2; GPT3: GTIOC3B; MTU34: MTIOC4D" - None - - + P01_4 E4 - ETH2_TXD1 - - Disabled - - "BSC: WE1#_DQMLU; ETHER_ETH2: ETH2_TXD1; IRQ: IRQ3; MTU_POE3: POE0#" - None - - + P01_5 B1 - ETH2_TXD0 - - Disabled - - "BSC: WE0#_DQMLL; ETHER_ETH2: ETH2_TXD0" - None - - + P01_6 D2 - - - - Disabled - - "BSC: A20; CANFD1: CANTXDP1; ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_GMAC: GMAC_PTPTRG1; GPT9: GTIOC9A; MTU31: MTIOC1A; PHOSTIF: HA20; SCI1: CTS1#; TRACE: TRACEDATA0" - None - - + P01_7 C1 - CAN_RX Low - Disabled - - "ADC0: ADTRG0#; BSC: A19; CANFD0: CANRX0; ETHER_ETHSW: ETHSW_LPI1; GPT9: GTIOC9B; MTU31: MTIOC1B; PHOSTIF: HA19; SCI1: SCK1; SPI3: SPI_RSPCK3; TRACE: TRACEDATA1" - I - - + P02_0 E3 - - - - Disabled - - "BSC: A18; CANFD1: CANTX1; ETHER_ETHSW: ETHSW_LPI2; GPT: GTADSML0; IRQ: IRQ4; PHOSTIF: HA18; SCI1: RXD_MISO1; SCI1: SCL1; SPI3: SPI_MISO3; TRACE: TRACEDATA2; USB_HS: USB_OTGID" - None - - + P02_1 D1 - - - - Disabled - - "BSC: A17; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT1; PHOSTIF: HA17; SCI1: DE1" - None - - + P02_2 F3 - CAN_TX Low - Disabled - - "BSC: A16; CANFD0: CANTX0; ETHER_ETHSW: ETHSW_TDMAOUT0; GPT10: GTIOC10A; IRQ: IRQ14; MTU32: MTIOC2A; MTU_POE3: POE10#; PHOSTIF: HA16; RTC: RTCAT1HZ; SCI1: SDA1; SCI1: TXD_MOSI1; SPI3: SPI_MOSI3" - O - - + P02_3 E1 - - - - Disabled - - "BSC: A15; BSC: AH#; CANFD1: CANRX1; ETHER_ETHSW: ETHSW_TDMAOUT1; GPT10: GTIOC10B; IRQ: IRQ15; MTU32: MTIOC2B; MTU_POE3: POE11#; PHOSTIF: HA15; SCI1: CTS_RTS_SS1#; SPI3: SPI_SSL30" - None - - + P02_4 F4 JTAG/SWD_TDO TDO High - "Peripheral mode" - - "BSC: WE0#_DQMLL; JTAG/SWD: TDO; SCI1: DE1; SPI3: SPI_SSL33" - O - - + P02_5 F2 JTAG/SWD_TDI TDI Low - "Peripheral mode" - - "BSC: WE1#_DQMLU; ETHER_ETHSW: ETHSW_TDMAOUT3; JTAG/SWD: TDI; SCI5: SCK5; SPI3: SPI_SSL31" - I - - + P02_6 F5 JTAG/SWD_TMS_SWDIO TMS High - "Peripheral mode" - - "JTAG/SWD: TMS_SWDIO; SCI5: RXD_MISO5; SCI5: SCL5" - IO - - + P02_7 F1 JTAG/SWD_TCK_SWCLK TCK Low - "Peripheral mode" - - "JTAG/SWD: TCK_SWCLK; SCI5: SDA5; SCI5: TXD_MOSI5" - I - - + P03_0 G3 - ETH_LED4 Low - Disabled - - "BSC: A14; BSC: CS5#; CANFD1: CANTXDP1; GPT: GTADSML1; IRQ: IRQ14; PHOSTIF: HA14; SCI2: SCK2; SPI3: SPI_SSL32; TRACE: TRACEDATA3" - IO - - + P03_5 G1 - - - - Disabled - - "BSC: A12; DSMIF2: MCLK2; ETHER_ETH2: ETH2_CRS; GPT4: GTIOC4A; IRQ: IRQ5; MTU33: MTIOC3A; PHOSTIF: HA12; SCI2: RXD_MISO2; SCI2: SCL2" - None - - + P03_6 G4 - - - - Disabled - - "BSC: A11; DSMIF2: MDAT2; ETHER_ETH2: ETH2_COL; GPT4: GTIOC4B; IRQ: IRQ8; MTU33: MTIOC3B; PHOSTIF: HA11; SCI2: SDA2; SCI2: TXD_MOSI2; SPI1: SPI_SSL13; TRACE: TRACEDATA4" - None - - + P03_7 G5 - - - - Disabled - - "BSC: A10; ETHER_ETH2: ETH2_TXER; GPT5: GTIOC5A; IRQ: IRQ9; MTU33: MTIOC3C; PHOSTIF: HA10; SCI3: SCK3; TRACE: TRACEDATA5" - None - - + P04_0 H1 - - - - Disabled - - "BSC: A9; GPT5: GTIOC5B; MTU33: MTIOC3D; PHOSTIF: HA9; SCI3: RXD_MISO3; SCI3: SCL3; TRACE: TRACEDATA6" - None - - + P04_1 H2 - LED_RED1 Low - Disabled - - "BSC: CKIO; IIC2: IIC_SDA2; PHOSTIF: HCKIO; SCI3: SDA3; SCI3: TXD_MOSI3; SPI0: SPI_MOSI0" - IO - - + P04_4 H4 - ETH_LED6 Low - Disabled - - "BSC: A8; GPT: GTADSMP0; IRQ: IRQ10; MTU_POE3: POE10#; PHOSTIF: HA8; SCI3: CTS3#; SPI1: SPI_RSPCK1; TRACE: TRACEDATA7" - IO - - + P04_5 H3 - - - - Disabled - - "BSC: A7; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT0; PHOSTIF: HA7; SCI3: DE3" - None - - + P04_6 H5 - - - - Disabled - - "BSC: A6; DMAC: DACK; ETHER_ETH1: ETH1_TXER; PHOSTIF: HA6; RTC: RTCAT1HZ" - None - - + P04_7 J1 - - - - Disabled - - "BSC: A5; ETHER_ETH0: ETH0_TXER; ETHER_ETH2: ETH2_TXER; PHOSTIF: HA5; SPI2: SPI_SSL21" - None - - + P05_0 J5 - ETH_LED7 Low - Disabled - - "BSC: A4; CANFD0: CANTXDP0; CMTW0: CMTW0_TOC0; DSMIF3: MCLK3; ETHER_ETH1: ETH1_CRS; GPT6: GTIOC6A; IRQ: IRQ12; MTU34: MTIOC4A; PHOSTIF: HA4; SCI5: CTS_RTS_SS5#; USB_HS: USB_VBUSEN" - IO - - + P05_1 J2 - - - - Disabled - - "BSC: A3; CANFD0: CANRXDP0; CMTW0: CMTW0_TIC1; DSMIF3: MDAT3; ETHER_ETH1: ETH1_COL; GPT6: GTIOC6B; IRQ: IRQ13; MTU34: MTIOC4B; PHOSTIF: HA3; SCI5: CTS5#; USB_HS: USB_EXICEN" - None - - + P05_2 J4 - SCL Low - Disabled - - "BSC: A2; CANFD0: CANRX0; CMTW0: CMTW0_TOC0; DMAC: DREQ; ETHER_ETH0: ETH0_CRS; GPT7: GTIOC7A; GPT_POEG: GTETRGSA; IIC1: IIC_SCL1; IRQ: IRQ14; MTU34: MTIOC4C; PHOSTIF: HA2; SCI5: DE5; USB_HS: USB_VBUSEN" - IO - - + P05_3 J3 - SDA Low - Disabled - - "BSC: A1; CANFD0: CANTX0; CMTW0: CMTW0_TIC0; ETHER_ETH0: ETH0_COL; GPT7: GTIOC7B; GPT_POEG: GTETRGSB; IIC1: IIC_SDA1; IRQ: IRQ15; MTU34: MTIOC4D; MTU_POE3: POE11#; PHOSTIF: HA1; SCI4: SCK4; USB_HS: USB_EXICEN" - IO - - + P05_4 K1 - SW2 - - Disabled - - "BSC: A0; CANFD0: CANTXDP0; DMAC: DACK; ETHER_ETHSW: ETHSW_LPI0; GPT14: GTIOC14A; IRQ: IRQ12; PHOSTIF: HA0; SCI4: RXD_MISO4; SCI4: SCL4; SPI0: SPI_SSL00; USB_HS: USB_OVRCUR" - IO - - + P05_5 K2 - ETH1_LINK - - Disabled - - "CMTW0: CMTW0_TOC1; ETHER_ESC: ESC_PHYLINK1; ETHER_ETHSW: ETHSW_PHYLINK1; GPT14: GTIOC14B; SPI2: SPI_RSPCK2" - None - - + P05_6 K3 - - - - Disabled - - "CMTW1: CMTW1_TIC0; ETHER_ETH1: ETH1_RXER; GPT15: GTIOC15A; IRQ: IRQ12; SPI2: SPI_SSL22" - None - - + P05_7 M1 - ETH1_TXD2 - - Disabled - - "CMTW1: CMTW1_TOC1; ETHER_ETH1: ETH1_TXD2; GPT15: GTIOC15B; SCI4: SDA4; SCI4: TXD_MOSI4; SPI2: SPI_SSL23" - None - - + P06_0 L2 - ETH1_TXD3 - - Disabled - - "CANFD1: CANRX1; CMTW1: CMTW1_TOC0; ETHER_ETH1: ETH1_TXD3; GPT16: GTIOC16A; SCI4: CTS_RTS_SS4#; SPI2: SPI_SSL23" - None - - + P06_1 L3 - ETH1_REFCLK - - Disabled - - "CANFD1: CANTX1; ETHER_ETH1: ETH1_REFCLK; ETHER_ETH1: ETH1_RMII1_REFCLK; GPT16: GTIOC16B; SCI4: CTS4#; SPI2: SPI_SSL22" - None - - + P06_2 M2 - ETH1_TXD1 - - Disabled - - "CANFD1: CANRXDP1; ETHER_ETH1: ETH1_TXD1; GPT17: GTIOC17A" - None - - + P06_3 K4 - ETH1_TXD0 - - Disabled - - "CANFD1: CANTXDP1; CMTW1: CMTW1_TIC1; ETHER_ETH1: ETH1_TXD0; GPT17: GTIOC17B; SCI4: DE4; SPI1: SPI_MISO1" - None - - + P06_4 N1 - ETH1_TXCLK - - Disabled - - "ETHER_ETH1: ETH1_TXCLK_TXC; GPT11: GTIOC11A; SPI1: SPI_MOSI1" - None - - + P06_5 N2 - ETH1_TXEN - - Disabled - - "ETHER_ETH1: ETH1_TXEN_TXCTL; GPT11: GTIOC11B" - None - - + P06_6 L4 - ETH1_RXD0 - - Disabled - - "ETHER_ETH1: ETH1_RXD0; GPT12: GTIOC12A; SPI1: SPI_SSL10" - None - - + P06_7 M3 - ETH1_RXD1 - - Disabled - - "ETHER_ETH1: ETH1_RXD1; GPT12: GTIOC12B; SPI1: SPI_SSL11" - None - - + P07_0 P1 - ETH1_RXD2 - - Disabled - - "ETHER_ETH1: ETH1_RXD2; GPT13: GTIOC13A" - None - - + P07_1 N3 - ETH1_RXD3 - - Disabled - - "ETHER_ETH1: ETH1_RXD3; GPT13: GTIOC13B" - None - - + P07_2 P2 - ETH1_RXDV - - Disabled - - "ETHER_ETH1: ETH1_RXDV_CRSDV_RXCTL" - None - - + P07_3 M4 - ETH1_RXCLK - - Disabled - - "ETHER_ETH1: ETH1_RXCLK_REF_CLK_RXC" - None - - + P07_4 R2 - USB_VBUSIN - - Disabled - - "ADC0: ADTRG0#; IRQ: IRQ1; USB_HS: USB_VBUSIN" - I - - + P08_4 N4 - ETH0_RXD3 - - Disabled - - "ETHER_ETH0: ETH0_RXD3; MTU36: MTIOC6A" - None - - + P08_5 P3 - ETH0_RXDV - - Disabled - - "ETHER_ETH0: ETH0_RXDV_CRSDV_RXCTL; MTU36: MTIOC6B" - None - - + P08_6 M5 - ETH0_RXCLK - - Disabled - - "ETHER_ETH0: ETH0_RXCLK_REF_CLK_RXC; MTU36: MTIOC6C" - None - - + P08_7 N5 - ETH_MDC Low - Disabled - - "ETHER_ESC: ESC_MDC; ETHER_ETHSW: ETHSW_MDC; ETHER_GMAC: GMAC_MDC; MTU36: MTIOC6D" - O - - + P09_0 P4 - ETH_MDIO Low - Disabled - - "ETHER_ESC: ESC_MDIO; ETHER_ETHSW: ETHSW_MDIO; ETHER_GMAC: GMAC_MDIO; MTU37: MTIOC7A" - IO - - + P09_1 R3 - ETH0_REFCLK - - Disabled - - "ETHER_ETH0: ETH0_REFCLK; ETHER_ETH0: ETH0_RMII0_REFCLK; MTU37: MTIOC7B" - None - - + P09_2 N6 - - - - Disabled - - "ETHER_ETH0: ETH0_RXER; IRQ: IRQ0; MTU37: MTIOC7C" - None - - + P09_3 R4 - ETH0_TXD3 - - Disabled - - "ETHER_ETH0: ETH0_TXD3; MTU37: MTIOC7D" - None - - + P09_4 M6 - ETH0_TXD2 - - Disabled - - "ETHER_ETH0: ETH0_TXD2" - None - - + P09_5 N7 - ETH0_TXD1 - - Disabled - - "ETHER_ETH0: ETH0_TXD1" - None - - + P09_6 M7 - ETH0_TXD0 - - Disabled - - "ETHER_ETH0: ETH0_TXD0" - None - - + P09_7 L7 - ETH0_TXCLK - - Disabled - - "ETHER_ETH0: ETH0_TXCLK_TXC" - None - - + P10_0 N8 - ETH0_TXEN - - Disabled - - "ETHER_ETH0: ETH0_TXEN_TXCTL" - None - - + P10_1 M8 - ETH0_RXD0 - - Disabled - - "ETHER_ETH0: ETH0_RXD0" - None - - + P10_2 L8 - ETH0_RXD1 - - Disabled - - "ETHER_ETH0: ETH0_RXD1" - None - - + P10_3 L9 - ETH0_RXD2 - - Disabled - - "ETHER_ETH0: ETH0_RXD2; RTC: RTCAT1HZ" - None - - + P10_4 M9 - ETH0_LINK - - Disabled - - "ETHER_ESC: ESC_PHYLINK0; ETHER_ETHSW: ETHSW_PHYLINK0; IRQ: IRQ11" - None - - + P12_4 N11 - - - - Disabled - - "BSC: D15; ETHER_ETH1: ETH1_CRS; GPT8: GTIOC8B; MBXSEM: MBX_HINT#; MTU38: MTIOC8B; SPI0: SPI_SSL01; TRACE: TRACEDATA0" - None - - + P13_2 L10 - EEPROM_SCL Low - Disabled - - "BSC: A13; BSC: D9; DSMIF4: MCLK4; ETHER_ESC: ESC_I2CCLK; ETHER_ETHSW: ETHSW_PTPOUT2; GPT10: GTIOC10A; IIC0: IIC_SCL0; IRQ: IRQ5; MTU30: MTIOC0A; MTU_POE3: POE8#; SCI1: CTS_RTS_SS1#; SPI0: SPI_MISO0; TRACE: TRACEDATA6" - IO - - + P13_3 N12 - EEPROM_SDA Low - Disabled - - "BSC: D8; BSC: RD#; CMTW1: CMTW1_TOC0; DSMIF4: MDAT4; ETHER_ESC: ESC_I2CDATA; ETHER_ETHSW: ETHSW_PTPOUT3; GPT10: GTIOC10B; IIC0: IIC_SDA0; MTU30: MTIOC0B; MTU30: MTIOC0C; SCI1: CTS1#; SPI0: SPI_RSPCK0; TRACE: TRACEDATA7" - IO - - + P13_4 L12 - ESC_RESETOUT Low - Disabled - - "BSC: A0; ETHER_ESC: ESC_RESETOUT#; GPT8: GTIOC8B; MTU30: MTIOC0D" - IO - - + P13_5 M12 - SW3_Pin2 - - Disabled - - "ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_GMAC: GMAC_PTPTRG0; IIC2: IIC_SCL2; MTU3: MTCLKA; SPI1: SPI_RSPCK1; XSPI0: XSPI0_WP1#" - IO - - + P13_6 M13 - SW3_Pin1 - - Disabled - - "ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT0; MTU3: MTCLKB; XSPI0: XSPI0_WP0#" - IO - - + P13_7 M11 - SW3_Pin4 - - Disabled - - "ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_GMAC: GMAC_PTPTRG1; MBXSEM: MBX_HINT#; MTU3: MTCLKC; XSPI0: XSPI0_ECS1#" - IO - - + P14_0 L13 - SW3_Pin3 - - Disabled - - "ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT1; MTU3: MTCLKD; XSPI0: XSPI0_INT0#" - IO - - + P14_1 L14 - - - - Disabled - - "ETHER_ESC: ESC_LATCH0; ETHER_ESC: ESC_LATCH1; ETHER_ETH1: ETH1_COL; ETHER_GMAC: GMAC_PTPTRG1; GPT8: GTIOC8A; MTU38: MTIOC8A; SHOSTIF: HSPI_IO0; XSPI0: XSPI0_INT1#" - None - - + P14_2 K12 - XSPI0_ECS Low - Disabled - - "ETHER_ETH0: ETH0_CRS; ETHER_ETH2: ETH2_CRS; GPT8: GTIOC8B; IRQ: IRQ6; MTU38: MTIOC8B; SHOSTIF: HSPI_CK; XSPI0: XSPI0_ECS0#" - I - - + P14_3 M14 - - - - Disabled - - "ETHER_ETH0: ETH0_COL; ETHER_ETH2: ETH2_COL; MTU30: MTIOC0A; SHOSTIF: HSPI_IO1; XSPI0: XSPI0_RSTO1#" - None - - + P14_4 J13 - XSPI0_DS Low - Disabled - - "BSC: BS#; ETHER_ESC: ESC_IRQ; MTU30: MTIOC0B; PHOSTIF: HBS#; XSPI0: XSPI0_DS" - IO - - + P14_5 J12 - XSPI0_CKN Low - Disabled - - "BSC: CS3#; MTU_POE3: POE8#; SHOSTIF: HSPI_INT#; XSPI0: XSPI0_CKN" - O - - + P14_6 K13 - XSPI0_CKP Low - Disabled - - "BSC: A21; XSPI0: XSPI0_CKP" - O - - + P14_7 M15 - XSPI0_IO0 Low - Disabled - - "BSC: A22; BSC: BS#; SCI5: SCK5; SPI1: SPI_MISO1; XSPI0: XSPI0_IO0" - IO - - + P15_0 L11 - XSPI0_IO1 Low - Disabled - - "BSC: A23; BSC: CKE; SCI5: RXD_MISO5; SCI5: SCL5; SPI1: SPI_MOSI1; XSPI0: XSPI0_IO1" - IO - - + P15_1 K14 - XSPI0_IO2 Low - Disabled - - "BSC: A24; BSC: CAS#; MTU30: MTIOC0C; SCI5: SDA5; SCI5: TXD_MOSI5; SPI1: SPI_SSL10; XSPI0: XSPI0_IO2" - IO - - + P15_2 K15 - XSPI0_IO3 Low - Disabled - - "BSC: A25; BSC: RAS#; MTU30: MTIOC0D; SCI5: CTS_RTS_SS5#; SPI1: SPI_SSL11; XSPI0: XSPI0_IO3" - IO - - + P15_3 K11 - XSPI0_IO4 Low - Disabled - - "BSC: D11; DSMIF1: MCLK1; MTU38: MTIOC8C; XSPI0: XSPI0_IO4" - IO - - + P15_4 H13 - XSPI0_IO5 Low - Disabled - - "BSC: D12; DSMIF1: MDAT1; MTU38: MTIOC8D; XSPI0: XSPI0_IO5" - IO - - + P15_5 J14 - XSPI0_IO6 Low - Disabled - - "BSC: D13; DSMIF2: MCLK2; XSPI0: XSPI0_IO6" - IO - - + P15_6 H12 - XSPI0_IO7 Low - Disabled - - "BSC: D14; DSMIF2: MDAT2; SPI1: SPI_SSL12; XSPI0: XSPI0_IO7" - IO - - + P15_7 J15 - OSPI_CS Low - Disabled - - "DMAC: TEND; SCI5: CTS5#; SPI1: SPI_SSL13; XSPI0: XSPI0_CS0#" - O - - + P16_0 G13 - ORAM_CS0 Low - Disabled - - "DSMIF3: MCLK3; ETHER_ETH0: ETH0_TXER; ETHER_ETH2: ETH2_REFCLK; SCI0: SDA0; SCI0: TXD_MOSI0; SHOSTIF: HSPI_CS#; SPI3: SPI_MOSI3; XSPI0: XSPI0_CS1#" - O - - + P16_1 H11 - XSPI0_RESET0 Low - Disabled - - "ADC0: ADTRG0#; BSC: CS2#; CMTW0: CMTW0_TOC1; DSMIF3: MDAT3; PHOSTIF: HCS1#; SCI0: RXD_MISO0; SCI0: SCL0; SPI3: SPI_MISO3; XSPI0: XSPI0_RESET0#" - O - - + P16_2 H14 - - - - Disabled - - "IRQ: NMI; PHOSTIF: HERROUT#; SCI0: CTS0#; SHOSTIF: HSPI_IO2; SPI3: SPI_RSPCK3; USB_HS: USB_EXICEN; XSPI0: XSPI0_RESET1#" - None - - + P16_3 G12 - SW1 - - Disabled - - "BSC: CS3#; ETHER_ETH1: ETH1_CRS; ETHER_ETH1: ETH1_TXER; GPT: GTADSMP1; IRQ: IRQ7; SCI0: SCK0; SHOSTIF: HSPI_IO3; SPI3: SPI_SSL30; XSPI0: XSPI0_RSTO0#" - IO - - + P16_5 H15 - UART_USB_TX Low - Disabled - - "BSC: A15; MTU35: MTIC5U; SCI0: SDA0; SCI0: TXD_MOSI0; SHOSTIF: HSPI_IO4" - IO - - + P16_6 G11 - UART_USB_RX Low - Disabled - - "BSC: CS0#; IRQ: IRQ8; MTU35: MTIC5V; PHOSTIF: HCS0#; SCI0: RXD_MISO0; SCI0: SCL0; SHOSTIF: HSPI_IO5" - IO - - + P16_7 G14 - - - - Disabled - - "BSC: A13; MTU35: MTIC5W; PHOSTIF: HA13; SCI0: SCK0; XSPI1: XSPI1_IO0" - None - - + P17_0 F12 - - - - Disabled - - "ETHER_ESC: ESC_IRQ; SCI0: CTS_RTS_SS0#; XSPI1: XSPI1_IO1" - None - - + P17_3 F14 - LED_RED2 Low - Disabled - - "ADC1: ADTRG1#; DMAC: DREQ; GPT_POEG: GTETRGA; MTU_POE3: POE0#; SPI3: SPI_SSL31; TRACE: TRACECTL; XSPI1: XSPI1_IO2" - IO - - + P17_4 F13 - - - - Disabled - - "DMAC: DACK; GPT0: GTIOC0A; GPT_POEG: GTETRGB; MTU33: MTIOC3C; SCI3: CTS3#; SPI3: SPI_SSL32; TRACE: TRACECLK; XSPI1: XSPI1_IO3" - None - - + P17_5 F15 - USB_OVRCUR Low - Disabled - - "DMAC: TEND; GPT0: GTIOC0B; GPT_POEG: GTETRGC; MTU33: MTIOC3A; USB_HS: USB_OVRCUR" - I - - + P17_6 G15 - - - - Disabled - - "BSC: RD_WR#; GPT1: GTIOC1A; MTU33: MTIOC3B; PHOSTIF: HWRSTB#; SCI3: SCK3; XSPI1: XSPI1_DS" - None - - + P17_7 E15 - SCI_RXD Low - Disabled - - "BSC: RD#; DMAC: DACK; GPT2: GTIOC2A; GPT3: GTIOC3A; MTU34: MTIOC4A; MTU34: MTIOC4C; PHOSTIF: HRD#; SCI3: RXD_MISO3; SCI3: SCL3; XSPI1: XSPI1_CKP" - IO - - + P18_0 E14 - SCI_TXD Low - Disabled - - "BSC: WE0#_DQMLL; GPT2: GTIOC2A; GPT3: GTIOC3A; MTU34: MTIOC4A; MTU34: MTIOC4C; PHOSTIF: HWR0#; SCI3: SDA3; SCI3: TXD_MOSI3; SHOSTIF: HSPI_IO6" - IO - - + P18_1 D15 - - - - Disabled - - "ADC1: ADTRG1#; BSC: WE1#_DQMLU; GPT1: GTIOC1B; IRQ: IRQ10; MTU33: MTIOC3D; PHOSTIF: HWR1#; SCI3: CTS_RTS_SS3#; SHOSTIF: HSPI_IO7" - None - - + P18_2 D14 - LED_GREEN Low - Disabled - - "BSC: BS#; ETHER_ETH1: ETH1_COL; GPT2: GTIOC2B; GPT3: GTIOC3B; IIC2: IIC_SDA2; MTU34: MTIOC4B; MTU34: MTIOC4D; SCI0: SCK0; XSPI1: XSPI1_CS0#" - IO - - + P18_3 E13 - - - - Disabled - - "BSC: CKE; CANFD1: CANRXDP1; CMTW1: CMTW1_TIC1; ETHER_ETH2: ETH2_CRS; GPT2: GTIOC2B; GPT3: GTIOC3B; IRQ: IRQ0; MTU34: MTIOC4B; MTU34: MTIOC4D; XSPI1: XSPI1_IO4" - None - - + P18_4 E12 - SCK Low - Disabled - - "BSC: CAS#; CANFD0: CANTX0; ETHER_ETH1: ETH1_CRS; IRQ: IRQ1; MTU35: MTIC5U; SCI4: SDA4; SCI4: TXD_MOSI4; SPI2: SPI_RSPCK2; XSPI1: XSPI1_IO5" - IO - - + P18_5 D13 - MOSI Low - Disabled - - "BSC: RAS#; CANFD0: CANRX0; ETHER_ETH2: ETH2_COL; MTU35: MTIC5V; SCI4: RXD_MISO4; SCI4: SCL4; SPI2: SPI_MOSI2; TRACE: TRACECTL; XSPI1: XSPI1_IO6" - IO - - + P18_6 C15 - MISO Low - Disabled - - "ADC0: ADTRG0#; ETHER_ETH1: ETH1_COL; IIC2: IIC_SCL2; IRQ: IRQ11; MTU35: MTIC5W; SCI4: DE4; SCI4: SCK4; SPI2: SPI_MISO2; TRACE: TRACECLK; XSPI1: XSPI1_IO7" - IO - - + P19_0 B15 - USB_VBUSEN Low - Disabled - - "USB_HS: USB_VBUSEN" - O - - + P20_1 B9 - ETH_LED2_MDV0 - - Disabled - - "ETHER_ESC: ESC_LINKACT0; ETHER_ETHSW: ETHSW_PTPOUT3; ETHER_ETHSW: ETHSW_TDMAOUT0" - None - - + P20_2 D8 - ETH_LED0_MDV1 - - Disabled - - "ETHER_ESC: ESC_LEDRUN; ETHER_ESC: ESC_LEDSTER; ETHER_ETHSW: ETHSW_PTPOUT2; ETHER_ETHSW: ETHSW_TDMAOUT1; SCI3: DE3" - None - - + P20_3 D9 - ETH_LED1_MDV2 - - Disabled - - "ETHER_ESC: ESC_LEDERR; ETHER_ETHSW: ETHSW_PTPOUT1; ETHER_ETHSW: ETHSW_TDMAOUT2" - None - - + P20_4 A9 - ETH_LED3_MDV3 - - Disabled - - "ETHER_ESC: ESC_LINKACT1; ETHER_ETHSW: ETHSW_PTPOUT0; ETHER_ETHSW: ETHSW_TDMAOUT3" - None - - + P21_1 B8 - CS Low - Disabled - - "BSC: D0; CMTW0: CMTW0_TIC0; DSMIF0: MCLK0; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; GPT14: GTIOC14A; IIC1: IIC_SCL1; MTU36: MTIOC6A; PHOSTIF: HD0; SCI5: SCK5; SHOSTIF: HSPI_INT#; SPI2: SPI_SSL20; TRACE: TRACEDATA0" - IO - - + P21_2 C8 - - - - Disabled - - "BSC: D1; CMTW0: CMTW0_TIC1; DSMIF0: MDAT0; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; GPT14: GTIOC14B; IIC1: IIC_SDA1; MTU36: MTIOC6B; PHOSTIF: HD1; SCI5: RXD_MISO5; SCI5: SCL5; SPI2: SPI_MISO2; TRACE: TRACEDATA1" - None - - + P21_3 A8 - - - - Disabled - - "BSC: D2; DSMIF1: MCLK1; GPT15: GTIOC15A; IRQ: NMI; MTU36: MTIOC6C; PHOSTIF: HD2; SCI5: SDA5; SCI5: TXD_MOSI5; SPI3: SPI_SSL33; TRACE: TRACEDATA2" - None - - + P21_4 E7 - - - - Disabled - - "BSC: D3; DSMIF1: MDAT1; ETHER_ESC: ESC_SYNC0; ETHER_ESC: ESC_SYNC1; ETHER_ETHSW: ETHSW_PTPOUT1; GPT15: GTIOC15B; MBXSEM: MBX_HINT#; MTU36: MTIOC6D; PHOSTIF: HD3; SCI5: CTS_RTS_SS5#; SPI0: SPI_SSL02; TRACE: TRACEDATA3" - None - - + P21_5 C7 - - - - Disabled - - "ADC1: ADTRG1#; BSC: D4; CMTW1: CMTW1_TOC1; DSMIF2: MCLK2; GPT16: GTIOC16A; IRQ: IRQ6; MTU37: MTIOC7A; PHOSTIF: HD4; SCI5: CTS5#; SPI0: SPI_MISO0; TRACE: TRACEDATA4" - None - - + P21_6 D7 - - - - Disabled - - "BSC: D5; DMAC: TEND; DSMIF2: MDAT2; GPT16: GTIOC16B; IRQ: IRQ9; MTU37: MTIOC7B; PHOSTIF: HD5; SCI0: CTS0#; TRACE: TRACEDATA5" - None - - + P21_7 B7 - - - - Disabled - - "BSC: D6; DMAC: DREQ; DSMIF3: MCLK3; GPT17: GTIOC17A; IRQ: IRQ10; MTU37: MTIOC7C; PHOSTIF: HD6; SCI0: DE0; TRACE: TRACEDATA6" - None - - + P22_0 A7 - - - - Disabled - - "BSC: D7; DSMIF3: MDAT3; GPT17: GTIOC17B; IRQ: IRQ15; MTU37: MTIOC7D; PHOSTIF: HD7; SCI5: DE5; TRACE: TRACEDATA7" - None - - + P22_1 A6 - ETH_LED5 Low - Disabled - - "BSC: D8; ETHER_ESC: ESC_LINKACT2; GPT_POEG: GTETRGB; MTU_POE3: POE4#; PHOSTIF: HD8; SCI4: CTS_RTS_SS4#; TRACE: TRACECTL" - IO - - + P22_2 C6 - - - - Disabled - - "BSC: D9; DSMIF1: MCLK1; GPT_POEG: GTETRGSA; IRQ: IRQ4; MTU38: MTIOC8C; PHOSTIF: HD9; SPI1: SPI_SSL12; TRACE: TRACECLK" - None - - + P22_3 B6 - LED_ORANGE Low - Disabled - - "BSC: D10; GPT_POEG: GTETRGSB; MTU38: MTIOC8D; PHOSTIF: HD10; SCI5: RXD_MISO5; SCI5: SCL5" - IO - - + P23_7 D6 - ETH2_RXD0 - - Disabled - - "BSC: BS#; BSC: D11; DSMIF4: MCLK4; ETHER_ETH2: ETH2_RXD0; GPT_POEG: GTETRGA; MTU30: MTIOC0A; PHOSTIF: HD11; SCI1: SCK1" - None - - + P24_0 A5 - ETH2_RXD1 - - Disabled - - "BSC: CKE; BSC: D12; DMAC: DREQ; DSMIF4: MDAT4; ETHER_ETH2: ETH2_RXD1; GPT_POEG: GTETRGB; MTU30: MTIOC0B; PHOSTIF: HD12; SCI1: RXD_MISO1; SCI1: SCL1" - None - - + P24_1 B5 - ETH2_RXCLK - - Disabled - - "BSC: CAS#; BSC: D13; DSMIF5: MCLK5; ETHER_ETH2: ETH2_RXCLK_REF_CLK_RXC; GPT_POEG: GTETRGC; MTU30: MTIOC0C; MTU_POE3: POE8#; PHOSTIF: HD13" - None - - + P24_2 C5 - ETH2_RXD2 - - Disabled - - "BSC: D14; BSC: RAS#; DSMIF5: MDAT5; ETHER_ETH2: ETH2_RXD2; GPT_POEG: GTETRGD; MTU30: MTIOC0D; PHOSTIF: HD14; SCI1: SDA1; SCI1: TXD_MOSI1" - None - - + RES# P6 SYSTEM_RES# - - - - - - - - I "Read only" - + TRST# E2 SYSTEM_TRST# - - - - - - - - I "Read only" - + USB_DM P13 SYSTEM_USB_DM - - - - - - - - IO "Read only" - + USB_DP R13 SYSTEM_USB_DP - - - - - - - - IO "Read only" - + USB_RREF P15 SYSTEM_USB_RREF - - - - - - - - I "Read only" - + VCC1833_0 L6 SYSTEM_VCC1833_0 - - - - - - - - I "Read only" - + VCC1833_1 K5 SYSTEM_VCC1833_1 - - - - - - - - I "Read only" - + VCC1833_2 E5 SYSTEM_VCC1833_2 - - - - - - - - I "Read only" - + VCC1833_3 J11 SYSTEM_VCC1833_3 - - - - - - - - I "Read only" - + VCC1833_4 F11 SYSTEM_VCC1833_4 - - - - - - - - I "Read only" - + VCC18_ADC0 E11 SYSTEM_VCC18_ADC0 - - - - - - - - I "Read only" - + VCC18_ADC1 E9 SYSTEM_VCC18_ADC1 - - - - - - - - I "Read only" - + VCC18_PLL0 P9 SYSTEM_VCC18_PLL0 - - - - - - - - I "Read only" - + VCC18_PLL1 N9 SYSTEM_VCC18_PLL1 - - - - - - - - I "Read only" - + VCC18_USB P11 SYSTEM_VCC18_USB - - - - - - - - I "Read only" - + VCC33 E6 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33 E8 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33 M10 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33 L5 SYSTEM_VCC33 - - - - - - - - I "Read only" - + VCC33_USB R11 SYSTEM_VCC33_USB - - - - - - - - I "Read only" - + VDD H10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD G10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F8 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F9 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD G6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD F10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD H6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD J6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K6 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K7 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K8 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD K10 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD P7 SYSTEM_VDD - - - - - - - - I "Read only" - + VDD J10 SYSTEM_VDD - - - - - - - - I "Read only" - + VREFH0 C11 SYSTEM_VREFH0 - - - - - - - - I "Read only" - + VREFH1 C10 SYSTEM_VREFH1 - - - - - - - - I "Read only" - + VSS A1 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R1 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS A10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R5 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS A15 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS F7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS G7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS G8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS G9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS N10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS H7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS N14 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS H8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS H9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS E10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS J7 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS J8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS J9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS K9 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS D10 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS D11 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS L1 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS L15 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS P8 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS R15 SYSTEM_VSS - - - - - - - - I "Read only" - + VSS_ADC D12 SYSTEM_VSS_ADC - - - - - - - - I "Read only" - + VSS_USB P12 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB P14 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB N13 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB N15 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB R12 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + VSS_USB R14 SYSTEM_VSS_USB - - - - - - - - I "Read only" - + XTAL R8 CGC_XTAL - - - - - - - - O "Read only" - + + User Events + + User Event Links + + Module "I/O Port (r_ioport)" + Parameter Checking: Default (BSP) + + Module "Memory config check" + MPU/MMU Type: MPU + + Module "UART (r_sci_uart)" + Parameter Checking: Default (BSP) + FIFO Support: Enable + DMAC Support: Disable + Flow Control Support: Disable + Multiplex Interrupt: Disabled + + HAL + Instance "g_ioport I/O Port (r_ioport)" + General: Name: g_ioport + ELC Output Port Group 1: Trigger Source: Disabled + ELC Output Port Group 1: Port Selection: + ELC Output Port Group 1: Output Operation: Low output + ELC Output Port Group 2: Trigger Source: Disabled + ELC Output Port Group 2: Port Selection: + ELC Output Port Group 2: Output Operation: Low output + ELC Input Port Group 1: Trigger Source: Disabled + ELC Input Port Group 1: Event Link Control: Disabled + ELC Input Port Group 1: Port Selection: + ELC Input Port Group 1: Edge Detection: Rising edge + ELC Input Port Group 1: Buffer Overwrite: Disabled + ELC Input Port Group 1: Buffer Initial Value: P16_0: Low input + ELC Input Port Group 1: Buffer Initial Value: P16_1: Low input + ELC Input Port Group 1: Buffer Initial Value: P16_2: Low input + ELC Input Port Group 1: Buffer Initial Value: P16_3: Low input + ELC Input Port Group 1: Buffer Initial Value: P16_5: Low input + ELC Input Port Group 1: Buffer Initial Value: P16_6: Low input + ELC Input Port Group 1: Buffer Initial Value: P16_7: Low input + ELC Input Port Group 2: Trigger Source: Disabled + ELC Input Port Group 2: Event Link Control: Disabled + ELC Input Port Group 2: Port Selection: + ELC Input Port Group 2: Edge Detection: Rising edge + ELC Input Port Group 2: Buffer Overwrite: Disabled + ELC Input Port Group 2: Buffer Initial Value: P18_0: Low input + ELC Input Port Group 2: Buffer Initial Value: P18_1: Low input + ELC Input Port Group 2: Buffer Initial Value: P18_2: Low input + ELC Input Port Group 2: Buffer Initial Value: P18_3: Low input + ELC Input Port Group 2: Buffer Initial Value: P18_4: Low input + ELC Input Port Group 2: Buffer Initial Value: P18_5: Low input + ELC Input Port Group 2: Buffer Initial Value: P18_6: Low input + ELC Single Port 0: Common: Event Link Control: Disabled + ELC Single Port 0: Common: Event Direction: Output direction + ELC Single Port 0: Common: Port selection: P16_0 + ELC Single Port 0: Output Direction Setting: Trigger Source: Disabled + ELC Single Port 0: Output Direction Setting: Output Operation: Low output + ELC Single Port 0: Input Direction Setting: Edge Detection: Rising edge + ELC Single Port 1: Common: Event Link Control: Disabled + ELC Single Port 1: Common: Event Direction: Output direction + ELC Single Port 1: Common: Port selection: P16_0 + ELC Single Port 1: Output Direction Setting: Trigger Source: Disabled + ELC Single Port 1: Output Direction Setting: Output Operation: Low output + ELC Single Port 1: Input Direction Setting: Edge Detection: Rising edge + ELC Single Port 2: Common: Event Link Control: Disabled + ELC Single Port 2: Common: Event Direction: Output direction + ELC Single Port 2: Common: Port selection: P16_0 + ELC Single Port 2: Output Direction Setting: Trigger Source: Disabled + ELC Single Port 2: Output Direction Setting: Output Operation: Low output + ELC Single Port 2: Input Direction Setting: Edge Detection: Rising edge + ELC Single Port 3: Common: Event Link Control: Disabled + ELC Single Port 3: Common: Event Direction: Output direction + ELC Single Port 3: Common: Port selection: P16_0 + ELC Single Port 3: Output Direction Setting: Trigger Source: Disabled + ELC Single Port 3: Output Direction Setting: Output Operation: Low output + ELC Single Port 3: Input Direction Setting: Edge Detection: Rising edge + + Instance "Memory config check" + Instance "g_uart0 UART (r_sci_uart)" + General: Name: g_uart0 + General: Channel: 0 + General: Data Bits: 8bits + General: Parity: None + General: Stop Bits: 1bit + Baud: Baud Rate: 115200 + Baud: Baud Rate Modulation: Disabled + Baud: Max Error (%): 5 + Baud: Synchronizer Bypass: Not Bypassed (The operation clock is SCInASYNCCLK) + Flow Control: CTS/RTS Selection: Hardware RTS + Flow Control: Software RTS Port: Disabled + Flow Control: Software RTS Pin: Disabled + Extra: Clock Source: Internal Clock + Extra: Start bit detection: Falling Edge + Extra: Noise Filter: Disable + Extra: Receive FIFO Trigger Level: Max + Extra: RS-485: DE Pin: Disable + Extra: RS-485: DE Pin Polarity: Active High + Extra: RS-485: DE Pin Assertion Time: 1 + Extra: RS-485: DE Pin Negation Time: 1 + Interrupts: Callback: user_uart0_callback + Interrupts: Receive Interrupt Priority: Priority 12 + Interrupts: Transmit Data Empty Interrupt Priority: Priority 12 + Interrupts: Transmit End Interrupt Priority: Priority 12 + Interrupts: Error Interrupt Priority: Priority 12 + diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/SConscript b/bsp/renesas/rzn2l_rsk/rzn_cfg/SConscript new file mode 100644 index 00000000000..8d63460c645 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/SConscript @@ -0,0 +1,19 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * +from gcc import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + Return('group') +elif rtconfig.PLATFORM in GetGCCLikePLATFORM(): + if GetOption('target') != 'mdk5': + src = Glob('*.c') + CPPPATH = [cwd+'/fsp_cfg', cwd + '/fsp_cfg/bsp'] + +group += DefineGroup('rz_cfg', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/board_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/board_cfg.h new file mode 100644 index 00000000000..b6d6335983d --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/board_cfg.h @@ -0,0 +1,25 @@ +/* generated configuration header file - do not edit */ +#ifndef BOARD_CFG_H_ +#define BOARD_CFG_H_ +#include "../../../rzn/board/rzn2l_rsk/board.h" + #define BSP_CFG_XSPI0_X1_BOOT (1) + #define BSP_CFG_CACHE_FLG (0x00000000) + #define BSP_CFG_CS0BCR_V_WRAPCFG_V (0x00000000) + #define BSP_CFG_CS0WCR_V_COMCFG_V (0x00000000) + #define BSP_CFG_DUMMY0_BMCFG_V (0x00000000) + #define BSP_CFG_BSC_FLG_xSPI_FLG (0x00000000) + #define BSP_CFG_LDR_ADDR_NML (0x6000004C) + #define BSP_CFG_LDR_SIZE_NML (0x00006000) + #define BSP_CFG_DEST_ADDR_NML (0x00102000) + #define BSP_CFG_DUMMY1 (0x00000000) + #define BSP_CFG_DUMMY2 (0x00000000) + #define BSP_CFG_DUMMY3_CSSCTL_V (0x0000003F) + #define BSP_CFG_DUMMY4_LIOCFGCS0_V (0x00070000) + #define BSP_CFG_DUMMY5 (0x00000000) + #define BSP_CFG_DUMMY6 (0x00000000) + #define BSP_CFG_DUMMY7 (0x00000000) + #define BSP_CFG_DUMMY8 (0x00000000) + #define BSP_CFG_DUMMY9 (0x00000000) + #define BSP_CFG_DUMMY10_ACCESS_SPEED (0x00000006) + #define BSP_CFG_CHECK_SUM (0xE0A8) +#endif /* BOARD_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_cfg.h new file mode 100644 index 00000000000..989932e34d3 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_cfg.h @@ -0,0 +1,37 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_CFG_H_ +#define BSP_CFG_H_ +#include "bsp_clock_cfg.h" + #include "bsp_mcu_family_cfg.h" + #include "board_cfg.h" + #define FSP_NOT_DEFINED 0 + #ifndef BSP_CFG_RTOS + #if (FSP_NOT_DEFINED) != (FSP_NOT_DEFINED) + #define BSP_CFG_RTOS (2) + #elif (FSP_NOT_DEFINED) != (FSP_NOT_DEFINED) + #define BSP_CFG_RTOS (1) + #else + #define BSP_CFG_RTOS (0) + #endif + #endif + #undef FSP_NOT_DEFINED + #define BSP_CFG_MCU_VCC_MV (3300) + + #define BSP_CFG_PARAM_CHECKING_ENABLE (0) + #define BSP_CFG_ASSERT (0) + #define BSP_CFG_ERROR_LOG (0) + + #define BSP_CFG_PORT_PROTECT (1) + + #define BSP_CFG_SOFT_RESET_SUPPORTED (0) + #define BSP_CFG_EARLY_INIT (0) + + #define BSP_CFG_MULTIPLEX_INTERRUPT_SUPPORTED (0) + #if BSP_CFG_MULTIPLEX_INTERRUPT_SUPPORTED + #define BSP_CFG_MULTIPLEX_INTERRUPT_ENABLE BSP_INTERRUPT_ENABLE + #define BSP_CFG_MULTIPLEX_INTERRUPT_DISABLE BSP_INTERRUPT_DISABLE + #else + #define BSP_CFG_MULTIPLEX_INTERRUPT_ENABLE + #define BSP_CFG_MULTIPLEX_INTERRUPT_DISABLE + #endif +#endif /* BSP_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h new file mode 100644 index 00000000000..d0551c4e16a --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h @@ -0,0 +1,14 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_DEVICE_CFG_H_ +#define BSP_MCU_DEVICE_CFG_H_ +#define BSP_CFG_STACK_FIQ_BYTES (0x400) + #define BSP_CFG_STACK_IRQ_BYTES (0x400) + #define BSP_CFG_STACK_ABT_BYTES (0x400) + #define BSP_CFG_STACK_UND_BYTES (0x400) + #define BSP_CFG_STACK_SYS_BYTES (0x400) + #define BSP_CFG_STACK_SVC_BYTES (0x400) + #define BSP_CFG_HEAP_BYTES (0x2000) + + #define BSP_CFG_C_RUNTIME_INIT (1) + #define BSP_CFG_USE_TFU_MATHLIB ((1)) +#endif /* BSP_MCU_DEVICE_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_memory_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_memory_cfg.h new file mode 100644 index 00000000000..359058b8e74 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_memory_cfg.h @@ -0,0 +1,552 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_DEVICE_MEMORY_CFG_H_ +#define BSP_MCU_DEVICE_MEMORY_CFG_H_ +#define BSP_CFG_MPU0_READ0 (0) + #define BSP_CFG_MPU0_WRITE0 (0) + #define BSP_CFG_MPU0_STADD0 (0x00000000) + #define BSP_CFG_MPU0_ENDADD0 (0x00000C00) + #define BSP_CFG_MPU0_READ1 (0) + #define BSP_CFG_MPU0_WRITE1 (0) + #define BSP_CFG_MPU0_STADD1 (0x00000000) + #define BSP_CFG_MPU0_ENDADD1 (0x00000C00) + #define BSP_CFG_MPU0_READ2 (0) + #define BSP_CFG_MPU0_WRITE2 (0) + #define BSP_CFG_MPU0_STADD2 (0x00000000) + #define BSP_CFG_MPU0_ENDADD2 (0x00000C00) + #define BSP_CFG_MPU0_READ3 (0) + #define BSP_CFG_MPU0_WRITE3 (0) + #define BSP_CFG_MPU0_STADD3 (0x00000000) + #define BSP_CFG_MPU0_ENDADD3 (0x00000C00) + #define BSP_CFG_MPU0_READ4 (0) + #define BSP_CFG_MPU0_WRITE4 (0) + #define BSP_CFG_MPU0_STADD4 (0x00000000) + #define BSP_CFG_MPU0_ENDADD4 (0x00000C00) + #define BSP_CFG_MPU0_READ5 (0) + #define BSP_CFG_MPU0_WRITE5 (0) + #define BSP_CFG_MPU0_STADD5 (0x00000000) + #define BSP_CFG_MPU0_ENDADD5 (0x00000C00) + #define BSP_CFG_MPU0_READ6 (0) + #define BSP_CFG_MPU0_WRITE6 (0) + #define BSP_CFG_MPU0_STADD6 (0x00000000) + #define BSP_CFG_MPU0_ENDADD6 (0x00000C00) + #define BSP_CFG_MPU0_READ7 (0) + #define BSP_CFG_MPU0_WRITE7 (0) + #define BSP_CFG_MPU0_STADD7 (0x00000000) + #define BSP_CFG_MPU0_ENDADD7 (0x00000C00) + #define BSP_CFG_MPU1_READ0 (0) + #define BSP_CFG_MPU1_WRITE0 (0) + #define BSP_CFG_MPU1_STADD0 (0x00000000) + #define BSP_CFG_MPU1_ENDADD0 (0x00000C00) + #define BSP_CFG_MPU1_READ1 (0) + #define BSP_CFG_MPU1_WRITE1 (0) + #define BSP_CFG_MPU1_STADD1 (0x00000000) + #define BSP_CFG_MPU1_ENDADD1 (0x00000C00) + #define BSP_CFG_MPU1_READ2 (0) + #define BSP_CFG_MPU1_WRITE2 (0) + #define BSP_CFG_MPU1_STADD2 (0x00000000) + #define BSP_CFG_MPU1_ENDADD2 (0x00000C00) + #define BSP_CFG_MPU1_READ3 (0) + #define BSP_CFG_MPU1_WRITE3 (0) + #define BSP_CFG_MPU1_STADD3 (0x00000000) + #define BSP_CFG_MPU1_ENDADD3 (0x00000C00) + #define BSP_CFG_MPU1_READ4 (0) + #define BSP_CFG_MPU1_WRITE4 (0) + #define BSP_CFG_MPU1_STADD4 (0x00000000) + #define BSP_CFG_MPU1_ENDADD4 (0x00000C00) + #define BSP_CFG_MPU1_READ5 (0) + #define BSP_CFG_MPU1_WRITE5 (0) + #define BSP_CFG_MPU1_STADD5 (0x00000000) + #define BSP_CFG_MPU1_ENDADD5 (0x00000C00) + #define BSP_CFG_MPU1_READ6 (0) + #define BSP_CFG_MPU1_WRITE6 (0) + #define BSP_CFG_MPU1_STADD6 (0x00000000) + #define BSP_CFG_MPU1_ENDADD6 (0x00000C00) + #define BSP_CFG_MPU1_READ7 (0) + #define BSP_CFG_MPU1_WRITE7 (0) + #define BSP_CFG_MPU1_STADD7 (0x00000000) + #define BSP_CFG_MPU1_ENDADD7 (0x00000C00) + #define BSP_CFG_MPU2_READ0 (0) + #define BSP_CFG_MPU2_WRITE0 (0) + #define BSP_CFG_MPU2_STADD0 (0x00000000) + #define BSP_CFG_MPU2_ENDADD0 (0x00000C00) + #define BSP_CFG_MPU2_READ1 (0) + #define BSP_CFG_MPU2_WRITE1 (0) + #define BSP_CFG_MPU2_STADD1 (0x00000000) + #define BSP_CFG_MPU2_ENDADD1 (0x00000C00) + #define BSP_CFG_MPU2_READ2 (0) + #define BSP_CFG_MPU2_WRITE2 (0) + #define BSP_CFG_MPU2_STADD2 (0x00000000) + #define BSP_CFG_MPU2_ENDADD2 (0x00000C00) + #define BSP_CFG_MPU2_READ3 (0) + #define BSP_CFG_MPU2_WRITE3 (0) + #define BSP_CFG_MPU2_STADD3 (0x00000000) + #define BSP_CFG_MPU2_ENDADD3 (0x00000C00) + #define BSP_CFG_MPU2_READ4 (0) + #define BSP_CFG_MPU2_WRITE4 (0) + #define BSP_CFG_MPU2_STADD4 (0x00000000) + #define BSP_CFG_MPU2_ENDADD4 (0x00000C00) + #define BSP_CFG_MPU2_READ5 (0) + #define BSP_CFG_MPU2_WRITE5 (0) + #define BSP_CFG_MPU2_STADD5 (0x00000000) + #define BSP_CFG_MPU2_ENDADD5 (0x00000C00) + #define BSP_CFG_MPU2_READ6 (0) + #define BSP_CFG_MPU2_WRITE6 (0) + #define BSP_CFG_MPU2_STADD6 (0x00000000) + #define BSP_CFG_MPU2_ENDADD6 (0x00000C00) + #define BSP_CFG_MPU2_READ7 (0) + #define BSP_CFG_MPU2_WRITE7 (0) + #define BSP_CFG_MPU2_STADD7 (0x00000000) + #define BSP_CFG_MPU2_ENDADD7 (0x00000C00) + #define BSP_CFG_MPU3_READ0 (0) + #define BSP_CFG_MPU3_WRITE0 (0) + #define BSP_CFG_MPU3_STADD0 (0x00000000) + #define BSP_CFG_MPU3_ENDADD0 (0x00000000) + #define BSP_CFG_MPU3_READ1 (0) + #define BSP_CFG_MPU3_WRITE1 (0) + #define BSP_CFG_MPU3_STADD1 (0x00000000) + #define BSP_CFG_MPU3_ENDADD1 (0x00000000) + #define BSP_CFG_MPU3_READ2 (0) + #define BSP_CFG_MPU3_WRITE2 (0) + #define BSP_CFG_MPU3_STADD2 (0x00000000) + #define BSP_CFG_MPU3_ENDADD2 (0x00000000) + #define BSP_CFG_MPU3_READ3 (0) + #define BSP_CFG_MPU3_WRITE3 (0) + #define BSP_CFG_MPU3_STADD3 (0x00000000) + #define BSP_CFG_MPU3_ENDADD3 (0x00000000) + #define BSP_CFG_MPU3_READ4 (0) + #define BSP_CFG_MPU3_WRITE4 (0) + #define BSP_CFG_MPU3_STADD4 (0x00000000) + #define BSP_CFG_MPU3_ENDADD4 (0x00000000) + #define BSP_CFG_MPU3_READ5 (0) + #define BSP_CFG_MPU3_WRITE5 (0) + #define BSP_CFG_MPU3_STADD5 (0x00000000) + #define BSP_CFG_MPU3_ENDADD5 (0x00000000) + #define BSP_CFG_MPU3_READ6 (0) + #define BSP_CFG_MPU3_WRITE6 (0) + #define BSP_CFG_MPU3_STADD6 (0x00000000) + #define BSP_CFG_MPU3_ENDADD6 (0x00000000) + #define BSP_CFG_MPU3_READ7 (0) + #define BSP_CFG_MPU3_WRITE7 (0) + #define BSP_CFG_MPU3_STADD7 (0x00000000) + #define BSP_CFG_MPU3_ENDADD7 (0x00000000) + #define BSP_CFG_MPU4_READ0 (0) + #define BSP_CFG_MPU4_WRITE0 (0) + #define BSP_CFG_MPU4_STADD0 (0x00000000) + #define BSP_CFG_MPU4_ENDADD0 (0x00000000) + #define BSP_CFG_MPU4_READ1 (0) + #define BSP_CFG_MPU4_WRITE1 (0) + #define BSP_CFG_MPU4_STADD1 (0x00000000) + #define BSP_CFG_MPU4_ENDADD1 (0x00000000) + #define BSP_CFG_MPU4_READ2 (0) + #define BSP_CFG_MPU4_WRITE2 (0) + #define BSP_CFG_MPU4_STADD2 (0x00000000) + #define BSP_CFG_MPU4_ENDADD2 (0x00000000) + #define BSP_CFG_MPU4_READ3 (0) + #define BSP_CFG_MPU4_WRITE3 (0) + #define BSP_CFG_MPU4_STADD3 (0x00000000) + #define BSP_CFG_MPU4_ENDADD3 (0x00000000) + #define BSP_CFG_MPU4_READ4 (0) + #define BSP_CFG_MPU4_WRITE4 (0) + #define BSP_CFG_MPU4_STADD4 (0x00000000) + #define BSP_CFG_MPU4_ENDADD4 (0x00000000) + #define BSP_CFG_MPU4_READ5 (0) + #define BSP_CFG_MPU4_WRITE5 (0) + #define BSP_CFG_MPU4_STADD5 (0x00000000) + #define BSP_CFG_MPU4_ENDADD5 (0x00000000) + #define BSP_CFG_MPU4_READ6 (0) + #define BSP_CFG_MPU4_WRITE6 (0) + #define BSP_CFG_MPU4_STADD6 (0x00000000) + #define BSP_CFG_MPU4_ENDADD6 (0x00000000) + #define BSP_CFG_MPU4_READ7 (0) + #define BSP_CFG_MPU4_WRITE7 (0) + #define BSP_CFG_MPU4_STADD7 (0x00000000) + #define BSP_CFG_MPU4_ENDADD7 (0x00000000) + #define BSP_CFG_MPU6_READ0 (0) + #define BSP_CFG_MPU6_WRITE0 (0) + #define BSP_CFG_MPU6_STADD0 (0x00000000) + #define BSP_CFG_MPU6_ENDADD0 (0x00000C00) + #define BSP_CFG_MPU6_READ1 (0) + #define BSP_CFG_MPU6_WRITE1 (0) + #define BSP_CFG_MPU6_STADD1 (0x00000000) + #define BSP_CFG_MPU6_ENDADD1 (0x00000C00) + #define BSP_CFG_MPU6_READ2 (0) + #define BSP_CFG_MPU6_WRITE2 (0) + #define BSP_CFG_MPU6_STADD2 (0x00000000) + #define BSP_CFG_MPU6_ENDADD2 (0x00000C00) + #define BSP_CFG_MPU6_READ3 (0) + #define BSP_CFG_MPU6_WRITE3 (0) + #define BSP_CFG_MPU6_STADD3 (0x00000000) + #define BSP_CFG_MPU6_ENDADD3 (0x00000C00) + #define BSP_CFG_MPU6_READ4 (0) + #define BSP_CFG_MPU6_WRITE4 (0) + #define BSP_CFG_MPU6_STADD4 (0x00000000) + #define BSP_CFG_MPU6_ENDADD4 (0x00000C00) + #define BSP_CFG_MPU6_READ5 (0) + #define BSP_CFG_MPU6_WRITE5 (0) + #define BSP_CFG_MPU6_STADD5 (0x00000000) + #define BSP_CFG_MPU6_ENDADD5 (0x00000C00) + #define BSP_CFG_MPU6_READ6 (0) + #define BSP_CFG_MPU6_WRITE6 (0) + #define BSP_CFG_MPU6_STADD6 (0x00000000) + #define BSP_CFG_MPU6_ENDADD6 (0x00000C00) + #define BSP_CFG_MPU6_READ7 (0) + #define BSP_CFG_MPU6_WRITE7 (0) + #define BSP_CFG_MPU6_STADD7 (0x00000000) + #define BSP_CFG_MPU6_ENDADD7 (0x00000C00) + #define BSP_CFG_MPU7_READ0 (0) + #define BSP_CFG_MPU7_WRITE0 (0) + #define BSP_CFG_MPU7_STADD0 (0x00000000) + #define BSP_CFG_MPU7_ENDADD0 (0x00000000) + #define BSP_CFG_MPU7_READ1 (0) + #define BSP_CFG_MPU7_WRITE1 (0) + #define BSP_CFG_MPU7_STADD1 (0x00000000) + #define BSP_CFG_MPU7_ENDADD1 (0x00000000) + #define BSP_CFG_MPU7_READ2 (0) + #define BSP_CFG_MPU7_WRITE2 (0) + #define BSP_CFG_MPU7_STADD2 (0x00000000) + #define BSP_CFG_MPU7_ENDADD2 (0x00000000) + #define BSP_CFG_MPU7_READ3 (0) + #define BSP_CFG_MPU7_WRITE3 (0) + #define BSP_CFG_MPU7_STADD3 (0x00000000) + #define BSP_CFG_MPU7_ENDADD3 (0x00000000) + #define BSP_CFG_MPU7_READ4 (0) + #define BSP_CFG_MPU7_WRITE4 (0) + #define BSP_CFG_MPU7_STADD4 (0x00000000) + #define BSP_CFG_MPU7_ENDADD4 (0x00000000) + #define BSP_CFG_MPU7_READ5 (0) + #define BSP_CFG_MPU7_WRITE5 (0) + #define BSP_CFG_MPU7_STADD5 (0x00000000) + #define BSP_CFG_MPU7_ENDADD5 (0x00000000) + #define BSP_CFG_MPU7_READ6 (0) + #define BSP_CFG_MPU7_WRITE6 (0) + #define BSP_CFG_MPU7_STADD6 (0x00000000) + #define BSP_CFG_MPU7_ENDADD6 (0x00000000) + #define BSP_CFG_MPU7_READ7 (0) + #define BSP_CFG_MPU7_WRITE7 (0) + #define BSP_CFG_MPU7_STADD7 (0x00000000) + #define BSP_CFG_MPU7_ENDADD7 (0x00000000) + #define BSP_CFG_MPU8_READ0 (0) + #define BSP_CFG_MPU8_WRITE0 (0) + #define BSP_CFG_MPU8_STADD0 (0x00000000) + #define BSP_CFG_MPU8_ENDADD0 (0x00000000) + #define BSP_CFG_MPU8_READ1 (0) + #define BSP_CFG_MPU8_WRITE1 (0) + #define BSP_CFG_MPU8_STADD1 (0x00000000) + #define BSP_CFG_MPU8_ENDADD1 (0x00000000) + #define BSP_CFG_MPU8_READ2 (0) + #define BSP_CFG_MPU8_WRITE2 (0) + #define BSP_CFG_MPU8_STADD2 (0x00000000) + #define BSP_CFG_MPU8_ENDADD2 (0x00000000) + #define BSP_CFG_MPU8_READ3 (0) + #define BSP_CFG_MPU8_WRITE3 (0) + #define BSP_CFG_MPU8_STADD3 (0x00000000) + #define BSP_CFG_MPU8_ENDADD3 (0x00000000) + #define BSP_CFG_MPU8_READ4 (0) + #define BSP_CFG_MPU8_WRITE4 (0) + #define BSP_CFG_MPU8_STADD4 (0x00000000) + #define BSP_CFG_MPU8_ENDADD4 (0x00000000) + #define BSP_CFG_MPU8_READ5 (0) + #define BSP_CFG_MPU8_WRITE5 (0) + #define BSP_CFG_MPU8_STADD5 (0x00000000) + #define BSP_CFG_MPU8_ENDADD5 (0x00000000) + #define BSP_CFG_MPU8_READ6 (0) + #define BSP_CFG_MPU8_WRITE6 (0) + #define BSP_CFG_MPU8_STADD6 (0x00000000) + #define BSP_CFG_MPU8_ENDADD6 (0x00000000) + #define BSP_CFG_MPU8_READ7 (0) + #define BSP_CFG_MPU8_WRITE7 (0) + #define BSP_CFG_MPU8_STADD7 (0x00000000) + #define BSP_CFG_MPU8_ENDADD7 (0x00000000) + + #define BSP_CFG_CPU_MPU_ATTR0_TYPE (BSP_TYPE_NORMAL_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR0_INNER (BSP_WRITE_BACK_NON_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR0_INNER_READ (BSP_READ_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR0_INNER_WRITE (BSP_WRITE_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR0_OUTER (BSP_WRITE_BACK_NON_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR0_OUTER_READ (BSP_READ_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR0_OUTER_WRITE (BSP_WRITE_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR0_DEVICE_TYPE (BSP_DEVICE_NGNRNE) + + #define BSP_CFG_CPU_MPU_ATTR1_TYPE (BSP_TYPE_NORMAL_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR1_INNER (BSP_WRITE_NON_THROUGH) + #define BSP_CFG_CPU_MPU_ATTR1_INNER_READ (BSP_READ_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR1_INNER_WRITE (BSP_WRITE_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR1_OUTER (BSP_WRITE_NON_THROUGH) + #define BSP_CFG_CPU_MPU_ATTR1_OUTER_READ (BSP_READ_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR1_OUTER_WRITE (BSP_WRITE_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR1_DEVICE_TYPE (BSP_DEVICE_NGNRNE) + + #define BSP_CFG_CPU_MPU_ATTR2_TYPE (BSP_TYPE_NORMAL_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR2_INNER (BSP_WRITE_NON_THROUGH) + #define BSP_CFG_CPU_MPU_ATTR2_INNER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR2_INNER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR2_OUTER (BSP_WRITE_NON_THROUGH) + #define BSP_CFG_CPU_MPU_ATTR2_OUTER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR2_OUTER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR2_DEVICE_TYPE (BSP_DEVICE_NGNRNE) + + #define BSP_CFG_CPU_MPU_ATTR3_TYPE (BSP_TYPE_NORMAL_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR3_INNER (BSP_NON_CACHEABLE) + #define BSP_CFG_CPU_MPU_ATTR3_INNER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR3_INNER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR3_OUTER (BSP_NON_CACHEABLE) + #define BSP_CFG_CPU_MPU_ATTR3_OUTER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR3_OUTER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR3_DEVICE_TYPE (BSP_DEVICE_NGNRNE) + + #define BSP_CFG_CPU_MPU_ATTR4_TYPE (BSP_TYPE_DEVICE_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR4_INNER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR4_INNER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR4_INNER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR4_OUTER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR4_OUTER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR4_OUTER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR4_DEVICE_TYPE (BSP_DEVICE_NGNRNE) + + #define BSP_CFG_CPU_MPU_ATTR5_TYPE (BSP_TYPE_DEVICE_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR5_INNER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR5_INNER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR5_INNER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR5_OUTER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR5_OUTER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR5_OUTER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR5_DEVICE_TYPE (BSP_DEVICE_NGNRE) + + #define BSP_CFG_CPU_MPU_ATTR6_TYPE (BSP_TYPE_DEVICE_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR6_INNER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR6_INNER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR6_INNER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR6_OUTER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR6_OUTER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR6_OUTER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR6_DEVICE_TYPE (BSP_DEVICE_NGRE) + + #define BSP_CFG_CPU_MPU_ATTR7_TYPE (BSP_TYPE_DEVICE_MEMORY) + #define BSP_CFG_CPU_MPU_ATTR7_INNER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR7_INNER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR7_INNER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR7_OUTER (BSP_WRITE_THROUGH_TRANSIENT) + #define BSP_CFG_CPU_MPU_ATTR7_OUTER_READ (BSP_READ_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR7_OUTER_WRITE (BSP_WRITE_NOT_ALLOCATE) + #define BSP_CFG_CPU_MPU_ATTR7_DEVICE_TYPE (BSP_DEVICE_GRE) + + /* Region00 : ATCM */ + #define BSP_CFG_EL1_MPU_REGION00_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION00_LIMIT (0x0001FFFF) + #define BSP_CFG_EL1_MPU_REGION00_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION00_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION00_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION00_ATTRINDEX (BSP_ATTRINDEX3) + #define BSP_CFG_EL1_MPU_REGION00_ENABLE (BSP_REGION_ENABLE) + + /* Region01 : BTCM */ + #define BSP_CFG_EL1_MPU_REGION01_BASE (0x00100000) + #define BSP_CFG_EL1_MPU_REGION01_LIMIT (0x0011FFFF) + #define BSP_CFG_EL1_MPU_REGION01_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION01_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION01_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION01_ATTRINDEX (BSP_ATTRINDEX3) + #define BSP_CFG_EL1_MPU_REGION01_ENABLE (BSP_REGION_ENABLE) + + /* Region02 : System RAM */ + #define BSP_CFG_EL1_MPU_REGION02_BASE (0x10000000) + #define BSP_CFG_EL1_MPU_REGION02_LIMIT (0x1017FFFF) + #define BSP_CFG_EL1_MPU_REGION02_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION02_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION02_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION02_ATTRINDEX (BSP_ATTRINDEX1) + #define BSP_CFG_EL1_MPU_REGION02_ENABLE (BSP_REGION_ENABLE) + + /* Region03 : Mirror area of System RAM */ + #define BSP_CFG_EL1_MPU_REGION03_BASE (0x30000000) + #define BSP_CFG_EL1_MPU_REGION03_LIMIT (0x3017FFFF) + #define BSP_CFG_EL1_MPU_REGION03_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION03_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION03_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION03_ATTRINDEX (BSP_ATTRINDEX3) + #define BSP_CFG_EL1_MPU_REGION03_ENABLE (BSP_REGION_ENABLE) + + /* Region04 : Mirror area of external address space */ + #define BSP_CFG_EL1_MPU_REGION04_BASE (0x40000000) + #define BSP_CFG_EL1_MPU_REGION04_LIMIT (0x5FFFFFFF) + #define BSP_CFG_EL1_MPU_REGION04_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION04_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION04_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION04_ATTRINDEX (BSP_ATTRINDEX3) + #define BSP_CFG_EL1_MPU_REGION04_ENABLE (BSP_REGION_ENABLE) + + /* Region05 : External address space */ + #define BSP_CFG_EL1_MPU_REGION05_BASE (0x60000000) + #define BSP_CFG_EL1_MPU_REGION05_LIMIT (0x7FFFFFFF) + #define BSP_CFG_EL1_MPU_REGION05_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION05_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION05_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION05_ATTRINDEX (BSP_ATTRINDEX1) + #define BSP_CFG_EL1_MPU_REGION05_ENABLE (BSP_REGION_ENABLE) + + /* Region06 : Non-Safety Peripheral */ + #define BSP_CFG_EL1_MPU_REGION06_BASE (0x80000000) + #define BSP_CFG_EL1_MPU_REGION06_LIMIT (0x80FFFFFF) + #define BSP_CFG_EL1_MPU_REGION06_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION06_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION06_XN (BSP_EXECUTE_NEVER) + #define BSP_CFG_EL1_MPU_REGION06_ATTRINDEX (BSP_ATTRINDEX5) + #define BSP_CFG_EL1_MPU_REGION06_ENABLE (BSP_REGION_ENABLE) + + /* Region07 : Safety Peripheral */ + #define BSP_CFG_EL1_MPU_REGION07_BASE (0x81000000) + #define BSP_CFG_EL1_MPU_REGION07_LIMIT (0x81FFFFFF) + #define BSP_CFG_EL1_MPU_REGION07_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION07_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION07_XN (BSP_EXECUTE_NEVER) + #define BSP_CFG_EL1_MPU_REGION07_ATTRINDEX (BSP_ATTRINDEX5) + #define BSP_CFG_EL1_MPU_REGION07_ENABLE (BSP_REGION_ENABLE) + + /* Region08 : LLPP Peripheral */ + #define BSP_CFG_EL1_MPU_REGION08_BASE (0x90000000) + #define BSP_CFG_EL1_MPU_REGION08_LIMIT (0x901FFFFF) + #define BSP_CFG_EL1_MPU_REGION08_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION08_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION08_XN (BSP_EXECUTE_NEVER) + #define BSP_CFG_EL1_MPU_REGION08_ATTRINDEX (BSP_ATTRINDEX5) + #define BSP_CFG_EL1_MPU_REGION08_ENABLE (BSP_REGION_ENABLE) + + /* Region09 : GIC0 */ + #define BSP_CFG_EL1_MPU_REGION09_BASE (0x94000000) + #define BSP_CFG_EL1_MPU_REGION09_LIMIT (0x941FFFFF) + #define BSP_CFG_EL1_MPU_REGION09_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION09_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION09_XN (BSP_EXECUTE_NEVER) + #define BSP_CFG_EL1_MPU_REGION09_ATTRINDEX (BSP_ATTRINDEX4) + #define BSP_CFG_EL1_MPU_REGION09_ENABLE (BSP_REGION_ENABLE) + + /* Region10 : Debug Private */ + #define BSP_CFG_EL1_MPU_REGION10_BASE (0xC0000000) + #define BSP_CFG_EL1_MPU_REGION10_LIMIT (0xC0FFFFFF) + #define BSP_CFG_EL1_MPU_REGION10_SH (BSP_OUTER_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION10_AP (BSP_EL1RW_EL0RW) + #define BSP_CFG_EL1_MPU_REGION10_XN (BSP_EXECUTE_NEVER) + #define BSP_CFG_EL1_MPU_REGION10_ATTRINDEX (BSP_ATTRINDEX4) + #define BSP_CFG_EL1_MPU_REGION10_ENABLE (BSP_REGION_ENABLE) + + /* Region11 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION11_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION11_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION11_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION11_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION11_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION11_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION11_ENABLE (BSP_REGION_DISABLE) + + /* Region12 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION12_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION12_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION12_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION12_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION12_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION12_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION12_ENABLE (BSP_REGION_DISABLE) + + /* Region13 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION13_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION13_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION13_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION13_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION13_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION13_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION13_ENABLE (BSP_REGION_DISABLE) + + /* Region14 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION14_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION14_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION14_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION14_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION14_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION14_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION14_ENABLE (BSP_REGION_DISABLE) + + /* Region15 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION15_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION15_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION15_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION15_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION15_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION15_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION15_ENABLE (BSP_REGION_DISABLE) + + /* Region16 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION16_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION16_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION16_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION16_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION16_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION16_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION16_ENABLE (BSP_REGION_DISABLE) + + /* Region17 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION17_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION17_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION17_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION17_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION17_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION17_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION17_ENABLE (BSP_REGION_DISABLE) + + /* Region18 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION18_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION18_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION18_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION18_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION18_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION18_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION18_ENABLE (BSP_REGION_DISABLE) + + /* Region19 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION19_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION19_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION19_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION19_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION19_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION19_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION19_ENABLE (BSP_REGION_DISABLE) + + /* Region20 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION20_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION20_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION20_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION20_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION20_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION20_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION20_ENABLE (BSP_REGION_DISABLE) + + /* Region21 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION21_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION21_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION21_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION21_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION21_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION21_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION21_ENABLE (BSP_REGION_DISABLE) + + /* Region22 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION22_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION22_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION22_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION22_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION22_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION22_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION22_ENABLE (BSP_REGION_DISABLE) + + /* Region23 : Not Used */ + #define BSP_CFG_EL1_MPU_REGION23_BASE (0x00000000) + #define BSP_CFG_EL1_MPU_REGION23_LIMIT (0x00000000) + #define BSP_CFG_EL1_MPU_REGION23_SH (BSP_NON_SHAREABLE) + #define BSP_CFG_EL1_MPU_REGION23_AP (BSP_EL1RW_EL0NO) + #define BSP_CFG_EL1_MPU_REGION23_XN (BSP_EXECUTE_ENABLE) + #define BSP_CFG_EL1_MPU_REGION23_ATTRINDEX (BSP_ATTRINDEX0) + #define BSP_CFG_EL1_MPU_REGION23_ENABLE (BSP_REGION_DISABLE) + + #define BSP_CFG_SCTLR_BR_BIT (BSP_BG_REGION_DISABLE) + #define BSP_CFG_SCTLR_I_BIT (BSP_ICACHE_ENABLE) + #define BSP_CFG_SCTLR_C_BIT (BSP_DATACACHE_ENABLE) +#endif /* BSP_MCU_DEVICE_MEMORY_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h new file mode 100644 index 00000000000..70e28786cb9 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h @@ -0,0 +1,12 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_R9A07G084M04GBG + #define BSP_ATCM_SIZE_BYTES (131072) + #define BSP_BTCM_SIZE_BYTES (131072) + #define BSP_SYSTEM_RAM_SIZE_BYTES (1572864) + #define BSP_PACKAGE_FBGA + #define BSP_PACKAGE_PINS (225) + + #define BSP_CFG_CORE_CR52 (0) +#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h new file mode 100644 index 00000000000..3bfed56a45b --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h @@ -0,0 +1,15 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_FAMILY_CFG_H_ +#define BSP_MCU_FAMILY_CFG_H_ +#include "bsp_mcu_device_pn_cfg.h" + #include "bsp_mcu_device_cfg.h" + #include "bsp_mcu_device_memory_cfg.h" + #include "../../../rzn/fsp/src/bsp/mcu/rzn2l/bsp_mcu_info.h" + #include "bsp_clock_cfg.h" + #define BSP_API_OVERRIDE "../../src/bsp/mcu/rzn2l/bsp_override.h" + #define BSP_MCU_GROUP_RZN2L (1) + #define BSP_LOCO_HZ (240000) + #define BSP_GLOBAL_SYSTEM_COUNTER_CLOCK_HZ (25000000) + #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (32) + #define BSP_VECTOR_TABLE_MAX_ENTRIES (448) +#endif /* BSP_MCU_FAMILY_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_memory_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_memory_cfg.h new file mode 100644 index 00000000000..baaa5be87a3 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_memory_cfg.h @@ -0,0 +1,5 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MEMORY_CFG_H_ +#define BSP_MEMORY_CFG_H_ +#define BSP_MPU_SUPPORT +#endif /* BSP_MEMORY_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_pin_cfg.h new file mode 100644 index 00000000000..c0d922b3a00 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/bsp/bsp_pin_cfg.h @@ -0,0 +1,105 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_PIN_CFG_H_ +#define BSP_PIN_CFG_H_ +#include "r_ioport.h" +#define ETH2_RXD3 (BSP_IO_PORT_00_PIN_0) +#define ETH2_RXDV (BSP_IO_PORT_00_PIN_1) +#define ETH2_TXEN (BSP_IO_PORT_00_PIN_2) +#define ETH2_REFCLK (BSP_IO_PORT_00_PIN_3) +#define ETH2_LINK (BSP_IO_PORT_00_PIN_5) +#define ETH2_TXCLK (BSP_IO_PORT_00_PIN_6) +#define ETH2_TXD3 (BSP_IO_PORT_01_PIN_2) +#define ETH2_TXD2 (BSP_IO_PORT_01_PIN_3) +#define ETH2_TXD1 (BSP_IO_PORT_01_PIN_4) +#define ETH2_TXD0 (BSP_IO_PORT_01_PIN_5) +#define CAN_RX (BSP_IO_PORT_01_PIN_7) +#define CAN_TX (BSP_IO_PORT_02_PIN_2) +#define TDO (BSP_IO_PORT_02_PIN_4) +#define TDI (BSP_IO_PORT_02_PIN_5) +#define TMS (BSP_IO_PORT_02_PIN_6) +#define TCK (BSP_IO_PORT_02_PIN_7) +#define ETH_LED4 (BSP_IO_PORT_03_PIN_0) +#define LED_RED1 (BSP_IO_PORT_04_PIN_1) +#define ETH_LED6 (BSP_IO_PORT_04_PIN_4) +#define ETH_LED7 (BSP_IO_PORT_05_PIN_0) +#define SCL (BSP_IO_PORT_05_PIN_2) +#define SDA (BSP_IO_PORT_05_PIN_3) +#define SW2 (BSP_IO_PORT_05_PIN_4) +#define ETH1_LINK (BSP_IO_PORT_05_PIN_5) +#define ETH1_TXD2 (BSP_IO_PORT_05_PIN_7) +#define ETH1_TXD3 (BSP_IO_PORT_06_PIN_0) +#define ETH1_REFCLK (BSP_IO_PORT_06_PIN_1) +#define ETH1_TXD1 (BSP_IO_PORT_06_PIN_2) +#define ETH1_TXD0 (BSP_IO_PORT_06_PIN_3) +#define ETH1_TXCLK (BSP_IO_PORT_06_PIN_4) +#define ETH1_TXEN (BSP_IO_PORT_06_PIN_5) +#define ETH1_RXD0 (BSP_IO_PORT_06_PIN_6) +#define ETH1_RXD1 (BSP_IO_PORT_06_PIN_7) +#define ETH1_RXD2 (BSP_IO_PORT_07_PIN_0) +#define ETH1_RXD3 (BSP_IO_PORT_07_PIN_1) +#define ETH1_RXDV (BSP_IO_PORT_07_PIN_2) +#define ETH1_RXCLK (BSP_IO_PORT_07_PIN_3) +#define USB_VBUSIN (BSP_IO_PORT_07_PIN_4) +#define ETH0_RXD3 (BSP_IO_PORT_08_PIN_4) +#define ETH0_RXDV (BSP_IO_PORT_08_PIN_5) +#define ETH0_RXCLK (BSP_IO_PORT_08_PIN_6) +#define ETH_MDC (BSP_IO_PORT_08_PIN_7) +#define ETH_MDIO (BSP_IO_PORT_09_PIN_0) +#define ETH0_REFCLK (BSP_IO_PORT_09_PIN_1) +#define ETH0_TXD3 (BSP_IO_PORT_09_PIN_3) +#define ETH0_TXD2 (BSP_IO_PORT_09_PIN_4) +#define ETH0_TXD1 (BSP_IO_PORT_09_PIN_5) +#define ETH0_TXD0 (BSP_IO_PORT_09_PIN_6) +#define ETH0_TXCLK (BSP_IO_PORT_09_PIN_7) +#define ETH0_TXEN (BSP_IO_PORT_10_PIN_0) +#define ETH0_RXD0 (BSP_IO_PORT_10_PIN_1) +#define ETH0_RXD1 (BSP_IO_PORT_10_PIN_2) +#define ETH0_RXD2 (BSP_IO_PORT_10_PIN_3) +#define ETH0_LINK (BSP_IO_PORT_10_PIN_4) +#define EEPROM_SCL (BSP_IO_PORT_13_PIN_2) +#define EEPROM_SDA (BSP_IO_PORT_13_PIN_3) +#define ESC_RESETOUT (BSP_IO_PORT_13_PIN_4) +#define SW3_Pin2 (BSP_IO_PORT_13_PIN_5) +#define SW3_Pin1 (BSP_IO_PORT_13_PIN_6) +#define SW3_Pin4 (BSP_IO_PORT_13_PIN_7) +#define SW3_Pin3 (BSP_IO_PORT_14_PIN_0) +#define XSPI0_ECS (BSP_IO_PORT_14_PIN_2) +#define XSPI0_DS (BSP_IO_PORT_14_PIN_4) +#define XSPI0_CKN (BSP_IO_PORT_14_PIN_5) +#define XSPI0_CKP (BSP_IO_PORT_14_PIN_6) +#define XSPI0_IO0 (BSP_IO_PORT_14_PIN_7) +#define XSPI0_IO1 (BSP_IO_PORT_15_PIN_0) +#define XSPI0_IO2 (BSP_IO_PORT_15_PIN_1) +#define XSPI0_IO3 (BSP_IO_PORT_15_PIN_2) +#define XSPI0_IO4 (BSP_IO_PORT_15_PIN_3) +#define XSPI0_IO5 (BSP_IO_PORT_15_PIN_4) +#define XSPI0_IO6 (BSP_IO_PORT_15_PIN_5) +#define XSPI0_IO7 (BSP_IO_PORT_15_PIN_6) +#define OSPI_CS (BSP_IO_PORT_15_PIN_7) +#define ORAM_CS0 (BSP_IO_PORT_16_PIN_0) +#define XSPI0_RESET0 (BSP_IO_PORT_16_PIN_1) +#define SW1 (BSP_IO_PORT_16_PIN_3) +#define UART_USB_TX (BSP_IO_PORT_16_PIN_5) +#define UART_USB_RX (BSP_IO_PORT_16_PIN_6) +#define LED_RED2 (BSP_IO_PORT_17_PIN_3) +#define USB_OVRCUR (BSP_IO_PORT_17_PIN_5) +#define SCI_RXD (BSP_IO_PORT_17_PIN_7) +#define SCI_TXD (BSP_IO_PORT_18_PIN_0) +#define LED_GREEN (BSP_IO_PORT_18_PIN_2) +#define SCK (BSP_IO_PORT_18_PIN_4) +#define MOSI (BSP_IO_PORT_18_PIN_5) +#define MISO (BSP_IO_PORT_18_PIN_6) +#define USB_VBUSEN (BSP_IO_PORT_19_PIN_0) +#define ETH_LED2_MDV0 (BSP_IO_PORT_20_PIN_1) +#define ETH_LED0_MDV1 (BSP_IO_PORT_20_PIN_2) +#define ETH_LED1_MDV2 (BSP_IO_PORT_20_PIN_3) +#define ETH_LED3_MDV3 (BSP_IO_PORT_20_PIN_4) +#define CS (BSP_IO_PORT_21_PIN_1) +#define ETH_LED5 (BSP_IO_PORT_22_PIN_1) +#define LED_ORANGE (BSP_IO_PORT_22_PIN_3) +#define ETH2_RXD0 (BSP_IO_PORT_23_PIN_7) +#define ETH2_RXD1 (BSP_IO_PORT_24_PIN_0) +#define ETH2_RXCLK (BSP_IO_PORT_24_PIN_1) +#define ETH2_RXD2 (BSP_IO_PORT_24_PIN_2) +extern const ioport_cfg_t g_bsp_pin_cfg; /* RSK+RZN2L */ +#endif /* BSP_PIN_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_ioport_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_ioport_cfg.h new file mode 100644 index 00000000000..d2688bf5ba3 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_ioport_cfg.h @@ -0,0 +1,13 @@ +/* generated configuration header file - do not edit */ +#ifndef R_IOPORT_CFG_H_ +#define R_IOPORT_CFG_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE) + +#ifdef __cplusplus +} +#endif +#endif /* R_IOPORT_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_sci_uart_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_sci_uart_cfg.h new file mode 100644 index 00000000000..fe4cc09bf17 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_cfg/fsp_cfg/r_sci_uart_cfg.h @@ -0,0 +1,16 @@ +/* generated configuration header file - do not edit */ +#ifndef R_SCI_UART_CFG_H_ +#define R_SCI_UART_CFG_H_ +#define SCI_UART_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE) +#define SCI_UART_CFG_FIFO_SUPPORT (1) +#define SCI_UART_CFG_DMAC_SUPPORTED (0) +#define SCI_UART_CFG_FLOW_CONTROL_SUPPORT (0) +#define SCI_UART_CFG_MULTIPLEX_INTERRUPT_SUPPORTED (0) +#if SCI_UART_CFG_MULTIPLEX_INTERRUPT_SUPPORTED + #define SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE BSP_INTERRUPT_ENABLE + #define SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE BSP_INTERRUPT_DISABLE +#else + #define SCI_UART_CFG_MULTIPLEX_INTERRUPT_ENABLE + #define SCI_UART_CFG_MULTIPLEX_INTERRUPT_DISABLE +#endif +#endif /* R_SCI_UART_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/SConscript b/bsp/renesas/rzn2l_rsk/rzn_gen/SConscript new file mode 100644 index 00000000000..33e4f94e073 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/SConscript @@ -0,0 +1,19 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * +from gcc import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + Return('group') +elif rtconfig.PLATFORM in GetGCCLikePLATFORM(): + if GetOption('target') != 'mdk5': + src = Glob('*.c') + CPPPATH = [cwd, ] + +group = DefineGroup('rz_gen', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/bsp_clock_cfg.h b/bsp/renesas/rzn2l_rsk/rzn_gen/bsp_clock_cfg.h new file mode 100644 index 00000000000..eb168da8f5d --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/bsp_clock_cfg.h @@ -0,0 +1,42 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_CLOCK_CFG_H_ +#define BSP_CLOCK_CFG_H_ +#define BSP_CFG_CLOCKS_SECURE (0) +#define BSP_CFG_CLOCKS_OVERRIDE (0) +#define BSP_CFG_MAIN_CLOCK_HZ (25000000) /* Main Clock: 25MHz */ +#define BSP_CFG_LOCO_ENABLE (BSP_CLOCKS_LOCO_ENABLE) /* LOCO Enabled */ +#define BSP_CFG_PLL1 (BSP_CLOCKS_PLL1_INITIAL) /* PLL1 is initial state */ +#define BSP_CFG_PHYSEL (BSP_CLOCKS_PHYSEL_MAINOSC_DIV) /* Ethernet Clock src: Main clock oscillator */ +#define BSP_CFG_CLMA0_ENABLE (BSP_CLOCKS_CLMA0_ENABLE) /* CLMA0 Enabled */ +#define BSP_CFG_CLMA0MASK (BSP_CLOCKS_CLMA0_ERROR_NOT_MASK) /* CLMA0 error not mask */ +#define BSP_CFG_CLMA3MASK (BSP_CLOCKS_CLMA3_ERROR_NOT_MASK) /* CLMA3 error not mask */ +#define BSP_CFG_CLMA1MASK (BSP_CLOCKS_CLMA1_ERROR_MASK) /* CLMA1 error mask */ +#define BSP_CFG_CLMA3_ENABLE (BSP_CLOCKS_CLMA3_ENABLE) /* CLMA3 Enabled */ +#define BSP_CFG_CLMA1_ENABLE (BSP_CLOCKS_CLMA1_ENABLE) /* CLMA1 Enabled */ +#define BSP_CFG_CLMA2_ENABLE (BSP_CLOCKS_CLMA2_ENABLE) /* CLMA2 Enabled */ +#define BSP_CFG_CLMA0_CMPL (1) /* CLMA0 CMPL 1 */ +#define BSP_CFG_CLMA1_CMPL (1) /* CLMA1 CMPL 1 */ +#define BSP_CFG_CLMA2_CMPL (1) /* CLMA2 CMPL 1 */ +#define BSP_CFG_CLMA3_CMPL (1) /* CLMA3 CMPL 1 */ +#define BSP_CFG_CLMASEL (BSP_CLOCKS_CLMASEL_LOCO) /* Alternative clock: LOCO */ +#define BSP_CFG_CLMA0_CMPH (1023) /* CLMA0 CMPH 1023 */ +#define BSP_CFG_CLMA1_CMPH (1023) /* CLMA1 CMPH 1023 */ +#define BSP_CFG_CLMA2_CMPH (1023) /* CLMA2 CMPH 1023 */ +#define BSP_CFG_CLMA3_CMPH (1023) /* CLMA3 CMPH 1023 */ +#define BSP_CFG_DIVSELSUB (BSP_CLOCKS_DIVSELSUB_0) /* ICLK 200MHz */ +#define BSP_CFG_FSELCPU0 (BSP_CLOCKS_FSELCPU0_ICLK_MUL2) /* CPU0CLK Mulx2 */ +#define BSP_CFG_CKIO (BSP_CLOCKS_CKIO_ICLK_DIV4) /* CKIO Div/4 */ +#define BSP_CFG_SCI0ASYNCCLK (BSP_CLOCKS_SCI0_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SCI0ASYNCCLK: 96MHz */ +#define BSP_CFG_SCI1ASYNCCLK (BSP_CLOCKS_SCI1_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SCI1ASYNCCLK: 96MHz */ +#define BSP_CFG_SCI2ASYNCCLK (BSP_CLOCKS_SCI2_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SCI2ASYNCCLK: 96MHz */ +#define BSP_CFG_SCI3ASYNCCLK (BSP_CLOCKS_SCI3_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SCI3ASYNCCLK: 96MHz */ +#define BSP_CFG_SCI4ASYNCCLK (BSP_CLOCKS_SCI4_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SCI4ASYNCCLK: 96MHz */ +#define BSP_CFG_SCI5ASYNCCLK (BSP_CLOCKS_SCI5_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SCI5ASYNCCLK: 96MHz */ +#define BSP_CFG_SPI0ASYNCCLK (BSP_CLOCKS_SPI0_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SPI0ASYNCCLK: 96MHz */ +#define BSP_CFG_SPI1ASYNCCLK (BSP_CLOCKS_SPI1_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SPI1ASYNCCLK: 96MHz */ +#define BSP_CFG_SPI2ASYNCCLK (BSP_CLOCKS_SPI2_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SPI2ASYNCCLK: 96MHz */ +#define BSP_CFG_SPI3ASYNCCLK (BSP_CLOCKS_SPI3_ASYNCHRONOUS_SERIAL_CLOCK_96_MHZ) /* SPI3ASYNCCLK: 96MHz */ +#define BSP_CFG_FSELCANFD (BSP_CLOCKS_CANFD_CLOCK_40_MHZ) /* PCLKCAN 40MHz */ +#define BSP_CFG_FSELXSPI0_DIVSELXSPI0 (BSP_CLOCKS_XSPI0_CLOCK_DIV0_12_5_MHZ) /* XSPI_CLK0 12.5MHz */ +#define BSP_CFG_FSELXSPI1_DIVSELXSPI1 (BSP_CLOCKS_XSPI1_CLOCK_DIV0_12_5_MHZ) /* XSPI_CLK1 12.5MHz */ +#endif /* BSP_CLOCK_CFG_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/common_data.c b/bsp/renesas/rzn2l_rsk/rzn_gen/common_data.c new file mode 100644 index 00000000000..f9b7a5039f4 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/common_data.c @@ -0,0 +1,75 @@ +/* generated common source file - do not edit */ +#include "common_data.h" +/** IOPORT interface configuration for event link **/ + const ioport_extend_cfg_t g_ioport_cfg_extend = + { + .port_group_output_cfg[IOPORT_PORT_GROUP_1] = + { + .pin_select = (uint8_t)( IOPORT_EVENT_PIN_SELECTION_NONE), + .operation = IOPORT_EVENT_OUTPUT_OPERATION_LOW + }, + .port_group_output_cfg[IOPORT_PORT_GROUP_2] = + { + .pin_select = (uint8_t)( IOPORT_EVENT_PIN_SELECTION_NONE), + .operation = IOPORT_EVENT_OUTPUT_OPERATION_LOW + }, + .port_group_input_cfg[IOPORT_PORT_GROUP_1] = + { + .event_control = IOPORT_EVENT_CONTROL_DISABLE, + .pin_select = (uint8_t)( IOPORT_EVENT_PIN_SELECTION_NONE), + .edge_detection = IOPORT_EVENT_DETECTION_RISING_EDGE, + .overwrite_control = IOPORT_EVENT_CONTROL_DISABLE, + .buffer_init_value = IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 7U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 6U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 5U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 3U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 2U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 1U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW + }, + .port_group_input_cfg[IOPORT_PORT_GROUP_2] = + { + .event_control = IOPORT_EVENT_CONTROL_DISABLE, + .pin_select = (uint8_t)( IOPORT_EVENT_PIN_SELECTION_NONE), + .edge_detection = IOPORT_EVENT_DETECTION_RISING_EDGE, + .overwrite_control = IOPORT_EVENT_CONTROL_DISABLE, + .buffer_init_value = IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 6U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 5U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 4U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 3U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 2U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW << 1U | IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW + }, + .single_port_cfg[IOPORT_SINGLE_PORT_0] = + { + .event_control = IOPORT_EVENT_CONTROL_DISABLE, + .direction = IOPORT_EVENT_DIRECTION_OUTPUT, + .port_num = (uint16_t)BSP_IO_PORT_16_PIN_0, + .operation = IOPORT_EVENT_OUTPUT_OPERATION_LOW, + .edge_detection = IOPORT_EVENT_DETECTION_RISING_EDGE + }, + .single_port_cfg[IOPORT_SINGLE_PORT_1] = + { + .event_control = IOPORT_EVENT_CONTROL_DISABLE, + .direction = IOPORT_EVENT_DIRECTION_OUTPUT, + .port_num = (uint16_t)BSP_IO_PORT_16_PIN_0, + .operation = IOPORT_EVENT_OUTPUT_OPERATION_LOW, + .edge_detection = IOPORT_EVENT_DETECTION_RISING_EDGE + }, + .single_port_cfg[IOPORT_SINGLE_PORT_2] = + { + .event_control = IOPORT_EVENT_CONTROL_DISABLE, + .direction = IOPORT_EVENT_DIRECTION_OUTPUT, + .port_num = (uint16_t)BSP_IO_PORT_16_PIN_0, + .operation = IOPORT_EVENT_OUTPUT_OPERATION_LOW, + .edge_detection = IOPORT_EVENT_DETECTION_RISING_EDGE + }, + .single_port_cfg[IOPORT_SINGLE_PORT_3] = + { + .event_control = IOPORT_EVENT_CONTROL_DISABLE, + .direction = IOPORT_EVENT_DIRECTION_OUTPUT, + .port_num = (uint16_t)BSP_IO_PORT_16_PIN_0, + .operation = IOPORT_EVENT_OUTPUT_OPERATION_LOW, + .edge_detection = IOPORT_EVENT_DETECTION_RISING_EDGE + } + }; + +ioport_instance_ctrl_t g_ioport_ctrl; + +const ioport_instance_t g_ioport = + { + .p_api = &g_ioport_on_ioport, + .p_ctrl = &g_ioport_ctrl, + .p_cfg = &g_bsp_pin_cfg + }; +void g_common_init(void) { +} diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/common_data.h b/bsp/renesas/rzn2l_rsk/rzn_gen/common_data.h new file mode 100644 index 00000000000..e2eb70836ba --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/common_data.h @@ -0,0 +1,16 @@ +/* generated common header file - do not edit */ +#ifndef COMMON_DATA_H_ +#define COMMON_DATA_H_ +#include +#include "bsp_api.h" +#include "r_ioport.h" +#include "bsp_pin_cfg.h" +FSP_HEADER +/* IOPORT Instance */ +extern const ioport_instance_t g_ioport; + +/* IOPORT control structure. */ +extern ioport_instance_ctrl_t g_ioport_ctrl; +void g_common_init(void); +FSP_FOOTER +#endif /* COMMON_DATA_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.c b/bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.c new file mode 100644 index 00000000000..2ddb428c13d --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.c @@ -0,0 +1,110 @@ +/* generated HAL source file - do not edit */ +#include "hal_data.h" +sci_uart_instance_ctrl_t g_uart0_ctrl; + + #define FSP_NOT_DEFINED (1) + #if (FSP_NOT_DEFINED) != (FSP_NOT_DEFINED) + + /* If the transfer module is DMAC, define a DMAC transfer callback. */ + extern void sci_uart_tx_dmac_callback(sci_uart_instance_ctrl_t * p_instance_ctrl); + + void g_uart0_tx_transfer_callback (transfer_callback_args_t * p_args) + { + FSP_PARAMETER_NOT_USED(p_args); + sci_uart_tx_dmac_callback(&g_uart0_ctrl); + } + #endif + + #if (FSP_NOT_DEFINED) != (FSP_NOT_DEFINED) + + /* If the transfer module is DMAC, define a DMAC transfer callback. */ + extern void sci_uart_rx_dmac_callback(sci_uart_instance_ctrl_t * p_instance_ctrl); + + void g_uart0_rx_transfer_callback (transfer_callback_args_t * p_args) + { + FSP_PARAMETER_NOT_USED(p_args); + sci_uart_rx_dmac_callback(&g_uart0_ctrl); + } + #endif + #undef FSP_NOT_DEFINED + + sci_baud_setting_t g_uart0_baud_setting = + { + /* Baud rate calculated with 0.160% error. */ .baudrate_bits_b.abcse = 0, .baudrate_bits_b.abcs = 0, .baudrate_bits_b.bgdm = 1, .baudrate_bits_b.cks = 0, .baudrate_bits_b.brr = 51, .baudrate_bits_b.mddr = (uint8_t) 256, .baudrate_bits_b.brme = false + }; + + /** UART extended configuration for UARTonSCI HAL driver */ + const sci_uart_extended_cfg_t g_uart0_cfg_extend = + { + .clock = SCI_UART_CLOCK_INT, + .rx_edge_start = SCI_UART_START_BIT_FALLING_EDGE, + .noise_cancel = SCI_UART_NOISE_CANCELLATION_DISABLE, + .rx_fifo_trigger = SCI_UART_RX_FIFO_TRIGGER_MAX, + .p_baud_setting = &g_uart0_baud_setting, +#if 1 + .clock_source = SCI_UART_CLOCK_SOURCE_SCI0ASYNCCLK, +#else + .clock_source = SCI_UART_CLOCK_SOURCE_PCLKM, +#endif + .flow_control = SCI_UART_FLOW_CONTROL_RTS, + #if 0xFF != 0xFF + .flow_control_pin = BSP_IO_PORT_FF_PIN_0xFF, + #else + .flow_control_pin = (bsp_io_port_pin_t) UINT16_MAX, + #endif + .rs485_setting = { + .enable = SCI_UART_RS485_DISABLE, + .polarity = SCI_UART_RS485_DE_POLARITY_HIGH, + .assertion_time = 1, + .negation_time = 1, + }, + }; + + /** UART interface configuration */ + const uart_cfg_t g_uart0_cfg = + { + .channel = 0, + .data_bits = UART_DATA_BITS_8, + .parity = UART_PARITY_OFF, + .stop_bits = UART_STOP_BITS_1, + .p_callback = user_uart0_callback, + .p_context = NULL, + .p_extend = &g_uart0_cfg_extend, + .p_transfer_tx = g_uart0_P_TRANSFER_TX, + .p_transfer_rx = g_uart0_P_TRANSFER_RX, + .rxi_ipl = (12), + .txi_ipl = (12), + .tei_ipl = (12), + .eri_ipl = (12), +#if defined(VECTOR_NUMBER_SCI0_RXI) + .rxi_irq = VECTOR_NUMBER_SCI0_RXI, +#else + .rxi_irq = FSP_INVALID_VECTOR, +#endif +#if defined(VECTOR_NUMBER_SCI0_TXI) + .txi_irq = VECTOR_NUMBER_SCI0_TXI, +#else + .txi_irq = FSP_INVALID_VECTOR, +#endif +#if defined(VECTOR_NUMBER_SCI0_TEI) + .tei_irq = VECTOR_NUMBER_SCI0_TEI, +#else + .tei_irq = FSP_INVALID_VECTOR, +#endif +#if defined(VECTOR_NUMBER_SCI0_ERI) + .eri_irq = VECTOR_NUMBER_SCI0_ERI, +#else + .eri_irq = FSP_INVALID_VECTOR, +#endif + }; + +/* Instance structure to use this module. */ +const uart_instance_t g_uart0 = +{ + .p_ctrl = &g_uart0_ctrl, + .p_cfg = &g_uart0_cfg, + .p_api = &g_uart_on_sci +}; +void g_hal_init(void) { +g_common_init(); +} diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.h b/bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.h new file mode 100644 index 00000000000..983bc881f4a --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/hal_data.h @@ -0,0 +1,37 @@ +/* generated HAL header file - do not edit */ +#ifndef HAL_DATA_H_ +#define HAL_DATA_H_ +#include +#include "bsp_api.h" +#include "common_data.h" +#include "r_sci_uart.h" + #include "r_uart_api.h" +FSP_HEADER +/** UART on SCI Instance. */ + extern const uart_instance_t g_uart0; + + /** Access the UART instance using these structures when calling API functions directly (::p_api is not used). */ + extern sci_uart_instance_ctrl_t g_uart0_ctrl; + extern const uart_cfg_t g_uart0_cfg; + extern const sci_uart_extended_cfg_t g_uart0_cfg_extend; + + #ifndef user_uart0_callback + void user_uart0_callback(uart_callback_args_t * p_args); + #endif + + #define FSP_NOT_DEFINED (1) + #if (FSP_NOT_DEFINED == FSP_NOT_DEFINED) + #define g_uart0_P_TRANSFER_TX (NULL) + #else + #define g_uart0_P_TRANSFER_TX (&FSP_NOT_DEFINED) + #endif + #if (FSP_NOT_DEFINED == FSP_NOT_DEFINED) + #define g_uart0_P_TRANSFER_RX (NULL) + #else + #define g_uart0_P_TRANSFER_RX (&FSP_NOT_DEFINED) + #endif + #undef FSP_NOT_DEFINED +void hal_entry(void); +void g_hal_init(void); +FSP_FOOTER +#endif /* HAL_DATA_H_ */ diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/main.c b/bsp/renesas/rzn2l_rsk/rzn_gen/main.c new file mode 100644 index 00000000000..42c5904834c --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/main.c @@ -0,0 +1,6 @@ +/* generated main source file - do not edit */ +#include "hal_data.h" + int main(void) { + hal_entry(); + return 0; + } diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/pin_data.c b/bsp/renesas/rzn2l_rsk/rzn_gen/pin_data.c new file mode 100644 index 00000000000..16c236af9a5 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/pin_data.c @@ -0,0 +1,228 @@ +/* generated pin source file - do not edit */ +#include "bsp_api.h" +#include "r_ioport_api.h" +#include "r_ioport.h" + +extern const ioport_extend_cfg_t g_ioport_cfg_extend; + + +const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = { + { + .pin = BSP_IO_PORT_01_PIN_7, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P017_PFC_08_CANRX0) + }, + { + .pin = BSP_IO_PORT_02_PIN_2, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P022_PFC_08_CANTX0) + }, + { + .pin = BSP_IO_PORT_02_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P024_PFC_00_TDO) + }, + { + .pin = BSP_IO_PORT_02_PIN_5, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P025_PFC_01_TDI) + }, + { + .pin = BSP_IO_PORT_02_PIN_6, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P026_PFC_00_TMS_SWDIO) + }, + { + .pin = BSP_IO_PORT_02_PIN_7, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P027_PFC_00_TCK_SWCLK) + }, + { + .pin = BSP_IO_PORT_03_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_04_PIN_1, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_04_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_05_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_05_PIN_2, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P052_PFC_08_IIC_SCL1) + }, + { + .pin = BSP_IO_PORT_05_PIN_3, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P053_PFC_09_IIC_SDA1) + }, + { + .pin = BSP_IO_PORT_05_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_07_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P074_PFC_02_USB_VBUSIN) + }, + { + .pin = BSP_IO_PORT_08_PIN_7, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P087_PFC_00_GMAC_MDC) + }, + { + .pin = BSP_IO_PORT_09_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P090_PFC_00_GMAC_MDIO) + }, + { + .pin = BSP_IO_PORT_13_PIN_2, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P132_PFC_0B_IIC_SCL0) + }, + { + .pin = BSP_IO_PORT_13_PIN_3, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_MID | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P133_PFC_0B_IIC_SDA0) + }, + { + .pin = BSP_IO_PORT_13_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_13_PIN_5, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_13_PIN_6, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_13_PIN_7, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_14_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_14_PIN_2, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P142_PFC_01_XSPI0_ECS0) + }, + { + .pin = BSP_IO_PORT_14_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P144_PFC_00_XSPI0_DS) + }, + { + .pin = BSP_IO_PORT_14_PIN_5, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P145_PFC_00_XSPI0_CKN) + }, + { + .pin = BSP_IO_PORT_14_PIN_6, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P146_PFC_00_XSPI0_CKP) + }, + { + .pin = BSP_IO_PORT_14_PIN_7, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P147_PFC_00_XSPI0_IO0) + }, + { + .pin = BSP_IO_PORT_15_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P150_PFC_00_XSPI0_IO1) + }, + { + .pin = BSP_IO_PORT_15_PIN_1, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P151_PFC_00_XSPI0_IO2) + }, + { + .pin = BSP_IO_PORT_15_PIN_2, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P152_PFC_00_XSPI0_IO3) + }, + { + .pin = BSP_IO_PORT_15_PIN_3, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P153_PFC_00_XSPI0_IO4) + }, + { + .pin = BSP_IO_PORT_15_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P154_PFC_00_XSPI0_IO5) + }, + { + .pin = BSP_IO_PORT_15_PIN_5, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P155_PFC_00_XSPI0_IO6) + }, + { + .pin = BSP_IO_PORT_15_PIN_6, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P156_PFC_00_XSPI0_IO7) + }, + { + .pin = BSP_IO_PORT_15_PIN_7, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P157_PFC_00_XSPI0_CS0) + }, + { + .pin = BSP_IO_PORT_16_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P160_PFC_00_XSPI0_CS1) + }, + { + .pin = BSP_IO_PORT_16_PIN_1, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P161_PFC_00_XSPI0_RESET0) + }, + { + .pin = BSP_IO_PORT_16_PIN_3, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_16_PIN_5, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P165_PFC_01_TXD0_SDA0_MOSI0) + }, + { + .pin = BSP_IO_PORT_16_PIN_6, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P166_PFC_02_RXD0_SCL0_MISO0) + }, + { + .pin = BSP_IO_PORT_17_PIN_3, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_17_PIN_5, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P175_PFC_05_USB_OVRCUR) + }, + { + .pin = BSP_IO_PORT_17_PIN_7, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P177_PFC_04_RXD3_SCL3_MISO3) + }, + { + .pin = BSP_IO_PORT_18_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P180_PFC_04_TXD3_SDA3_MOSI3) + }, + { + .pin = BSP_IO_PORT_18_PIN_2, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_18_PIN_4, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P184_PFC_03_SPI_RSPCK2) + }, + { + .pin = BSP_IO_PORT_18_PIN_5, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P185_PFC_03_SPI_MOSI2) + }, + { + .pin = BSP_IO_PORT_18_PIN_6, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P186_PFC_05_SPI_MISO2) + }, + { + .pin = BSP_IO_PORT_19_PIN_0, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_PIN_P190_PFC_00_USB_VBUSEN) + }, + { + .pin = BSP_IO_PORT_21_PIN_1, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_PERI | (uint32_t) IOPORT_CFG_SLEW_RATE_FAST | (uint32_t) IOPORT_PIN_P211_PFC_06_SPI_SSL20) + }, + { + .pin = BSP_IO_PORT_22_PIN_1, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_22_PIN_3, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, +}; + +const ioport_cfg_t g_bsp_pin_cfg = { + .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t), + .p_pin_cfg_data = &g_bsp_pin_cfg_data[0], + .p_extend = &g_ioport_cfg_extend, +}; diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.c b/bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.c new file mode 100644 index 00000000000..c02f2f69daf --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.c @@ -0,0 +1,12 @@ +/* generated vector source file - do not edit */ + #include "bsp_api.h" + /* Do not build these data structures if no interrupts are currently allocated because IAR will have build errors. */ + #if VECTOR_DATA_IRQ_COUNT > 0 + BSP_DONT_REMOVE const fsp_vector_t g_vector_table[BSP_ICU_VECTOR_MAX_ENTRIES] = + { + [288] = sci_uart_eri_isr, /* SCI0_ERI (SCI0 Receive error) */ + [289] = sci_uart_rxi_isr, /* SCI0_RXI (SCI0 Receive data full) */ + [290] = sci_uart_txi_isr, /* SCI0_TXI (SCI0 Transmit data empty) */ + [291] = sci_uart_tei_isr, /* SCI0_TEI (SCI0 Transmit end) */ + }; + #endif \ No newline at end of file diff --git a/bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.h b/bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.h new file mode 100644 index 00000000000..852c5ecf779 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/rzn_gen/vector_data.h @@ -0,0 +1,50 @@ +/* generated vector header file - do not edit */ + #ifndef VECTOR_DATA_H + #define VECTOR_DATA_H + #include "bsp_api.h" + /* Number of interrupts allocated */ + #ifndef VECTOR_DATA_IRQ_COUNT + #define VECTOR_DATA_IRQ_COUNT (4) + #endif + /* ISR prototypes */ + void sci_uart_eri_isr(void); + void sci_uart_rxi_isr(void); + void sci_uart_txi_isr(void); + void sci_uart_tei_isr(void); + + /* Vector table allocations */ + #define VECTOR_NUMBER_SCI0_ERI ((IRQn_Type) 288) /* SCI0_ERI (SCI0 Receive error) */ + #define VECTOR_NUMBER_SCI0_RXI ((IRQn_Type) 289) /* SCI0_RXI (SCI0 Receive data full) */ + #define VECTOR_NUMBER_SCI0_TXI ((IRQn_Type) 290) /* SCI0_TXI (SCI0 Transmit data empty) */ + #define VECTOR_NUMBER_SCI0_TEI ((IRQn_Type) 291) /* SCI0_TEI (SCI0 Transmit end) */ + typedef enum IRQn { + SoftwareGeneratedInt0 = -32, + SoftwareGeneratedInt1 = -31, + SoftwareGeneratedInt2 = -30, + SoftwareGeneratedInt3 = -29, + SoftwareGeneratedInt4 = -28, + SoftwareGeneratedInt5 = -27, + SoftwareGeneratedInt6 = -26, + SoftwareGeneratedInt7 = -25, + SoftwareGeneratedInt8 = -24, + SoftwareGeneratedInt9 = -23, + SoftwareGeneratedInt10 = -22, + SoftwareGeneratedInt11 = -21, + SoftwareGeneratedInt12 = -20, + SoftwareGeneratedInt13 = -19, + SoftwareGeneratedInt14 = -18, + SoftwareGeneratedInt15 = -17, + DebugCommunicationsChannelInt = -10, + PerformanceMonitorCounterOverflowInt = -9, + CrossTriggerInterfaceInt = -8, + VritualCPUInterfaceMaintenanceInt = -7, + HypervisorTimerInt = -6, + VirtualTimerInt = -5, + NonSecurePhysicalTimerInt = -2, + SCI0_ERI_IRQn = 288, /* SCI0_ERI (SCI0 Receive error) */ + SCI0_RXI_IRQn = 289, /* SCI0_RXI (SCI0 Receive data full) */ + SCI0_TXI_IRQn = 290, /* SCI0_TXI (SCI0 Transmit data empty) */ + SCI0_TEI_IRQn = 291, /* SCI0_TEI (SCI0 Transmit end) */ + SHARED_PERIPHERAL_INTERRUPTS_MAX_ENTRIES = BSP_VECTOR_TABLE_MAX_ENTRIES + } IRQn_Type; + #endif /* VECTOR_DATA_H */ \ No newline at end of file diff --git a/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.icf b/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.icf new file mode 100644 index 00000000000..2f14001fa05 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.icf @@ -0,0 +1,684 @@ +include "memory_regions.icf"; + +/* The memory information for each device is done in memory regions file. + * The starting address and length of memory not defined in memory regions file are defined as 0. */ + +if (isdefinedsymbol(ATCM_START)) +{ + define symbol ATCM_PRV_START = ATCM_START; +} +else +{ + define symbol ATCM_PRV_START = 0; +} + +if (isdefinedsymbol(ATCM_LENGTH)) +{ + define symbol ATCM_PRV_LENGTH = ATCM_LENGTH; +} +else +{ + define symbol ATCM_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(BTCM_START)) +{ + define symbol BTCM_PRV_START = BTCM_START; +} +else +{ + define symbol BTCM_PRV_START = 0; +} + +if (isdefinedsymbol(BTCM_LENGTH)) +{ + define symbol BTCM_PRV_LENGTH = BTCM_LENGTH; +} +else +{ + define symbol BTCM_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_START)) +{ + define symbol SYSTEM_RAM_PRV_START = SYSTEM_RAM_START; +} +else +{ + define symbol SYSTEM_RAM_PRV_START = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_LENGTH)) +{ + define symbol SYSTEM_RAM_PRV_LENGTH = SYSTEM_RAM_LENGTH; +} +else +{ + define symbol SYSTEM_RAM_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_MIRROR_START)) +{ + define symbol SYSTEM_RAM_MIRROR_PRV_START = SYSTEM_RAM_MIRROR_START; +} +else +{ + define symbol SYSTEM_RAM_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_MIRROR_LENGTH)) +{ + define symbol SYSTEM_RAM_MIRROR_PRV_LENGTH = SYSTEM_RAM_MIRROR_LENGTH; +} +else +{ + define symbol SYSTEM_RAM_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI0_CS0_SPACE_MIRROR_START)) +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_START = xSPI0_CS0_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS0_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH = xSPI0_CS0_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_MIRROR_START)) +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_START = xSPI0_CS1_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH = xSPI0_CS1_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_MIRROR_START)) +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_START = xSPI1_CS0_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH = xSPI1_CS0_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_MIRROR_START)) +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_START = xSPI1_CS1_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH = xSPI1_CS1_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS0_SPACE_MIRROR_START)) +{ + define symbol CS0_SPACE_MIRROR_PRV_START = CS0_SPACE_MIRROR_START; +} +else +{ + define symbol CS0_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS0_SPACE_MIRROR_LENGTH)) +{ + define symbol CS0_SPACE_MIRROR_PRV_LENGTH = CS0_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS0_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS2_SPACE_MIRROR_START)) +{ + define symbol CS2_SPACE_MIRROR_PRV_START = CS2_SPACE_MIRROR_START; +} +else +{ + define symbol CS2_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS2_SPACE_MIRROR_LENGTH)) +{ + define symbol CS2_SPACE_MIRROR_PRV_LENGTH = CS2_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS2_SPACE_MIRROR_PRV_LENGTH = 0; +} + + +if (isdefinedsymbol(CS3_SPACE_MIRROR_START)) +{ + define symbol CS3_SPACE_MIRROR_PRV_START = CS3_SPACE_MIRROR_START; +} +else +{ + define symbol CS3_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS3_SPACE_MIRROR_LENGTH)) +{ + define symbol CS3_SPACE_MIRROR_PRV_LENGTH = CS3_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS3_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS5_SPACE_MIRROR_START)) +{ + define symbol CS5_SPACE_MIRROR_PRV_START = CS5_SPACE_MIRROR_START; +} +else +{ + define symbol CS5_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS5_SPACE_MIRROR_LENGTH)) +{ + define symbol CS5_SPACE_MIRROR_PRV_LENGTH = CS5_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS5_SPACE_MIRROR_PRV_LENGTH = 0; +} + + +if (isdefinedsymbol(xSPI0_CS0_SPACE_START)) +{ + define symbol xSPI0_CS0_SPACE_PRV_START = xSPI0_CS0_SPACE_START; +} +else +{ + define symbol xSPI0_CS0_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS0_SPACE_LENGTH)) +{ + define symbol xSPI0_CS0_SPACE_PRV_LENGTH = xSPI0_CS0_SPACE_LENGTH; +} +else +{ + define symbol xSPI0_CS0_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_START)) +{ + define symbol xSPI0_CS1_SPACE_PRV_START = xSPI0_CS1_SPACE_START; +} +else +{ + define symbol xSPI0_CS1_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_LENGTH)) +{ + define symbol xSPI0_CS1_SPACE_PRV_LENGTH = xSPI0_CS1_SPACE_LENGTH; +} +else +{ + define symbol xSPI0_CS1_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_START)) +{ + define symbol xSPI1_CS0_SPACE_PRV_START = xSPI1_CS0_SPACE_START; +} +else +{ + define symbol xSPI1_CS0_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_LENGTH)) +{ + define symbol xSPI1_CS0_SPACE_PRV_LENGTH = xSPI1_CS0_SPACE_LENGTH; +} +else +{ + define symbol xSPI1_CS0_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_START)) +{ + define symbol xSPI1_CS1_SPACE_PRV_START = xSPI1_CS1_SPACE_START; +} +else +{ + define symbol xSPI1_CS1_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_LENGTH)) +{ + define symbol xSPI1_CS1_SPACE_PRV_LENGTH = xSPI1_CS1_SPACE_LENGTH; +} +else +{ + define symbol xSPI1_CS1_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS0_SPACE_START)) +{ + define symbol CS0_SPACE_PRV_START = CS0_SPACE_START; +} +else +{ + define symbol CS0_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS0_SPACE_LENGTH)) +{ + define symbol CS0_SPACE_PRV_LENGTH = CS0_SPACE_LENGTH; +} +else +{ + define symbol CS0_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS2_SPACE_START)) +{ + define symbol CS2_SPACE_PRV_START = CS2_SPACE_START; +} +else +{ + define symbol CS2_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS2_SPACE_LENGTH)) +{ + define symbol CS2_SPACE_PRV_LENGTH = CS2_SPACE_LENGTH; +} +else +{ + define symbol CS2_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS3_SPACE_START)) +{ + define symbol CS3_SPACE_PRV_START = CS3_SPACE_START; +} +else +{ + define symbol CS3_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS3_SPACE_LENGTH)) +{ + define symbol CS3_SPACE_PRV_LENGTH = CS3_SPACE_LENGTH; +} +else +{ + define symbol CS3_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS5_SPACE_START)) +{ + define symbol CS5_SPACE_PRV_START = CS5_SPACE_START; +} +else +{ + define symbol CS5_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS5_SPACE_LENGTH)) +{ + define symbol CS5_SPACE_PRV_LENGTH = CS5_SPACE_LENGTH; +} +else +{ + define symbol CS5_SPACE_PRV_LENGTH = 0; +} + +define symbol SYSTEM_RAM_END_OFFSET = 0x00048000; +define symbol FLASH_ADDRESS = xSPI0_CS0_SPACE_PRV_START; + +define symbol INTVEC_ADDRESS = ATCM_PRV_START; +define symbol RAM_ADDRESS = (ATCM_PRV_START + 0x100); +define symbol RAM_END_ADDRESS = (ATCM_PRV_START + ATCM_PRV_LENGTH - 1); +define symbol LOADER_STACK_ADDRESS = (BTCM_PRV_START + 0x2000); +define symbol LOADER_STACK_END_ADDRESS = (BTCM_PRV_START + BTCM_PRV_LENGTH - 1); +define symbol DATA_NONCACHE_OFFSET = 0x00048000; +define symbol DATA_NONCACHE_END_OFFSET = 0x00044000; +define symbol DMAC_LINK_MODE_OFFSET = 0x00044000; +define symbol DMAC_LINK_MODE_END_OFFSET = 0x00040000; +define symbol NONCACHE_BUFFER_OFFSET = 0x00020000; +define symbol NONCACHE_BUFFER_END_OFFSET = 0; + +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = INTVEC_ADDRESS; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = FLASH_ADDRESS + 0x20100; +define symbol __ICFEDIT_region_ROM_end__ = FLASH_ADDRESS + 0x6FFFF; +define symbol __ICFEDIT_region_RAM_start__ = RAM_ADDRESS; +define symbol __ICFEDIT_region_RAM_end__ = RAM_END_ADDRESS; +/**** End of ICF editor section. ###ICF###*/ + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +define symbol __region_D_LOADER_STACK_start__ = LOADER_STACK_ADDRESS; +define symbol __region_D_LOADER_STACK_end__ = LOADER_STACK_END_ADDRESS; + +define symbol __region_DATA_NONCACHE_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DATA_NONCACHE_OFFSET; +define symbol __region_DATA_NONCACHE_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DATA_NONCACHE_END_OFFSET - 1; +define symbol __region_DMAC_LINK_MODE_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DMAC_LINK_MODE_OFFSET; +define symbol __region_DMAC_LINK_MODE_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DMAC_LINK_MODE_END_OFFSET - 1; +define symbol __region_SHARED_NONCACHE_BUFFER_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - 0x00040000; +define symbol __region_SHARED_NONCACHE_BUFFER_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - 0x00020000 - 1; +define symbol __region_NONCACHE_BUFFER_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - NONCACHE_BUFFER_OFFSET; +define symbol __region_NONCACHE_BUFFER_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - NONCACHE_BUFFER_END_OFFSET - 1; + +define symbol __region_ATCM_start__ = ATCM_PRV_START; +define symbol __region_ATCM_end__ = ATCM_PRV_START + ATCM_PRV_LENGTH - 1; +define symbol __region_BTCM_start__ = BTCM_PRV_START; +define symbol __region_BTCM_end__ = BTCM_PRV_START + BTCM_PRV_LENGTH - 1; +define symbol __region_SYSTEM_RAM_start__ = SYSTEM_RAM_PRV_START; +define symbol __region_SYSTEM_RAM_end__ = SYSTEM_RAM_PRV_START + SYSTEM_RAM_PRV_LENGTH - SYSTEM_RAM_END_OFFSET - 1; +define symbol __region_SYSTEM_RAM_MIRROR_start__ = SYSTEM_RAM_MIRROR_PRV_START; +define symbol __region_SYSTEM_RAM_MIRROR_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - SYSTEM_RAM_END_OFFSET - 1; + +define symbol __region_XSPI0_CS0_MIRROR_start__ = xSPI0_CS0_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI0_CS0_MIRROR_end__ = xSPI0_CS0_SPACE_MIRROR_PRV_START + xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI0_CS1_MIRROR_start__ = xSPI0_CS1_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI0_CS1_MIRROR_end__ = xSPI0_CS1_SPACE_MIRROR_PRV_START + xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS0_MIRROR_start__ = xSPI1_CS0_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI1_CS0_MIRROR_end__ = xSPI1_CS0_SPACE_MIRROR_PRV_START + xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS1_MIRROR_start__ = xSPI1_CS1_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI1_CS1_MIRROR_end__ = xSPI1_CS1_SPACE_MIRROR_PRV_START + xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS0_MIRROR_start__ = CS0_SPACE_MIRROR_PRV_START; +define symbol __region_CS0_MIRROR_end__ = CS0_SPACE_MIRROR_PRV_START + CS0_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS2_MIRROR_start__ = CS2_SPACE_MIRROR_PRV_START; +define symbol __region_CS2_MIRROR_end__ = CS2_SPACE_MIRROR_PRV_START + CS2_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS3_MIRROR_start__ = CS3_SPACE_MIRROR_PRV_START; +define symbol __region_CS3_MIRROR_end__ = CS3_SPACE_MIRROR_PRV_START + CS3_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS5_MIRROR_start__ = CS5_SPACE_MIRROR_PRV_START; +define symbol __region_CS5_MIRROR_end__ = CS5_SPACE_MIRROR_PRV_START + CS5_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI0_CS0_start__ = xSPI0_CS0_SPACE_PRV_START; +define symbol __region_XSPI0_CS0_end__ = xSPI0_CS0_SPACE_PRV_START + xSPI0_CS0_SPACE_PRV_LENGTH - 1; +define symbol __region_XSPI0_CS1_start__ = xSPI0_CS1_SPACE_PRV_START; +define symbol __region_XSPI0_CS1_end__ = xSPI0_CS1_SPACE_PRV_START + xSPI0_CS1_SPACE_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS0_start__ = xSPI1_CS0_SPACE_PRV_START; +define symbol __region_XSPI1_CS0_end__ = xSPI1_CS0_SPACE_PRV_START + xSPI1_CS0_SPACE_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS1_start__ = xSPI1_CS1_SPACE_PRV_START; +define symbol __region_XSPI1_CS1_end__ = xSPI1_CS1_SPACE_PRV_START + xSPI1_CS1_SPACE_PRV_LENGTH - 1; +define symbol __region_CS0_start__ = CS0_SPACE_PRV_START; +define symbol __region_CS0_end__ = CS0_SPACE_PRV_START + CS0_SPACE_PRV_LENGTH - 1; +define symbol __region_CS2_start__ = CS2_SPACE_PRV_START; +define symbol __region_CS2_end__ = CS2_SPACE_PRV_START + CS2_SPACE_PRV_LENGTH - 1; +define symbol __region_CS3_start__ = CS3_SPACE_PRV_START; +define symbol __region_CS3_end__ = CS3_SPACE_PRV_START + CS3_SPACE_PRV_LENGTH - 1; +define symbol __region_CS5_start__ = CS5_SPACE_PRV_START; +define symbol __region_CS5_end__ = CS5_SPACE_PRV_START + CS5_SPACE_PRV_LENGTH - 1; + +/************** SPI boot mode setting **************/ +define symbol __region_LDR_PARAM_start__ = FLASH_ADDRESS; +define symbol __region_LDR_PARAM_end__ = FLASH_ADDRESS + 0x0000004B; +define symbol __region_S_LOADER_STACK_start__ = FLASH_ADDRESS + 0x0000004C; +define symbol __region_S_LOADER_STACK_end__ = FLASH_ADDRESS + 0x0000804B; + +define symbol __region_S_intvec_start__ = FLASH_ADDRESS + 0x20000; +define symbol __region_S_intvec_end__ = FLASH_ADDRESS + 0x200FF; +define symbol __region_S_RAM_start__ = FLASH_ADDRESS + 0x70000; +define symbol __region_S_RAM_end__ = FLASH_ADDRESS + 0x7FFFF; +/****************************************************/ + +define region D_LOADER_STACK_region = mem:[from __region_D_LOADER_STACK_start__ to __region_D_LOADER_STACK_end__]; + +define region LDR_PARAM_region = mem:[from __region_LDR_PARAM_start__ to __region_LDR_PARAM_end__]; +define region S_LOADER_STACK_region = mem:[from __region_S_LOADER_STACK_start__ to __region_S_LOADER_STACK_end__]; + +define region S_intvec_region = mem:[from __region_S_intvec_start__ to __region_S_intvec_end__]; +define region S_RAM_region = mem:[from __region_S_RAM_start__ to __region_S_RAM_end__]; + +define region DATA_NONCACHE_region = mem:[from __region_DATA_NONCACHE_start__ to __region_DATA_NONCACHE_end__]; +define region DMAC_LINK_MODE_region = mem:[from __region_DMAC_LINK_MODE_start__ to __region_DMAC_LINK_MODE_end__]; +define region SHARED_NONCACHE_BUFFER_region = mem:[from __region_SHARED_NONCACHE_BUFFER_start__ to __region_SHARED_NONCACHE_BUFFER_end__]; +define region NONCACHE_BUFFER_region = mem:[from __region_NONCACHE_BUFFER_start__ to __region_NONCACHE_BUFFER_end__]; + +define region ATCM_region = mem:[from __region_ATCM_start__ to __region_ATCM_end__ ]; +define region BTCM_region = mem:[from __region_BTCM_start__ to __region_BTCM_end__ ]; +define region SYSTEM_RAM_region = mem:[from __region_SYSTEM_RAM_start__ to __region_SYSTEM_RAM_end__ ]; +define region SYSTEM_RAM_MIRROR_region = mem:[from __region_SYSTEM_RAM_MIRROR_start__ to __region_SYSTEM_RAM_MIRROR_end__ ]; +define region XSPI0_CS0_MIRROR_region = mem:[from __region_XSPI0_CS0_MIRROR_start__ to __region_XSPI0_CS0_MIRROR_end__ ]; +define region XSPI0_CS1_MIRROR_region = mem:[from __region_XSPI0_CS1_MIRROR_start__ to __region_XSPI0_CS1_MIRROR_end__ ]; +define region XSPI1_CS0_MIRROR_region = mem:[from __region_XSPI1_CS0_MIRROR_start__ to __region_XSPI1_CS0_MIRROR_end__ ]; +define region XSPI1_CS1_MIRROR_region = mem:[from __region_XSPI1_CS1_MIRROR_start__ to __region_XSPI1_CS1_MIRROR_end__ ]; +define region CS0_MIRROR_region = mem:[from __region_CS0_MIRROR_start__ to __region_CS0_MIRROR_end__ ]; +define region CS2_MIRROR_region = mem:[from __region_CS2_MIRROR_start__ to __region_CS2_MIRROR_end__ ]; +define region CS3_MIRROR_region = mem:[from __region_CS3_MIRROR_start__ to __region_CS3_MIRROR_end__ ]; +define region CS5_MIRROR_region = mem:[from __region_CS5_MIRROR_start__ to __region_CS5_MIRROR_end__ ]; +define region XSPI0_CS0_region = mem:[from __region_XSPI0_CS0_start__ to __region_XSPI0_CS0_end__ ]; +define region XSPI0_CS1_region = mem:[from __region_XSPI0_CS1_start__ to __region_XSPI0_CS1_end__ ]; +define region XSPI1_CS0_region = mem:[from __region_XSPI1_CS0_start__ to __region_XSPI1_CS0_end__ ]; +define region XSPI1_CS1_region = mem:[from __region_XSPI1_CS1_start__ to __region_XSPI1_CS1_end__ ]; +define region CS0_region = mem:[from __region_CS0_start__ to __region_CS0_end__ ]; +define region CS2_region = mem:[from __region_CS2_start__ to __region_CS2_end__ ]; +define region CS3_region = mem:[from __region_CS3_start__ to __region_CS3_end__ ]; +define region CS5_region = mem:[from __region_CS5_start__ to __region_CS5_end__ ]; + +define block LDR_PRG_RBLOCK with fixed order + { ro code section .loader_text_init object startup_core.o, + ro code object startup_core.o, + ro code object system_core.o, + ro code object startup.o, + ro code object system.o, + ro code object bsp_clocks.o, + ro code object bsp_irq_core.o, + ro code object bsp_irq.o, + ro code object bsp_register_protection.o, + ro code object r_ioport.o, + ro code object bsp_cache.o, + ro code section .warm_start_init } + except { ro code section .intvec_init, + ro code section .reset_handler_init }; +define block LDR_PRG_WBLOCK with fixed order + { rw code section .loader_text object startup_core.o, + rw code object startup_core.o, + rw code object system_core.o, + rw code object startup.o, + rw code object system.o, + rw code object bsp_clocks.o, + rw code object bsp_irq_core.o, + rw code object bsp_irq.o, + rw code object bsp_register_protection.o, + rw code object r_ioport.o, + rw code object bsp_cache.o, + rw code section .warm_start } + except { rw code section .intvec, + rw code section .reset_handler }; +define block LDR_DATA_ZBLOCK with alignment = 4 + { section .bss object startup_core.o, + section .bss object system_core.o, + section .bss object startup.o, + section .bss object system.o, + section .bss object bsp_clocks.o, + section .bss object bsp_irq_core.o, + section .bss object bsp_irq.o, + section .bss object bsp_register_protection.o, + section .bss object r_ioport.o, + section .bss object bsp_cache.o, + section .bss object bsp_io.o }; +define block LDR_DATA_RBLOCK with fixed order, alignment = 4 + { section .data_init object startup_core.o, + section .data_init object system_core.o, + section .data_init object startup.o, + section .data_init object system.o, + section .data_init object bsp_clocks.o, + section .data_init object bsp_irq_core.o, + section .data_init object bsp_irq.o, + section .data_init object bsp_register_protection.o, + section .data_init object r_ioport.o, + section .data_init object bsp_cache.o, + section .rodata_init object system_core.o }; +define block LDR_DATA_WBLOCK with fixed order, alignment = 4 + { section .data object startup_core.o, + section .data object system_core.o, + section .data object startup.o, + section .data object system.o, + section .data object bsp_clocks.o, + section .data object bsp_irq_core.o, + section .data object bsp_irq.o, + section .data object bsp_register_protection.o, + section .data object r_ioport.o, + section .data object bsp_cache.o, + section .rodata object system_core.o }; + +define block HEAP_BLOCK with alignment = 8 { rw section HEAP }; +define block THREAD_STACK with alignment = 8 { rw section .stack* }; +define block SYS_STACK with alignment = 8 { rw section .sys_stack }; +define block SVC_STACK with alignment = 8 { rw section .svc_stack }; +define block IRQ_STACK with alignment = 8 { rw section .irq_stack }; +define block FIQ_STACK with alignment = 8 { rw section .fiq_stack }; +define block UND_STACK with alignment = 8 { rw section .und_stack }; +define block ABT_STACK with alignment = 8 { rw section .abt_stack }; + +define block VECTOR_RBLOCK with alignment = 32 { ro code section .intvec_init}; +define block VECTOR_WBLOCK with alignment = 32 { rw code section .intvec}; +define block USER_PRG_RBLOCK with alignment = 4 { ro code }; +define block USER_PRG_WBLOCK with alignment = 4 { rw code }; +define block USER_DATA_ZBLOCK with alignment = 4 { section .bss }; +define block USER_DATA_RBLOCK with fixed order, alignment = 4 + { section .data_init, + section __DLIB_PERTHREAD_init, + section .rodata_init, + section .version_init }; +define block USER_DATA_WBLOCK with fixed order, alignment = 4 + { section .data, + section __DLIB_PERTHREAD, + section .rodata, + section .version }; +define block USER_DATA_NONCACHE_RBLOCK with alignment = 4 { section .data_noncache_init }; +define block USER_DATA_NONCACHE_WBLOCK with alignment = 4 { section .data_noncache }; +define block DMAC_LINK_MODE_ZBLOCK with alignment = 4 { section .dmac_link_mode* }; +define block SHARED_NONCACHE_BUFFER_ZBLOCK with alignment = 32 { section .shared_noncache_buffer* }; +define block NONCACHE_BUFFER_ZBLOCK with alignment = 32 { section .noncache_buffer* }; + +initialize manually { ro code object startup_core.o, + ro code object system_core.o, + ro code object startup.o, + ro code object system.o, + ro code object bsp_clocks.o, + ro code object bsp_irq_core.o, + ro code object bsp_irq.o, + ro code object bsp_register_protection.o, + ro code object r_ioport.o, + ro code object bsp_cache.o, + ro code section .intvec, + ro code section .reset_handler, + ro code section .warm_start, + ro code, + section .data, + section __DLIB_PERTHREAD, + section .rodata, + section .version, + section .data_noncache }; + +do not initialize { section .noinit, + section .bss, + section .dmac_link_mode*, + section .shared_noncache_buffer*, + section .noncache_buffer*, + rw section HEAP, + rw section .stack*, + rw section .sys_stack, + rw section .svc_stack, + rw section .irq_stack, + rw section .fiq_stack, + rw section .und_stack, + rw section .abt_stack }; + +place at address mem: __ICFEDIT_intvec_start__ { block VECTOR_WBLOCK }; + +place in LDR_PARAM_region { readonly section .loader_param }; +place at start of S_LOADER_STACK_region { block LDR_PRG_RBLOCK }; +place in S_LOADER_STACK_region { section LDR_DATA_RBLOCK, block LDR_DATA_RBLOCK }; +place in S_intvec_region { block VECTOR_RBLOCK }; +place in ROM_region { block USER_PRG_RBLOCK, readonly }; +place in S_RAM_region { block USER_DATA_RBLOCK, block USER_DATA_NONCACHE_RBLOCK }; + +place at start of D_LOADER_STACK_region { block LDR_PRG_WBLOCK }; +place in D_LOADER_STACK_region { section LDR_DATA_WBLOCK, block LDR_DATA_WBLOCK, + section LDR_DATA_ZBLOCK, block LDR_DATA_ZBLOCK }; +place in D_LOADER_STACK_region { section SYS_STACK, block SYS_STACK, + section SVC_STACK, block SVC_STACK, + section IRQ_STACK, block IRQ_STACK, + section FIQ_STACK, block FIQ_STACK, + section UND_STACK, block UND_STACK, + section ABT_STACK, block ABT_STACK }; +place in RAM_region { block USER_PRG_WBLOCK }; +place in RAM_region { readwrite, last block CSTACK }; +place in RAM_region { block USER_DATA_WBLOCK, + block USER_DATA_ZBLOCK }; +place in RAM_region { section HEAP_BLOCK, block HEAP_BLOCK, + section THREAD_STACK, block THREAD_STACK }; + +place in DATA_NONCACHE_region { block USER_DATA_NONCACHE_WBLOCK }; +place in DMAC_LINK_MODE_region { block DMAC_LINK_MODE_ZBLOCK }; +place in SHARED_NONCACHE_BUFFER_region { block SHARED_NONCACHE_BUFFER_ZBLOCK }; +place in NONCACHE_BUFFER_region { block NONCACHE_BUFFER_ZBLOCK }; +place in ATCM_region { }; +place in BTCM_region { }; +place in SYSTEM_RAM_region { }; +place in SYSTEM_RAM_MIRROR_region { }; +place in XSPI0_CS0_MIRROR_region { }; +place in XSPI0_CS1_MIRROR_region { }; +place in XSPI1_CS0_MIRROR_region { }; +place in XSPI1_CS1_MIRROR_region { }; +place in CS0_MIRROR_region { }; +place in CS2_MIRROR_region { }; +place in CS3_MIRROR_region { }; +place in CS5_MIRROR_region { }; +place in XSPI0_CS0_region { }; +place in XSPI0_CS1_region { }; +place in XSPI1_CS0_region { }; +place in XSPI1_CS1_region { }; +place in CS0_region { }; +place in CS2_region { }; +place in CS3_region { }; +place in CS5_region { }; diff --git a/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.ld b/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.ld new file mode 100644 index 00000000000..d0ee38a6586 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot.ld @@ -0,0 +1,398 @@ +/* + Linker File for Renesas RZ/N2L FSP +*/ + +INCLUDE memory_regions.ld + +/* The memory information for each device is done in memory regions file. + * The starting address and length of memory not defined in memory regions file are defined as 0. */ + +ATCM_PRV_START = DEFINED(ATCM_START) ? ATCM_START : 0; +ATCM_PRV_LENGTH = DEFINED(ATCM_LENGTH) ? ATCM_LENGTH : 0; +BTCM_PRV_START = DEFINED(BTCM_START) ? BTCM_START : 0; +BTCM_PRV_LENGTH = DEFINED(BTCM_LENGTH) ? BTCM_LENGTH : 0; +SYSTEM_RAM_PRV_START = DEFINED(SYSTEM_RAM_START) ? SYSTEM_RAM_START : 0; +SYSTEM_RAM_PRV_LENGTH = DEFINED(SYSTEM_RAM_LENGTH) ? SYSTEM_RAM_LENGTH : 0; +SYSTEM_RAM_MIRROR_PRV_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START : 0; +SYSTEM_RAM_MIRROR_PRV_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? SYSTEM_RAM_MIRROR_LENGTH : 0; +xSPI0_CS0_SPACE_MIRROR_PRV_START = DEFINED(xSPI0_CS0_SPACE_MIRROR_START) ? xSPI0_CS0_SPACE_MIRROR_START : 0; +xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI0_CS0_SPACE_MIRROR_LENGTH) ? xSPI0_CS0_SPACE_MIRROR_LENGTH : 0; +xSPI0_CS1_SPACE_MIRROR_PRV_START = DEFINED(xSPI0_CS1_SPACE_MIRROR_START) ? xSPI0_CS1_SPACE_MIRROR_START : 0; +xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI0_CS1_SPACE_MIRROR_LENGTH) ? xSPI0_CS1_SPACE_MIRROR_LENGTH : 0; +xSPI1_CS0_SPACE_MIRROR_PRV_START = DEFINED(xSPI1_CS0_SPACE_MIRROR_START) ? xSPI1_CS0_SPACE_MIRROR_START : 0; +xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI1_CS0_SPACE_MIRROR_LENGTH) ? xSPI1_CS0_SPACE_MIRROR_LENGTH : 0; +xSPI1_CS1_SPACE_MIRROR_PRV_START = DEFINED(xSPI1_CS1_SPACE_MIRROR_START) ? xSPI1_CS1_SPACE_MIRROR_START : 0; +xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH = DEFINED(xSPI1_CS1_SPACE_MIRROR_LENGTH) ? xSPI1_CS1_SPACE_MIRROR_LENGTH : 0; +CS0_SPACE_MIRROR_PRV_START = DEFINED(CS0_SPACE_MIRROR_START) ? CS0_SPACE_MIRROR_START : 0; +CS0_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS0_SPACE_MIRROR_LENGTH) ? CS0_SPACE_MIRROR_LENGTH : 0; +CS2_SPACE_MIRROR_PRV_START = DEFINED(CS2_SPACE_MIRROR_START) ? CS2_SPACE_MIRROR_START : 0; +CS2_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS2_SPACE_MIRROR_LENGTH) ? CS2_SPACE_MIRROR_LENGTH : 0; +CS3_SPACE_MIRROR_PRV_START = DEFINED(CS3_SPACE_MIRROR_START) ? CS3_SPACE_MIRROR_START : 0; +CS3_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS3_SPACE_MIRROR_LENGTH) ? CS3_SPACE_MIRROR_LENGTH : 0; +CS5_SPACE_MIRROR_PRV_START = DEFINED(CS5_SPACE_MIRROR_START) ? CS5_SPACE_MIRROR_START : 0; +CS5_SPACE_MIRROR_PRV_LENGTH = DEFINED(CS5_SPACE_MIRROR_LENGTH) ? CS5_SPACE_MIRROR_LENGTH : 0; +xSPI0_CS0_SPACE_PRV_START = DEFINED(xSPI0_CS0_SPACE_START) ? xSPI0_CS0_SPACE_START : 0; +xSPI0_CS0_SPACE_PRV_LENGTH = DEFINED(xSPI0_CS0_SPACE_LENGTH) ? xSPI0_CS0_SPACE_LENGTH : 0; +xSPI0_CS1_SPACE_PRV_START = DEFINED(xSPI0_CS1_SPACE_START) ? xSPI0_CS1_SPACE_START : 0; +xSPI0_CS1_SPACE_PRV_LENGTH = DEFINED(xSPI0_CS1_SPACE_LENGTH) ? xSPI0_CS1_SPACE_LENGTH : 0; +xSPI1_CS0_SPACE_PRV_START = DEFINED(xSPI1_CS0_SPACE_START) ? xSPI1_CS0_SPACE_START : 0; +xSPI1_CS0_SPACE_PRV_LENGTH = DEFINED(xSPI1_CS0_SPACE_LENGTH) ? xSPI1_CS0_SPACE_LENGTH : 0; +xSPI1_CS1_SPACE_PRV_START = DEFINED(xSPI1_CS1_SPACE_START) ? xSPI1_CS1_SPACE_START : 0; +xSPI1_CS1_SPACE_PRV_LENGTH = DEFINED(xSPI1_CS1_SPACE_LENGTH) ? xSPI1_CS1_SPACE_LENGTH : 0; +CS0_SPACE_PRV_START = DEFINED(CS0_SPACE_START) ? CS0_SPACE_START : 0; +CS0_SPACE_PRV_LENGTH = DEFINED(CS0_SPACE_LENGTH) ? CS0_SPACE_LENGTH : 0; +CS2_SPACE_PRV_START = DEFINED(CS2_SPACE_START) ? CS2_SPACE_START : 0; +CS2_SPACE_PRV_LENGTH = DEFINED(CS2_SPACE_LENGTH) ? CS2_SPACE_LENGTH : 0; +CS3_SPACE_PRV_START = DEFINED(CS3_SPACE_START) ? CS3_SPACE_START : 0; +CS3_SPACE_PRV_LENGTH = DEFINED(CS3_SPACE_LENGTH) ? CS3_SPACE_LENGTH : 0; +CS5_SPACE_PRV_START = DEFINED(CS5_SPACE_START) ? CS5_SPACE_START : 0; +CS5_SPACE_PRV_LENGTH = DEFINED(CS5_SPACE_LENGTH) ? CS5_SPACE_LENGTH : 0; + +LOADER_PARAM_ADDRESS = xSPI0_CS0_SPACE_PRV_START; +FLASH_CONTENTS_ADDRESS = LOADER_PARAM_ADDRESS + 0x0000004C; +LOADER_TEXT_ADDRESS = 0x00102000; +INTVEC_ADDRESS = 0x00000000; +TEXT_ADDRESS = 0x00000100; +NONCACHE_BUFFER_OFFSET = 0x00020000; +DMAC_LINK_MODE_OFFSET = 0x00044000; +DATA_NONCACHE_OFFSET = 0x00048000; +RAM_START = ATCM_PRV_START; +RAM_LENGTH = ATCM_PRV_LENGTH; +LOADER_START = BTCM_PRV_START; +LOADER_LENGTH = BTCM_PRV_LENGTH; + +/* Define starting addresses and length for data_noncache, DMAC link mode data, CPU-shared non-cache, and CPU-specific non-cache areas. */ +DATA_NONCACHE_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - DATA_NONCACHE_OFFSET : 0; +DATA_NONCACHE_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00004000 : 0; +DMAC_LINK_MODE_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - DMAC_LINK_MODE_OFFSET : 0; +DMAC_LINK_MODE_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00004000 : 0; +SHARED_NONCACHE_BUFFER_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - 0x00040000 : 0; +SHARED_NONCACHE_BUFFER_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00020000 : 0; +NONCACHE_BUFFER_START = DEFINED(SYSTEM_RAM_MIRROR_START) ? SYSTEM_RAM_MIRROR_START + SYSTEM_RAM_MIRROR_LENGTH - NONCACHE_BUFFER_OFFSET : 0; +NONCACHE_BUFFER_LENGTH = DEFINED(SYSTEM_RAM_MIRROR_LENGTH) ? 0x00020000 : 0; + +MEMORY +{ + ATCM : ORIGIN = ATCM_PRV_START, LENGTH = ATCM_PRV_LENGTH + BTCM : ORIGIN = BTCM_PRV_START, LENGTH = BTCM_PRV_LENGTH + SYSTEM_RAM : ORIGIN = SYSTEM_RAM_PRV_START, LENGTH = SYSTEM_RAM_PRV_LENGTH + SYSTEM_RAM_MIRROR : ORIGIN = SYSTEM_RAM_MIRROR_PRV_START, LENGTH = SYSTEM_RAM_MIRROR_PRV_LENGTH + xSPI0_CS0_SPACE_MIRROR : ORIGIN = xSPI0_CS0_SPACE_MIRROR_PRV_START, LENGTH = xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH + xSPI0_CS1_SPACE_MIRROR : ORIGIN = xSPI0_CS1_SPACE_MIRROR_PRV_START, LENGTH = xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH + xSPI1_CS0_SPACE_MIRROR : ORIGIN = xSPI1_CS0_SPACE_MIRROR_PRV_START, LENGTH = xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH + xSPI1_CS1_SPACE_MIRROR : ORIGIN = xSPI1_CS1_SPACE_MIRROR_PRV_START, LENGTH = xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH + CS0_SPACE_MIRROR : ORIGIN = CS0_SPACE_MIRROR_PRV_START, LENGTH = CS0_SPACE_MIRROR_PRV_LENGTH + CS2_SPACE_MIRROR : ORIGIN = CS2_SPACE_MIRROR_PRV_START, LENGTH = CS2_SPACE_MIRROR_PRV_LENGTH + CS3_SPACE_MIRROR : ORIGIN = CS3_SPACE_MIRROR_PRV_START, LENGTH = CS3_SPACE_MIRROR_PRV_LENGTH + CS5_SPACE_MIRROR : ORIGIN = CS5_SPACE_MIRROR_PRV_START, LENGTH = CS5_SPACE_MIRROR_PRV_LENGTH + xSPI0_CS0_SPACE : ORIGIN = xSPI0_CS0_SPACE_PRV_START, LENGTH = xSPI0_CS0_SPACE_PRV_LENGTH + xSPI0_CS1_SPACE : ORIGIN = xSPI0_CS1_SPACE_PRV_START, LENGTH = xSPI0_CS1_SPACE_PRV_LENGTH + xSPI1_CS0_SPACE : ORIGIN = xSPI1_CS0_SPACE_PRV_START, LENGTH = xSPI1_CS0_SPACE_PRV_LENGTH + xSPI1_CS1_SPACE : ORIGIN = xSPI1_CS1_SPACE_PRV_START, LENGTH = xSPI1_CS1_SPACE_PRV_LENGTH + CS0_SPACE : ORIGIN = CS0_SPACE_PRV_START, LENGTH = CS0_SPACE_PRV_LENGTH + CS2_SPACE : ORIGIN = CS2_SPACE_PRV_START, LENGTH = CS2_SPACE_PRV_LENGTH + CS3_SPACE : ORIGIN = CS3_SPACE_PRV_START, LENGTH = CS3_SPACE_PRV_LENGTH + CS5_SPACE : ORIGIN = CS5_SPACE_PRV_START, LENGTH = CS5_SPACE_PRV_LENGTH + RAM : ORIGIN = RAM_START, LENGTH = RAM_LENGTH + LOADER_STACK : ORIGIN = LOADER_START, LENGTH = LOADER_LENGTH + DUMMY : ORIGIN = RAM_START, LENGTH = RAM_LENGTH + DATA_NONCACHE : ORIGIN = DATA_NONCACHE_START, LENGTH = DATA_NONCACHE_LENGTH + DMAC_LINK_MODE : ORIGIN = DMAC_LINK_MODE_START, LENGTH = DMAC_LINK_MODE_LENGTH + SHARED_NONCACHE_BUFFER : ORIGIN = SHARED_NONCACHE_BUFFER_START, LENGTH = SHARED_NONCACHE_BUFFER_LENGTH + NONCACHE_BUFFER : ORIGIN = NONCACHE_BUFFER_START, LENGTH = NONCACHE_BUFFER_LENGTH +} + +SECTIONS +{ + .loader_param LOADER_PARAM_ADDRESS : AT (LOADER_PARAM_ADDRESS) + { + KEEP(*(.loader_param)) + } > xSPI0_CS0_SPACE + .flash_contents FLASH_CONTENTS_ADDRESS : AT (FLASH_CONTENTS_ADDRESS) + { + _mloader_text = .; + . = . + (_loader_text_end - _loader_text_start); + _mloader_data = .; + . = . + (_loader_data_end - _loader_data_start); + _mfvector = .; + . = . + (_fvector_end - _fvector_start); + _mtext = .; + . = . + (_text_end - _text_start); + _mdummy = .; + . = . + (_dummy_end - _dummy_start); + _mdata = .; + . = . + (_data_end - _data_start); + _mdata_noncache = .; + . = . + (_data_noncache_end - _data_noncache_start); + flash_contents_end = .; + } > xSPI0_CS0_SPACE + .loader_text LOADER_TEXT_ADDRESS : AT (_mloader_text) + { + _loader_text_start = .; + *(.loader_text) + */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(.text*) + */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(.text*) + */fsp/src/bsp/mcu/all/bsp_clocks.o(.text*) + */fsp/src/bsp/mcu/all/bsp_irq.o(.text*) + */fsp/src/bsp/mcu/all/bsp_register_protection.o(.text*) + */fsp/src/bsp/mcu/all/bsp_cache.o(.text*) + */fsp/src/r_ioport/r_ioport.o(.text*) + KEEP(*(.warm_start)) + . = . + (512 - ((. - _loader_text_start) % 512)); + _loader_text_end = .; + } > LOADER_STACK + .loader_data : AT (_mloader_data) + { + _loader_data_start = .; + __loader_data_start = .; + */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(.data*) + */fsp/src/bsp/cmsis/Device/RENESAS/Source/*/system_core.o(.rodata*) + */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(.data*) + */fsp/src/bsp/mcu/all/bsp_clocks.o(.data*) + */fsp/src/bsp/mcu/all/bsp_irq.o(.data*) + */fsp/src/bsp/mcu/all/bsp_register_protection.o(.data*) + */fsp/src/bsp/mcu/all/bsp_cache.o(.data*) + */fsp/src/r_ioport/r_ioport.o(.data*) + . = ALIGN(4); + __loader_data_end = .; + __loader_bss_start = .; + */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(.bss*) + */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(.bss*) + */fsp/src/bsp/mcu/all/bsp_clocks.o(.bss*) + */fsp/src/bsp/mcu/all/bsp_irq.o(.bss*) + */fsp/src/bsp/mcu/all/bsp_register_protection.o(.bss*) + */fsp/src/bsp/mcu/all/bsp_cache.o(.bss*) + */fsp/src/r_ioport/r_ioport.o(.bss*) + */fsp/src/bsp/cmsis/Device/RENESAS/Source/*.o(COMMON) + */fsp/src/bsp/mcu/all/*/bsp_irq_core.o(COMMON) + */fsp/src/bsp/mcu/all/bsp_clocks.o(COMMON) + */fsp/src/bsp/mcu/all/bsp_irq.o(COMMON) + */fsp/src/bsp/mcu/all/bsp_register_protection.o(.COMMON) + */fsp/src/bsp/mcu/all/bsp_cache.o(COMMON) + */fsp/src/r_ioport/r_ioport.o(.COMMON) + . = ALIGN(4); + __loader_bss_end = . ; + _loader_data_end = .; + } > LOADER_STACK + .intvec INTVEC_ADDRESS : AT (_mfvector) + { + _fvector_start = .; + KEEP(*(.intvec)) + _fvector_end = .; + } > RAM + .text TEXT_ADDRESS : AT (_mtext) + { + _text_start = .; + *(.text*) + + KEEP(*(.reset_handler)) + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + _ctor_end = .; + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + _dtor_end = .; + + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + + + . = ALIGN(4); + KEEP(*(FalPartTable)) + + KEEP(*(.eh_frame*)) + } > RAM + .rvectors : + { + _rvectors_start = .; + KEEP(*(.rvectors)) + _rvectors_end = .; + } > RAM + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > RAM + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > RAM + __exidx_end = .; + .got : + { + *(.got) + *(.got.plt) + . = ALIGN(4); + _text_end = .; + } > RAM + .dummy _fvector_end : AT (_mdummy) + { + _dummy_start = .; + KEEP(*(.dummy)); + _dummy_end = .; + } > DUMMY + .data : AT (_mdata) + { + _data_start = .; + + *(vtable) + *(.data.*) + *(.data) + + *(.rodata*) + _erodata = .; + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + + . = ALIGN(4); + + /* All data end */ + _data_end = .; + } > RAM + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + _bss = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + _ebss = .; + _end = .; + } > RAM + .heap (NOLOAD) : + { + . = ALIGN(8); + __HeapBase = .; + /* Place the STD heap here. */ + KEEP(*(.heap)) + __HeapLimit = .; + } > ATCM + .thread_stack (NOLOAD): + { + . = ALIGN(8); + __ThreadStackBase = .; + /* Place the Thread stacks here. */ + KEEP(*(.stack*)) + __ThreadStackLimit = .; + } > RAM + .sys_stack (NOLOAD) : + { + . = ALIGN(8); + __SysStackBase = .; + /* Place the sys_stack here. */ + KEEP(*(.sys_stack)) + __SysStackLimit = .; + } > LOADER_STACK + .svc_stack (NOLOAD) : + { + . = ALIGN(8); + __SvcStackBase = .; + /* Place the svc_stack here. */ + KEEP(*(.svc_stack)) + __SvcStackLimit = .; + } > LOADER_STACK + .irq_stack (NOLOAD) : + { + . = ALIGN(8); + __IrqStackBase = .; + /* Place the irq_stack here. */ + KEEP(*(.irq_stack)) + __IrqStackLimit = .; + } > LOADER_STACK + .fiq_stack (NOLOAD) : + { + . = ALIGN(8); + __FiqStackBase = .; + /* Place the fiq_stack here. */ + KEEP(*(.fiq_stack)) + __FiqStackLimit = .; + } > LOADER_STACK + .und_stack (NOLOAD) : + { + . = ALIGN(8); + __UndStackBase = .; + /* Place the und_stack here. */ + KEEP(*(.und_stack)) + __UndStackLimit = .; + } > LOADER_STACK + .abt_stack (NOLOAD) : + { + . = ALIGN(8); + __AbtStackBase = .; + /* Place the abt_stack here. */ + KEEP(*(.abt_stack)) + __AbtStackLimit = .; + } > LOADER_STACK + .data_noncache DATA_NONCACHE_START : AT (_mdata_noncache) + { + . = ALIGN(4); + _data_noncache_start = .; + KEEP(*(.data_noncache*)) + _data_noncache_end = .; + } > DATA_NONCACHE + .dmac_link_mode DMAC_LINK_MODE_START : AT (DMAC_LINK_MODE_START) + { + . = ALIGN(4); + _DmacLinkMode_start = .; + KEEP(*(.dmac_link_mode*)) + _DmacLinkMode_end = .; + } > DMAC_LINK_MODE + .shared_noncache_buffer SHARED_NONCACHE_BUFFER_START (NOLOAD) : AT (SHARED_NONCACHE_BUFFER_START) + { + . = ALIGN(32); + _sncbuffer_start = .; + KEEP(*(.shared_noncache_buffer*)) + _sncbuffer_end = .; + } > SHARED_NONCACHE_BUFFER + .noncache_buffer NONCACHE_BUFFER_START (NOLOAD) : AT (NONCACHE_BUFFER_START) + { + . = ALIGN(32); + _ncbuffer_start = .; + KEEP(*(.noncache_buffer*)) + _ncbuffer_end = .; + } > NONCACHE_BUFFER +} diff --git a/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot_systemRAM.icf b/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot_systemRAM.icf new file mode 100644 index 00000000000..0e3f984c5f9 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/script/fsp_xspi0_boot_systemRAM.icf @@ -0,0 +1,699 @@ +include "memory_regions.icf"; + +/* The memory information for each device is done in memory regions file. + * The starting address and length of memory not defined in memory regions file are defined as 0. */ + +if (isdefinedsymbol(ATCM_START)) +{ + define symbol ATCM_PRV_START = ATCM_START; +} +else +{ + define symbol ATCM_PRV_START = 0; +} + +if (isdefinedsymbol(ATCM_LENGTH)) +{ + define symbol ATCM_PRV_LENGTH = ATCM_LENGTH; +} +else +{ + define symbol ATCM_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(BTCM_START)) +{ + define symbol BTCM_PRV_START = BTCM_START; +} +else +{ + define symbol BTCM_PRV_START = 0; +} + +if (isdefinedsymbol(BTCM_LENGTH)) +{ + define symbol BTCM_PRV_LENGTH = BTCM_LENGTH; +} +else +{ + define symbol BTCM_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_START)) +{ + define symbol SYSTEM_RAM_PRV_START = SYSTEM_RAM_START; +} +else +{ + define symbol SYSTEM_RAM_PRV_START = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_LENGTH)) +{ + define symbol SYSTEM_RAM_PRV_LENGTH = SYSTEM_RAM_LENGTH; +} +else +{ + define symbol SYSTEM_RAM_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_MIRROR_START)) +{ + define symbol SYSTEM_RAM_MIRROR_PRV_START = SYSTEM_RAM_MIRROR_START; +} +else +{ + define symbol SYSTEM_RAM_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(SYSTEM_RAM_MIRROR_LENGTH)) +{ + define symbol SYSTEM_RAM_MIRROR_PRV_LENGTH = SYSTEM_RAM_MIRROR_LENGTH; +} +else +{ + define symbol SYSTEM_RAM_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI0_CS0_SPACE_MIRROR_START)) +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_START = xSPI0_CS0_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS0_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH = xSPI0_CS0_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_MIRROR_START)) +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_START = xSPI0_CS1_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH = xSPI0_CS1_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_MIRROR_START)) +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_START = xSPI1_CS0_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH = xSPI1_CS0_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_MIRROR_START)) +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_START = xSPI1_CS1_SPACE_MIRROR_START; +} +else +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_MIRROR_LENGTH)) +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH = xSPI1_CS1_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS0_SPACE_MIRROR_START)) +{ + define symbol CS0_SPACE_MIRROR_PRV_START = CS0_SPACE_MIRROR_START; +} +else +{ + define symbol CS0_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS0_SPACE_MIRROR_LENGTH)) +{ + define symbol CS0_SPACE_MIRROR_PRV_LENGTH = CS0_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS0_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS2_SPACE_MIRROR_START)) +{ + define symbol CS2_SPACE_MIRROR_PRV_START = CS2_SPACE_MIRROR_START; +} +else +{ + define symbol CS2_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS2_SPACE_MIRROR_LENGTH)) +{ + define symbol CS2_SPACE_MIRROR_PRV_LENGTH = CS2_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS2_SPACE_MIRROR_PRV_LENGTH = 0; +} + + +if (isdefinedsymbol(CS3_SPACE_MIRROR_START)) +{ + define symbol CS3_SPACE_MIRROR_PRV_START = CS3_SPACE_MIRROR_START; +} +else +{ + define symbol CS3_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS3_SPACE_MIRROR_LENGTH)) +{ + define symbol CS3_SPACE_MIRROR_PRV_LENGTH = CS3_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS3_SPACE_MIRROR_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS5_SPACE_MIRROR_START)) +{ + define symbol CS5_SPACE_MIRROR_PRV_START = CS5_SPACE_MIRROR_START; +} +else +{ + define symbol CS5_SPACE_MIRROR_PRV_START = 0; +} + +if (isdefinedsymbol(CS5_SPACE_MIRROR_LENGTH)) +{ + define symbol CS5_SPACE_MIRROR_PRV_LENGTH = CS5_SPACE_MIRROR_LENGTH; +} +else +{ + define symbol CS5_SPACE_MIRROR_PRV_LENGTH = 0; +} + + +if (isdefinedsymbol(xSPI0_CS0_SPACE_START)) +{ + define symbol xSPI0_CS0_SPACE_PRV_START = xSPI0_CS0_SPACE_START; +} +else +{ + define symbol xSPI0_CS0_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS0_SPACE_LENGTH)) +{ + define symbol xSPI0_CS0_SPACE_PRV_LENGTH = xSPI0_CS0_SPACE_LENGTH; +} +else +{ + define symbol xSPI0_CS0_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_START)) +{ + define symbol xSPI0_CS1_SPACE_PRV_START = xSPI0_CS1_SPACE_START; +} +else +{ + define symbol xSPI0_CS1_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI0_CS1_SPACE_LENGTH)) +{ + define symbol xSPI0_CS1_SPACE_PRV_LENGTH = xSPI0_CS1_SPACE_LENGTH; +} +else +{ + define symbol xSPI0_CS1_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_START)) +{ + define symbol xSPI1_CS0_SPACE_PRV_START = xSPI1_CS0_SPACE_START; +} +else +{ + define symbol xSPI1_CS0_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS0_SPACE_LENGTH)) +{ + define symbol xSPI1_CS0_SPACE_PRV_LENGTH = xSPI1_CS0_SPACE_LENGTH; +} +else +{ + define symbol xSPI1_CS0_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_START)) +{ + define symbol xSPI1_CS1_SPACE_PRV_START = xSPI1_CS1_SPACE_START; +} +else +{ + define symbol xSPI1_CS1_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(xSPI1_CS1_SPACE_LENGTH)) +{ + define symbol xSPI1_CS1_SPACE_PRV_LENGTH = xSPI1_CS1_SPACE_LENGTH; +} +else +{ + define symbol xSPI1_CS1_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS0_SPACE_START)) +{ + define symbol CS0_SPACE_PRV_START = CS0_SPACE_START; +} +else +{ + define symbol CS0_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS0_SPACE_LENGTH)) +{ + define symbol CS0_SPACE_PRV_LENGTH = CS0_SPACE_LENGTH; +} +else +{ + define symbol CS0_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS2_SPACE_START)) +{ + define symbol CS2_SPACE_PRV_START = CS2_SPACE_START; +} +else +{ + define symbol CS2_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS2_SPACE_LENGTH)) +{ + define symbol CS2_SPACE_PRV_LENGTH = CS2_SPACE_LENGTH; +} +else +{ + define symbol CS2_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS3_SPACE_START)) +{ + define symbol CS3_SPACE_PRV_START = CS3_SPACE_START; +} +else +{ + define symbol CS3_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS3_SPACE_LENGTH)) +{ + define symbol CS3_SPACE_PRV_LENGTH = CS3_SPACE_LENGTH; +} +else +{ + define symbol CS3_SPACE_PRV_LENGTH = 0; +} + +if (isdefinedsymbol(CS5_SPACE_START)) +{ + define symbol CS5_SPACE_PRV_START = CS5_SPACE_START; +} +else +{ + define symbol CS5_SPACE_PRV_START = 0; +} + +if (isdefinedsymbol(CS5_SPACE_LENGTH)) +{ + define symbol CS5_SPACE_PRV_LENGTH = CS5_SPACE_LENGTH; +} +else +{ + define symbol CS5_SPACE_PRV_LENGTH = 0; +} + +define symbol SYSTEM_RAM_END_OFFSET = 0x00048000; +define symbol FLASH_ADDRESS = xSPI0_CS0_SPACE_PRV_START; + +/* +define symbol INTVEC_ADDRESS = ATCM_PRV_START; +define symbol RAM_ADDRESS = (ATCM_PRV_START + 0x100); +define symbol RAM_END_ADDRESS = (ATCM_PRV_START + ATCM_PRV_LENGTH - 1); +define symbol LOADER_STACK_ADDRESS = (BTCM_PRV_START + 0x2000); +define symbol LOADER_STACK_END_ADDRESS = (BTCM_PRV_START + BTCM_PRV_LENGTH - 1); +define symbol DATA_NONCACHE_OFFSET = 0x00048000; +define symbol DATA_NONCACHE_END_OFFSET = 0x00044000; +define symbol DMAC_LINK_MODE_OFFSET = 0x00044000; +define symbol DMAC_LINK_MODE_END_OFFSET = 0x00040000; +define symbol NONCACHE_BUFFER_OFFSET = 0x00020000; +define symbol NONCACHE_BUFFER_END_OFFSET = 0; +*/ +/************* Override define symbol to place EtherCAT protocol into SystemRAM ************/ +define symbol INTVEC_ADDRESS = SYSTEM_RAM_PRV_START; +define symbol RAM_ADDRESS = (SYSTEM_RAM_PRV_START + 0x100); +define symbol RAM_END_ADDRESS = (SYSTEM_RAM_PRV_START + SYSTEM_RAM_PRV_LENGTH - 1); +define symbol LOADER_STACK_ADDRESS = (BTCM_PRV_START + 0x2000); +define symbol LOADER_STACK_END_ADDRESS = (BTCM_PRV_START + BTCM_PRV_LENGTH - 1); +define symbol DATA_NONCACHE_OFFSET = 0x00048000; +define symbol DATA_NONCACHE_END_OFFSET = 0x00044000; +define symbol DMAC_LINK_MODE_OFFSET = 0x00044000; +define symbol DMAC_LINK_MODE_END_OFFSET = 0x00040000; +define symbol NONCACHE_BUFFER_OFFSET = 0x00020000; +define symbol NONCACHE_BUFFER_END_OFFSET = 0; +/*********************************************************************************************/ + +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = INTVEC_ADDRESS; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = FLASH_ADDRESS + 0x20100; +define symbol __ICFEDIT_region_ROM_end__ = FLASH_ADDRESS + 0x6FFFF; +define symbol __ICFEDIT_region_RAM_start__ = RAM_ADDRESS; +define symbol __ICFEDIT_region_RAM_end__ = RAM_END_ADDRESS; +/**** End of ICF editor section. ###ICF###*/ + +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +define symbol __region_D_LOADER_STACK_start__ = LOADER_STACK_ADDRESS; +define symbol __region_D_LOADER_STACK_end__ = LOADER_STACK_END_ADDRESS; + +define symbol __region_DATA_NONCACHE_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DATA_NONCACHE_OFFSET; +define symbol __region_DATA_NONCACHE_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DATA_NONCACHE_END_OFFSET - 1; +define symbol __region_DMAC_LINK_MODE_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DMAC_LINK_MODE_OFFSET; +define symbol __region_DMAC_LINK_MODE_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - DMAC_LINK_MODE_END_OFFSET - 1; +define symbol __region_SHARED_NONCACHE_BUFFER_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - 0x00040000; +define symbol __region_SHARED_NONCACHE_BUFFER_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - 0x00020000 - 1; +define symbol __region_NONCACHE_BUFFER_start__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - NONCACHE_BUFFER_OFFSET; +define symbol __region_NONCACHE_BUFFER_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - NONCACHE_BUFFER_END_OFFSET - 1; + +define symbol __region_ATCM_start__ = ATCM_PRV_START; +define symbol __region_ATCM_end__ = ATCM_PRV_START + ATCM_PRV_LENGTH - 1; +define symbol __region_BTCM_start__ = BTCM_PRV_START; +define symbol __region_BTCM_end__ = BTCM_PRV_START + BTCM_PRV_LENGTH - 1; +define symbol __region_SYSTEM_RAM_start__ = SYSTEM_RAM_PRV_START; +define symbol __region_SYSTEM_RAM_end__ = SYSTEM_RAM_PRV_START + SYSTEM_RAM_PRV_LENGTH - SYSTEM_RAM_END_OFFSET - 1; +define symbol __region_SYSTEM_RAM_MIRROR_start__ = SYSTEM_RAM_MIRROR_PRV_START; +define symbol __region_SYSTEM_RAM_MIRROR_end__ = SYSTEM_RAM_MIRROR_PRV_START + SYSTEM_RAM_MIRROR_PRV_LENGTH - SYSTEM_RAM_END_OFFSET - 1; + +define symbol __region_XSPI0_CS0_MIRROR_start__ = xSPI0_CS0_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI0_CS0_MIRROR_end__ = xSPI0_CS0_SPACE_MIRROR_PRV_START + xSPI0_CS0_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI0_CS1_MIRROR_start__ = xSPI0_CS1_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI0_CS1_MIRROR_end__ = xSPI0_CS1_SPACE_MIRROR_PRV_START + xSPI0_CS1_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS0_MIRROR_start__ = xSPI1_CS0_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI1_CS0_MIRROR_end__ = xSPI1_CS0_SPACE_MIRROR_PRV_START + xSPI1_CS0_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS1_MIRROR_start__ = xSPI1_CS1_SPACE_MIRROR_PRV_START; +define symbol __region_XSPI1_CS1_MIRROR_end__ = xSPI1_CS1_SPACE_MIRROR_PRV_START + xSPI1_CS1_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS0_MIRROR_start__ = CS0_SPACE_MIRROR_PRV_START; +define symbol __region_CS0_MIRROR_end__ = CS0_SPACE_MIRROR_PRV_START + CS0_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS2_MIRROR_start__ = CS2_SPACE_MIRROR_PRV_START; +define symbol __region_CS2_MIRROR_end__ = CS2_SPACE_MIRROR_PRV_START + CS2_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS3_MIRROR_start__ = CS3_SPACE_MIRROR_PRV_START; +define symbol __region_CS3_MIRROR_end__ = CS3_SPACE_MIRROR_PRV_START + CS3_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_CS5_MIRROR_start__ = CS5_SPACE_MIRROR_PRV_START; +define symbol __region_CS5_MIRROR_end__ = CS5_SPACE_MIRROR_PRV_START + CS5_SPACE_MIRROR_PRV_LENGTH - 1; +define symbol __region_XSPI0_CS0_start__ = xSPI0_CS0_SPACE_PRV_START; +define symbol __region_XSPI0_CS0_end__ = xSPI0_CS0_SPACE_PRV_START + xSPI0_CS0_SPACE_PRV_LENGTH - 1; +define symbol __region_XSPI0_CS1_start__ = xSPI0_CS1_SPACE_PRV_START; +define symbol __region_XSPI0_CS1_end__ = xSPI0_CS1_SPACE_PRV_START + xSPI0_CS1_SPACE_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS0_start__ = xSPI1_CS0_SPACE_PRV_START; +define symbol __region_XSPI1_CS0_end__ = xSPI1_CS0_SPACE_PRV_START + xSPI1_CS0_SPACE_PRV_LENGTH - 1; +define symbol __region_XSPI1_CS1_start__ = xSPI1_CS1_SPACE_PRV_START; +define symbol __region_XSPI1_CS1_end__ = xSPI1_CS1_SPACE_PRV_START + xSPI1_CS1_SPACE_PRV_LENGTH - 1; +define symbol __region_CS0_start__ = CS0_SPACE_PRV_START; +define symbol __region_CS0_end__ = CS0_SPACE_PRV_START + CS0_SPACE_PRV_LENGTH - 1; +define symbol __region_CS2_start__ = CS2_SPACE_PRV_START; +define symbol __region_CS2_end__ = CS2_SPACE_PRV_START + CS2_SPACE_PRV_LENGTH - 1; +define symbol __region_CS3_start__ = CS3_SPACE_PRV_START; +define symbol __region_CS3_end__ = CS3_SPACE_PRV_START + CS3_SPACE_PRV_LENGTH - 1; +define symbol __region_CS5_start__ = CS5_SPACE_PRV_START; +define symbol __region_CS5_end__ = CS5_SPACE_PRV_START + CS5_SPACE_PRV_LENGTH - 1; + +/************** SPI boot mode setting **************/ +define symbol __region_LDR_PARAM_start__ = FLASH_ADDRESS; +define symbol __region_LDR_PARAM_end__ = FLASH_ADDRESS + 0x0000004B; +define symbol __region_S_LOADER_STACK_start__ = FLASH_ADDRESS + 0x0000004C; +define symbol __region_S_LOADER_STACK_end__ = FLASH_ADDRESS + 0x0000804B; + +define symbol __region_S_intvec_start__ = FLASH_ADDRESS + 0x20000; +define symbol __region_S_intvec_end__ = FLASH_ADDRESS + 0x200FF; +define symbol __region_S_RAM_start__ = FLASH_ADDRESS + 0x70000; +define symbol __region_S_RAM_end__ = FLASH_ADDRESS + 0x7FFFF; +/****************************************************/ + +define region D_LOADER_STACK_region = mem:[from __region_D_LOADER_STACK_start__ to __region_D_LOADER_STACK_end__]; + +define region LDR_PARAM_region = mem:[from __region_LDR_PARAM_start__ to __region_LDR_PARAM_end__]; +define region S_LOADER_STACK_region = mem:[from __region_S_LOADER_STACK_start__ to __region_S_LOADER_STACK_end__]; + +define region S_intvec_region = mem:[from __region_S_intvec_start__ to __region_S_intvec_end__]; +define region S_RAM_region = mem:[from __region_S_RAM_start__ to __region_S_RAM_end__]; + +define region DATA_NONCACHE_region = mem:[from __region_DATA_NONCACHE_start__ to __region_DATA_NONCACHE_end__]; +define region DMAC_LINK_MODE_region = mem:[from __region_DMAC_LINK_MODE_start__ to __region_DMAC_LINK_MODE_end__]; +define region SHARED_NONCACHE_BUFFER_region = mem:[from __region_SHARED_NONCACHE_BUFFER_start__ to __region_SHARED_NONCACHE_BUFFER_end__]; +define region NONCACHE_BUFFER_region = mem:[from __region_NONCACHE_BUFFER_start__ to __region_NONCACHE_BUFFER_end__]; + +define region ATCM_region = mem:[from __region_ATCM_start__ to __region_ATCM_end__ ]; +define region BTCM_region = mem:[from __region_BTCM_start__ to __region_BTCM_end__ ]; +define region SYSTEM_RAM_region = mem:[from __region_SYSTEM_RAM_start__ to __region_SYSTEM_RAM_end__ ]; +define region SYSTEM_RAM_MIRROR_region = mem:[from __region_SYSTEM_RAM_MIRROR_start__ to __region_SYSTEM_RAM_MIRROR_end__ ]; +define region XSPI0_CS0_MIRROR_region = mem:[from __region_XSPI0_CS0_MIRROR_start__ to __region_XSPI0_CS0_MIRROR_end__ ]; +define region XSPI0_CS1_MIRROR_region = mem:[from __region_XSPI0_CS1_MIRROR_start__ to __region_XSPI0_CS1_MIRROR_end__ ]; +define region XSPI1_CS0_MIRROR_region = mem:[from __region_XSPI1_CS0_MIRROR_start__ to __region_XSPI1_CS0_MIRROR_end__ ]; +define region XSPI1_CS1_MIRROR_region = mem:[from __region_XSPI1_CS1_MIRROR_start__ to __region_XSPI1_CS1_MIRROR_end__ ]; +define region CS0_MIRROR_region = mem:[from __region_CS0_MIRROR_start__ to __region_CS0_MIRROR_end__ ]; +define region CS2_MIRROR_region = mem:[from __region_CS2_MIRROR_start__ to __region_CS2_MIRROR_end__ ]; +define region CS3_MIRROR_region = mem:[from __region_CS3_MIRROR_start__ to __region_CS3_MIRROR_end__ ]; +define region CS5_MIRROR_region = mem:[from __region_CS5_MIRROR_start__ to __region_CS5_MIRROR_end__ ]; +define region XSPI0_CS0_region = mem:[from __region_XSPI0_CS0_start__ to __region_XSPI0_CS0_end__ ]; +define region XSPI0_CS1_region = mem:[from __region_XSPI0_CS1_start__ to __region_XSPI0_CS1_end__ ]; +define region XSPI1_CS0_region = mem:[from __region_XSPI1_CS0_start__ to __region_XSPI1_CS0_end__ ]; +define region XSPI1_CS1_region = mem:[from __region_XSPI1_CS1_start__ to __region_XSPI1_CS1_end__ ]; +define region CS0_region = mem:[from __region_CS0_start__ to __region_CS0_end__ ]; +define region CS2_region = mem:[from __region_CS2_start__ to __region_CS2_end__ ]; +define region CS3_region = mem:[from __region_CS3_start__ to __region_CS3_end__ ]; +define region CS5_region = mem:[from __region_CS5_start__ to __region_CS5_end__ ]; + +define block LDR_PRG_RBLOCK with fixed order + { ro code section .loader_text_init object startup_core.o, + ro code object startup_core.o, + ro code object system_core.o, + ro code object startup.o, + ro code object system.o, + ro code object bsp_clocks.o, + ro code object bsp_irq_core.o, + ro code object bsp_irq.o, + ro code object bsp_register_protection.o, + ro code object r_ioport.o, + ro code object bsp_cache.o, + ro code section .warm_start_init } + except { ro code section .intvec_init, + ro code section .reset_handler_init }; +define block LDR_PRG_WBLOCK with fixed order + { rw code section .loader_text object startup_core.o, + rw code object startup_core.o, + rw code object system_core.o, + rw code object startup.o, + rw code object system.o, + rw code object bsp_clocks.o, + rw code object bsp_irq_core.o, + rw code object bsp_irq.o, + rw code object bsp_register_protection.o, + rw code object r_ioport.o, + rw code object bsp_cache.o, + rw code section .warm_start } + except { rw code section .intvec, + rw code section .reset_handler }; +define block LDR_DATA_ZBLOCK with alignment = 4 + { section .bss object startup_core.o, + section .bss object system_core.o, + section .bss object startup.o, + section .bss object system.o, + section .bss object bsp_clocks.o, + section .bss object bsp_irq_core.o, + section .bss object bsp_irq.o, + section .bss object bsp_register_protection.o, + section .bss object r_ioport.o, + section .bss object bsp_cache.o, + section .bss object bsp_io.o }; +define block LDR_DATA_RBLOCK with fixed order, alignment = 4 + { section .data_init object startup_core.o, + section .data_init object system_core.o, + section .data_init object startup.o, + section .data_init object system.o, + section .data_init object bsp_clocks.o, + section .data_init object bsp_irq_core.o, + section .data_init object bsp_irq.o, + section .data_init object bsp_register_protection.o, + section .data_init object r_ioport.o, + section .data_init object bsp_cache.o, + section .rodata_init object system_core.o }; +define block LDR_DATA_WBLOCK with fixed order, alignment = 4 + { section .data object startup_core.o, + section .data object system_core.o, + section .data object startup.o, + section .data object system.o, + section .data object bsp_clocks.o, + section .data object bsp_irq_core.o, + section .data object bsp_irq.o, + section .data object bsp_register_protection.o, + section .data object r_ioport.o, + section .data object bsp_cache.o, + section .rodata object system_core.o }; + +define block HEAP_BLOCK with alignment = 8 { rw section HEAP }; +define block THREAD_STACK with alignment = 8 { rw section .stack* }; +define block SYS_STACK with alignment = 8 { rw section .sys_stack }; +define block SVC_STACK with alignment = 8 { rw section .svc_stack }; +define block IRQ_STACK with alignment = 8 { rw section .irq_stack }; +define block FIQ_STACK with alignment = 8 { rw section .fiq_stack }; +define block UND_STACK with alignment = 8 { rw section .und_stack }; +define block ABT_STACK with alignment = 8 { rw section .abt_stack }; + +define block VECTOR_RBLOCK with alignment = 32 { ro code section .intvec_init}; +define block VECTOR_WBLOCK with alignment = 32 { rw code section .intvec}; +define block USER_PRG_RBLOCK with alignment = 4 { ro code }; +define block USER_PRG_WBLOCK with alignment = 4 { rw code }; +define block USER_DATA_ZBLOCK with alignment = 4 { section .bss }; +define block USER_DATA_RBLOCK with fixed order, alignment = 4 + { section .data_init, + section __DLIB_PERTHREAD_init, + section .rodata_init, + section .version_init }; +define block USER_DATA_WBLOCK with fixed order, alignment = 4 + { section .data, + section __DLIB_PERTHREAD, + section .rodata, + section .version }; +define block USER_DATA_NONCACHE_RBLOCK with alignment = 4 { section .data_noncache_init }; +define block USER_DATA_NONCACHE_WBLOCK with alignment = 4 { section .data_noncache }; +define block DMAC_LINK_MODE_ZBLOCK with alignment = 4 { section .dmac_link_mode* }; +define block SHARED_NONCACHE_BUFFER_ZBLOCK with alignment = 32 { section .shared_noncache_buffer* }; +define block NONCACHE_BUFFER_ZBLOCK with alignment = 32 { section .noncache_buffer* }; + +initialize manually { ro code object startup_core.o, + ro code object system_core.o, + ro code object startup.o, + ro code object system.o, + ro code object bsp_clocks.o, + ro code object bsp_irq_core.o, + ro code object bsp_irq.o, + ro code object bsp_register_protection.o, + ro code object r_ioport.o, + ro code object bsp_cache.o, + ro code section .intvec, + ro code section .reset_handler, + ro code section .warm_start, + ro code, + section .data, + section __DLIB_PERTHREAD, + section .rodata, + section .version, + section .data_noncache }; + +do not initialize { section .noinit, + section .bss, + section .dmac_link_mode*, + section .shared_noncache_buffer*, + section .noncache_buffer*, + rw section HEAP, + rw section .stack*, + rw section .sys_stack, + rw section .svc_stack, + rw section .irq_stack, + rw section .fiq_stack, + rw section .und_stack, + rw section .abt_stack }; + +place at address mem: __ICFEDIT_intvec_start__ { block VECTOR_WBLOCK }; + +place in LDR_PARAM_region { readonly section .loader_param }; +place at start of S_LOADER_STACK_region { block LDR_PRG_RBLOCK }; +place in S_LOADER_STACK_region { section LDR_DATA_RBLOCK, block LDR_DATA_RBLOCK }; +place in S_intvec_region { block VECTOR_RBLOCK }; +place in ROM_region { block USER_PRG_RBLOCK, readonly }; +place in S_RAM_region { block USER_DATA_RBLOCK, block USER_DATA_NONCACHE_RBLOCK }; + +place at start of D_LOADER_STACK_region { block LDR_PRG_WBLOCK }; +place in D_LOADER_STACK_region { section LDR_DATA_WBLOCK, block LDR_DATA_WBLOCK, + section LDR_DATA_ZBLOCK, block LDR_DATA_ZBLOCK }; +place in D_LOADER_STACK_region { section SYS_STACK, block SYS_STACK, + section SVC_STACK, block SVC_STACK, + section IRQ_STACK, block IRQ_STACK, + section FIQ_STACK, block FIQ_STACK, + section UND_STACK, block UND_STACK, + section ABT_STACK, block ABT_STACK }; +place in RAM_region { block USER_PRG_WBLOCK }; +place in RAM_region { readwrite, last block CSTACK }; +place in RAM_region { block USER_DATA_WBLOCK, + block USER_DATA_ZBLOCK }; +place in RAM_region { section HEAP_BLOCK, block HEAP_BLOCK, + section THREAD_STACK, block THREAD_STACK }; + +place in DATA_NONCACHE_region { block USER_DATA_NONCACHE_WBLOCK }; +place in DMAC_LINK_MODE_region { block DMAC_LINK_MODE_ZBLOCK }; +place in SHARED_NONCACHE_BUFFER_region { block SHARED_NONCACHE_BUFFER_ZBLOCK }; +place in NONCACHE_BUFFER_region { block NONCACHE_BUFFER_ZBLOCK }; +place in ATCM_region { }; +place in BTCM_region { }; +place in SYSTEM_RAM_region { }; +place in SYSTEM_RAM_MIRROR_region { }; +place in XSPI0_CS0_MIRROR_region { }; +place in XSPI0_CS1_MIRROR_region { }; +place in XSPI1_CS0_MIRROR_region { }; +place in XSPI1_CS1_MIRROR_region { }; +place in CS0_MIRROR_region { }; +place in CS2_MIRROR_region { }; +place in CS3_MIRROR_region { }; +place in CS5_MIRROR_region { }; +place in XSPI0_CS0_region { }; +place in XSPI0_CS1_region { }; +place in XSPI1_CS0_region { }; +place in XSPI1_CS1_region { }; +place in CS0_region { }; +place in CS2_region { }; +place in CS3_region { }; +place in CS5_region { }; diff --git a/bsp/renesas/rzn2l_rsk/script/memory_regions.ld b/bsp/renesas/rzn2l_rsk/script/memory_regions.ld new file mode 100644 index 00000000000..227ab3ebb17 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/script/memory_regions.ld @@ -0,0 +1,38 @@ + + /* generated memory regions file - do not edit */ + ATCM_START = 0x00000000; + ATCM_LENGTH = 0x20000; + BTCM_START = 0x00100000; + BTCM_LENGTH = 0x20000; + SYSTEM_RAM_START = 0x10000000; + SYSTEM_RAM_LENGTH = 0x180000; + SYSTEM_RAM_MIRROR_START = 0x30000000; + SYSTEM_RAM_MIRROR_LENGTH = 0x180000; + xSPI0_CS0_SPACE_MIRROR_START = 0x40000000; + xSPI0_CS0_SPACE_MIRROR_LENGTH = 0x4000000; + xSPI0_CS1_SPACE_MIRROR_START = 0x44000000; + xSPI0_CS1_SPACE_MIRROR_LENGTH = 0x4000000; + xSPI1_CS0_SPACE_MIRROR_START = 0x48000000; + xSPI1_CS0_SPACE_MIRROR_LENGTH = 0x4000000; + CS0_SPACE_MIRROR_START = 0x50000000; + CS0_SPACE_MIRROR_LENGTH = 0x4000000; + CS2_SPACE_MIRROR_START = 0x54000000; + CS2_SPACE_MIRROR_LENGTH = 0x4000000; + CS3_SPACE_MIRROR_START = 0x58000000; + CS3_SPACE_MIRROR_LENGTH = 0x4000000; + CS5_SPACE_MIRROR_START = 0x5C000000; + CS5_SPACE_MIRROR_LENGTH = 0x4000000; + xSPI0_CS0_SPACE_START = 0x60000000; + xSPI0_CS0_SPACE_LENGTH = 0x4000000; + xSPI0_CS1_SPACE_START = 0x64000000; + xSPI0_CS1_SPACE_LENGTH = 0x4000000; + xSPI1_CS0_SPACE_START = 0x68000000; + xSPI1_CS0_SPACE_LENGTH = 0x4000000; + CS0_SPACE_START = 0x70000000; + CS0_SPACE_LENGTH = 0x4000000; + CS2_SPACE_START = 0x74000000; + CS2_SPACE_LENGTH = 0x4000000; + CS3_SPACE_START = 0x78000000; + CS3_SPACE_LENGTH = 0x4000000; + CS5_SPACE_START = 0x7C000000; + CS5_SPACE_LENGTH = 0x4000000; diff --git a/bsp/renesas/rzn2l_rsk/src/hal_entry.c b/bsp/renesas/rzn2l_rsk/src/hal_entry.c new file mode 100644 index 00000000000..416d9f8702b --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/src/hal_entry.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-03-11 Wangyuqiang first version + */ + +#include +#include "hal_data.h" +#include +#include + +#define LED_PIN BSP_IO_PORT_18_PIN_2 /* Onboard LED pins */ + +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread!\n"); + rt_kprintf("==================================================\n"); + rt_kprintf("This is a iar project which mode is xspi0 execution!\n"); + rt_kprintf("==================================================\n"); + + while (1) + { + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} diff --git a/bsp/renesas/rzn2l_rsk/template.ewd b/bsp/renesas/rzn2l_rsk/template.ewd new file mode 100644 index 00000000000..f1b21119308 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/template.ewd @@ -0,0 +1,3276 @@ + + + 4 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 33 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E2_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + GPLINK_ID + 2 + + 0 + 1 + 1 + + + + + + + IJET_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\Azure\AzureArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 33 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + E2_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + GPLINK_ID + 2 + + 0 + 1 + 0 + + + + + + + IJET_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\Azure\AzureArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm9a.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/renesas/rzn2l_rsk/template.ewp b/bsp/renesas/rzn2l_rsk/template.ewp new file mode 100644 index 00000000000..839155dd146 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/template.ewp @@ -0,0 +1,2616 @@ + + + 4 + + Debug + + ARM + + 1 + + General + 3 + + 36 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 38 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 12 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 1 + inputOutputBased + + + + ILINK + 0 + + 27 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BUILDACTION + 2 + + + + + Release + + ARM + + 0 + + General + 3 + + 36 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 38 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 12 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + inputOutputBased + + + + ILINK + 0 + + 27 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BUILDACTION + 2 + + + + cmd /c ""$RASC_EXE_PATH$" -nosplash --launcher.suppressErrors --generate --compiler IAR --devicefamily rzn "$PROJ_DIR$\configuration.xml" 2> "%TEMP%\rasc_stderr.out"" + $PROJ_DIR$ + preCompile + + + $BUILD_FILES_DIR$/.prebuild + + + + + cmd /c ""$RASC_EXE_PATH$" -nosplash --launcher.suppressErrors --gensmartbundle --compiler IAR --devicefamily rzn "$PROJ_DIR$\configuration.xml" "$TARGET_PATH$" 2> "%TEMP%\rasc_stderr.out"" && echo > "$BUILD_FILES_DIR$/.postbuild" + $PROJ_DIR$ + postLink + + + $BUILD_FILES_DIR$/.postbuild + + + + + + + + + Flex Software + + Build Configuration + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\board_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_memory_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_device_pn_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_mcu_family_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_memory_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\bsp\bsp_pin_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_cmt_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_ether_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_ether_phy_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_ether_selector_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_ether_switch_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_ioport_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\r_sci_uart_cfg.h + + + $PROJ_DIR$\rzn_cfg\fsp_cfg\rm_ethercat_ssc_port_cfg.h + + + + Components + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_ethernet_phy.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_init.c + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_init.h + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_leds.c + + + $PROJ_DIR$\rzn\board\rzn2l_rsk\board_leds.h + + + $PROJ_DIR$\rzn\fsp\inc\api\bsp_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_cache.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_cache.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_cache_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_cache_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_clocks.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_clocks.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_common.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_common.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_compiler_support.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_delay.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_delay.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_delay_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_delay_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_elc.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_exceptions.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_feature.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_io.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_io.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_irq.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_irq.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_irq_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\cr\bsp_irq_core.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_irq_sense.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_loader_param.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_mcu_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_mcu_info.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_module_stop.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\rzn2l\bsp_override.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_register_protection.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_register_protection.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_reset.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_reset.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_sbrk.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\mcu\all\bsp_tfu.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_compiler.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_cp15.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_gcc.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_iccarm.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\cmsis_version.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\CMSIS\Core_R\Include\core_cr52.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_common_api.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_features.h + + + $PROJ_DIR$\rzn\fsp\inc\fsp_version.h + + + $PROJ_DIR$\rzn\arm\CMSIS_5\LICENSE.txt + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\R9A07G084.h + + + $PROJ_DIR$\rzn\fsp\src\r_cmt\r_cmt.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_cmt.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_ether_api.h + + + $PROJ_DIR$\rzn\fsp\src\r_ether_phy\r_ether_phy.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_ether_phy.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_ether_phy_api.h + + + $PROJ_DIR$\rzn\fsp\src\r_ether_selector\r_ether_selector.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_ether_selector.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_ether_selector_api.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_ether_switch_api.h + + + $PROJ_DIR$\rzn\fsp\src\r_ethsw\r_ethsw.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_ethsw.h + + + $PROJ_DIR$\rzn\fsp\src\r_gmac\r_gmac.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_gmac.h + + + $PROJ_DIR$\rzn\fsp\src\r_ioport\r_ioport.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_ioport.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_ioport_api.h + + + $PROJ_DIR$\rzn\fsp\src\r_sci_uart\r_sci_uart.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\r_sci_uart.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_timer_api.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_transfer_api.h + + + $PROJ_DIR$\rzn\fsp\inc\api\r_uart_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\renesas.h + + + $PROJ_DIR$\rzn\fsp\src\rm_ethercat_ssc_port\renesashw.h + + + $PROJ_DIR$\rzn\fsp\src\rm_ethercat_ssc_port\rm_ethercat_ssc_port.c + + + $PROJ_DIR$\rzn\fsp\inc\instances\rm_ethercat_ssc_port.h + + + $PROJ_DIR$\rzn\fsp\inc\api\rm_ethercat_ssc_port_api.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\startup.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\cr\startup_core.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\system.c + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Include\system.h + + + $PROJ_DIR$\rzn\fsp\src\bsp\cmsis\Device\RENESAS\Source\cr\system_core.c + + + + Generated Data + + $PROJ_DIR$\rzn_gen\bsp_clock_cfg.h + + + $PROJ_DIR$\rzn_gen\common_data.c + + + $PROJ_DIR$\rzn_gen\common_data.h + + + $PROJ_DIR$\rzn_gen\hal_data.c + + + $PROJ_DIR$\rzn_gen\hal_data.h + + + $PROJ_DIR$\rzn_gen\main.c + + + $PROJ_DIR$\rzn_gen\pin_data.c + + + $PROJ_DIR$\rzn_gen\vector_data.c + + + $PROJ_DIR$\rzn_gen\vector_data.h + + + + Program Entry + + $PROJ_DIR$\src\hal_entry.c + + + + + $PROJ_DIR$\buildinfo.ipcf + IAR.ControlFile + + diff --git a/bsp/renesas/rzn2l_rsk/template.eww b/bsp/renesas/rzn2l_rsk/template.eww new file mode 100644 index 00000000000..53e2ec6f096 --- /dev/null +++ b/bsp/renesas/rzn2l_rsk/template.eww @@ -0,0 +1,7 @@ + + + + $WS_DIR$\template.ewp + + + From d45e13c47193babdc4f3c435279e9077212cf2bb Mon Sep 17 00:00:00 2001 From: Shell Date: Sat, 14 Sep 2024 16:49:37 +0800 Subject: [PATCH 11/54] fixup: dfs_v2: Correct device mode permissions in devfs The mode permissions for character, block, and pipe devices were previously set to 0777, which is overly permissive and not in line with standard practice. This change reduces the permissions to 0666, restricting execute permissions while still allowing read/write access. Changes: - Adjusted permissions for character/block/pipe devices from 0777 to 0666. Signed-off-by: Shell --- components/dfs/dfs_v2/filesystems/devfs/devfs.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/dfs/dfs_v2/filesystems/devfs/devfs.c b/components/dfs/dfs_v2/filesystems/devfs/devfs.c index c8c66667dbc..22d24bd684b 100644 --- a/components/dfs/dfs_v2/filesystems/devfs/devfs.c +++ b/components/dfs/dfs_v2/filesystems/devfs/devfs.c @@ -408,16 +408,16 @@ mode_t dfs_devfs_device_to_mode(struct rt_device *device) switch (device->type) { case RT_Device_Class_Char: - mode = S_IFCHR | 0777; + mode = S_IFCHR | 0666; break; case RT_Device_Class_Block: - mode = S_IFBLK | 0777; + mode = S_IFBLK | 0666; break; case RT_Device_Class_Pipe: - mode = S_IFIFO | 0777; + mode = S_IFIFO | 0666; break; default: - mode = S_IFCHR | 0777; + mode = S_IFCHR | 0666; break; } From c9d18c444ada29b2c6ebba9dc813b9c2072a8e01 Mon Sep 17 00:00:00 2001 From: Supper Thomas <78900636@qq.com> Date: Mon, 16 Sep 2024 11:13:30 +0800 Subject: [PATCH 12/54] [action/ci] Add toolchain stup script (#9453) * [action] add toolchain install script --- tools/ci/toolchain.sh | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100755 tools/ci/toolchain.sh diff --git a/tools/ci/toolchain.sh b/tools/ci/toolchain.sh new file mode 100755 index 00000000000..24293b32b7f --- /dev/null +++ b/tools/ci/toolchain.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +declare -A download_urls=( +["arm-none-eabi-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.3/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2" +["mips-sde-elf-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.1/mips-2016.05-7-mips-sde-elf-i686-pc-linux-gnu.tar.bz2" +["aarch64-none-elf-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.6/gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf.tar.xz" +["riscv64-unknown-elf-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.4/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz" +["riscv32-unknown-elf-gcc"]="https://github.com/hpmicro/riscv-gnu-toolchain/releases/download/2022.05.15/riscv32-unknown-elf-newlib-multilib_2022.05.15_linux.tar.gz" +["riscv-none-embed-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.5/xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz" +["riscv32-esp-elf-gcc"]="https://github.com/espressif/crosstool-NG/releases/download/esp-2022r1-RC1/riscv32-esp-elf-gcc11_2_0-esp-2022r1-RC1-linux-amd64.tar.xz" +["clang"]="https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-16.0.0/LLVMEmbeddedToolchainForArm-16.0.0-Linux-x86_64.tar.gz" + +) + +show_help() { + echo "Available toolchains:" + for key in "${!download_urls[@]}"; do + echo " - $key" + done +} + +extract_file() { + local file_name=$1 + local destination=$2 + echo "Extracting $file_name to $destination..." + case "$file_name" in + *.tar.bz2) tar -xjf "$file_name" -C "$destination" --strip-components=1;; + *.tar.gz) tar -xzf "$file_name" -C "$destination" --strip-components=1;; + *.tar.xz) tar -xJf "$file_name" -C "$destination" --strip-components=1;; + *) echo "Unsupported file format: $file_name"; exit 1;; + esac + echo "Extracted to $destination" +} + + +install_toolchain() { + local toolchain_name=$1 + local url="${download_urls[$toolchain_name]}" + if [ -z "$url" ]; then + echo "Toolchain not found." + exit 1 + fi + local file_name=$(basename "$url") + echo "Downloading $file_name..." + wget -q "$url" + echo "Extracting $file_name..." + + local target_dir="/opt/$toolchain_name" + echo "target_dir $target_dir..." + mkdir -p "$target_dir" + extract_file "$file_name" "$target_dir" + + rm $file_name + + echo "Installed: $target_dir" + + local toolchain_bin="$target_dir/bin" + if [[ ":$PATH:" != *":$toolchain_bin:"* ]]; then + echo "Adding $toolchain_bin to PATH..." + export PATH="$PATH:$toolchain_bin" + echo "export PATH=\$PATH:$toolchain_bin" >> ~/.bashrc + fi + #need source toolchain.sh or source ~/.bashrc to work + + #local toolchain_exec=$(find "$toolchain_bin" -type f -executable | head -n 1) + local toolchain_exec=$(which "$toolchain_name") + if [ -x "$toolchain_exec" ]; then + echo "Testing executable: $toolchain_exec" + $toolchain_exec --version + else + echo "No executable found in $toolchain_bin" + fi +} + +if [[ $# -eq 1 ]]; then + if [[ "$1" == "help" ]]; then + show_help + elif [ "$1" == "all" ]; then + for toolchain in "${!download_urls[@]}"; do + install_toolchain "$toolchain" + done + else + install_toolchain "$1" + fi +else + show_help +fi From 29c0357ff8f9143f742b05de7f9189f707bc673f Mon Sep 17 00:00:00 2001 From: heyuanjie87 Date: Wed, 18 Sep 2024 11:19:48 +0800 Subject: [PATCH 13/54] =?UTF-8?q?[libcpu]=E4=BC=98=E5=8C=96rv=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E8=84=9A=E6=9C=AC=E4=B8=AD=E9=80=89=E6=8B=A9vendor?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E7=9A=84=E5=88=A4=E6=96=AD=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libcpu/risc-v/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libcpu/risc-v/SConscript b/libcpu/risc-v/SConscript index 0f3ce9f233b..851542e1a3d 100644 --- a/libcpu/risc-v/SConscript +++ b/libcpu/risc-v/SConscript @@ -17,7 +17,7 @@ else : group += SConscript(os.path.join('common', 'SConscript')) # cpu porting code files -if rtconfig.CPU == "c906": +if 'VENDOR' in vars(rtconfig) and rtconfig.VENDOR != '': group = group + SConscript(os.path.join(rtconfig.VENDOR, rtconfig.CPU, 'SConscript')) elif rtconfig.CPU in list: group = group + SConscript(os.path.join(rtconfig.CPU, 'SConscript')) From 2a8aba4c8b8c5a9f415cfa24316eba8a5573cc4a Mon Sep 17 00:00:00 2001 From: milo <1569491816@qq.com> Date: Thu, 19 Sep 2024 18:15:55 +0800 Subject: [PATCH 14/54] [fix]:fix log format and reopen with a different oflag issue (#9452) fix log format and reopen with a different oflag issue --- components/drivers/core/device.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/components/drivers/core/device.c b/components/drivers/core/device.c index 49b428a5771..5dfd0c4653e 100644 --- a/components/drivers/core/device.c +++ b/components/drivers/core/device.c @@ -13,6 +13,8 @@ * 2013-07-09 Grissiom add ref_count support * 2016-04-02 Bernard fix the open_flag initialization issue. * 2021-03-19 Meco Man remove rt_device_init_all() + * 2024-09-15 milo fix log format issue + * fix reopen with a different oflag issue */ #include @@ -195,8 +197,8 @@ rt_err_t rt_device_init(rt_device_t dev) result = device_init(dev); if (result != RT_EOK) { - LOG_E("To initialize device:%s failed. The error code is %d", - dev->parent.name, result); + LOG_E("To initialize device:%.*s failed. The error code is %d", + RT_NAME_MAX, dev->parent.name, result); } else { @@ -233,8 +235,8 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) result = device_init(dev); if (result != RT_EOK) { - LOG_E("To initialize device:%s failed. The error code is %d", - dev->parent.name, result); + LOG_E("To initialize device:%.*s failed. The error code is %d", + RT_NAME_MAX, dev->parent.name, result); return result; } @@ -252,7 +254,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) /* device is not opened or opened by other oflag, call device_open interface */ if (!(dev->open_flag & RT_DEVICE_OFLAG_OPEN) || - ((dev->open_flag & RT_DEVICE_OFLAG_MASK) != (oflag & RT_DEVICE_OFLAG_MASK))) + ((dev->open_flag & RT_DEVICE_OFLAG_MASK) != ((oflag & RT_DEVICE_OFLAG_MASK) | RT_DEVICE_OFLAG_OPEN))) { if (device_open != RT_NULL) { From 584f4b869d0cb57d7ee625f3c255dffa4649d205 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Wed, 11 Sep 2024 12:54:03 +0800 Subject: [PATCH 15/54] [PIC/FIXUP] pirq reinit fail don't reinit pirq's list if cascade Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pic/pic.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index 4525c7d49eb..75f629f9742 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -177,15 +177,24 @@ static void config_pirq(struct rt_pic *pic, struct rt_pic_irq *pirq, int irq, in { rt_ubase_t level = rt_spin_lock_irqsave(&pirq->rw_lock); + if (pirq->irq < 0) + { + rt_list_init(&pirq->list); + rt_list_init(&pirq->children_nodes); + rt_list_init(&pirq->isr.list); + } + else if (pirq->pic != pic) + { + RT_ASSERT(rt_list_isempty(&pirq->list) == RT_TRUE); + RT_ASSERT(rt_list_isempty(&pirq->children_nodes) == RT_TRUE); + RT_ASSERT(rt_list_isempty(&pirq->isr.list) == RT_TRUE); + } + pirq->irq = irq; pirq->hwirq = hwirq; pirq->pic = pic; - rt_list_init(&pirq->list); - rt_list_init(&pirq->children_nodes); - rt_list_init(&pirq->isr.list); - rt_spin_unlock_irqrestore(&pirq->rw_lock, level); } From 55b40b5164b8583b66122be2d62f141daee776b3 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Wed, 11 Sep 2024 12:55:31 +0800 Subject: [PATCH 16/54] [FIXUP/PIC] set interrupt status when do traps Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pic/pic.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index 75f629f9742..5cd2ece005b 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -503,6 +503,8 @@ rt_err_t rt_pic_do_traps(void) rt_err_t err = -RT_ERROR; struct irq_traps *traps; + rt_interrupt_enter(); + rt_list_for_each_entry(traps, &_traps_nodes, list) { if (traps->handler(traps->data)) @@ -513,6 +515,8 @@ rt_err_t rt_pic_do_traps(void) } } + rt_interrupt_leave(); + return err; } From 04cdbc647c28b04d21ddb50fe80210dec30b5927 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Wed, 11 Sep 2024 12:56:28 +0800 Subject: [PATCH 17/54] [FIXUP/PIC] pirq's child handler should lock less When call the child handler, the PIC ops needn't lock again. Critical zone protection by PIC implementers. Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pic/pic.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index 5cd2ece005b..8893f974c23 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -548,11 +548,17 @@ rt_err_t rt_pic_handle_isr(struct rt_pic_irq *pirq) rt_list_for_each_entry(child, &pirq->children_nodes, list) { - rt_pic_irq_ack(child->irq); + if (child->pic->ops->irq_ack) + { + child->pic->ops->irq_ack(child); + } err = rt_pic_handle_isr(child); - rt_pic_irq_eoi(child->irq); + if (child->pic->ops->irq_eoi) + { + child->pic->ops->irq_eoi(child); + } } } From 94e49755af3fe7b66f7da531502f3cc5e1ad71b0 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Wed, 11 Sep 2024 12:59:55 +0800 Subject: [PATCH 18/54] [FEATURE/PIC] support PIC cancel (only in debug) PIC may free because some wrongs in debug. We should remove in PIC list or there are some undefined behavior will happen. Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/include/drivers/pic.h | 1 + components/drivers/pic/pic.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/components/drivers/include/drivers/pic.h b/components/drivers/include/drivers/pic.h index fa1941abbc5..c624d249d1f 100755 --- a/components/drivers/include/drivers/pic.h +++ b/components/drivers/include/drivers/pic.h @@ -148,6 +148,7 @@ void rt_pic_default_name(struct rt_pic *pic); struct rt_pic *rt_pic_dynamic_cast(void *ptr); rt_err_t rt_pic_linear_irq(struct rt_pic *pic, rt_size_t irq_nr); +rt_err_t rt_pic_cancel_irq(struct rt_pic *pic); int rt_pic_config_ipi(struct rt_pic *pic, int ipi_index, int hwirq); int rt_pic_config_irq(struct rt_pic *pic, int irq_index, int hwirq); diff --git a/components/drivers/pic/pic.c b/components/drivers/pic/pic.c index 8893f974c23..9f8f6f3cf74 100644 --- a/components/drivers/pic/pic.c +++ b/components/drivers/pic/pic.c @@ -173,6 +173,30 @@ rt_err_t rt_pic_linear_irq(struct rt_pic *pic, rt_size_t irq_nr) return err; } +rt_err_t rt_pic_cancel_irq(struct rt_pic *pic) +{ + rt_err_t err = RT_EOK; + + if (pic && pic->pirqs) + { + rt_ubase_t level = rt_spin_lock_irqsave(&_pic_lock); + + /* + * This is only to make system runtime safely, + * we don't recommend PICs to unregister. + */ + rt_list_remove(&pic->list); + + rt_spin_unlock_irqrestore(&_pic_lock, level); + } + else + { + err = -RT_EINVAL; + } + + return err; +} + static void config_pirq(struct rt_pic *pic, struct rt_pic_irq *pirq, int irq, int hwirq) { rt_ubase_t level = rt_spin_lock_irqsave(&pirq->rw_lock); From 3d503e931bfa395822143beac3f06c39e620e68a Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Wed, 11 Sep 2024 13:07:38 +0800 Subject: [PATCH 19/54] [DRIVER/PIC] Add ARM GICv2/v3 V2M, ITS support. Fix some code style and init for V2M, ITS. V2M is the PCI MSI/MSI-X for GICv2. ITS is the PCI MSI/MSI-X for GICv3/v4. Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/pic/Kconfig | 22 +- components/drivers/pic/SConscript | 6 + components/drivers/pic/pic-gic-common.h | 10 +- components/drivers/pic/pic-gicv2.c | 2 + components/drivers/pic/pic-gicv2m.c | 378 ++++++ components/drivers/pic/pic-gicv3-its.c | 1584 +++++++++++++++++++++++ components/drivers/pic/pic-gicv3.c | 32 +- components/drivers/pic/pic-gicv3.h | 181 ++- 8 files changed, 2159 insertions(+), 56 deletions(-) create mode 100755 components/drivers/pic/pic-gicv2m.c create mode 100755 components/drivers/pic/pic-gicv3-its.c diff --git a/components/drivers/pic/Kconfig b/components/drivers/pic/Kconfig index 16c14105a0f..d8d077fb762 100755 --- a/components/drivers/pic/Kconfig +++ b/components/drivers/pic/Kconfig @@ -1,6 +1,7 @@ menuconfig RT_USING_PIC bool "Using Programmable Interrupt Controller (PIC)" - select RT_USING_BITMAP + select RT_USING_ADT + select RT_USING_ADT_BITMAP depends on RT_USING_DM default n @@ -22,12 +23,31 @@ config RT_PIC_ARM_GIC select RT_USING_OFW default n +config RT_PIC_ARM_GIC_V2M + bool "ARM GIC V2M" if RT_PIC_ARM_GIC && RT_PCI_MSI + depends on RT_USING_OFW + default n + config RT_PIC_ARM_GIC_V3 bool "ARM GICv3" depends on RT_USING_PIC select RT_USING_OFW default n +config RT_PIC_ARM_GIC_V3_ITS + bool "ARM GICv3 ITS (Interrupt Translation Service)" if RT_PIC_ARM_GIC_V3 && RT_PCI_MSI + depends on RT_USING_OFW + select RT_USING_ADT_REF + default n + +config RT_PIC_ARM_GIC_V3_ITS_IRQ_MAX + int "IRQ maximum used" + depends on RT_PIC_ARM_GIC_V3_ITS + default 127 if ARCH_CPU_64BIT + default 63 + help + Recommended to be based on the bit length (full bits) of maximum usage. + config RT_PIC_ARM_GIC_MAX_NR int depends on RT_USING_PIC diff --git a/components/drivers/pic/SConscript b/components/drivers/pic/SConscript index e820792aa62..53cb66e1ff0 100644 --- a/components/drivers/pic/SConscript +++ b/components/drivers/pic/SConscript @@ -16,9 +16,15 @@ if GetDepend(['RT_PIC_ARM_GIC']) or GetDepend(['RT_PIC_ARM_GIC_V3']): if GetDepend(['RT_PIC_ARM_GIC']): src += ['pic-gicv2.c'] +if GetDepend(['RT_PIC_ARM_GIC_V2M']): + src += ['pic-gicv2m.c'] + if GetDepend(['RT_PIC_ARM_GIC_V3']): src += ['pic-gicv3.c'] +if GetDepend(['RT_PIC_ARM_GIC_V3_ITS']): + src += ['pic-gicv3-its.c'] + group = DefineGroup('DeviceDrivers', src, depend = [''], CPPPATH = CPPPATH) Return('group') diff --git a/components/drivers/pic/pic-gic-common.h b/components/drivers/pic/pic-gic-common.h index 46841e8ca73..d78e0688d6a 100644 --- a/components/drivers/pic/pic-gic-common.h +++ b/components/drivers/pic/pic-gic-common.h @@ -8,10 +8,14 @@ * 2023-01-30 GuEe-GUI first version */ -#ifndef __IRQ_GIC_COMMON_H__ -#define __IRQ_GIC_COMMON_H__ +#ifndef __PIC_GIC_COMMON_H__ +#define __PIC_GIC_COMMON_H__ #include + +#ifdef RT_PCI_MSI +#include +#endif #include #define GIC_SGI_NR 16 @@ -52,4 +56,4 @@ rt_err_t gicv2m_ofw_probe(struct rt_ofw_node *ic_np, const struct rt_ofw_node_id rt_err_t gicv3_its_ofw_probe(struct rt_ofw_node *ic_np, const struct rt_ofw_node_id *id); #endif -#endif /* __IRQ_GIC_COMMON_H__ */ +#endif /* __PIC_GIC_COMMON_H__ */ diff --git a/components/drivers/pic/pic-gicv2.c b/components/drivers/pic/pic-gicv2.c index adce046a8d3..c92172dd1cd 100644 --- a/components/drivers/pic/pic-gicv2.c +++ b/components/drivers/pic/pic-gicv2.c @@ -128,6 +128,8 @@ static void gicv2_cpu_init(struct gicv2 *gic) #ifdef ARCH_SUPPORT_HYP _gicv2_eoi_mode_ns = RT_TRUE; +#else + _gicv2_eoi_mode_ns = !!rt_ofw_bootargs_select("pic.gicv2_eoimode", 0); #endif if (_gicv2_eoi_mode_ns) diff --git a/components/drivers/pic/pic-gicv2m.c b/components/drivers/pic/pic-gicv2m.c new file mode 100755 index 00000000000..fb18a67d1e5 --- /dev/null +++ b/components/drivers/pic/pic-gicv2m.c @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2006-2022, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-11-07 GuEe-GUI first version + */ + +#include +#include +#include + +#define DBG_TAG "pic.gicv2m" +#define DBG_LVL DBG_INFO +#include + +#include +#include +#include "pic-gic-common.h" + +/* +* MSI_TYPER: +* [31:26] Reserved +* [25:16] lowest SPI assigned to MSI +* [15:10] Reserved +* [9:0] Numer of SPIs assigned to MSI +*/ +#define V2M_MSI_TYPER 0x008 +#define V2M_MSI_TYPER_BASE_SHIFT 16 +#define V2M_MSI_TYPER_BASE_MASK 0x3ff +#define V2M_MSI_TYPER_NUM_MASK 0x3ff +#define V2M_MSI_SETSPI_NS 0x040 +#define V2M_MIN_SPI 32 +#define V2M_MAX_SPI 1019 +#define V2M_MSI_IIDR 0xfcc + +#define V2M_MSI_TYPER_BASE_SPI(x) (((x) >> V2M_MSI_TYPER_BASE_SHIFT) & V2M_MSI_TYPER_BASE_MASK) +#define V2M_MSI_TYPER_NUM_SPI(x) ((x) & V2M_MSI_TYPER_NUM_MASK) + +/* APM X-Gene with GICv2m MSI_IIDR register value */ +#define XGENE_GICV2M_MSI_IIDR 0x06000170 +/* Broadcom NS2 GICv2m MSI_IIDR register value */ +#define BCM_NS2_GICV2M_MSI_IIDR 0x0000013f + +/* List of flags for specific v2m implementation */ +#define GICV2M_NEEDS_SPI_OFFSET 0x00000001 +#define GICV2M_GRAVITON_ADDRESS_ONLY 0x00000002 + +struct gicv2m +{ + struct rt_pic parent; + + void *base; + void *base_phy; + rt_uint32_t spi_start; /* The SPI number that MSIs start */ + rt_uint32_t spis_nr; /* The number of SPIs for MSIs */ + rt_uint32_t spi_offset; /* Offset to be subtracted from SPI number */ + + rt_bitmap_t *vectors; /* MSI vector bitmap */ + rt_uint32_t flags; /* Flags for v2m's specific implementation */ + + void *gic; + struct rt_spinlock lock; +}; + +#define raw_to_gicv2m(raw) rt_container_of(raw, struct gicv2m, parent) + +static rt_ubase_t gicv2m_get_msi_addr(struct gicv2m *v2m, int hwirq) +{ + rt_ubase_t addr; + + if (v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY) + { + addr = (rt_ubase_t)v2m->base_phy | ((hwirq - 32) << 3); + } + else + { + addr = (rt_ubase_t)v2m->base_phy + V2M_MSI_SETSPI_NS; + } + + return addr; +} + +static rt_bool_t is_msi_spi_valid(rt_uint32_t base, rt_uint32_t num) +{ + if (base < V2M_MIN_SPI) + { + LOG_E("Invalid MSI base SPI (base: %u)", base); + + return RT_FALSE; + } + else if ((num == 0) || (base + num > V2M_MAX_SPI)) + { + LOG_E("Number of SPIs (%u) exceed maximum (%u)", num, V2M_MAX_SPI - V2M_MIN_SPI + 1); + + return RT_FALSE; + } + + return RT_TRUE; +} + +static void gicv2m_irq_mask(struct rt_pic_irq *pirq) +{ + rt_pci_msi_mask_irq(pirq); + rt_pic_irq_parent_mask(pirq); +} + +static void gicv2m_irq_unmask(struct rt_pic_irq *pirq) +{ + rt_pci_msi_unmask_irq(pirq); + rt_pic_irq_parent_unmask(pirq); +} + +static void gicv2m_compose_msi_msg(struct rt_pic_irq *pirq, struct rt_pci_msi_msg *msg) +{ + rt_ubase_t addr; + struct gicv2m *v2m = raw_to_gicv2m(pirq->pic); + + addr = gicv2m_get_msi_addr(v2m, pirq->hwirq); + + msg->address_hi = rt_upper_32_bits(addr); + msg->address_lo = rt_lower_32_bits(addr); + + if (v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY) + { + msg->data = 0; + } + else + { + msg->data = pirq->hwirq; + } + + if (v2m->flags & GICV2M_NEEDS_SPI_OFFSET) + { + msg->data -= v2m->spi_offset; + } +} + +static int gicv2m_irq_alloc_msi(struct rt_pic *pic, struct rt_pci_msi_desc *msi_desc) +{ + rt_ubase_t level; + int irq, parent_irq, hwirq, hwirq_index; + struct rt_pic_irq *pirq; + struct gicv2m *v2m = raw_to_gicv2m(pic); + struct rt_pic *ppic = v2m->gic; + + level = rt_spin_lock_irqsave(&v2m->lock); + hwirq_index = rt_bitmap_next_clear_bit(v2m->vectors, 0, v2m->spis_nr); + + if (hwirq_index >= v2m->spis_nr) + { + irq = -RT_EEMPTY; + goto _out_lock; + } + + hwirq = v2m->spi_start + v2m->spi_offset + hwirq_index; + + parent_irq = ppic->ops->irq_map(ppic, hwirq, RT_IRQ_MODE_EDGE_RISING); + if (parent_irq < 0) + { + irq = parent_irq; + goto _out_lock; + } + + irq = rt_pic_config_irq(pic, hwirq_index, hwirq); + if (irq < 0) + { + goto _out_lock; + } + pirq = rt_pic_find_irq(pic, hwirq_index); + + pirq->mode = RT_IRQ_MODE_EDGE_RISING; + rt_pic_cascade(pirq, parent_irq); + + rt_bitmap_set_bit(v2m->vectors, hwirq_index); + +_out_lock: + rt_spin_unlock_irqrestore(&v2m->lock, level); + + return irq; +} + +static void gicv2m_irq_free_msi(struct rt_pic *pic, int irq) +{ + rt_ubase_t level; + struct rt_pic_irq *pirq; + struct gicv2m *v2m = raw_to_gicv2m(pic); + + pirq = rt_pic_find_pirq(pic, irq); + + if (!pirq) + { + return; + } + + rt_pic_uncascade(pirq); + + level = rt_spin_lock_irqsave(&v2m->lock); + rt_bitmap_clear_bit(v2m->vectors, pirq->hwirq - (v2m->spi_start + v2m->spi_offset)); + rt_spin_unlock_irqrestore(&v2m->lock, level); +} + +static rt_err_t gicv2m_irq_set_state(struct rt_pic *pic, int hwirq, int type, rt_bool_t state) +{ + struct gicv2m *v2m = raw_to_gicv2m(pic); + struct rt_pic *ppic = v2m->gic; + + return ppic->ops->irq_set_state(ppic, hwirq, type, state); +} + +static rt_err_t gicv2m_irq_get_state(struct rt_pic *pic, int hwirq, int type, rt_bool_t *out_state) +{ + struct gicv2m *v2m = raw_to_gicv2m(pic); + struct rt_pic *ppic = v2m->gic; + + return ppic->ops->irq_get_state(ppic, hwirq, type, out_state); +} + +const static struct rt_pic_ops gicv2m_ops = +{ + .name = "GICv2m", + .irq_ack = rt_pic_irq_parent_ack, + .irq_mask = gicv2m_irq_mask, + .irq_unmask = gicv2m_irq_unmask, + .irq_eoi = rt_pic_irq_parent_eoi, + .irq_set_priority = rt_pic_irq_parent_set_priority, + .irq_set_affinity = rt_pic_irq_parent_set_affinity, + .irq_compose_msi_msg = gicv2m_compose_msi_msg, + .irq_alloc_msi = gicv2m_irq_alloc_msi, + .irq_free_msi = gicv2m_irq_free_msi, + .irq_set_state = gicv2m_irq_set_state, + .irq_get_state = gicv2m_irq_get_state, + .flags = RT_PIC_F_IRQ_ROUTING, +}; + +static const struct rt_ofw_node_id gicv2m_ofw_match[] = +{ + { .compatible = "arm,gic-v2m-frame" }, + { /* sentinel */ } +}; + +rt_err_t gicv2m_ofw_probe(struct rt_ofw_node *np, const struct rt_ofw_node_id *id) +{ + rt_err_t err = RT_EOK; + struct rt_ofw_node *v2m_np; + + rt_ofw_foreach_available_child_node(np, v2m_np) + { + struct gicv2m *v2m; + rt_size_t bitmap_size; + rt_uint32_t spi_start = 0, spis_nr = 0; + + if (!rt_ofw_node_match(v2m_np, gicv2m_ofw_match)) + { + continue; + } + + if (!rt_ofw_prop_read_bool(v2m_np, "msi-controller")) + { + continue; + } + + if (!(v2m = rt_malloc(sizeof(*v2m)))) + { + rt_ofw_node_put(v2m_np); + + err = -RT_ENOMEM; + break; + } + + v2m->base = rt_ofw_iomap(v2m_np, 0); + + if (!v2m->base) + { + LOG_E("%s: IO map failed", rt_ofw_node_full_name(v2m_np)); + continue; + } + + v2m->base_phy = rt_kmem_v2p(v2m->base); + v2m->flags = 0; + + if (!rt_ofw_prop_read_u32(v2m_np, "arm,msi-base-spi", &spi_start) && + !rt_ofw_prop_read_u32(v2m_np, "arm,msi-num-spis", &spis_nr)) + { + LOG_I("DT overriding V2M MSI_TYPER (base:%u, num:%u)", spi_start, spis_nr); + } + + if (spi_start && spis_nr) + { + v2m->spi_start = spi_start; + v2m->spis_nr = spis_nr; + } + else + { + rt_uint32_t typer; + + /* Graviton should always have explicit spi_start/spis_nr */ + if (v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY) + { + goto _fail; + } + typer = HWREG32(v2m->base + V2M_MSI_TYPER); + + v2m->spi_start = V2M_MSI_TYPER_BASE_SPI(typer); + v2m->spis_nr = V2M_MSI_TYPER_NUM_SPI(typer); + } + + if (!is_msi_spi_valid(v2m->spi_start, v2m->spis_nr)) + { + goto _fail; + } + + /* + * APM X-Gene GICv2m implementation has an erratum where + * the MSI data needs to be the offset from the spi_start + * in order to trigger the correct MSI interrupt. This is + * different from the standard GICv2m implementation where + * the MSI data is the absolute value within the range from + * spi_start to (spi_start + num_spis). + * + * Broadcom NS2 GICv2m implementation has an erratum where the MSI data + * is 'spi_number - 32' + * + * Reading that register fails on the Graviton implementation + */ + if (!(v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY)) + { + switch (HWREG32(v2m->base + V2M_MSI_IIDR)) + { + case XGENE_GICV2M_MSI_IIDR: + v2m->flags |= GICV2M_NEEDS_SPI_OFFSET; + v2m->spi_offset = v2m->spi_start; + break; + + case BCM_NS2_GICV2M_MSI_IIDR: + v2m->flags |= GICV2M_NEEDS_SPI_OFFSET; + v2m->spi_offset = 32; + break; + } + } + + bitmap_size = RT_BITMAP_LEN(v2m->spis_nr) * sizeof(bitmap_t); + + if (!(v2m->vectors = rt_calloc(1, bitmap_size))) + { + err = -RT_ENOMEM; + goto _fail; + } + + rt_spin_lock_init(&v2m->lock); + + v2m->parent.priv_data = v2m; + v2m->parent.ops = &gicv2m_ops; + v2m->gic = rt_ofw_data(np); + + rt_pic_linear_irq(&v2m->parent, v2m->spis_nr); + rt_pic_user_extends(&v2m->parent); + + rt_ofw_data(v2m_np) = &v2m->parent; + rt_ofw_node_set_flag(v2m_np, RT_OFW_F_READLY); + + continue; + + _fail: + rt_iounmap(v2m->base); + rt_free(v2m); + + if (err) + { + rt_ofw_node_put(v2m_np); + break; + } + } + + return err; +} diff --git a/components/drivers/pic/pic-gicv3-its.c b/components/drivers/pic/pic-gicv3-its.c new file mode 100755 index 00000000000..f0772d91710 --- /dev/null +++ b/components/drivers/pic/pic-gicv3-its.c @@ -0,0 +1,1584 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-01-30 GuEe-GUI first version + */ + +#include +#include +#include + +#define DBG_TAG "pic.gicv3-its" +#define DBG_LVL DBG_INFO +#include + +#include +#include +#include +#include +#include "pic-gicv3.h" +#include "pic-gic-common.h" + +#define ITS_CMD_QUEUE_SIZE (64 * SIZE_KB) +#define ITS_CMD_QUEUE_ALIGN (64 * SIZE_KB) +#define ITS_CMD_QUEUE_NR (ITS_CMD_QUEUE_SIZE / sizeof(struct its_command)) + +#define ITS_ITT_ALIGN (256 * SIZE_KB) + +#define ITS_LPI_CONFIG_TABLE_ALIGN (64 * SIZE_KB) +#define ITS_LPI_CONFIG_PROP_DEFAULT_PRIO GICD_INT_DEF_PRI +#define ITS_LPI_CONFIG_PROP_SHIFT 2 +#define ITS_LPI_CONFIG_PROP_MASK RT_GENMASK(7, ITS_LPI_CONFIG_PROP_SHIFT) +#define ITS_LPI_PENDING_TABLE_ALIGN (64 * SIZE_KB) + +#define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING RT_BIT(0) +#define RDIST_FLAGS_RD_TABLES_PREALLOCATED RT_BIT(1) +#define RDIST_FLAGS_FORCE_NON_SHAREABLE RT_BIT(2) + +#define ITS_FLAGS_CMDQ_NEEDS_FLUSHING RT_BIT(0) +#define ITS_FLAGS_WORKAROUND_CAVIUM_22375 RT_BIT(1) +#define ITS_FLAGS_FORCE_NON_SHAREABLE RT_BIT(2) + +#define RD_LOCAL_LPI_ENABLED RT_BIT(0) +#define RD_LOCAL_PENDTABLE_PREALLOCATED RT_BIT(1) +#define RD_LOCAL_MEMRESERVE_DONE RT_BIT(2) + +struct its_command +{ + union + { + rt_le64_t code_raw[4]; + rt_uint64_t code[4]; + }; +}; + +struct its_table +{ + void *base; + rt_uint64_t val; + rt_uint32_t size_bits; + rt_uint32_t page_size; + union + { + struct + { + rt_uint32_t itt_entries; + rt_uint32_t lvl2_bits; + }; + }; +}; + +struct its_collection +{ + rt_uint64_t target_address; + rt_uint16_t id; +}; + +struct gicv3_its; + +struct its_map +{ + rt_list_t list; + struct rt_ref ref; + struct gicv3_its *its; + + int device_id; + int lpi_base; + int cpu_id; + + void *itt; + void *lvl2_dte; +}; + +struct gicv3_its +{ + struct rt_pic parent; + rt_list_t list; + + void *base; + void *base_phy; + + void *cmd_base; + rt_ubase_t cmd_idx; + rt_uint32_t flags; + struct rt_spinlock cmd_lock; + + struct its_table tbls[GITS_BASER_NR_REGS]; + struct its_collection collections[RT_CPUS_NR]; + + struct gicv3 *gic; + struct rt_ofw_node *np; +}; + +#define raw_to_gicv3_its(raw) rt_container_of(raw, struct gicv3_its, parent) + +static rt_size_t lpi_nr; +static rt_uint32_t lpi_id_bits; +static void *lpi_table; +static void *lpi_pending_table; +static rt_bitmap_t *lpis_vectors = RT_NULL; +static struct rt_spinlock lpis_lock = {}, map_lock = {}; +static rt_list_t its_nodes = RT_LIST_OBJECT_INIT(its_nodes); +static rt_list_t map_nodes = RT_LIST_OBJECT_INIT(map_nodes); + +rt_inline rt_uint64_t its_readq(struct gicv3_its *its, int off) +{ + return HWREG32(its->base + off) | + (rt_uint64_t)HWREG32(its->base + off + 4) << 32; +} + +rt_inline void its_writeq(struct gicv3_its *its, int off, rt_uint64_t value) +{ + HWREG32(its->base + off) = (rt_uint32_t)value; + HWREG32(its->base + off + 4) = (rt_uint32_t)(value >> 32); +} + +rt_inline rt_uint32_t its_readl(struct gicv3_its *its, int off) +{ + return HWREG32(its->base + off); +} + +rt_inline void its_writel(struct gicv3_its *its, int off, rt_uint32_t value) +{ + HWREG32(its->base + off) = value; +} + +rt_inline rt_uint32_t its_pirq_event_id(struct gicv3_its *its, struct rt_pic_irq *pirq) +{ + return pirq->hwirq - 8192; +} + +rt_inline rt_uint32_t its_pirq_device_id(struct gicv3_its *its, struct rt_pic_irq *pirq) +{ + struct its_map *map = pirq->msi_desc->priv; + + return map->device_id; +} + +rt_inline rt_size_t its_device_id_bits(struct gicv3_its *its) +{ + return RT_FIELD_GET(GITS_TYPER_DEVBITS, HWREG64(its->base + GITS_TYPER)) + 1; +} + +rt_inline void *lpi_base_config(int index) +{ + return &((rt_uint8_t *)lpi_table)[index - 8192]; +} + +static void its_mask_encode(rt_uint64_t *raw_code, rt_uint64_t val, int h, int l) +{ + rt_uint64_t mask = RT_GENMASK_ULL(h, l); + *raw_code &= ~mask; + *raw_code |= (val << l) & mask; +} + +rt_inline void its_encode_cmd(struct its_command *cmd, rt_uint8_t cmd_nr) +{ + its_mask_encode(&cmd->code[0], cmd_nr, 7, 0); +} + +rt_inline void its_encode_valid(struct its_command *cmd, rt_bool_t valid) +{ + its_mask_encode(&cmd->code[2], !!valid, 63, 63); +} + +rt_inline void its_encode_phys_id(struct its_command *cmd, rt_uint32_t phys_id) +{ + its_mask_encode(&cmd->code[1], phys_id, 63, 32); +} + +rt_inline void its_encode_size(struct its_command *cmd, rt_uint8_t size) +{ + its_mask_encode(&cmd->code[1], size, 4, 0); +} + +rt_inline void its_encode_itt(struct its_command *cmd, rt_uint64_t itt_addr) +{ + its_mask_encode(&cmd->code[2], itt_addr >> 8, 51, 8); +} + +rt_inline void its_encode_target(struct its_command *cmd, rt_uint64_t target_addr) +{ + its_mask_encode(&cmd->code[2], target_addr >> 16, 51, 16); +} + +rt_inline void its_encode_device_id(struct its_command *cmd, rt_uint32_t device_id) +{ + its_mask_encode(&cmd->code[0], device_id, 63, 32); +} + +rt_inline void its_encode_event_id(struct its_command *cmd, rt_uint32_t event_id) +{ + its_mask_encode(&cmd->code[1], event_id, 31, 0); +} + +rt_inline void its_encode_collection(struct its_command *cmd, rt_uint16_t collection_id) +{ + its_mask_encode(&cmd->code[2], collection_id, 15, 0); +} + +static struct its_table *its_baser_type(struct gicv3_its *its, int type) +{ + for (int i = 0; i < RT_ARRAY_SIZE(its->tbls); ++i) + { + if (GITS_BASER_TYPE(its->tbls[i].val) == type) + { + return &its->tbls[i]; + } + } + + return RT_NULL; +} + +static struct its_command *its_cmd_alloc(struct gicv3_its *its) +{ + struct its_command *cmd = RT_NULL; + + for (rt_uint32_t count = 0; count <= 10000; ++count) + { + if ((its->cmd_idx + 1) % ITS_CMD_QUEUE_NR != its_readl(its, GITS_CREADR) / sizeof(*cmd)) + { + struct its_command *cmds = its->cmd_base; + + cmd = &cmds[its->cmd_idx++]; + its->cmd_idx %= ITS_CMD_QUEUE_NR; + + rt_memset(cmd, 0, sizeof(*cmd)); + + break; + } + + rt_hw_us_delay(10); + } + + return cmd; +} + +static rt_err_t its_cmd_submit_raw(struct gicv3_its *its, struct its_command *cmd) +{ + rt_uint64_t cwriter; + rt_bool_t retry = RT_FALSE; + + cwriter = (void *)(cmd + 1) - its->cmd_base; + rt_hw_rmb(); + +#ifdef ARCH_CPU_BIG_ENDIAN + cmd->code_raw[0] = rt_cpu_to_le64(cmd->code[0]); + cmd->code_raw[1] = rt_cpu_to_le64(cmd->code[1]); + cmd->code_raw[2] = rt_cpu_to_le64(cmd->code[2]); + cmd->code_raw[3] = rt_cpu_to_le64(cmd->code[3]); +#endif /* ARCH_CPU_BIG_ENDIAN */ + + /* Make sure the commands written to memory are observable by the ITS */ + if (its->flags & ITS_FLAGS_CMDQ_NEEDS_FLUSHING) + { + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, cmd, sizeof(*cmd)); + } + else + { + rt_hw_wmb(); + } + + its_writel(its, GITS_CWRITER, cwriter); + + for (rt_uint32_t count = 0; count < 10000; ++count) + { + if (its_readl(its, GITS_CREADR) == cwriter) + { + return RT_EOK; + } + + /* Stalled */ + if (!retry && its_readl(its, GITS_CREADR) & 1) + { + /* Retry */ + its_writel(its, GITS_CWRITER, cwriter); + retry = RT_TRUE; + } + else if (retry) + { + LOG_E("Retry command 0x%02x fail", cmd->code[0] & 0xff); + + return -RT_EIO; + } + + rt_hw_us_delay(10); + } + + return -RT_ETIMEOUT; +} + +static rt_err_t its_cmd_submit_nomap(struct gicv3_its *its, struct its_command *cmd, + int cpu_id, rt_bool_t sync) +{ + rt_err_t err; + struct its_command *hw_cmd; + + rt_hw_spin_lock(&its->cmd_lock.lock); + + if (!(hw_cmd = its_cmd_alloc(its))) + { + err = -RT_EBUSY; + goto _out_lock; + } + + rt_memcpy(hw_cmd, cmd, sizeof(*hw_cmd)); + + if ((err = its_cmd_submit_raw(its, hw_cmd))) + { + goto _out_lock; + } + + if (sync) + { + if (!(hw_cmd = its_cmd_alloc(its))) + { + err = -RT_EBUSY; + goto _out_lock; + } + + its_encode_cmd(hw_cmd, GITS_CMD_SYNC); + its_encode_target(hw_cmd, its->collections[cpu_id].target_address); + + err = its_cmd_submit_raw(its, hw_cmd); + } + +_out_lock: + rt_hw_spin_unlock(&its->cmd_lock.lock); + + return err; +} + +static rt_err_t its_cmd_submit(struct gicv3_its *its, struct its_command *cmd, + struct its_map *map, rt_bool_t sync) +{ + return its_cmd_submit_nomap(its, cmd, map->cpu_id, sync); +} + +static rt_err_t lpi_flush_config(struct gicv3_its *its, rt_uint8_t *conf, + struct rt_pic_irq *pirq) +{ + struct its_command cmd; + struct its_map *map = pirq->msi_desc->priv; + + if (its->gic->redist_flags & RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING) + { + /* Clean D-cache under command */ + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, conf, sizeof(*conf)); + } + else + { + /* DSB inner shareable, store */ + rt_hw_wmb(); + } + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_INV); + its_encode_device_id(&cmd, its_pirq_device_id(its, pirq)); + its_encode_event_id(&cmd, its_pirq_event_id(its, pirq)); + + return its_cmd_submit(its, &cmd, map, RT_FALSE); +} + +rt_inline void *gicr_rd_base_percpu(struct gicv3 *gic) +{ + return gic->redist_regions[rt_hw_cpu_id()].base; +} + +rt_inline void *gicr_rd_base(struct gicv3_its *its) +{ + return its->gic->redist_percpu_base[rt_hw_cpu_id()]; +} + +rt_inline rt_uint64_t *gicr_rd_flags(struct gicv3_its *its) +{ + return &its->gic->redist_percpu_flags[rt_hw_cpu_id()]; +} + +static rt_bool_t gicr_supports_plpis(struct gicv3_its *its) +{ + return !!(HWREG64(gicr_rd_base(its) + GICR_TYPER) & GICR_TYPER_PLPIS); +} + +static rt_err_t redist_disable_lpis(struct gicv3_its *its) +{ + void *gicr = gicr_rd_base(its); + rt_uint64_t timeout = 1000000L, val; + + if (!gicr_supports_plpis(its)) + { + LOG_E("CPU#%d: LPIs not supported", rt_hw_cpu_id()); + return -RT_ENOSYS; + } + + val = HWREG32(gicr + GICR_CTLR); + if (!(val & GICR_CTLR_ENABLE_LPIS)) + { + return RT_EOK; + } + + /* + * If coming via a CPU hotplug event, we don't need to disable + * LPIs before trying to re-enable them. They are already + * configured and all is well in the world. + * + * If running with preallocated tables, there is nothing to do. + */ + if ((*gicr_rd_flags(its) & RD_LOCAL_LPI_ENABLED) || + (its->gic->flags & RDIST_FLAGS_RD_TABLES_PREALLOCATED)) + { + return RT_EOK; + } + + /* From that point on, we only try to do some damage control */ + LOG_W("CPU%d: Booted with LPIs enabled, memory probably corrupted", rt_hw_cpu_id()); + + /* Disable LPIs */ + val &= ~GICR_CTLR_ENABLE_LPIS; + HWREG32(gicr + GICR_CTLR) = val; + + /* Make sure any change to GICR_CTLR is observable by the GIC */ + rt_hw_barrier(dsb, sy); + + /* + * Software must observe RWP==0 after clearing GICR_CTLR.EnableLPIs + * from 1 to 0 before programming GICR_PEND{PROP}BASER registers. + * Error out if we time out waiting for RWP to clear. + */ + while (HWREG32(gicr + GICR_CTLR) & GICR_CTLR_RWP) + { + if (!timeout) + { + LOG_E("CPU#%d: Timeout while disabling LPIs", rt_hw_cpu_id()); + + return -RT_ETIMEOUT; + } + + rt_hw_us_delay(1); + --timeout; + } + + /* + * After it has been written to 1, it is IMPLEMENTATION + * DEFINED whether GICR_CTLR.EnableLPI becomes RES1 or can be + * cleared to 0. Error out if clearing the bit failed. + */ + if (HWREG32(gicr + GICR_CTLR) & GICR_CTLR_ENABLE_LPIS) + { + LOG_E("CPU#%d: Failed to disable LPIs", rt_hw_cpu_id()); + + return -RT_EBUSY; + } + + return RT_EOK; +} + +static void gicv3_its_cpu_init_lpis(struct gicv3_its *its) +{ + void *gicr; + rt_ubase_t paddr; + rt_uint64_t val, tmp; + + if (*gicr_rd_flags(its) & RD_LOCAL_LPI_ENABLED) + { + return; + } + + gicr = gicr_rd_base(its); + + val = HWREG32(gicr + GICR_CTLR); + + if ((its->gic->redist_flags & RDIST_FLAGS_RD_TABLES_PREALLOCATED) && + (val & GICR_CTLR_ENABLE_LPIS)) + { + *gicr_rd_flags(its) |= RD_LOCAL_PENDTABLE_PREALLOCATED; + + goto _out; + } + + paddr = (rt_ubase_t)rt_kmem_v2p(lpi_pending_table); + + /* Set PROPBASE */ + val = ((rt_ubase_t)rt_kmem_v2p(lpi_table) | + GITS_CBASER_InnerShareable | + GITS_CBASER_RaWaWb | + ((lpi_id_bits - 1) & GICR_PROPBASER_IDBITS_MASK)); + + HWREG64(gicr + GICR_PROPBASER) = val; + tmp = HWREG64(gicr + GICR_PROPBASER); + + if (its->gic->redist_flags & RDIST_FLAGS_FORCE_NON_SHAREABLE) + { + tmp &= ~GICR_PBASER_SHARE_MASK_ALL; + } + + if ((tmp ^ val) & GICR_PBASER_SHARE_MASK_ALL) + { + if (!(tmp & GICR_PBASER_SHARE_MASK_ALL)) + { + /* + * The HW reports non-shareable, + * we must remove the cacheability attributes as well. + */ + val &= ~(GICR_PBASER_SHARE_MASK_ALL | GICR_PBASER_INNER_MASK_ALL); + val |= GICR_PBASER_nC; + HWREG64(gicr + GICR_PROPBASER) = val; + } + + if (!rt_hw_cpu_id()) + { + LOG_I("Using cache flushing for LPI property table"); + } + its->gic->redist_flags |= RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING; + } + + val = (paddr | GICR_PBASER_InnerShareable | GICR_PBASER_RaWaWb); + + HWREG64(gicr + GICR_PENDBASER) = val; + tmp = HWREG64(gicr + GICR_PENDBASER); + + if (its->gic->redist_flags & RDIST_FLAGS_FORCE_NON_SHAREABLE) + { + tmp &= ~GICR_PBASER_SHARE_MASK_ALL; + } + + if (!(tmp & GICR_PBASER_SHARE_MASK_ALL)) + { + /* + * The HW reports non-shareable, we must remove the + * cacheability attributes as well. + */ + val &= ~(GICR_PBASER_SHARE_MASK_ALL | GICR_PBASER_INNER_MASK_ALL); + val |= GICR_PBASER_nC; + HWREG64(gicr + GICR_PENDBASER) = val; + } + + /* Enable LPIs */ + val = HWREG32(gicr + GICR_CTLR); + val |= GICR_CTLR_ENABLE_LPIS; + HWREG32(gicr + GICR_CTLR) = val; + + rt_hw_barrier(dsb, sy); + +_out: + *gicr_rd_flags(its) |= RD_LOCAL_LPI_ENABLED; +} + +static void gicv3_its_cpu_init_collection(struct gicv3_its *its) +{ + rt_uint64_t target; + int cpu_id = rt_hw_cpu_id(); + struct its_command cmd; + struct its_collection *collection; + + if (HWREG64(its->base + GITS_TYPER) & GITS_TYPER_PTA) + { + target = (rt_uint64_t)rt_kmem_v2p(gicr_rd_base(its)); + } + else + { + /* Linear by GICR processor number */ + target = HWREG64(gicr_rd_base(its) + GICR_TYPER); + target = GICR_TYPER_CPU_NO(target) << 16; + } + + collection = &its->collections[cpu_id]; + collection->target_address = target; + collection->id = cpu_id; + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_MAPC); + its_encode_collection(&cmd, collection->id); + its_encode_target(&cmd, target); + its_encode_valid(&cmd, RT_TRUE); + its_cmd_submit_nomap(its, &cmd, cpu_id, RT_TRUE); + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_INVALL); + its_encode_collection(&cmd, collection->id); + its_cmd_submit_nomap(its, &cmd, cpu_id, RT_TRUE); +} + +static rt_err_t gicv3_its_irq_init(struct rt_pic *pic) +{ + rt_err_t err; + struct gicv3_its *its = raw_to_gicv3_its(pic); + + if ((err = redist_disable_lpis(its))) + { + return err; + } + + gicv3_its_cpu_init_lpis(its); + gicv3_its_cpu_init_collection(its); + + return RT_EOK; +} + +static void gicv3_its_irq_mask(struct rt_pic_irq *pirq) +{ + rt_uint8_t *conf = lpi_base_config(pirq->hwirq); + struct gicv3_its *its = raw_to_gicv3_its(pirq->pic); + + *conf &= ~GITS_LPI_CFG_ENABLED; + lpi_flush_config(its, conf, pirq); + + rt_pci_msi_mask_irq(pirq); +} + +static void gicv3_its_irq_unmask(struct rt_pic_irq *pirq) +{ + rt_uint8_t *conf = lpi_base_config(pirq->hwirq); + struct gicv3_its *its = raw_to_gicv3_its(pirq->pic); + + *conf |= GITS_LPI_CFG_ENABLED; + lpi_flush_config(its, conf, pirq); + + rt_pci_msi_unmask_irq(pirq); +} + +static rt_err_t gicv3_its_irq_set_priority(struct rt_pic_irq *pirq, rt_uint32_t priority) +{ + rt_uint8_t *conf = lpi_base_config(pirq->hwirq); + struct gicv3_its *its = raw_to_gicv3_its(pirq->pic); + + *conf = (priority << ITS_LPI_CONFIG_PROP_SHIFT) | (*conf & (~ITS_LPI_CONFIG_PROP_MASK)); + + return lpi_flush_config(its, conf, pirq); +} + +static rt_err_t gicv3_its_irq_set_affinity(struct rt_pic_irq *pirq, rt_bitmap_t *affinity) +{ + int cpu_id; + rt_err_t err; + struct its_map *map; + struct its_command cmd; + struct its_collection *collection; + struct gicv3_its *its = raw_to_gicv3_its(pirq->pic); + + map = pirq->msi_desc->priv; + cpu_id = rt_bitmap_next_set_bit(affinity, 0, RT_CPUS_NR); + collection = &its->collections[cpu_id]; + + if (collection->target_address == ~0ULL) + { + return -RT_EIO; + } + + if (map->cpu_id == cpu_id) + { + return RT_EOK; + } + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_MOVI); + its_encode_device_id(&cmd, map->device_id); + its_encode_event_id(&cmd, its_pirq_event_id(its, pirq)); + its_encode_collection(&cmd, collection->id); + + if (!(err = its_cmd_submit(its, &cmd, map, RT_TRUE))) + { + map->cpu_id = cpu_id; + } + + return err; +} + +static void gicv3_its_irq_compose_msi_msg(struct rt_pic_irq *pirq, struct rt_pci_msi_msg *msg) +{ + rt_ubase_t addr; + struct gicv3_its *its = raw_to_gicv3_its(pirq->pic); + + addr = (rt_ubase_t)its->base_phy + GITS_TRANSLATER; + + msg->address_hi = rt_upper_32_bits(addr); + msg->address_lo = rt_lower_32_bits(addr); + msg->data = its_pirq_event_id(its, pirq); +} + +static int gicv3_its_irq_alloc_msi(struct rt_pic *pic, struct rt_pci_msi_desc *msi_desc) +{ + rt_ubase_t level; + rt_uint32_t device_id = -1; + int irq = -1, hwirq, parent_irq, hwirq_index, lpi_base = 0; + struct its_map *map = RT_NULL, *map_tmp; + struct its_table *tbl; + struct its_command cmd; + struct rt_pic_irq *pirq; + struct rt_pci_device *pdev = msi_desc->pdev; + struct gicv3_its *its = raw_to_gicv3_its(pic); + struct rt_pic *ppic = &its->gic->parent; + + tbl = its_baser_type(its, GITS_BASER_TYPE_DEVICE); + RT_ASSERT(tbl != RT_NULL); + + if (!pdev->parent.ofw_node) + { + device_id = rt_pci_dev_id(pdev); + } + else + { + struct rt_ofw_cell_args args; + + for (int index = 0; ; ++index) + { + rt_err_t err = rt_ofw_parse_phandle_cells(pdev->parent.ofw_node, + "msi-parent", "#msi-cells", index, &args); + + if (err) + { + return (int)err; + } + + if (args.data == its->np) + { + device_id = args.args[0]; + } + + rt_ofw_node_put(args.data); + + if ((rt_int32_t)device_id >= 0) + { + break; + } + } + } + + if (device_id >= (1 << tbl->size_bits)) + { + LOG_E("Device ID = is %x not supported", device_id); + + return -RT_EINVAL; + } + + /* Find old map info */ + level = rt_spin_lock_irqsave(&map_lock); + rt_list_for_each_entry(map_tmp, &map_nodes, list) + { + if (map_tmp->device_id == device_id) + { + map = map_tmp; + lpi_base = map->lpi_base - 8192; + break; + } + } + rt_spin_unlock_irqrestore(&map_lock, level); + + if (!map) + { + rt_size_t itt_size; + + if (!(map = rt_calloc(1, sizeof(*map)))) + { + return -RT_ENOMEM; + } + + itt_size = tbl->itt_entries * (RT_FIELD_GET(GITS_TYPER_ITT_ENTRY_SIZE, + HWREG64(its->base + GITS_TYPER)) + 1); + itt_size = rt_max_t(rt_size_t, itt_size, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1; + + map->itt = rt_malloc_align(itt_size, ITS_ITT_ALIGN); + + if (!map->itt) + { + rt_free(map); + return -RT_ENOMEM; + } + + if (tbl->lvl2_bits) + { + void *lvl2_dte; + rt_uint64_t *entry; + + entry = tbl->base; + entry += device_id / (tbl->page_size / GITS_LVL1_ENTRY_SIZE); + + if (*entry) + { + lvl2_dte = (void *)(*entry - PV_OFFSET); + rt_page_ref_inc(lvl2_dte, tbl->lvl2_bits); + } + else + { + rt_size_t dte_size; + + lvl2_dte = rt_pages_alloc(tbl->lvl2_bits); + + if (!lvl2_dte) + { + rt_free_align(map->itt); + rt_free(map); + return -RT_ENOMEM; + } + + dte_size = rt_page_bits(tbl->lvl2_bits); + rt_memset(lvl2_dte, 0, dte_size); + + if (!(tbl->val & GITS_BASER_SHARE_MASK_ALL)) + { + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, lvl2_dte, dte_size); + } + + *entry = rt_cpu_to_le64((rt_uint64_t)rt_kmem_v2p(lvl2_dte) | GITS_BASER_VALID); + + if (!(tbl->val & GITS_BASER_SHARE_MASK_ALL)) + { + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, entry, sizeof(*entry)); + } + + rt_hw_dsb(); + } + + map->lvl2_dte = lvl2_dte; + } + + rt_memset(map->itt, 0, itt_size); + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, map->itt, itt_size); + } + msi_desc->priv = map; + + /* Alloc the LPI base on the first LPI */ + level = rt_spin_lock_irqsave(&lpis_lock); + hwirq_index = rt_bitmap_next_clear_bit(lpis_vectors, lpi_base, lpi_nr); + + if (hwirq_index >= lpi_nr) + { + irq = -RT_EEMPTY; + goto _out_lock; + } + + hwirq = 8192 + hwirq_index; + parent_irq = ppic->ops->irq_map(ppic, hwirq, RT_IRQ_MODE_EDGE_RISING); + if (parent_irq < 0) + { + irq = parent_irq; + goto _out_lock; + } + + irq = rt_pic_config_irq(pic, hwirq_index, hwirq); + if (irq < 0) + { + goto _out_lock; + } + pirq = rt_pic_find_irq(pic, hwirq_index); + + pirq->mode = RT_IRQ_MODE_EDGE_RISING; + rt_pic_cascade(pirq, parent_irq); + + rt_bitmap_set_bit(lpis_vectors, hwirq_index); + +_out_lock: + rt_spin_unlock_irqrestore(&lpis_lock, level); + + if (irq < 0) + { + return irq; + } + + if (map->its) + { + rt_ref_get(&map->ref); + } + else + { + rt_list_init(&map->list); + rt_ref_init(&map->ref); + map->its = its; + map->device_id = device_id; + map->lpi_base = hwirq; + + level = rt_spin_lock_irqsave(&map_lock); + rt_list_insert_before(&map_nodes, &map->list); + rt_spin_unlock_irqrestore(&map_lock, level); + } + + /* Default to CPU#0 */ + map->cpu_id = 0; + RT_IRQ_AFFINITY_SET(pirq->affinity, map->cpu_id); + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_MAPD); + its_encode_device_id(&cmd, device_id); + its_encode_size(&cmd, rt_ilog2(tbl->itt_entries) - 1); + its_encode_itt(&cmd, (rt_uint64_t)rt_kmem_v2p(map->itt)); + its_encode_valid(&cmd, RT_TRUE); + its_cmd_submit(its, &cmd, map, RT_FALSE); + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_MAPTI); + its_encode_device_id(&cmd, device_id); + its_encode_event_id(&cmd, its_pirq_event_id(its, pirq)); + its_encode_phys_id(&cmd, hwirq); + its_encode_collection(&cmd, its->collections[map->cpu_id].id); + its_cmd_submit(its, &cmd, map, RT_TRUE); + + return irq; +} + +static void its_map_release(struct rt_ref *r) +{ + rt_ubase_t level; + struct gicv3_its *its; + struct its_table *tbl; + struct its_command cmd; + struct its_map *map = rt_container_of(r, struct its_map, ref); + + its = map->its; + tbl = its_baser_type(its, GITS_BASER_TYPE_DEVICE); + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_MAPD); + its_encode_device_id(&cmd, map->device_id); + its_encode_size(&cmd, rt_ilog2(tbl->itt_entries) - 1); + its_encode_itt(&cmd, (rt_uint64_t)rt_kmem_v2p(map->itt)); + its_encode_valid(&cmd, RT_FALSE); + its_cmd_submit(its, &cmd, map, RT_TRUE); + + level = rt_spin_lock_irqsave(&map_lock); + rt_list_insert_before(&map_nodes, &map->list); + rt_spin_unlock_irqrestore(&map_lock, level); + + if (map->itt) + { + rt_free_align(map->itt); + } + if (map->lvl2_dte) + { + if (rt_page_ref_get(map->lvl2_dte, tbl->lvl2_bits) == 1) + { + rt_uint64_t *entry; + + entry = tbl->base + (map->device_id / (tbl->page_size / GITS_LVL1_ENTRY_SIZE)); + *entry = rt_cpu_to_le64(0); + + if (!(tbl->val & GITS_BASER_SHARE_MASK_ALL)) + { + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, entry, sizeof(*entry)); + } + } + rt_pages_free(map->lvl2_dte, tbl->lvl2_bits); + } + rt_free(map); +} + +static void gicv3_its_irq_free_msi(struct rt_pic *pic, int irq) +{ + rt_ubase_t level; + struct its_map *map; + struct its_command cmd; + struct rt_pic_irq *pirq; + struct gicv3_its *its = raw_to_gicv3_its(pic); + + pirq = rt_pic_find_pirq(pic, irq); + + if (!pirq) + { + return; + } + + map = pirq->msi_desc->priv; + + rt_memset(&cmd, 0, sizeof(cmd)); + its_encode_cmd(&cmd, GITS_CMD_DISCARD); + its_encode_device_id(&cmd, map->device_id); + its_encode_event_id(&cmd, its_pirq_event_id(its, pirq)); + its_cmd_submit(its, &cmd, map, RT_TRUE); + + rt_pic_uncascade(pirq); + + level = rt_spin_lock_irqsave(&lpis_lock); + rt_bitmap_clear_bit(lpis_vectors, pirq->hwirq - 8192); + rt_spin_unlock_irqrestore(&lpis_lock, level); + + rt_ref_put(&map->ref, its_map_release); +} + +static rt_err_t gicv3_its_irq_set_state(struct rt_pic *pic, int hwirq, int type, rt_bool_t state) +{ + struct its_map *map; + struct its_command cmd; + struct rt_pic_irq *pirq; + struct gicv3_its *its = raw_to_gicv3_its(pic); + + if (type != RT_IRQ_STATE_PENDING || hwirq > 8192 + lpi_nr) + { + return -RT_ENOSYS; + } + + if (!(pirq = rt_pic_find_irq(pic, hwirq - 8192))) + { + return -RT_ENOSYS; + } + + map = pirq->msi_desc->priv; + rt_memset(&cmd, 0, sizeof(cmd)); + + if (state) + { + its_encode_cmd(&cmd, GITS_CMD_INT); + its_encode_device_id(&cmd, map->device_id); + its_encode_event_id(&cmd, its_pirq_event_id(its, pirq)); + } + else + { + its_encode_cmd(&cmd, GITS_CMD_CLEAR); + its_encode_device_id(&cmd, map->device_id); + its_encode_event_id(&cmd, its_pirq_event_id(its, pirq)); + } + + its_cmd_submit(its, &cmd, map, RT_TRUE); + + return RT_EOK; +} + +const static struct rt_pic_ops gicv3_its_ops = +{ + .name = "GICv3-ITS", + .irq_init = gicv3_its_irq_init, + .irq_ack = rt_pic_irq_parent_ack, + .irq_mask = gicv3_its_irq_mask, + .irq_unmask = gicv3_its_irq_unmask, + .irq_eoi = rt_pic_irq_parent_eoi, + .irq_set_priority = gicv3_its_irq_set_priority, + .irq_set_affinity = gicv3_its_irq_set_affinity, + .irq_compose_msi_msg = gicv3_its_irq_compose_msi_msg, + .irq_alloc_msi = gicv3_its_irq_alloc_msi, + .irq_free_msi = gicv3_its_irq_free_msi, + .irq_set_state = gicv3_its_irq_set_state, + .flags = RT_PIC_F_IRQ_ROUTING, +}; + +static rt_ssize_t its_baser_page_size(struct gicv3_its *its, struct its_table *tbl) +{ + rt_size_t page_size = 64 * SIZE_KB; + + while (page_size) + { + rt_uint64_t val, baser_page_size; + rt_off_t baser = GITS_BASERn((int)(tbl - its->tbls)); + + val = its_readq(its, baser); + val &= ~GITS_BASER_PAGE_SIZE_MASK; + + switch (page_size) + { + case 64 * SIZE_KB: + baser_page_size = GITS_BASER_PAGE_SIZE_64K; + break; + case 16 * SIZE_KB: + baser_page_size = GITS_BASER_PAGE_SIZE_16K; + break; + case 4 * SIZE_KB: + default: + baser_page_size = GITS_BASER_PAGE_SIZE_4K; + break; + } + + baser_page_size >>= GITS_BASER_PAGE_SIZE_SHIFT; + + val |= RT_FIELD_PREP(GITS_BASER_PAGE_SIZE_MASK, baser_page_size); + its_writeq(its, baser, val); + tbl->val = its_readq(its, baser); + + if (RT_FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, tbl->val) == baser_page_size) + { + break; + } + + switch (page_size) + { + case 64 * SIZE_KB: + page_size = 16 * SIZE_KB; + break; + case 16 * SIZE_KB: + page_size = 4 * SIZE_KB; + break; + case 4 * SIZE_KB: + default: + return -RT_EINVAL; + } + } + + return page_size; +} + +static rt_err_t its_table_init(struct gicv3_its *its) +{ + int inited = 0; + rt_off_t baser; + rt_bool_t indirect = RT_FALSE; + rt_size_t pages_nr, alloc_size; + rt_uint64_t val, type, entry_size, share, cache; + struct its_table *tbl; + + share = GITS_BASER_InnerShareable; + cache = GITS_BASER_RaWaWb; + + for (int i = 0; i < RT_ARRAY_SIZE(its->tbls); ++i) + { + tbl = &its->tbls[i]; + + val = its_readq(its, GITS_BASERn(i)); + type = GITS_BASER_TYPE(val); + + if (type != GITS_BASER_TYPE_DEVICE && + type != GITS_BASER_TYPE_COLLECTION) + { + continue; + } + + tbl->page_size = its_baser_page_size(its, tbl); + + if (tbl->page_size < 0) + { + continue; + } + + baser = GITS_BASERn((int)(tbl - its->tbls)); + entry_size = GITS_BASER_ENTRY_SIZE(val); + + if (type == GITS_BASER_TYPE_DEVICE) + { + tbl->size_bits = its_device_id_bits(its); + LOG_D("Device Max IDs = %lu", 1UL << tbl->size_bits); + + /* For MSI-X */ + tbl->itt_entries = 2048; + while (MAX_HANDLERS / tbl->itt_entries < (1 << tbl->size_bits) && + tbl->itt_entries > 32) + { + tbl->itt_entries >>= 1; + } + } + + its_writeq(its, baser, tbl->val | GITS_BASER_INDIRECT); + tbl->val = its_readq(its, baser); + + indirect = !!(tbl->val & GITS_BASER_INDIRECT); + if (indirect && type == GITS_BASER_TYPE_DEVICE) + { + /* The size of the level 2 table is equal to ITS page size */ + tbl->lvl2_bits = tbl->size_bits - rt_ilog2(tbl->page_size / (int)entry_size); + + /* Get level 1 entries count */ + alloc_size = (1 << tbl->size_bits) / (tbl->page_size / entry_size); + alloc_size *= GITS_LVL1_ENTRY_SIZE; + } + else + { + alloc_size = (1 << tbl->size_bits) * entry_size; + indirect = RT_FALSE; + } + + tbl->base = rt_malloc_align(alloc_size, tbl->page_size); + pages_nr = alloc_size / tbl->page_size; + + if (!tbl->base) + { + return -RT_ENOMEM; + } + + if (its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_22375) + { + cache = GITS_BASER_nCnB; + } + + if (its->flags & ITS_FLAGS_FORCE_NON_SHAREABLE) + { + cache = GITS_BASER_nC; + share = 0; + } + + val = ((rt_ubase_t)rt_kmem_v2p(tbl->base) | + (type << GITS_BASER_TYPE_SHIFT) | + ((entry_size - 1) << GITS_BASER_ENTRY_SIZE_SHIFT) | + (pages_nr << GITS_BASER_PAGES_SHIFT) | + cache | share | GITS_BASER_VALID); + val |= indirect ? GITS_BASER_INDIRECT : 0; + + switch (tbl->page_size) + { + case 4 * SIZE_KB: + val |= GITS_BASER_PAGE_SIZE_4K; + break; + case 16 * SIZE_KB: + val |= GITS_BASER_PAGE_SIZE_16K; + break; + case 64 * SIZE_KB: + val |= GITS_BASER_PAGE_SIZE_64K; + break; + } + + its_writeq(its, baser, val); + tbl->val = its_readq(its, baser); + + rt_memset(tbl->base, 0, alloc_size); + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, tbl->base, alloc_size); + + cache = tbl->val & GITS_BASER_INNER_MASK_ALL; + share = tbl->val & GITS_BASER_SHARE_MASK_ALL; + + ++inited; + } + + return inited == 2 ? RT_EOK : -RT_ENOSYS; +} + +static rt_err_t its_cmd_queue_init(struct gicv3_its *its) +{ + void *cmd_phy_base; + rt_uint64_t baser, tmp; + + its->cmd_base = rt_malloc_align(ITS_CMD_QUEUE_SIZE, ITS_CMD_QUEUE_ALIGN); + + if (!its->cmd_base) + { + return -RT_ENOMEM; + } + + its->cmd_idx = 0; + rt_memset(its->cmd_base, 0, ITS_CMD_QUEUE_SIZE); + + cmd_phy_base = rt_kmem_v2p(its->cmd_base); + + baser = GITS_CBASER_VALID | GITS_CBASER_RaWaWb | GITS_CBASER_InnerShareable | \ + ((rt_uint64_t)cmd_phy_base) | (ITS_CMD_QUEUE_SIZE / (4 * SIZE_KB) - 1); + + its_writeq(its, GITS_CBASER, baser); + tmp = its_readq(its, GITS_CBASER); + + if (its->flags & ITS_FLAGS_FORCE_NON_SHAREABLE) + { + tmp &= ~GITS_CBASER_SHARE_MASK_ALL; + } + + if ((tmp ^ baser) & GITS_CBASER_SHARE_MASK_ALL) + { + if (!(tmp & GITS_CBASER_SHARE_MASK_ALL)) + { + /* The HW reports non-shareable, we must remove the cacheability attributes as well */ + baser &= ~(GITS_CBASER_SHARE_MASK_ALL | GITS_CBASER_INNER_MASK_ALL); + baser |= GITS_CBASER_nC; + + its_writeq(its, GITS_CBASER, baser); + } + + LOG_I("Using cache flushing for CMD queue"); + its->flags |= ITS_FLAGS_CMDQ_NEEDS_FLUSHING; + + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, its->cmd_base, ITS_CMD_QUEUE_SIZE); + } + + /* Get the next command from the start of the buffer */ + its_writeq(its, GITS_CWRITER, 0); + + return RT_EOK; +} + +static rt_err_t its_lpi_table_init(struct gicv3 *gic) +{ + rt_size_t lpi_table_size, lpi_pending_table_size; + rt_uint32_t numlpis = 1UL << GICD_TYPER_NUM_LPIS(gic->gicd_typer); + + if (HWREG32(gicr_rd_base_percpu(gic) + GICR_CTLR) & GICR_CTLR_ENABLE_LPIS) + { + gic->redist_flags |= RDIST_FLAGS_RD_TABLES_PREALLOCATED; + gic->redist_flags |= RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING; + + LOG_I("Using preallocated redistributor tables"); + } + + lpi_id_bits = GICD_TYPER_ID_BITS(gic->gicd_typer); + + if (gic->redist_flags & RDIST_FLAGS_RD_TABLES_PREALLOCATED) + { + rt_uint64_t val = HWREG64(gicr_rd_base_percpu(gic) + GICR_PROPBASER); + lpi_id_bits = rt_min_t(rt_uint32_t, lpi_id_bits, (val & GICR_PROPBASER_IDBITS_MASK) + 1); + } + + lpi_nr = rt_min_t(rt_size_t, (1UL << lpi_id_bits) - 8192, gic->lpi_nr); + lpi_id_bits = __rt_clz(lpi_nr + 8192); + + if (numlpis > 2 && numlpis > lpi_nr) + { + lpi_nr = numlpis; + LOG_W("Using hypervisor restricted LPI range [%u]", lpi_nr); + } + + gic->lpi_nr = lpi_nr; + + /* LPI Configuration table entry is 1 byte, Pending table bytes is N / 8. */ + lpi_table_size = RT_GENMASK(lpi_id_bits, 0); + lpi_pending_table_size = lpi_table_size / 8; + + lpi_table = rt_malloc_align(lpi_table_size, ITS_LPI_CONFIG_TABLE_ALIGN); + lpi_pending_table = rt_malloc_align(lpi_pending_table_size, ITS_LPI_PENDING_TABLE_ALIGN); + lpis_vectors = rt_calloc(1, RT_BITMAP_LEN(lpi_nr) * sizeof(rt_bitmap_t)); + + if (!lpi_table || !lpi_pending_table || !lpis_vectors) + { + if (lpi_table) + { + rt_free_align(lpi_table); + } + if (lpi_pending_table) + { + rt_free_align(lpi_pending_table); + } + if (lpis_vectors) + { + rt_free_align(lpis_vectors); + } + + lpi_table = RT_NULL; + lpi_pending_table = RT_NULL; + lpis_vectors = RT_NULL; + + return -RT_ENOMEM; + } + + /* Set the default configuration */ + rt_memset(lpi_table, ITS_LPI_CONFIG_PROP_DEFAULT_PRIO | GITS_LPI_CFG_GROUP1, lpi_table_size); + /* + * We should make a full mask size with lpi_id_bits, + * otherwise 'undefined' LPI will occur. + */ + rt_memset(lpi_pending_table, 0, lpi_pending_table_size); + + /* Flush the table to memory */ + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, lpi_table, lpi_table_size); + rt_hw_cpu_dcache_ops(RT_HW_CACHE_FLUSH, lpi_pending_table, lpi_pending_table_size); + + LOG_D("ITS: Allocator initialized for %u LPIs", lpi_nr); + + return RT_EOK; +} + +static void its_init_fail(struct gicv3_its *its) +{ + if (its->base) + { + rt_iounmap(its->base); + } + + if (its->cmd_base) + { + rt_free_align(its->cmd_base); + } + + for (int i = 0; i < RT_ARRAY_SIZE(its->tbls); ++i) + { + struct its_table *tbl = &its->tbls[i]; + + if (tbl->base) + { + rt_free_align(tbl->base); + } + } + + rt_list_remove(&its->list); + rt_free(its); +} + +static rt_err_t its_quirk_cavium_22375(void *data) +{ + struct gicv3_its *its = data; + + its->flags |= ITS_FLAGS_WORKAROUND_CAVIUM_22375; + + return RT_EOK; +} + +static rt_err_t its_enable_rockchip(void *data) +{ + struct gicv3_its *its = data; + struct gicv3 *gic = its->gic; + + if (!rt_ofw_machine_is_compatible("rockchip,rk3566") && + !rt_ofw_machine_is_compatible("rockchip,rk3567") && + !rt_ofw_machine_is_compatible("rockchip,rk3568") && + !rt_ofw_machine_is_compatible("rockchip,rk3588") && + !rt_ofw_machine_is_compatible("rockchip,rk3588s")) + { + return -RT_EINVAL; + } + + its->flags |= ITS_FLAGS_FORCE_NON_SHAREABLE; + gic->redist_flags |= RDIST_FLAGS_FORCE_NON_SHAREABLE; + + return RT_EOK; +} + +static rt_err_t its_set_non_coherent(void *data) +{ + struct gicv3_its *its = data; + + if (!rt_ofw_prop_read_bool(its->np, "dma-noncoherent")) + { + return -RT_EINVAL; + } + + its->flags |= ITS_FLAGS_FORCE_NON_SHAREABLE; + + return RT_EOK; +} + +static const struct gic_quirk _its_quirks[] = +{ + { + .desc = "ITS: Cavium ThunderX errata: 22375, 24313", + .iidr = 0xa100034c, + .iidr_mask = 0xffff0fff, + .init = its_quirk_cavium_22375, + }, + { + .desc = "ITS: Rockchip erratum RK3566 ~ RK3588", + .iidr = 0x0201743b, + .iidr_mask = 0xffffffff, + .init = its_enable_rockchip, + }, + { + .desc = "ITS: non-coherent attribute", + .compatible = "arm,gic-v3-its", + .init = its_set_non_coherent, + }, + { /* sentinel */ } +}; + +static const struct rt_ofw_node_id gicv3_its_ofw_match[] = +{ + { .compatible = "arm,gic-v3-its" }, + { /* sentinel */ } +}; + +rt_err_t gicv3_its_ofw_probe(struct rt_ofw_node *np, const struct rt_ofw_node_id *id) +{ + rt_err_t err = -RT_EEMPTY; + struct rt_ofw_node *its_np; + struct gicv3_its *its, *its_next; + + rt_ofw_foreach_available_child_node(np, its_np) + { + if (!rt_ofw_node_match(its_np, gicv3_its_ofw_match)) + { + continue; + } + + if (!rt_ofw_prop_read_bool(its_np, "msi-controller")) + { + continue; + } + + if (!(its = rt_calloc(1, sizeof(struct gicv3_its)))) + { + rt_ofw_node_put(its_np); + + err = -RT_ENOMEM; + goto _free_all; + } + + its->base = rt_ofw_iomap(its_np, 0); + + if (!its->base) + { + LOG_E("%s: IO map failed", rt_ofw_node_full_name(its_np)); + its_init_fail(its); + continue; + } + + /* + * Make sure ALL the ITS are reset before we probe any, + * as they may be sharing memory + */ + for (int i = 0; i < GITS_BASER_NR_REGS; ++i) + { + its_writeq(its, GITS_BASER + (i << 3), 0); + } + + its->np = its_np; + rt_list_init(&its->list); + rt_list_insert_before(&its_nodes, &its->list); + } + + if (!rt_list_isempty(&its_nodes)) + { + if ((err = its_lpi_table_init(rt_ofw_data(np)))) + { + goto _free_all; + } + } + + rt_list_for_each_entry_safe(its, its_next, &its_nodes, list) + { + rt_uint32_t ctlr; + + its->base_phy = rt_kmem_v2p(its->base); + its->gic = rt_ofw_data(np); + + gic_common_init_quirk_hw(HWREG32(its->base + GITS_IIDR), _its_quirks, its); + gic_common_init_quirk_ofw(its->np, _its_quirks, its); + + if ((err = its_cmd_queue_init(its))) + { + goto _fail; + } + rt_spin_lock_init(&its->cmd_lock); + + if ((err = its_table_init(its))) + { + goto _fail; + } + + for (int i = 0; i < RT_CPUS_NR; ++i) + { + its->collections[i].target_address = ~0ULL; + } + + ctlr = its_readl(its, GITS_CTLR); + ctlr |= GITS_CTLR_ENABLE; + its_writel(its, GITS_CTLR, ctlr); + + its->parent.priv_data = its; + its->parent.ops = &gicv3_its_ops; + + rt_pic_linear_irq(&its->parent, its->gic->lpi_nr); + rt_pic_user_extends(&its->parent); + + its_np = its->np; + rt_ofw_data(its_np) = &its->parent; + rt_ofw_node_set_flag(its_np, RT_OFW_F_READLY); + + continue; + + _fail: + its_init_fail(its); + + if (err == -RT_ENOMEM) + { + break; + } + } + + if (rt_list_isempty(&its_nodes) && lpis_vectors) + { + rt_free(lpis_vectors); + rt_free_align(lpi_table); + rt_free_align(lpi_pending_table); + lpis_vectors = RT_NULL; + } + + return err; + +_free_all: + rt_list_for_each_entry_safe(its, its_next, &its_nodes, list) + { + rt_free(its); + rt_list_remove(&its->list); + } + + return err; +} diff --git a/components/drivers/pic/pic-gicv3.c b/components/drivers/pic/pic-gicv3.c index c5e4bc780b8..cb8e0388e47 100644 --- a/components/drivers/pic/pic-gicv3.c +++ b/components/drivers/pic/pic-gicv3.c @@ -266,20 +266,25 @@ static void gicv3_dist_init(void) HWREG64(base + GICD_IROUTERnE + i * 8) = affinity; } - if (GICD_TYPER_NUM_LPIS(_gic.gicd_typer)) + if (GICD_TYPER_NUM_LPIS(_gic.gicd_typer) > 1) { /* Max LPI = 8192 + Math.pow(2, num_LPIs + 1) - 1 */ - rt_size_t num_lpis = (1 << (GICD_TYPER_NUM_LPIS(_gic.gicd_typer) + 1)) + 1; + rt_size_t num_lpis = 1UL << (GICD_TYPER_NUM_LPIS(_gic.gicd_typer) + 1); - _gic.lpi_nr = rt_min_t(int, num_lpis, 1 << GICD_TYPER_ID_BITS(_gic.gicd_typer)); + _gic.lpi_nr = rt_min_t(int, num_lpis, 1UL << GICD_TYPER_ID_BITS(_gic.gicd_typer)); } else { - _gic.lpi_nr = 1 << GICD_TYPER_ID_BITS(_gic.gicd_typer); + _gic.lpi_nr = 1UL << GICD_TYPER_ID_BITS(_gic.gicd_typer); } /* SPI + eSPI + LPIs */ - _gic.irq_nr = _gic.line_nr - 32 + _gic.espi_nr + _gic.lpi_nr; + _gic.irq_nr = _gic.line_nr - 32 + _gic.espi_nr; +#ifdef RT_PIC_ARM_GIC_V3_ITS + /* ITS will allocate the same number of lpi PIRQs */ + _gic.lpi_nr = rt_min_t(rt_size_t, RT_PIC_ARM_GIC_V3_ITS_IRQ_MAX, _gic.lpi_nr); + _gic.irq_nr += _gic.lpi_nr; +#endif } static void gicv3_redist_enable(rt_bool_t enable) @@ -389,6 +394,8 @@ static void gicv3_cpu_init(void) int cpu_id = rt_hw_cpu_id(); #ifdef ARCH_SUPPORT_HYP _gicv3_eoi_mode_ns = RT_TRUE; +#else + _gicv3_eoi_mode_ns = !!rt_ofw_bootargs_select("pic.gicv3_eoimode", 0); #endif base = gicv3_percpu_redist_sgi_base(); @@ -700,6 +707,7 @@ static int gicv3_irq_map(struct rt_pic *pic, int hwirq, rt_uint32_t mode) if (pirq && hwirq >= GIC_SGI_NR) { pirq->mode = mode; + pirq->priority = GICD_INT_DEF_PRI; switch (gicv3_hwirq_type(hwirq)) { @@ -708,7 +716,6 @@ static int gicv3_irq_map(struct rt_pic *pic, int hwirq, rt_uint32_t mode) break; case SPI_TYPE: case ESPI_TYPE: - pirq->priority = GICD_INT_DEF_PRI; RT_IRQ_AFFINITY_SET(pirq->affinity, _init_cpu_id); default: break; @@ -823,7 +830,18 @@ static rt_bool_t gicv3_handler(void *data) } else { - pirq = rt_pic_find_irq(&gic->parent, hwirq - GIC_SGI_NR); + int irq_index; + + if (hwirq < 8192) + { + irq_index = hwirq - GIC_SGI_NR; + } + else + { + irq_index = gic->irq_nr - gic->lpi_nr + hwirq - 8192; + } + + pirq = rt_pic_find_irq(&gic->parent, irq_index); } gicv3_irq_ack(pirq); diff --git a/components/drivers/pic/pic-gicv3.h b/components/drivers/pic/pic-gicv3.h index 6046d9b4318..dcd64d65824 100644 --- a/components/drivers/pic/pic-gicv3.h +++ b/components/drivers/pic/pic-gicv3.h @@ -12,8 +12,8 @@ * 2023-02-01 GuEe-GUI move macros to header */ -#ifndef __IRQ_GICV3_H__ -#define __IRQ_GICV3_H__ +#ifndef __PIC_GICV3_H__ +#define __PIC_GICV3_H__ #include @@ -101,6 +101,8 @@ #define GICR_CTLR_IR (1UL << 2) #define GICR_CTLR_RWP (1UL << 3) +#define GICR_TYPER_CPU_NO(r) (((r) >> 8) & 0xffff) + #define GICR_RD_BASE_SIZE (64 * SIZE_KB) #define GICR_SGI_OFFSET (64 * SIZE_KB) #define GICR_SGI_BASE_SIZE GICR_SGI_OFFSET @@ -152,66 +154,142 @@ #define GITS_CTLR 0x0000 #define GITS_IIDR 0x0004 #define GITS_TYPER 0x0008 -#define GITS_MPAMIDR 0x0010 -#define GITS_PARTIDR 0x0014 #define GITS_MPIDR 0x0018 -#define GITS_STATUSR 0x0040 -#define GITS_UMSIR 0x0048 -#define GITS_CBASER 0x0048 +#define GITS_CBASER 0x0080 #define GITS_CWRITER 0x0088 #define GITS_CREADR 0x0090 -#define GITS_BASER 0x0100 /* 0x0100~0x0138 */ +#define GITS_BASER 0x0100 +#define GITS_IDREGS_BASE 0xffd0 +#define GITS_PIDR0 0xffe0 +#define GITS_PIDR1 0xffe4 +#define GITS_PIDR2 GICR_PIDR2 +#define GITS_PIDR4 0xffd0 +#define GITS_CIDR0 0xfff0 +#define GITS_CIDR1 0xfff4 +#define GITS_CIDR2 0xfff8 +#define GITS_CIDR3 0xfffc + +#define GITS_TRANSLATER 0x10040 + +#define GITS_SGIR 0x20020 + +#define GITS_SGIR_VPEID RT_GENMASK_ULL(47, 32) +#define GITS_SGIR_VINTID RT_GENMASK_ULL(3, 0) + +#define GITS_CTLR_ENABLE (1U << 0) +#define GITS_CTLR_ImDe (1U << 1) +#define GITS_CTLR_ITS_NUMBER_SHIFT 4 +#define GITS_CTLR_ITS_NUMBER (0xFU << GITS_CTLR_ITS_NUMBER_SHIFT) +#define GITS_CTLR_QUIESCENT (1U << 31) + +#define GITS_TYPER_PLPIS (1UL << 0) +#define GITS_TYPER_VLPIS (1UL << 1) +#define GITS_TYPER_ITT_ENTRY_SIZE_SHIFT 4 +#define GITS_TYPER_ITT_ENTRY_SIZE RT_GENMASK_ULL(7, 4) +#define GITS_TYPER_IDBITS_SHIFT 8 +#define GITS_TYPER_DEVBITS_SHIFT 13 +#define GITS_TYPER_DEVBITS RT_GENMASK_ULL(17, 13) +#define GITS_TYPER_PTA (1UL << 19) +#define GITS_TYPER_HCC_SHIFT 24 +#define GITS_TYPER_HCC(r) (((r) >> GITS_TYPER_HCC_SHIFT) & 0xff) +#define GITS_TYPER_VMOVP (1ULL << 37) +#define GITS_TYPER_VMAPP (1ULL << 40) +#define GITS_TYPER_SVPET RT_GENMASK_ULL(42, 41) /* * ITS commands */ -#define GITS_CMD_MAPD 0x08 -#define GITS_CMD_MAPC 0x09 -#define GITS_CMD_MAPTI 0x0a -#define GITS_CMD_MAPI 0x0b -#define GITS_CMD_MOVI 0x01 -#define GITS_CMD_DISCARD 0x0f -#define GITS_CMD_INV 0x0c -#define GITS_CMD_MOVALL 0x0e -#define GITS_CMD_INVALL 0x0d -#define GITS_CMD_INT 0x03 -#define GITS_CMD_CLEAR 0x04 -#define GITS_CMD_SYNC 0x05 +#define GITS_CMD_MAPD 0x08 +#define GITS_CMD_MAPC 0x09 +#define GITS_CMD_MAPTI 0x0a +#define GITS_CMD_MAPI 0x0b +#define GITS_CMD_MOVI 0x01 +#define GITS_CMD_DISCARD 0x0f +#define GITS_CMD_INV 0x0c +#define GITS_CMD_MOVALL 0x0e +#define GITS_CMD_INVALL 0x0d +#define GITS_CMD_INT 0x03 +#define GITS_CMD_CLEAR 0x04 +#define GITS_CMD_SYNC 0x05 /* ITS Config Area */ -#define GITS_LPI_CFG_GROUP1 (1 << 1) -#define GITS_LPI_CFG_ENABLED (1 << 0) +#define GITS_LPI_CFG_GROUP1 (1 << 1) +#define GITS_LPI_CFG_ENABLED (1 << 0) /* ITS Command Queue Descriptor */ +#define GITS_BASER_SHAREABILITY_SHIFT 10 +#define GITS_BASER_INNER_CACHEABILITY_SHIFT 59 +#define GITS_BASER_OUTER_CACHEABILITY_SHIFT 53 #define GITS_CBASER_VALID (1UL << 63) -#define GITS_CBASER_SHAREABILITY_SHIFT (10) -#define GITS_CBASER_INNER_CACHEABILITY_SHIFT (59) -#define GITS_CBASER_OUTER_CACHEABILITY_SHIFT (53) - -#define GITS_TRANSLATION_TABLE_DESCRIPTORS_NR 8 +#define GITS_CBASER_SHAREABILITY_SHIFT 10 +#define GITS_CBASER_INNER_CACHEABILITY_SHIFT 59 +#define GITS_CBASER_OUTER_CACHEABILITY_SHIFT 53 +#define GICR_PBASER_SHAREABILITY_SHIFT 10 +#define GICR_PBASER_INNER_CACHEABILITY_SHIFT 7 +#define GICR_PBASER_OUTER_CACHEABILITY_SHIFT 56 + +#define GITS_BASER_NR_REGS 8 +#define GITS_BASERn(idx) (GITS_BASER + sizeof(rt_uint64_t) * idx) + +#define GITS_BASER_VALID (1ULL << 63) +#define GITS_BASER_INDIRECT (1ULL << 62) +#define GITS_BASER_TYPE_SHIFT 56 +#define GITS_BASER_TYPE(r) (((r) >> GITS_BASER_TYPE_SHIFT) & 7) +#define GITS_BASER_ENTRY_SIZE_SHIFT 48 +#define GITS_BASER_ENTRY_SIZE(r) ((((r) >> GITS_BASER_ENTRY_SIZE_SHIFT) & 0x1f) + 1) +#define GITS_BASER_PAGE_SIZE_SHIFT 8 +#define GITS_BASER_PAGE_SIZE_4K (0ULL << GITS_BASER_PAGE_SIZE_SHIFT) +#define GITS_BASER_PAGE_SIZE_16K (1ULL << GITS_BASER_PAGE_SIZE_SHIFT) +#define GITS_BASER_PAGE_SIZE_64K (2ULL << GITS_BASER_PAGE_SIZE_SHIFT) +#define GITS_BASER_PAGE_SIZE_MASK (3ULL << GITS_BASER_PAGE_SIZE_SHIFT) +#define GITS_BASER_PAGES_SHIFT 0 + +#define GITS_LVL1_ENTRY_SIZE 8UL + +#define GITS_BASER_TYPE_NONE 0 +#define GITS_BASER_TYPE_DEVICE 1 +#define GITS_BASER_TYPE_VPE 2 +#define GITS_BASER_TYPE_RESERVED3 3 +#define GITS_BASER_TYPE_COLLECTION 4 +#define GITS_BASER_TYPE_RESERVED5 5 +#define GITS_BASER_TYPE_RESERVED6 6 +#define GITS_BASER_TYPE_RESERVED7 7 #define GITS_BASER_CACHEABILITY(reg, inner_outer, type) \ - (GITS_CBASER_CACHE_##type << reg##_##inner_outer##_CACHEABILITY_SHIFT) + (GIC_BASER_CACHE_##type << reg##_##inner_outer##_CACHEABILITY_SHIFT) #define GITS_BASER_SHAREABILITY(reg, type) \ - (GITS_CBASER_##type << reg##_SHAREABILITY_SHIFT) - -#define GITS_CBASER_CACHE_DnGnRnE 0x0UL /* Device-nGnRnE. */ -#define GITS_CBASER_CACHE_NIN 0x1UL /* Normal Inner Non-cacheable. */ -#define GITS_CBASER_CACHE_NIRAWT 0x2UL /* Normal Inner Cacheable Read-allocate, Write-through. */ -#define GITS_CBASER_CACHE_NIRAWB 0x3UL /* Normal Inner Cacheable Read-allocate, Write-back. */ -#define GITS_CBASER_CACHE_NIWAWT 0x4UL /* Normal Inner Cacheable Write-allocate, Write-through. */ -#define GITS_CBASER_CACHE_NIWAWB 0x5UL /* Normal Inner Cacheable Write-allocate, Write-back. */ -#define GITS_CBASER_CACHE_NIRAWAWT 0x6UL /* Normal Inner Cacheable Read-allocate, Write-allocate, Write-through. */ -#define GITS_CBASER_CACHE_NIRAWAWB 0x7UL /* Normal Inner Cacheable Read-allocate, Write-allocate, Write-back. */ -#define GITS_CBASER_CACHE_MASK 0x7UL -#define GITS_CBASER_SHARE_NS 0x0UL /* Non-shareable. */ -#define GITS_CBASER_SHARE_IS 0x1UL /* Inner Shareable. */ -#define GITS_CBASER_SHARE_OS 0x2UL /* Outer Shareable. */ -#define GITS_CBASER_SHARE_RES 0x3UL /* Reserved. Treated as 0b00 */ -#define GITS_CBASER_SHARE_MASK 0x3UL + (GIC_BASER_##type << reg##_SHAREABILITY_SHIFT) + +#define GIC_BASER_CACHE_DnGnRnE 0x0UL /* Device-nGnRnE. */ +#define GIC_BASER_CACHE_NIN 0x1UL /* Normal Inner Non-cacheable. */ +#define GIC_BASER_CACHE_NIRAWT 0x2UL /* Normal Inner Cacheable Read-allocate, Write-through. */ +#define GIC_BASER_CACHE_NIRAWB 0x3UL /* Normal Inner Cacheable Read-allocate, Write-back. */ +#define GIC_BASER_CACHE_NIWAWT 0x4UL /* Normal Inner Cacheable Write-allocate, Write-through. */ +#define GIC_BASER_CACHE_NIWAWB 0x5UL /* Normal Inner Cacheable Write-allocate, Write-back. */ +#define GIC_BASER_CACHE_NIRAWAWT 0x6UL /* Normal Inner Cacheable Read-allocate, Write-allocate, Write-through. */ +#define GIC_BASER_CACHE_NIRAWAWB 0x7UL /* Normal Inner Cacheable Read-allocate, Write-allocate, Write-back. */ +#define GIC_BASER_CACHE_MASK 0x7UL +#define GIC_BASER_SHARE_NS 0x0UL /* Non-shareable. */ +#define GIC_BASER_SHARE_IS 0x1UL /* Inner Shareable. */ +#define GIC_BASER_SHARE_OS 0x2UL /* Outer Shareable. */ +#define GIC_BASER_SHARE_RES 0x3UL /* Reserved. Treated as 0b00 */ +#define GIC_BASER_SHARE_MASK 0x3UL + +#define GITS_BASER_InnerShareable GITS_BASER_SHAREABILITY(GITS_BASER, SHARE_IS) +#define GITS_BASER_SHARE_MASK_ALL GITS_BASER_SHAREABILITY(GITS_BASER, SHARE_MASK) +#define GITS_BASER_INNER_MASK_ALL GITS_BASER_CACHEABILITY(GITS_BASER, INNER, MASK) +#define GITS_BASER_nCnB GITS_BASER_CACHEABILITY(GITS_BASER, INNER, DnGnRnE) +#define GITS_BASER_nC GITS_BASER_CACHEABILITY(GITS_BASER, INNER, NIN) +#define GITS_BASER_RaWt GITS_BASER_CACHEABILITY(GITS_BASER, INNER, NIRAWT) +#define GITS_BASER_RaWb GITS_BASER_CACHEABILITY(GITS_BASER, INNER, NIRAWB) +#define GITS_BASER_WaWt GITS_BASER_CACHEABILITY(GITS_BASER, INNER, NIWAWT) +#define GITS_BASER_WaWb GITS_BASER_CACHEABILITY(GITS_BASER, INNER, NIWAWB) +#define GITS_BASER_RaWaWt GITS_BASER_CACHEABILITY(GITS_BASER, INNER, NIRAWAWT) +#define GITS_BASER_RaWaWb GITS_BASER_CACHEABILITY(GITS_BASER, INNER, NIRAWAWB) #define GITS_CBASER_InnerShareable GITS_BASER_SHAREABILITY(GITS_CBASER, SHARE_IS) #define GITS_CBASER_SHARE_MASK_ALL GITS_BASER_SHAREABILITY(GITS_CBASER, SHARE_MASK) +#define GITS_CBASER_INNER_MASK_ALL GITS_BASER_CACHEABILITY(GITS_CBASER, INNER, MASK) #define GITS_CBASER_nCnB GITS_BASER_CACHEABILITY(GITS_CBASER, INNER, DnGnRnE) #define GITS_CBASER_nC GITS_BASER_CACHEABILITY(GITS_CBASER, INNER, NIN) #define GITS_CBASER_RaWt GITS_BASER_CACHEABILITY(GITS_CBASER, INNER, NIRAWT) @@ -221,6 +299,18 @@ #define GITS_CBASER_RaWaWt GITS_BASER_CACHEABILITY(GITS_CBASER, INNER, NIRAWAWT) #define GITS_CBASER_RaWaWb GITS_BASER_CACHEABILITY(GITS_CBASER, INNER, NIRAWAWB) +#define GICR_PBASER_InnerShareable GITS_BASER_SHAREABILITY(GICR_PBASER, SHARE_IS) +#define GICR_PBASER_SHARE_MASK_ALL GITS_BASER_SHAREABILITY(GICR_PBASER, SHARE_MASK) +#define GICR_PBASER_INNER_MASK_ALL GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, MASK) +#define GICR_PBASER_nCnB GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, DnGnRnE) +#define GICR_PBASER_nC GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, NIN) +#define GICR_PBASER_RaWt GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, NIRAWT) +#define GICR_PBASER_RaWb GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, NIRAWB) +#define GICR_PBASER_WaWt GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, NIWAWT) +#define GICR_PBASER_WaWb GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, NIWAWB) +#define GICR_PBASER_RaWaWt GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, NIRAWAWT) +#define GICR_PBASER_RaWaWb GITS_BASER_CACHEABILITY(GICR_PBASER, INNER, NIRAWAWB) + #define GIC_EPPI_BASE_INTID 1056 #define GIC_ESPI_BASE_INTID 4096 @@ -283,6 +373,7 @@ struct gicv3 rt_size_t dist_size; void *redist_percpu_base[RT_CPUS_NR]; + rt_uint64_t redist_percpu_flags[RT_CPUS_NR]; rt_size_t percpu_ppi_nr[RT_CPUS_NR]; struct @@ -296,4 +387,4 @@ struct gicv3 rt_size_t redist_regions_nr; }; -#endif /* __IRQ_GICV3_H__ */ +#endif /* __PIC_GICV3_H__ */ From 992e79a0f8975657bf741d95d1faf4ab5c6f3ee3 Mon Sep 17 00:00:00 2001 From: zhao maosheng Date: Tue, 10 Sep 2024 16:21:19 +0800 Subject: [PATCH 20/54] optimize sal_bind --- components/net/sal/src/sal_socket.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/net/sal/src/sal_socket.c b/components/net/sal/src/sal_socket.c index a268c2dcebc..6cd2caeea39 100644 --- a/components/net/sal/src/sal_socket.c +++ b/components/net/sal/src/sal_socket.c @@ -679,7 +679,8 @@ int sal_bind(int socket, const struct sockaddr *name, socklen_t namelen) addr_un = (struct sockaddr_un *)name; - if ((addr_un->sa_family != AF_UNIX) && (addr_un->sa_family != AF_NETLINK)) +#define IS_INET_ADDR_FAMILY(_af) ((_af) == AF_INET) || ((_af) == AF_INET6) + if (IS_INET_ADDR_FAMILY(name->sa_family)) { /* bind network interface by ip address */ sal_sockaddr_to_ipaddr(name, &input_ipaddr); From 87906499a387101e2f5b04f36fba8a3d21f25a8c Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Tue, 4 Jun 2024 15:46:24 +0800 Subject: [PATCH 21/54] [DM/FDT] Fixup memory address reserved and translate in early 1.Fixup `fdt_reserved_memory_reg` loop time. 2.Fixup `rt_fdt_translate_address` cells value reader. Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/ofw/fdt.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/components/drivers/ofw/fdt.c b/components/drivers/ofw/fdt.c index b9e02e02e56..d1ee385f0f4 100644 --- a/components/drivers/ofw/fdt.c +++ b/components/drivers/ofw/fdt.c @@ -85,15 +85,15 @@ rt_uint64_t rt_fdt_translate_address(void *fdt, int nodeoffset, rt_uint64_t addr if (parent >= 0) { - ranges = fdt_getprop(fdt, nodeoffset, "ranges", &length); + ranges = fdt_getprop(fdt, parent, "ranges", &length); } if (ranges && length > 0) { - local.addr_cells = fdt_address_cells(fdt, nodeoffset); - local.size_cells = fdt_size_cells(fdt, nodeoffset); - cpu.addr_cells = fdt_io_addr_cells(fdt, nodeoffset); - cpu.size_cells = fdt_io_size_cells(fdt, nodeoffset); + local.addr_cells = fdt_address_cells(fdt, parent); + local.size_cells = fdt_size_cells(fdt, parent); + cpu.addr_cells = fdt_io_addr_cells(fdt, parent); + cpu.size_cells = fdt_io_size_cells(fdt, parent); group_len = local.addr_cells + cpu.addr_cells + local.size_cells; @@ -105,7 +105,7 @@ rt_uint64_t rt_fdt_translate_address(void *fdt, int nodeoffset, rt_uint64_t addr if (local.addr <= address && local.addr + local.size > address) { - ret += address - cpu.addr; + ret = address - local.addr + cpu.addr; break; } @@ -247,9 +247,9 @@ static rt_err_t fdt_reserved_memory_reg(int nodeoffset, const char *uname) rt_bool_t is_nomap = fdt_getprop(_fdt, nodeoffset, "no-map", RT_NULL) ? RT_TRUE : RT_FALSE; base = rt_fdt_translate_address(_fdt, nodeoffset, base); - rt_memblock_reserve_memory(uname, base, base + size, is_nomap); - len -= t_len; + rt_memblock_reserve_memory(fdt_get_name(_fdt, nodeoffset, RT_NULL), + base, base + size, is_nomap); } } } From 210cd71128f3b3208bab5ed3844c09e588f89711 Mon Sep 17 00:00:00 2001 From: Shell Date: Thu, 19 Sep 2024 15:06:03 +0800 Subject: [PATCH 22/54] fixup: pty: possible memory leaking on close() The ref_count of the vnode is NOT bound to the resource reference counts of the ptm device created by opening `dev/ptmx`, so the conditional release of resource may end up by memory leaking if the multiple user have open the `dev/ptmx`. Changes: - Removed conditional branch on recycling resource Signed-off-by: Shell --- components/lwp/terminal/tty_ptmx.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/components/lwp/terminal/tty_ptmx.c b/components/lwp/terminal/tty_ptmx.c index 8daebc099aa..371c27a26b0 100644 --- a/components/lwp/terminal/tty_ptmx.c +++ b/components/lwp/terminal/tty_ptmx.c @@ -27,7 +27,6 @@ static int ptm_fops_open(struct dfs_file *file) rt_uint32_t oflags = file->flags; rt_thread_t cur_thr = rt_thread_self(); - /* we don't check refcnt because each open will create a new device */ if (file->vnode && file->vnode->data) { /** @@ -62,16 +61,9 @@ static int ptm_fops_close(struct dfs_file *file) if (file->data) { - if (file->vnode->ref_count != 1) - { - rc = 0; - } - else - { - device = (rt_device_t)file->data; - tp = rt_container_of(device, struct lwp_tty, parent); - rc = bsd_ptsdev_methods.fo_close(tp, rt_thread_self()); - } + device = (rt_device_t)file->data; + tp = rt_container_of(device, struct lwp_tty, parent); + rc = bsd_ptsdev_methods.fo_close(tp, rt_thread_self()); } else { From 9a27de92ae86dd23581e8294fac95353c9eb0145 Mon Sep 17 00:00:00 2001 From: Shell Date: Sat, 14 Sep 2024 10:52:46 +0800 Subject: [PATCH 23/54] feat: smart: user space context optimization This patch optimizes the user-space context handling in the ARM64 architecture, specifically improving how the context is saved and restored during system calls and interrupts. The changes make the code more efficient and easier to maintain, while ensuring proper preservation of user context during system transitions. Changes: - Introduced a parameter for context saving to improve flexibility. - Replaced hardcoded stack pointer operations with frame-relative references for better readability and code reuse. - Simplified context restoration, removing redundant operations like loading/storing floating-point registers. Signed-off-by: Shell --- .../lwp/arch/aarch64/cortex-a/lwp_gcc.S | 256 +++++------------- libcpu/aarch64/common/include/vector_gcc.h | 46 ++++ libcpu/aarch64/common/up/context_gcc.h | 16 +- libcpu/aarch64/common/up/vector_gcc.S | 3 +- libcpu/aarch64/common/vector_gcc.S | 8 + 5 files changed, 135 insertions(+), 194 deletions(-) diff --git a/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S b/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S index 571f422a745..9c4b7ebe626 100644 --- a/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S +++ b/components/lwp/arch/aarch64/cortex-a/lwp_gcc.S @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -105,6 +106,7 @@ arch_get_user_sp: .global arch_clone_exit arch_fork_exit: arch_clone_exit: + mov x0, xzr b arch_syscall_exit /* @@ -131,12 +133,31 @@ START_POINT(SVC_Handler) /* x0 is initial sp */ mov sp, x0 + bl _SVC_Handler + + /* jump explictly, make this code position independant */ + b arch_syscall_exit +START_POINT_END(SVC_Handler) + +TRACE_SYMBOL(_SVC_Handler) +#define FRAME_REG x19 + +/** + * x0 -> frame_addr + */ +_SVC_Handler: + .local _SVC_Handler + + stp fp, lr, [sp, -16]! + mov fp, sp + + mov FRAME_REG, x0 /* save the value of frame address */ msr daifclr, #3 /* enable interrupt */ GET_THREAD_SELF x0 bl lwp_user_setting_save - ldp x8, x9, [sp, #(CONTEXT_OFFSET_X8)] + ldp x8, x9, [FRAME_REG, #(CONTEXT_OFFSET_X8)] and x0, x8, #0xf000 cmp x0, #0xe000 beq arch_signal_quit @@ -149,78 +170,46 @@ START_POINT(SVC_Handler) cmp x0, xzr mov x30, x0 beq arch_syscall_exit - ldp x0, x1, [sp, #(CONTEXT_OFFSET_X0)] - ldp x2, x3, [sp, #(CONTEXT_OFFSET_X2)] - ldp x4, x5, [sp, #(CONTEXT_OFFSET_X4)] - ldp x6, x7, [sp, #(CONTEXT_OFFSET_X6)] + ldp x0, x1, [FRAME_REG, #(CONTEXT_OFFSET_X0)] + ldp x2, x3, [FRAME_REG, #(CONTEXT_OFFSET_X2)] + ldp x4, x5, [FRAME_REG, #(CONTEXT_OFFSET_X4)] + ldp x6, x7, [FRAME_REG, #(CONTEXT_OFFSET_X6)] blr x30 - /* jump explictly, make this code position independant */ - b arch_syscall_exit -START_POINT_END(SVC_Handler) -.global arch_syscall_exit + ldp fp, lr, [sp], 16 + ret + +/** + * void arch_syscall_exit(long rc) + */ arch_syscall_exit: + .global arch_syscall_exit /** - * @brief back up former x0 which is required to restart syscall, then setup + * backup former x0 which is required to restart syscall, then setup * syscall return value in stack frame */ mov x1, sp bl arch_syscall_prepare_signal + /** + * disable local irq so we don't messup with the spsr_el1 witch is not saved + * for kernel space IRQ/EXCEPTION + */ msr daifset, #3 - ldp x2, x3, [sp], #0x10 /* SPSR and ELR. */ - msr spsr_el1, x3 - msr elr_el1, x2 - - ldp x29, x30, [sp], #0x10 - msr sp_el0, x29 - ldp x28, x29, [sp], #0x10 - msr fpcr, x28 - msr fpsr, x29 - ldp x28, x29, [sp], #0x10 - ldp x26, x27, [sp], #0x10 - ldp x24, x25, [sp], #0x10 - ldp x22, x23, [sp], #0x10 - ldp x20, x21, [sp], #0x10 - ldp x18, x19, [sp], #0x10 - ldp x16, x17, [sp], #0x10 - ldp x14, x15, [sp], #0x10 - ldp x12, x13, [sp], #0x10 - ldp x10, x11, [sp], #0x10 - ldp x8, x9, [sp], #0x10 - ldp x6, x7, [sp], #0x10 - ldp x4, x5, [sp], #0x10 - ldp x2, x3, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - RESTORE_FPU sp + b arch_ret_to_user /* the sp is reset to the outer most level, irq and fiq are disabled */ START_POINT(arch_ret_to_user) msr daifset, #3 - /* save exception frame */ - SAVE_FPU sp - stp x0, x1, [sp, #-0x10]! - stp x2, x3, [sp, #-0x10]! - stp x4, x5, [sp, #-0x10]! - stp x6, x7, [sp, #-0x10]! - stp x8, x9, [sp, #-0x10]! - stp x10, x11, [sp, #-0x10]! - stp x12, x13, [sp, #-0x10]! - stp x14, x15, [sp, #-0x10]! - stp x16, x17, [sp, #-0x10]! - stp x18, x19, [sp, #-0x10]! - stp x20, x21, [sp, #-0x10]! - stp x22, x23, [sp, #-0x10]! - stp x24, x25, [sp, #-0x10]! - stp x26, x27, [sp, #-0x10]! - stp x28, x29, [sp, #-0x10]! - - mrs x0, fpcr - mrs x1, fpsr - stp x0, x1, [sp, #-0x10]! - stp x29, x30, [sp, #-0x10]! + + ldr x2, [sp, #CONTEXT_OFFSET_SP_EL0] + msr sp_el0, x2 + ldr x2, [sp, #CONTEXT_OFFSET_ELR_EL1] + msr elr_el1, x2 + ldr x3, [sp, #CONTEXT_OFFSET_SPSR_EL1] + msr spsr_el1, x3 /* pre-action */ bl lwp_check_debug @@ -231,7 +220,8 @@ START_POINT(arch_ret_to_user) msr daifclr, #3 mov x0, xzr b sys_exit -1: + +1: /* handling dbg */ /* check if dbg ops exist */ ldr x0, =rt_dbg_ops ldr x0, [x0] @@ -243,104 +233,42 @@ START_POINT(arch_ret_to_user) orr x2, x2, x1 msr spsr_el1, x2 b 3f -2: +2: /* clear software step */ bic x2, x2, x1 msr spsr_el1, x2 -3: +3: /* handling signal */ /** - * push 2 dummy words to simulate a exception frame of interrupt - * Note: in kernel state, the context switch dont saved the context + * push updated spsr & elr to exception frame. + * Note: these 2 maybe updated after handling dbg */ mrs x0, spsr_el1 + str x0, [sp, #CONTEXT_OFFSET_SPSR_EL1] mrs x1, elr_el1 - stp x1, x0, [sp, #-0x10]! + str x1, [sp, #CONTEXT_OFFSET_ELR_EL1] mov x0, sp + + /* restore the thread execution environment */ msr daifclr, #3 bl lwp_thread_signal_catch + + /* restore the exception-return exec-flow */ msr daifset, #3 - ldp x1, x0, [sp], #0x10 - msr spsr_el1, x0 - msr elr_el1, x1 /* check debug */ - /* restore exception frame */ - ldp x29, x30, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - msr fpcr, x0 - msr fpsr, x1 - - ldp x28, x29, [sp], #0x10 - ldp x26, x27, [sp], #0x10 - ldp x24, x25, [sp], #0x10 - ldp x22, x23, [sp], #0x10 - ldp x20, x21, [sp], #0x10 - ldp x18, x19, [sp], #0x10 - ldp x16, x17, [sp], #0x10 - ldp x14, x15, [sp], #0x10 - ldp x12, x13, [sp], #0x10 - ldp x10, x11, [sp], #0x10 - ldp x8, x9, [sp], #0x10 - ldp x6, x7, [sp], #0x10 - ldp x4, x5, [sp], #0x10 - ldp x2, x3, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - RESTORE_FPU sp - stp x0, x1, [sp, #-0x10]! ldr x0, =rt_dbg_ops ldr x0, [x0] cmp x0, xzr - ldp x0, x1, [sp], #0x10 - beq 1f - /* save */ - SAVE_FPU sp - stp x0, x1, [sp, #-0x10]! - stp x2, x3, [sp, #-0x10]! - stp x4, x5, [sp, #-0x10]! - stp x6, x7, [sp, #-0x10]! - stp x8, x9, [sp, #-0x10]! - stp x10, x11, [sp, #-0x10]! - stp x12, x13, [sp, #-0x10]! - stp x14, x15, [sp, #-0x10]! - stp x16, x17, [sp, #-0x10]! - stp x18, x19, [sp, #-0x10]! - stp x20, x21, [sp, #-0x10]! - stp x22, x23, [sp, #-0x10]! - stp x24, x25, [sp, #-0x10]! - stp x26, x27, [sp, #-0x10]! - stp x28, x29, [sp, #-0x10]! - mrs x0, fpcr - mrs x1, fpsr - stp x0, x1, [sp, #-0x10]! - stp x29, x30, [sp, #-0x10]! + beq 1f - mrs x0, elr_el1 + ldr x0, [sp, #CONTEXT_OFFSET_ELR_EL1] bl dbg_attach_req - /* restore */ - ldp x29, x30, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - msr fpcr, x0 - msr fpsr, x1 - ldp x28, x29, [sp], #0x10 - ldp x26, x27, [sp], #0x10 - ldp x24, x25, [sp], #0x10 - ldp x22, x23, [sp], #0x10 - ldp x20, x21, [sp], #0x10 - ldp x18, x19, [sp], #0x10 - ldp x16, x17, [sp], #0x10 - ldp x14, x15, [sp], #0x10 - ldp x12, x13, [sp], #0x10 - ldp x10, x11, [sp], #0x10 - ldp x8, x9, [sp], #0x10 - ldp x6, x7, [sp], #0x10 - ldp x4, x5, [sp], #0x10 - ldp x2, x3, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - RESTORE_FPU sp 1: + RESTORE_IRQ_CONTEXT_NO_SPEL0 + eret START_POINT_END(arch_ret_to_user) @@ -410,32 +338,7 @@ arch_syscall_restart: /* restore previous exception frame */ msr spsel, #0 - ldp x2, x3, [sp], #0x10 - msr elr_el1, x2 - msr spsr_el1, x3 - - ldp x29, x30, [sp], #0x10 - - ldp x28, x29, [sp], #0x10 - msr fpcr, x28 - msr fpsr, x29 - - ldp x28, x29, [sp], #0x10 - ldp x26, x27, [sp], #0x10 - ldp x24, x25, [sp], #0x10 - ldp x22, x23, [sp], #0x10 - ldp x20, x21, [sp], #0x10 - ldp x18, x19, [sp], #0x10 - ldp x16, x17, [sp], #0x10 - ldp x14, x15, [sp], #0x10 - ldp x12, x13, [sp], #0x10 - ldp x10, x11, [sp], #0x10 - ldp x8, x9, [sp], #0x10 - ldp x6, x7, [sp], #0x10 - ldp x4, x5, [sp], #0x10 - ldp x2, x3, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - RESTORE_FPU sp + RESTORE_IRQ_CONTEXT_NO_SPEL0 msr spsel, #1 @@ -443,8 +346,8 @@ arch_syscall_restart: arch_signal_quit: - /* drop current exception frame */ - add sp, sp, #CONTEXT_SIZE + /* drop current exception frame & sigreturn */ + add sp, sp, #(CONTEXT_SIZE + 0x10) mov x1, sp mrs x0, sp_el0 bl arch_signal_ucontext_restore @@ -460,35 +363,12 @@ arch_signal_quit: /* restore previous exception frame */ msr spsel, #0 - ldp x2, x3, [sp], #0x10 - msr elr_el1, x2 - msr spsr_el1, x3 - - ldp x29, x30, [sp], #0x10 - - ldp x28, x29, [sp], #0x10 - msr fpcr, x28 - msr fpsr, x29 - - ldp x28, x29, [sp], #0x10 - ldp x26, x27, [sp], #0x10 - ldp x24, x25, [sp], #0x10 - ldp x22, x23, [sp], #0x10 - ldp x20, x21, [sp], #0x10 - ldp x18, x19, [sp], #0x10 - ldp x16, x17, [sp], #0x10 - ldp x14, x15, [sp], #0x10 - ldp x12, x13, [sp], #0x10 - ldp x10, x11, [sp], #0x10 - ldp x8, x9, [sp], #0x10 - ldp x6, x7, [sp], #0x10 - ldp x4, x5, [sp], #0x10 - ldp x2, x3, [sp], #0x10 - ldp x0, x1, [sp], #0x10 - RESTORE_FPU sp + RESTORE_IRQ_CONTEXT_NO_SPEL0 msr spsel, #1 + SAVE_IRQ_CONTEXT + b arch_ret_to_user /** diff --git a/libcpu/aarch64/common/include/vector_gcc.h b/libcpu/aarch64/common/include/vector_gcc.h index 31c532316e0..63df0c59e30 100644 --- a/libcpu/aarch64/common/include/vector_gcc.h +++ b/libcpu/aarch64/common/include/vector_gcc.h @@ -54,6 +54,52 @@ #include "../up/context_gcc.h" #endif +.macro RESTORE_IRQ_CONTEXT_NO_SPEL0 + ldp x2, x3, [sp], #0x10 + msr elr_el1, x2 + msr spsr_el1, x3 + + ldp x29, x30, [sp], #0x10 + + ldp x28, x29, [sp], #0x10 + msr fpcr, x28 + msr fpsr, x29 + + ldp x28, x29, [sp], #0x10 + ldp x26, x27, [sp], #0x10 + ldp x24, x25, [sp], #0x10 + ldp x22, x23, [sp], #0x10 + ldp x20, x21, [sp], #0x10 + ldp x18, x19, [sp], #0x10 + ldp x16, x17, [sp], #0x10 + ldp x14, x15, [sp], #0x10 + ldp x12, x13, [sp], #0x10 + ldp x10, x11, [sp], #0x10 + ldp x8, x9, [sp], #0x10 + ldp x6, x7, [sp], #0x10 + ldp x4, x5, [sp], #0x10 + ldp x2, x3, [sp], #0x10 + ldp x0, x1, [sp], #0x10 + + RESTORE_FPU sp +.endm + +.macro EXCEPTION_SWITCH, eframex, tmpx +#ifdef RT_USING_SMART + /** + * test the spsr for execution level 0 + * That is { PSTATE.[NZCV] := SPSR_EL1 & M.EL0t } + */ + ldr \tmpx, [\eframex, #CONTEXT_OFFSET_SPSR_EL1] + and \tmpx, \tmpx, 0x1f + cbz \tmpx, 1f + b 2f +1: + b arch_ret_to_user +2: +#endif /* RT_USING_SMART */ +.endm + .macro SAVE_USER_CTX, eframex, tmpx #ifdef RT_USING_SMART mrs \tmpx, spsr_el1 diff --git a/libcpu/aarch64/common/up/context_gcc.h b/libcpu/aarch64/common/up/context_gcc.h index cb48e5f2446..d2f6e9a755e 100644 --- a/libcpu/aarch64/common/up/context_gcc.h +++ b/libcpu/aarch64/common/up/context_gcc.h @@ -19,17 +19,23 @@ #include #include -.macro RESTORE_CONTEXT_SWITCH using_sp - /* Set the SP to point to the stack of the task being restored. */ - mov sp, \using_sp - +/* restore address space */ +.macro RESTORE_ADDRESS_SPACE #ifdef RT_USING_SMART bl rt_thread_self mov x19, x0 bl lwp_aspace_switch mov x0, x19 bl lwp_user_setting_restore -#endif /* RT_USING_SMART */ +#endif +.endm + +.macro RESTORE_CONTEXT_SWITCH using_sp + /* Set the SP to point to the stack of the task being restored. */ + mov sp, \using_sp + + RESTORE_ADDRESS_SPACE + _RESTORE_CONTEXT_SWITCH .endm diff --git a/libcpu/aarch64/common/up/vector_gcc.S b/libcpu/aarch64/common/up/vector_gcc.S index 26428fa597b..8b51a482827 100644 --- a/libcpu/aarch64/common/up/vector_gcc.S +++ b/libcpu/aarch64/common/up/vector_gcc.S @@ -28,7 +28,8 @@ vector_fiq: SAVE_IRQ_CONTEXT bl rt_hw_trap_fiq - RESTORE_IRQ_CONTEXT + + b rt_hw_irq_exit .globl rt_thread_switch_interrupt_flag .globl rt_hw_context_switch_interrupt_do diff --git a/libcpu/aarch64/common/vector_gcc.S b/libcpu/aarch64/common/vector_gcc.S index aaa172fcf9e..d4c6223bcf1 100644 --- a/libcpu/aarch64/common/vector_gcc.S +++ b/libcpu/aarch64/common/vector_gcc.S @@ -79,7 +79,11 @@ START_POINT(vector_exception) bl rt_hw_trap_exception RESTORE_USER_CTX EFRAMEX, x0 + /* do exception switch for IRQ/exception handlers */ + EXCEPTION_SWITCH sp, x0 + RESTORE_IRQ_CONTEXT + eret START_POINT_END(vector_exception) START_POINT(vector_serror) @@ -123,4 +127,8 @@ START_POINT_END(vector_irq) rt_hw_irq_exit: .globl rt_hw_irq_exit + /* do exception switch for IRQ/exception handlers */ + EXCEPTION_SWITCH sp, x0 + RESTORE_IRQ_CONTEXT + eret From 5ec20c4289ff0e4daeb2f0227088f803c3c2294b Mon Sep 17 00:00:00 2001 From: wdfk-prog <1425075683@qq.com> Date: Sun, 22 Sep 2024 09:49:59 +0800 Subject: [PATCH 24/54] fix:[kstdio]Disable "-Wimplicit-fallthrough" below GNUC V7 (#9459) fix:Disable "-Wimplicit-fallthrough" below GNUC V7 --- src/klibc/kstdio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/klibc/kstdio.c b/src/klibc/kstdio.c index 44ff758e92c..879a938b6a0 100644 --- a/src/klibc/kstdio.c +++ b/src/klibc/kstdio.c @@ -287,7 +287,7 @@ static char *print_number(char *buf, return buf; } -#if defined(__GNUC__) && !defined(__ARMCC_VERSION) /* GCC */ +#if defined(__GNUC__) && (__GNUC__ >= 7) && !defined(__ARMCC_VERSION) /* GCC */ #pragma GCC diagnostic push /* ignore warning: this statement may fall through */ #pragma GCC diagnostic ignored "-Wimplicit-fallthrough" From cee64a41a4b2f26284bf3a73b137c3e88c65fc40 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sun, 22 Sep 2024 12:56:40 -0400 Subject: [PATCH 25/54] [klibc] format comments after #9459 --- src/klibc/kstdio.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/klibc/kstdio.c b/src/klibc/kstdio.c index 879a938b6a0..851b1008dd6 100644 --- a/src/klibc/kstdio.c +++ b/src/klibc/kstdio.c @@ -287,11 +287,12 @@ static char *print_number(char *buf, return buf; } -#if defined(__GNUC__) && (__GNUC__ >= 7) && !defined(__ARMCC_VERSION) /* GCC */ +#if (defined(__GNUC__) && !defined(__ARMCC_VERSION) /* GCC */) && (__GNUC__ >= 7) +/* Disable "-Wimplicit-fallthrough" below GNUC V7 */ #pragma GCC diagnostic push /* ignore warning: this statement may fall through */ #pragma GCC diagnostic ignored "-Wimplicit-fallthrough" -#endif /* defined(__GNUC__) && !defined(__ARMCC_VERSION) */ +#endif /* (defined(__GNUC__) && !defined(__ARMCC_VERSION)) && (__GNUC__ >= 7 */ /** * @brief This function will fill a formatted string to buffer. * @@ -617,9 +618,9 @@ rt_weak int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list arg return str - buf; } RTM_EXPORT(rt_vsnprintf); -#if defined(__GNUC__) && !defined(__ARMCC_VERSION) /* GCC */ +#if (defined(__GNUC__) && !defined(__ARMCC_VERSION) /* GCC */) && (__GNUC__ >= 7) #pragma GCC diagnostic pop /* ignored "-Wimplicit-fallthrough" */ -#endif /* defined(__GNUC__) && !defined(__ARMCC_VERSION) */ +#endif /* (defined(__GNUC__) && !defined(__ARMCC_VERSION)) && (__GNUC__ >= 7 */ /** * @brief This function will fill a formatted string to buffer. From af5ca55736c8b4fa9538469afcaddd3453ead8b9 Mon Sep 17 00:00:00 2001 From: heyuanjie87 <943313837@qq.com> Date: Fri, 20 Sep 2024 10:17:34 +0800 Subject: [PATCH 26/54] =?UTF-8?q?[libcpu]rv=E6=B7=BB=E5=8A=A0c908=20cpu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libcpu/risc-v/SConscript | 2 +- libcpu/risc-v/t-head/c908/SConscript | 13 + libcpu/risc-v/t-head/c908/asm/sbiasm.h | 10 + libcpu/risc-v/t-head/c908/asm/sbidef.h | 27 ++ libcpu/risc-v/t-head/c908/cache.c | 140 +++++++++ libcpu/risc-v/t-head/c908/cache.h | 127 +++++++++ libcpu/risc-v/t-head/c908/interrupt.c | 105 +++++++ libcpu/risc-v/t-head/c908/interrupt.h | 48 ++++ libcpu/risc-v/t-head/c908/opcode.h | 92 ++++++ libcpu/risc-v/t-head/c908/plic.c | 220 +++++++++++++++ libcpu/risc-v/t-head/c908/plic.h | 60 ++++ libcpu/risc-v/t-head/c908/riscv_mmu.h | 202 +++++++++++++ libcpu/risc-v/t-head/c908/symbol_analysis.c | 298 ++++++++++++++++++++ libcpu/risc-v/t-head/c908/symbol_analysis.h | 44 +++ 14 files changed, 1387 insertions(+), 1 deletion(-) create mode 100644 libcpu/risc-v/t-head/c908/SConscript create mode 100644 libcpu/risc-v/t-head/c908/asm/sbiasm.h create mode 100644 libcpu/risc-v/t-head/c908/asm/sbidef.h create mode 100644 libcpu/risc-v/t-head/c908/cache.c create mode 100644 libcpu/risc-v/t-head/c908/cache.h create mode 100644 libcpu/risc-v/t-head/c908/interrupt.c create mode 100644 libcpu/risc-v/t-head/c908/interrupt.h create mode 100644 libcpu/risc-v/t-head/c908/opcode.h create mode 100644 libcpu/risc-v/t-head/c908/plic.c create mode 100644 libcpu/risc-v/t-head/c908/plic.h create mode 100644 libcpu/risc-v/t-head/c908/riscv_mmu.h create mode 100644 libcpu/risc-v/t-head/c908/symbol_analysis.c create mode 100644 libcpu/risc-v/t-head/c908/symbol_analysis.h diff --git a/libcpu/risc-v/SConscript b/libcpu/risc-v/SConscript index 851542e1a3d..273c997e8eb 100644 --- a/libcpu/risc-v/SConscript +++ b/libcpu/risc-v/SConscript @@ -5,7 +5,7 @@ from building import * Import('rtconfig') -common64_arch = ['virt64', 'c906'] +common64_arch = ['virt64', 'c906', 'c908'] cwd = GetCurrentDir() group = [] list = os.listdir(cwd) diff --git a/libcpu/risc-v/t-head/c908/SConscript b/libcpu/risc-v/t-head/c908/SConscript new file mode 100644 index 00000000000..5f750ad65f4 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/SConscript @@ -0,0 +1,13 @@ +# RT-Thread building script for component + +from building import * +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') + Glob('*_gcc.S') +CPPPATH = [cwd] + +if not GetDepend('ARCH_USING_ASID'): + SrcRemove(src, ['asid.c']) + +group = DefineGroup('libcpu', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/libcpu/risc-v/t-head/c908/asm/sbiasm.h b/libcpu/risc-v/t-head/c908/asm/sbiasm.h new file mode 100644 index 00000000000..4639fba68cf --- /dev/null +++ b/libcpu/risc-v/t-head/c908/asm/sbiasm.h @@ -0,0 +1,10 @@ +#ifndef _SBI_ASM_H +#define _SBI_ASM_H + +.macro SBI_CALL which + li a7, \which + ecall + nop +.endm + +#endif /* _SBI_ASM_H */ diff --git a/libcpu/risc-v/t-head/c908/asm/sbidef.h b/libcpu/risc-v/t-head/c908/asm/sbidef.h new file mode 100644 index 00000000000..5bcf58ade7c --- /dev/null +++ b/libcpu/risc-v/t-head/c908/asm/sbidef.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2019-2020, Xim + * + * SPDX-License-Identifier: Apache-2.0 + * + */ +#ifndef _ASM_SBI_DEF_H +#define _ASM_SBI_DEF_H + +#define SBI_SET_TIMER 0 +#define SBI_CONSOLE_PUTCHAR 1 +#define SBI_CONSOLE_GETCHAR 2 +#define SBI_CLEAR_IPI 3 +#define SBI_SEND_IPI 4 +#define SBI_REMOTE_FENCE_I 5 +#define SBI_REMOTE_SFENCE_VMA 6 +#define SBI_REMOTE_SFENCE_VMA_ASID 7 +#define SBI_SHUTDOWN 8 + +#define SBI_CONSOLE_PUTSTR 9 + +#define SBI_SD_WRITE 10 +#define SBI_SD_READ 11 +#define SBI_NET_WRITE 12 +#define SBI_NET_READ 13 + +#endif /* _ASM_SBI_DEF_H */ diff --git a/libcpu/risc-v/t-head/c908/cache.c b/libcpu/risc-v/t-head/c908/cache.c new file mode 100644 index 00000000000..db573fa5f81 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/cache.c @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-01-29 lizhirui first version + * 2021-11-05 JasonHu add C908 cache inst + * 2022-11-09 WangXiaoyao Support cache coherence operations; + * improve portability and make + * no assumption on undefined behavior + */ + +#include +#include +#include +#include + +#include "opcode.h" +#include "cache.h" + +#define L1_CACHE_BYTES (64) + +/** + * GCC version not support t-head cache flush, so we use fixed code to achieve. + * The following function cannot be optimized. + */ +static void dcache_wb_range(unsigned long start, unsigned long end) __attribute__((optimize("O0"))); +static void dcache_inv_range(unsigned long start, unsigned long end) __attribute__((optimize("O0"))); +static void dcache_wbinv_range(unsigned long start, unsigned long end) __attribute__((optimize("O0"))); +static void icache_inv_range(unsigned long start, unsigned long end) __attribute__((optimize("O0"))); + +#define CACHE_OP_RS1 %0 +#define CACHE_OP_RANGE(instr) \ + { \ + rt_ubase_t i = start & ~(L1_CACHE_BYTES - 1); \ + for (; i < end; i += L1_CACHE_BYTES) \ + { \ + __asm__ volatile(instr ::"r"(i) \ + : "memory"); \ + } \ + } + +static void dcache_wb_range(unsigned long start, unsigned long end) +{ + CACHE_OP_RANGE(OPC_DCACHE_CVA(CACHE_OP_RS1)); +} + +static void dcachel1_wb_range(unsigned long start, unsigned long end) +{ + CACHE_OP_RANGE(OPC_DCACHE_CVAL1(CACHE_OP_RS1)); +} + +static void dcache_inv_range(unsigned long start, unsigned long end) +{ + CACHE_OP_RANGE(OPC_DCACHE_IVA(CACHE_OP_RS1)); +} + +static void dcache_wbinv_range(unsigned long start, unsigned long end) +{ + CACHE_OP_RANGE(OPC_DCACHE_CIVA(CACHE_OP_RS1)); +} + +static void icache_inv_range(unsigned long start, unsigned long end) +{ + CACHE_OP_RANGE(OPC_ICACHE_IVA(CACHE_OP_RS1)); +} + +rt_inline rt_uint32_t rt_cpu_icache_line_size(void) +{ + return L1_CACHE_BYTES; +} + +rt_inline rt_uint32_t rt_cpu_dcache_line_size(void) +{ + return L1_CACHE_BYTES; +} + +void rt_hw_cpu_icache_invalidate_local(void *addr, int size) +{ + icache_inv_range((unsigned long)addr, (unsigned long)((unsigned char *)addr + size)); + rt_hw_cpu_sync_i(); +} + +void rt_hw_cpu_dcache_invalidate_local(void *addr, int size) +{ + dcache_inv_range((unsigned long)addr, (unsigned long)((unsigned char *)addr + size)); + rt_hw_cpu_sync(); +} + +void rt_hw_cpu_dcache_clean_local(void *addr, int size) +{ + dcache_wb_range((unsigned long)addr, (unsigned long)((unsigned char *)addr + size)); + rt_hw_cpu_sync(); +} + +void rt_hw_cpu_dcache_clean_invalidate_local(void *addr, int size) +{ + dcache_wbinv_range((unsigned long)addr, (unsigned long)((unsigned char *)addr + size)); + rt_hw_cpu_sync(); +} + +void rt_hw_cpu_dcachel1_clean_local(void *addr, int size) +{ + __asm__ volatile(OPC_DCACHE_CVAL1(a0):: + : "memory"); +} + +/** + * ===================================================== + * Architecture Independent API + * ===================================================== + */ + +void rt_hw_cpu_icache_ops(int ops, void *addr, int size) +{ + if (ops == RT_HW_CACHE_INVALIDATE) + { + rt_hw_cpu_icache_invalidate(addr, size); + } +} + +void rt_hw_cpu_dcache_ops(int ops, void *addr, int size) +{ + if (ops == RT_HW_CACHE_FLUSH) + { + rt_hw_cpu_dcache_clean(addr, size); + } + else + { + rt_hw_cpu_dcache_invalidate(addr, size); + } +} + +void rt_hw_sync_cache_local(void *addr, int size) +{ + rt_hw_cpu_dcachel1_clean_local(addr, size); + rt_hw_cpu_icache_invalidate_local(addr, size); +} diff --git a/libcpu/risc-v/t-head/c908/cache.h b/libcpu/risc-v/t-head/c908/cache.h new file mode 100644 index 00000000000..09ebce6861f --- /dev/null +++ b/libcpu/risc-v/t-head/c908/cache.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-11-05 JasonHu The first version + * 2022-11-09 WangXiaoyao Distinguish local and broadcast operations + */ + +#ifndef CACHE_H__ +#define CACHE_H__ + +#include "opcode.h" + +#ifndef ALWAYS_INLINE +#define ALWAYS_INLINE inline __attribute__((always_inline)) +#endif + +ALWAYS_INLINE void rt_hw_cpu_sync(void) +{ + asm volatile(OPC_SYNC:: + : "memory"); +} + +ALWAYS_INLINE void rt_hw_cpu_sync_i(void) +{ + asm volatile(OPC_SYNC_I:: + : "memory"); +} + +ALWAYS_INLINE void rt_hw_cpu_sync_s(void) +{ + asm volatile(OPC_SYNC_S:: + : "memory"); +} + +ALWAYS_INLINE void rt_hw_cpu_sync_is(void) +{ + asm volatile(OPC_SYNC_IS:: + : "memory"); +} + +/** + * ======================================== + * Local cpu cache maintainence operations + * ======================================== + */ + +void rt_hw_cpu_dcache_clean_local(void *addr, int size); +void rt_hw_cpu_dcache_invalidate_local(void *addr, int size); +void rt_hw_cpu_dcache_clean_invalidate_local(void *addr, int size); + +void rt_hw_cpu_icache_invalidate_local(void *addr, int size); + +ALWAYS_INLINE void rt_hw_cpu_dcache_clean_all_local(void) +{ + __asm__ volatile(OPC_DCACHE_CALL :: + : "memory"); + rt_hw_cpu_sync(); +} + +ALWAYS_INLINE void rt_hw_cpu_dcache_invalidate_all_local(void) +{ + __asm__ volatile(OPC_DCACHE_IALL :: + : "memory"); + rt_hw_cpu_sync(); +} + +ALWAYS_INLINE void rt_hw_cpu_dcache_clean_invalidate_all_local(void) +{ + __asm__ volatile(OPC_DCACHE_CIALL :: + : "memory"); + rt_hw_cpu_sync(); +} + +ALWAYS_INLINE void rt_hw_cpu_icache_invalidate_all_local(void) +{ + __asm__ volatile(OPC_ICACHE_IALL :: + : "memory"); + rt_hw_cpu_sync_i(); +} + +#define rt_hw_icache_invalidate_all rt_hw_cpu_icache_invalidate_all + +/** + * ======================================== + * Multi-core cache maintainence operations + * ======================================== + */ + +#ifdef RT_USING_SMP +#error "TODO: cache maintainence have not ported to RISC-V SMP yet" + +void rt_hw_cpu_dcache_clean(void *addr, int size); +void rt_hw_cpu_dcache_invalidate(void *addr, int size); +void rt_hw_cpu_dcache_clean_invalidate(void *addr, int size); + +void rt_hw_cpu_dcache_clean_all(void); +void rt_hw_cpu_dcache_invalidate_all(void); +void rt_hw_cpu_dcache_clean_invalidate_all(void); + +void rt_hw_cpu_icache_invalidate(void *addr, int size); +void rt_hw_cpu_icache_invalidate_all(void); + +#else /* !RT_USING_SMP */ + +#define rt_hw_cpu_dcache_clean rt_hw_cpu_dcache_clean_local +#define rt_hw_cpu_dcache_invalidate rt_hw_cpu_dcache_invalidate_local +#define rt_hw_cpu_dcache_clean_and_invalidate rt_hw_cpu_dcache_clean_invalidate_local + +#define rt_hw_cpu_dcache_clean_all rt_hw_cpu_dcache_clean_all_local +#define rt_hw_cpu_dcache_invalidate_all rt_hw_cpu_dcache_invalidate_all_local +#define rt_hw_cpu_dcache_clean_invalidate_all rt_hw_cpu_dcache_clean_invalidate_all_local + +#define rt_hw_cpu_icache_invalidate rt_hw_cpu_icache_invalidate_local +#define rt_hw_cpu_icache_invalidate_all rt_hw_cpu_icache_invalidate_all_local + +#endif /* RT_USING_SMP */ + +/** + * @brief Synchronize cache to Point of Unification + */ +void rt_hw_sync_cache_local(void *addr, int size); + +#endif /* CACHE_H__ */ diff --git a/libcpu/risc-v/t-head/c908/interrupt.c b/libcpu/risc-v/t-head/c908/interrupt.c new file mode 100644 index 00000000000..9e4cf2f1579 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/interrupt.c @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-10-19 JasonHu first version + */ + +#include +#include + +#include "interrupt.h" +#include "riscv.h" +#include "plic.h" + +extern rt_uint32_t rt_interrupt_nest; +extern rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; +extern rt_uint32_t rt_thread_switch_interrupt_flag; + +struct rt_irq_desc isr_table[INTERRUPTS_MAX]; + +static void rt_hw_interrupt_handler(int vector, void *param) +{ + rt_kprintf("Unhandled interrupt %d occured!!!\n", vector); +} + +/** + * This function will initialize hardware interrupt + */ +void rt_hw_interrupt_init(void) +{ + /* init interrupt controller */ + plic_init(); + + rt_int32_t idx; + + rt_memset(isr_table, 0x00, sizeof(isr_table)); + for (idx = 0; idx < INTERRUPTS_MAX; idx++) + { + isr_table[idx].handler = rt_hw_interrupt_handler; + } + + /* init interrupt nest, and context in thread sp */ + rt_interrupt_nest = 0; + rt_interrupt_from_thread = 0; + rt_interrupt_to_thread = 0; + rt_thread_switch_interrupt_flag = 0; +} + +/** + * This function will mask a interrupt. + * @param vector the interrupt number + */ +void rt_hw_interrupt_mask(int vector) +{ + if ((vector < 0) || (vector > IRQ_MAX_NR)) + { + return; + } + plic_disable_irq(vector); +} + +/** + + * This function will un-mask a interrupt. + * @param vector the interrupt number + */ +void rt_hw_interrupt_umask(int vector) +{ + if ((vector < 0) || (vector > IRQ_MAX_NR)) + { + return; + } + plic_enable_irq(vector); +} + +/** + * This function will install a interrupt service routine to a interrupt. + * @param vector the interrupt number + * @param handler the interrupt service routine to be installed + * @param param the interrupt service function parameter + * @param name the interrupt name + * @return old handler + */ +rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, + void *param, const char *name) +{ + rt_isr_handler_t old_handler = RT_NULL; + if ((vector < 0) || (vector > IRQ_MAX_NR)) + { + return old_handler; + } + + old_handler = isr_table[IRQ_OFFSET + vector].handler; + +#ifdef RT_USING_INTERRUPT_INFO + rt_strncpy(isr_table[IRQ_OFFSET + vector].name, name, RT_NAME_MAX); +#endif /* RT_USING_INTERRUPT_INFO */ + isr_table[IRQ_OFFSET + vector].handler = handler; + isr_table[IRQ_OFFSET + vector].param = param; + + return old_handler; +} diff --git a/libcpu/risc-v/t-head/c908/interrupt.h b/libcpu/risc-v/t-head/c908/interrupt.h new file mode 100644 index 00000000000..2ee08248375 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/interrupt.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-10-19 JasonHu first version + */ + +#ifndef __INTERRUPT_H__ +#define __INTERRUPT_H__ + +#include + +#define NR_CPUS 1 + +#define IRQ_OFFSET 16 +#ifndef IRQ_MAX_NR +#define IRQ_MAX_NR 200 +#endif +#define INTERRUPTS_MAX (IRQ_OFFSET + IRQ_MAX_NR) + +enum { + EP_INSTRUCTION_ADDRESS_MISALIGNED = 0, + EP_INSTRUCTION_ACCESS_FAULT, + EP_ILLEGAL_INSTRUCTION, + EP_BREAKPOINT, + EP_LOAD_ADDRESS_MISALIGNED, + EP_LOAD_ACCESS_FAULT, + EP_STORE_ADDRESS_MISALIGNED, + EP_STORE_ACCESS_FAULT, + EP_ENVIRONMENT_CALL_U_MODE, + EP_ENVIRONMENT_CALL_S_MODE, + EP_RESERVED10, + EP_ENVIRONMENT_CALL_M_MODE, + EP_INSTRUCTION_PAGE_FAULT, /* page attr */ + EP_LOAD_PAGE_FAULT, /* read data */ + EP_RESERVED14, + EP_STORE_PAGE_FAULT, /* write data */ +}; + +void rt_hw_interrupt_init(void); +void rt_hw_interrupt_mask(int vector); +void rt_hw_interrupt_umask(int vector); +rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, void *param, const char *name); + +#endif diff --git a/libcpu/risc-v/t-head/c908/opcode.h b/libcpu/risc-v/t-head/c908/opcode.h new file mode 100644 index 00000000000..2952b5465da --- /dev/null +++ b/libcpu/risc-v/t-head/c908/opcode.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-11-09 WangXiaoyao Add portable asm support + * 2022-03-16 WangXiaoyao Porting to xtheadsync & xtheadcmo ISA extension + */ +#ifndef __OPCODE_H__ +#define __OPCODE_H__ + +/** + * @brief binary opcode pseudo operations + * Used to bypass toolchain restriction on extension ISA + * + * WARNING: Xuantie ISAs are not compatible to each other in opcode. + * It's painful to port this file, and should be really careful. + */ + +/** + * @brief RISC-V instruction formats + */ + +/** + * R type: .insn r opcode6, func3, func7, rd, rs1, rs2 + * + * +-------+-----+-----+-------+----+---------+ + * | func7 | rs2 | rs1 | func3 | rd | opcode6 | + * +-------+-----+-----+-------+----+---------+ + * 31 25 20 15 12 7 0 + */ +#define __OPC_INSN_FORMAT_R(opcode, func3, func7, rd, rs1, rs2) \ + ".insn r "RT_STRINGIFY(opcode)","RT_STRINGIFY(func3)","RT_STRINGIFY(func7)","RT_STRINGIFY(rd)","RT_STRINGIFY(rs1)","RT_STRINGIFY(rs2) + +/** + * @brief Xuantie T-HEAD extension ISA format + * Compatible to Xuantie C908 user manual v03 + */ +#define __OPC_INSN_FORMAT_CACHE(func7, rs2, rs1) \ + __OPC_INSN_FORMAT_R(0x0b, 0x0, func7, x0, rs1, rs2) + +#ifdef _TOOLCHAIN_SUPP_XTHEADE_ISA_ +#define OPC_SYNC "sync" +#define OPC_SYNC_S "sync.s" +#define OPC_SYNC_I "sync.i" +#define OPC_SYNC_IS "sync.is" + +#define OPC_DCACHE_CALL "dcache.call" +#define OPC_DCACHE_IALL "dcache.iall" +#define OPC_DCACHE_CIALL "dcache.ciall" +#define OPC_DCACHE_CVAL1(rs1) "dcache.cval1 "_TOSTR(rs1) + +#define OPC_ICACHE_IALL "icache.iall" + +#define OPC_DCACHE_CVA(rs1) "dcache.cva "RT_STRINGIFY(rs1) +#define OPC_DCACHE_IVA(rs1) "dcache.iva "RT_STRINGIFY(rs1) +#define OPC_DCACHE_CIVA(rs1) "dcache.civa "RT_STRINGIFY(rs1) + +#define OPC_ICACHE_IVA(rs1) "icache.iva "RT_STRINGIFY(rs1) +#else /* !_TOOLCHAIN_NOT_SUPP_THEAD_ISA_ */ + +#define OPC_SYNC ".long 0x0180000B" +#define OPC_SYNC_S ".long 0x0190000B" +#define OPC_SYNC_I ".long 0x01A0000B" +#define OPC_SYNC_IS ".long 0x01B0000B" + +#define OPC_DCACHE_CALL ".long 0x0010000B" +#define OPC_DCACHE_IALL ".long 0x0020000B" +#define OPC_DCACHE_CIALL ".long 0x0030000B" +#define OPC_DCACHE_CVAL1(rs1) __OPC_INSN_FORMAT_CACHE(0x1, x4, rs1) + +#define OPC_ICACHE_IALL ".long 0x0100000B" + +#define OPC_DCACHE_CVA(rs1) __OPC_INSN_FORMAT_CACHE(0x1, x5, rs1) +#define OPC_DCACHE_IVA(rs1) __OPC_INSN_FORMAT_CACHE(0x1, x6, rs1) +#define OPC_DCACHE_CIVA(rs1) __OPC_INSN_FORMAT_CACHE(0x1, x7, rs1) + +#define OPC_ICACHE_IVA(rs1) __OPC_INSN_FORMAT_CACHE(0x1, x16, rs1) +#endif /* _TOOLCHAIN_NOT_SUPP_THEAD_ISA_ */ + +/** + * @brief RISC-V zifencei ISA + */ +#ifdef _TOOLCHAIN_SUPP_ZIFENCEI_ISA_ +#define OPC_FENCE_I "fence.i" +#else /* !_TOOLCHAIN_SUPP_ZIFENCEI_ISA_ */ +#define OPC_FENCE_I ".long 0x0000100F" +#endif /* _TOOLCHAIN_SUPP_ZIFENCEI_ISA_ */ + +#endif /* __OPCODE_H__ */ diff --git a/libcpu/risc-v/t-head/c908/plic.c b/libcpu/risc-v/t-head/c908/plic.c new file mode 100644 index 00000000000..08cb6c18d2f --- /dev/null +++ b/libcpu/risc-v/t-head/c908/plic.c @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-10-19 JasonHu first version + * 2021-11-12 JasonHu fix bug that not intr on f133 + * 2023-04-22 flyingcys add plic register ioremap + */ + +#include + +#include + +#include "plic.h" +#include "interrupt.h" +#include "io.h" +#include "encoding.h" +#include "ioremap.h" + +static void *plic_regs = RT_NULL; +extern struct rt_irq_desc isr_table[]; + +struct plic_handler +{ + rt_bool_t present; + void *hart_base; + void *enable_base; +}; + +rt_inline void plic_toggle(struct plic_handler *handler, int hwirq, int enable); +struct plic_handler plic_handlers[C908_NR_CPUS]; +static void *plic_irq_priority[INTERRUPTS_MAX] = {RT_NULL}; + +rt_inline void plic_irq_toggle(int hwirq, int enable) +{ + int cpu = 0; + void *priority_addr; + + /* set priority of interrupt, interrupt 0 is zero. */ + priority_addr = (void *)((rt_size_t)plic_regs + PRIORITY_BASE + hwirq * PRIORITY_PER_ID); +#ifdef RT_USING_SMART + if (plic_irq_priority[hwirq] == RT_NULL) + { + plic_irq_priority[hwirq] = (void *)rt_ioremap(priority_addr, 0x1000); + } + priority_addr = plic_irq_priority[hwirq]; +#endif + writel(enable, priority_addr); + struct plic_handler *handler = &plic_handlers[cpu]; + + if (handler->present) + { + plic_toggle(handler, hwirq, enable); + } +} + +static void generic_handle_irq(int irq) +{ + rt_isr_handler_t isr; + void *param; + + if (irq < 0 || irq >= IRQ_MAX_NR) + { + LOG_E("bad irq number %d!\n", irq); + return; + } + + if (!irq) // irq = 0 => no irq + { + LOG_W("no irq!\n"); + return; + } + isr = isr_table[IRQ_OFFSET + irq].handler; + param = isr_table[IRQ_OFFSET + irq].param; + if (isr != RT_NULL) + { + isr(irq, param); + } + /* complete irq. */ + plic_complete(irq); +} + +void plic_complete(int irqno) +{ + int cpu = 0; + struct plic_handler *handler = &plic_handlers[cpu]; + + writel(irqno, (void *)((rt_size_t)handler->hart_base + CONTEXT_CLAIM)); +} + +void plic_disable_irq(int irqno) +{ + plic_irq_toggle(irqno, 0); +} + +void plic_enable_irq(int irqno) +{ + plic_irq_toggle(irqno, 1); +} + +/* + * Handling an interrupt is a two-step process: first you claim the interrupt + * by reading the claim register, then you complete the interrupt by writing + * that source ID back to the same claim register. This automatically enables + * and disables the interrupt, so there's nothing else to do. + */ +void plic_handle_irq(void) +{ + int cpu = 0; + unsigned int irq; + + struct plic_handler *handler = &plic_handlers[cpu]; + void *claim = (void *)((rt_size_t)handler->hart_base + CONTEXT_CLAIM); + + if (plic_regs == RT_NULL || !handler->present) + { + LOG_E("plic state not initialized."); + return; + } + + clear_csr(sie, SIE_SEIE); + + while ((irq = readl(claim))) + { + /* ID0 is diabled permantually from spec. */ + if (irq == 0) + { + LOG_E("irq no is zero."); + } + else + { + generic_handle_irq(irq); + } + } + set_csr(sie, SIE_SEIE); +} + +rt_inline void plic_toggle(struct plic_handler *handler, int hwirq, int enable) +{ + uint32_t *reg = (uint32_t *)((rt_size_t)handler->enable_base + (hwirq / 32) * sizeof(uint32_t)); + uint32_t hwirq_mask = 1 << (hwirq % 32); + + if (enable) + { + writel(readl(reg) | hwirq_mask, reg); + } + else + { + writel(readl(reg) & ~hwirq_mask, reg); + } +} + +void plic_init(void) +{ + int nr_irqs; + int nr_context; + int i; + unsigned long hwirq; + int cpu = 0; + + if (plic_regs) + { + LOG_E("plic already initialized!"); + return; + } + + nr_context = C908_NR_CONTEXT; + + plic_regs = (void *)C908_PLIC_PHY_ADDR; + if (!plic_regs) + { + LOG_E("fatal error, plic is reg space is null."); + return; + } + + nr_irqs = C908_PLIC_NR_EXT_IRQS; + + for (i = 0; i < nr_context; i ++) + { + struct plic_handler *handler; + uint32_t threshold = 0; + + cpu = 0; + + /* skip contexts other than supervisor external interrupt */ + if (i == 0) + { + continue; + } + + // we always use CPU0 M-mode target register. + handler = &plic_handlers[cpu]; + if (handler->present) + { + threshold = 0xffffffff; + goto done; + } + + handler->present = RT_TRUE; + handler->hart_base = (void *)((rt_size_t)plic_regs + CONTEXT_BASE + i * CONTEXT_PER_HART); + handler->enable_base = (void *)((rt_size_t)plic_regs + ENABLE_BASE + i * ENABLE_PER_HART); +#ifdef RT_USING_SMART + handler->hart_base = (void *)rt_ioremap(handler->hart_base, 0x1000); + handler->enable_base = (void *)rt_ioremap(handler->enable_base, 0x1000); +#endif +done: + /* priority must be > threshold to trigger an interrupt */ + writel(threshold, (void *)((rt_size_t)handler->hart_base + CONTEXT_THRESHOLD)); + for (hwirq = 1; hwirq <= nr_irqs; hwirq++) + { + plic_toggle(handler, hwirq, 0); + } + } + + /* Enable supervisor external interrupts. */ + set_csr(sie, SIE_SEIE); +} diff --git a/libcpu/risc-v/t-head/c908/plic.h b/libcpu/risc-v/t-head/c908/plic.h new file mode 100644 index 00000000000..94f00eacdb8 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/plic.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-10-19 JasonHu first version + * 2023-04-22 flyingcys add C906_PLIC_PHY_ADDR macro judge + */ + +#ifndef __RISCV64_PLIC_H__ +#define __RISCV64_PLIC_H__ + +#include + +#ifndef C908_PLIC_PHY_ADDR +#define C908_PLIC_PHY_ADDR (0xF00000000UL) +#endif +#define C908_PLIC_NR_EXT_IRQS (IRQ_MAX_NR) +#define C908_NR_CPUS (NR_CPUS) + +/* M and S mode context. */ +#define C908_NR_CONTEXT (2) + +#define MAX_DEVICES 1024 +#define MAX_CONTEXTS 15872 + +/* + * Each interrupt source has a priority register associated with it. + * We always hardwire it to one in Linux. + */ +#define PRIORITY_BASE 0 +#define PRIORITY_PER_ID 4 + +/* + * Each hart context has a vector of interrupt enable bits associated with it. + * There's one bit for each interrupt source. + */ +#define ENABLE_BASE 0x2000 +#define ENABLE_PER_HART 0x80 + +/* + * Each hart context has a set of control registers associated with it. Right + * now there's only two: a source priority threshold over which the hart will + * take an interrupt, and a register to claim interrupts. + */ +#define CONTEXT_BASE 0x200000 +#define CONTEXT_PER_HART 0x1000 +#define CONTEXT_THRESHOLD 0x00 +#define CONTEXT_CLAIM 0x04 + +void plic_init(void); +void plic_enable_irq(int irqno); +void plic_disable_irq(int irqno); +// tell PLIC that we've served this IRQ +void plic_complete(int irq); +void plic_handle_irq(void); + +#endif diff --git a/libcpu/risc-v/t-head/c908/riscv_mmu.h b/libcpu/risc-v/t-head/c908/riscv_mmu.h new file mode 100644 index 00000000000..8fbe241f657 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/riscv_mmu.h @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-01-30 lizhirui first version + * 2021-05-03 lizhirui porting to C906 + * 2023-10-12 Shell Add permission control API + */ + +#ifndef __RISCV_MMU_H__ +#define __RISCV_MMU_H__ + +#include +#include +#include "riscv.h" + +#undef PAGE_SIZE + +/* C-SKY extend */ +#define PTE_SEC (1UL << 59) /* Security */ +#define PTE_SHARE (1UL << 60) /* Shareable */ +#define PTE_BUF (1UL << 61) /* Bufferable */ +#define PTE_CACHE (1UL << 62) /* Cacheable */ +#define PTE_SO (1UL << 63) /* Strong Order */ + +#define PAGE_OFFSET_SHIFT 0 +#define PAGE_OFFSET_BIT 12 +#define PAGE_SIZE __SIZE(PAGE_OFFSET_BIT) +#define PAGE_OFFSET_MASK __MASK(PAGE_OFFSET_BIT) +#define VPN0_SHIFT (PAGE_OFFSET_SHIFT + PAGE_OFFSET_BIT) +#define VPN0_BIT 9 +#define VPN1_SHIFT (VPN0_SHIFT + VPN0_BIT) +#define VPN1_BIT 9 +#define VPN2_SHIFT (VPN1_SHIFT + VPN1_BIT) +#define VPN2_BIT 9 + +#define PPN0_SHIFT (PAGE_OFFSET_SHIFT + PAGE_OFFSET_BIT) +#define PPN0_BIT 9 +#define PPN1_SHIFT (PPN0_SHIFT + PPN0_BIT) +#define PPN1_BIT 9 +#define PPN2_SHIFT (PPN1_SHIFT + PPN1_BIT) +#define PPN2_BIT 26 + +#define L1_PAGE_SIZE __SIZE(PAGE_OFFSET_BIT + VPN0_BIT + VPN1_BIT) +#define L2_PAGE_SIZE __SIZE(PAGE_OFFSET_BIT + VPN0_BIT) +#define L3_PAGE_SIZE __SIZE(PAGE_OFFSET_BIT) + +#define ARCH_ADDRESS_WIDTH_BITS 64 + +#define PHYSICAL_ADDRESS_WIDTH_BITS 56 + +#define PAGE_ATTR_NEXT_LEVEL (0) +#define PAGE_ATTR_RWX (PTE_X | PTE_W | PTE_R) +#define PAGE_ATTR_READONLY (PTE_R) +#define PAGE_ATTR_READEXECUTE (PTE_X | PTE_R) + +#define PAGE_ATTR_USER (PTE_U) +#define PAGE_ATTR_SYSTEM (0) + +#define PAGE_DEFAULT_ATTR_LEAF \ + (PAGE_ATTR_RWX | PAGE_ATTR_USER | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | \ + PTE_CACHE | PTE_A | PTE_D) + +#define PAGE_DEFAULT_ATTR_NEXT \ + (PAGE_ATTR_NEXT_LEVEL | PTE_V | PTE_G | PTE_SHARE | PTE_BUF | PTE_CACHE | PTE_A | PTE_D) + +#define PAGE_IS_LEAF(pte) __MASKVALUE(pte, PAGE_ATTR_RWX) + +#define PTE_USED(pte) __MASKVALUE(pte, PTE_V) +#define PTE_WRAP(attr) (attr | PTE_A | PTE_D) + +/** + * encoding of SATP (Supervisor Address Translation and Protection register) + */ +#define SATP_MODE_OFFSET 60 +#define SATP_MODE_BARE 0 +#define SATP_MODE_SV39 8 +#define SATP_MODE_SV48 9 +#define SATP_MODE_SV57 10 +#define SATP_MODE_SV64 11 + +#define ARCH_VADDR_WIDTH 39 +#define SATP_MODE SATP_MODE_SV39 + +//compatible to rt-smart new version +#define MMU_MAP_K_DEVICE (PTE_BUF | PTE_SO | PTE_A | PTE_D | PTE_G | PTE_W | PTE_R | PTE_V) +#define MMU_MAP_K_RW (PTE_SHARE | PTE_A | PTE_D | PTE_G | PAGE_ATTR_RWX | PTE_V) +#define MMU_MAP_K_RWCB (MMU_MAP_K_RW | PTE_BUF | PTE_CACHE) + +#define MMU_MAP_U_RW (PTE_SHARE | PTE_U | PTE_A | PTE_D | PAGE_ATTR_RWX | PTE_V) +#define MMU_MAP_U_RWCB (MMU_MAP_U_RW | PTE_BUF | PTE_CACHE) +#define MMU_MAP_EARLY \ + PTE_WRAP(PAGE_ATTR_RWX | PTE_G | PTE_V | PTE_CACHE | PTE_SHARE | PTE_BUF) +#define MMU_MAP_TRACE(attr) (attr) + +#define PTE_XWR_MASK 0xe + +#define ARCH_PAGE_SIZE PAGE_SIZE +#define ARCH_PAGE_MASK (ARCH_PAGE_SIZE - 1) +#define ARCH_PAGE_SHIFT PAGE_OFFSET_BIT +#define ARCH_INDEX_WIDTH 9 + +#define ARCH_MAP_FAILED ((void *)0x8000000000000000) + +void mmu_set_pagetable(rt_ubase_t addr); +void mmu_enable_user_page_access(void); +void mmu_disable_user_page_access(void); + +#define RT_HW_MMU_PROT_READ 1 +#define RT_HW_MMU_PROT_WRITE 2 +#define RT_HW_MMU_PROT_EXECUTE 4 +#define RT_HW_MMU_PROT_KERNEL 8 +#define RT_HW_MMU_PROT_USER 16 +#define RT_HW_MMU_PROT_CACHE 32 + +void rt_hw_asid_init(void); +struct rt_aspace; +void rt_hw_asid_switch_pgtbl(struct rt_aspace *aspace, rt_ubase_t pgtbl); + +/** + * @brief Remove permission from attribution + * + * @param attr architecture specified mmu attribution + * @param prot protect that will be removed + * @return size_t returned attribution + */ +rt_inline size_t rt_hw_mmu_attr_rm_perm(size_t attr, rt_base_t prot) +{ + switch (prot) + { + /* remove write permission for user */ + case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER: + attr &= ~PTE_W; + break; + /* remove write permission for kernel */ + case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_KERNEL: + attr &= ~PTE_W; + break; + default: + RT_ASSERT(0); + } + return attr; +} + +/** + * @brief Add permission from attribution + * + * @param attr architecture specified mmu attribution + * @param prot protect that will be added + * @return size_t returned attribution + */ +rt_inline size_t rt_hw_mmu_attr_add_perm(size_t attr, rt_base_t prot) +{ + switch (prot) + { + /* add write permission for user */ + case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER: + attr |= (PTE_R | PTE_W | PTE_U); + break; + default: + RT_ASSERT(0); + } + return attr; +} + +/** + * @brief Test permission from attribution + * + * @param attr architecture specified mmu attribution + * @param prot protect that will be test + * @return rt_bool_t RT_TRUE if the prot is allowed, otherwise RT_FALSE + */ +rt_inline rt_bool_t rt_hw_mmu_attr_test_perm(size_t attr, rt_base_t prot) +{ + rt_bool_t rc = 0; + switch (prot & ~RT_HW_MMU_PROT_USER) + { + /* test write permission for user */ + case RT_HW_MMU_PROT_WRITE: + rc = ((attr & PTE_W) && (attr & PTE_R)); + break; + case RT_HW_MMU_PROT_READ: + rc = !!(attr & PTE_R); + break; + case RT_HW_MMU_PROT_EXECUTE: + rc = !!(attr & PTE_X); + break; + default: + RT_ASSERT(0); + } + + if (rc && (prot & RT_HW_MMU_PROT_USER)) + { + rc = !!(attr & PTE_U); + } + return rc; +} + +#endif diff --git a/libcpu/risc-v/t-head/c908/symbol_analysis.c b/libcpu/risc-v/t-head/c908/symbol_analysis.c new file mode 100644 index 00000000000..83edacb1c43 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/symbol_analysis.c @@ -0,0 +1,298 @@ +/* + * Copyright lizhirui + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-05-18 lizhirui the first version + * 2021-05-20 lizhirui add os debug support + */ + +#include +#include "symbol_analysis.h" + +#define MEMORY_BASE 0x40000000 +#define MEMORY_SIZE (128 * 0x100000) + +extern rt_size_t _osdebug_start; + +static os_symtab_header *symtab_header = (os_symtab_header *)&_osdebug_start; + +//该函数用于在指定的表中查找某个地址对应的符号的描述结构体指针,返回值的符号遵循规则详见文档 +os_symtab_item *find_symbol_table(rt_size_t symbol_table_addr,rt_size_t symbol_num,rt_size_t address) +{ + rt_size_t left = 0; + rt_size_t right = symbol_num; + os_symtab_item *sym_table = (os_symtab_item *)((rt_size_t)&_osdebug_start + symbol_table_addr); + + while(left < right) + { + rt_size_t mid = (left + right) >> 1; + //rt_kprintf("left = %d,right = %d,mid = %d\n",left,right,mid); + + if(address < sym_table[mid].address) + { + right = mid; + + while((right < symbol_num) && ((right - 1) >= 0) && (sym_table[right].address == sym_table[right - 1].address)) + { + right--; + } + } + else if(address == sym_table[mid].address) + { + left = mid + 1; + break; + } + else + { + left = mid; + + while((left >= 0) && ((left + 1) < symbol_num) && (sym_table[left].address == sym_table[left + 1].address)) + { + left++; + } + + left++; + } + } + + left--; + + if(left == ((rt_size_t)-1)) + { + return RT_NULL; + } + + while((left < symbol_num) && ((left - 1) >= 0) && (sym_table[left].address == sym_table[left - 1].address)) + { + left--; + } + + return &sym_table[left]; +} + +//该函数用于根据给定的符号指针从字符串表中找到对应的符号名指针并返回 +const char *get_symbol_name(os_symtab_item *symbol) +{ + return (const char *)((rt_size_t)&_osdebug_start + symtab_header -> string_table_offset + symbol -> name_offset); +} + +//该函数可以根据给定的符号和地址向中断打印出标准格式的符号信息 +void print_symbol(os_symtab_item *symbol,rt_size_t address) +{ + rt_kprintf("<%s(0x%p)",get_symbol_name(symbol),symbol -> address); + + if(symbol -> size) + { + rt_kprintf(" : 0x%x>",symbol -> size); + } + else + { + rt_kprintf(">"); + } + + if(address > symbol -> address) + { + rt_kprintf(" + 0x%x",address - symbol -> address); + } +} + +//该函数用于打印出一个地址关联的全部符号信息 +void print_symbol_info(rt_size_t address,rt_bool_t function) +{ + os_symtab_item *function_symbol = find_symbol_table(symtab_header -> function_table_offset,symtab_header -> function_table_num,address); + os_symtab_item *object_symbol = find_symbol_table(symtab_header -> object_table_offset,symtab_header -> object_table_num,address); + os_symtab_item *general_symbol = find_symbol_table(symtab_header -> general_symbol_table_offset,symtab_header -> general_symbol_table_num,address); + const char *dot = ""; + rt_bool_t valid = RT_FALSE; + + if(function) + { + while(function_symbol != RT_NULL) + { + if((function_symbol -> address + function_symbol -> size) > address) + { + rt_kprintf(dot); + print_symbol(function_symbol,address); + dot = ","; + valid = RT_TRUE; + } + + if(((rt_size_t)(function_symbol + 1)) >= (((rt_size_t)&_osdebug_start) + symtab_header -> function_table_offset + symtab_header -> function_table_num * sizeof(os_symtab_item))) + { + break; + } + + if(function_symbol[0].address == function_symbol[1].address) + { + function_symbol++; + } + + break; + } + + if(!valid) + { + while(general_symbol != RT_NULL) + { + rt_kprintf(dot); + print_symbol(general_symbol,address); + dot = ","; + valid = RT_TRUE; + + if(((rt_size_t)(general_symbol + 1)) >= (((rt_size_t)&_osdebug_start) + symtab_header -> general_symbol_table_offset + symtab_header -> general_symbol_table_num * sizeof(os_symtab_item))) + { + break; + } + + if(general_symbol[0].address == general_symbol[1].address) + { + general_symbol++; + } + + break; + } + + while(object_symbol != RT_NULL) + { + if((object_symbol -> address + object_symbol -> size) > address) + { + rt_kprintf(dot); + print_symbol(object_symbol,address); + dot = ","; + valid = RT_TRUE; + } + + if(((rt_size_t)(object_symbol + 1)) >= (((rt_size_t)&_osdebug_start) + symtab_header -> object_table_offset + symtab_header -> object_table_num * sizeof(os_symtab_item))) + { + break; + } + + if(object_symbol[0].address == object_symbol[1].address) + { + object_symbol++; + } + + break; + } + } + } + else + { + while(object_symbol != RT_NULL) + { + if((object_symbol -> address + object_symbol -> size) > address) + { + rt_kprintf(dot); + print_symbol(object_symbol,address); + dot = ","; + valid = RT_TRUE; + } + + if(((rt_size_t)(object_symbol + 1)) >= (((rt_size_t)&_osdebug_start) + symtab_header -> object_table_offset + symtab_header -> object_table_num * sizeof(os_symtab_item))) + { + break; + } + + if(object_symbol[0].address == object_symbol[1].address) + { + object_symbol++; + } + + break; + } + + if(!valid) + { + while(general_symbol != RT_NULL) + { + rt_kprintf(dot); + print_symbol(general_symbol,address); + dot = ","; + valid = RT_TRUE; + + if(((rt_size_t)(general_symbol + 1)) >= (((rt_size_t)&_osdebug_start) + symtab_header -> general_symbol_table_offset + symtab_header -> general_symbol_table_num * sizeof(os_symtab_item))) + { + break; + } + + if(general_symbol[0].address == general_symbol[1].address) + { + general_symbol++; + } + + break; + } + + while(function_symbol != RT_NULL) + { + if((function_symbol -> address + function_symbol -> size) > address) + { + rt_kprintf(dot); + print_symbol(function_symbol,address); + dot = ","; + valid = RT_TRUE; + } + + if(((rt_size_t)(function_symbol + 1)) >= (((rt_size_t)&_osdebug_start) + symtab_header -> function_table_offset + symtab_header -> function_table_num * sizeof(os_symtab_item))) + { + break; + } + + if(function_symbol[0].address == function_symbol[1].address) + { + function_symbol++; + } + + break; + } + } + } + + if(dot == "") + { + rt_kprintf(""); + } +} + +//该函数用于在出错时打印出栈跟踪信息 +void print_stacktrace(rt_size_t epc,rt_size_t fp) +{ + rt_kprintf("-----------------------------Dump Stacktrace----------------------------\n\n"); + rt_size_t sp = fp; + rt_size_t i = 0; + + rt_kprintf("address 0x%p(",epc); + print_symbol_info(epc,RT_TRUE); + rt_kprintf(")\n\n"); + + while(1) + { + if((sp >= MEMORY_BASE) && (sp < (MEMORY_BASE + MEMORY_SIZE))) + { + //rt_kprintf("%d: 0x%p\n",i,sp); + rt_size_t *stack = (rt_size_t *)(sp - sizeof(rt_size_t) * 2); + rt_size_t ra = stack[1]; + + if(!ra) + { + break; + } + + rt_kprintf("return to 0x%p(",ra); + print_symbol_info(ra,RT_TRUE); + rt_kprintf(")\n\n"); + //rt_kprintf("ra = 0x%p,fp = 0x%p\n",stack[1],stack[0]); + sp = stack[0]; + i++; + } + else + { + break; + } + } + + rt_kprintf("---------------------------------Dump OK--------------------------------\n"); +} diff --git a/libcpu/risc-v/t-head/c908/symbol_analysis.h b/libcpu/risc-v/t-head/c908/symbol_analysis.h new file mode 100644 index 00000000000..a9db46ffd39 --- /dev/null +++ b/libcpu/risc-v/t-head/c908/symbol_analysis.h @@ -0,0 +1,44 @@ +/* + * Copyright lizhirui + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-05-18 lizhirui the first version + * 2021-05-20 lizhirui add os debug support + */ + +#ifndef __SYMBOL_ANALYSIS_H__ +#define __SYMBOL_ANALYSIS_H__ + + #include + + //osdebug节区头描述结构体 + typedef struct os_symtab_header + { + rt_size_t function_table_offset;//函数表的偏移地址(相对于节区起始地址,下同) + rt_size_t function_table_num;//函数表中的符号数量 + rt_size_t object_table_offset;//对象表的偏移地址 + rt_size_t object_table_num;//对象表中的符号数量 + rt_size_t general_symbol_table_offset;//一般符号(指代类型虽为NONE但带有GLOBAL的符号)表的偏移地址 + rt_size_t general_symbol_table_num;//一般符号表中的符号数量 + rt_size_t string_table_offset;//字符串表的偏移地址 + rt_size_t string_table_size;//字符串表的大小(字节为单位) + }os_symtab_header; + + //符号描述结构体 + typedef struct os_symtab_item + { + rt_size_t name_offset;//符号名称在字符串表中的偏移地址 + rt_size_t address;//该符号所代表的地址 + rt_size_t size;//该符号所代表的大小 + }os_symtab_item; + + os_symtab_item *find_symbol_table(rt_size_t symbol_table_addr,rt_size_t symbol_num,rt_size_t address); + const char *get_symbol_name(os_symtab_item *symbol); + void print_symbol(os_symtab_item *symbol,rt_size_t address); + void print_symbol_info(rt_size_t address,rt_bool_t function); + void print_stacktrace(rt_size_t epc,rt_size_t fp); + +#endif From 8a53e6d63947a0ee0c60da53d322c75e0f5048cc Mon Sep 17 00:00:00 2001 From: heyuanjie87 <943313837@qq.com> Date: Fri, 20 Sep 2024 10:43:13 +0800 Subject: [PATCH 27/54] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libcpu/risc-v/t-head/c908/opcode.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libcpu/risc-v/t-head/c908/opcode.h b/libcpu/risc-v/t-head/c908/opcode.h index 2952b5465da..90b002dc4eb 100644 --- a/libcpu/risc-v/t-head/c908/opcode.h +++ b/libcpu/risc-v/t-head/c908/opcode.h @@ -14,7 +14,7 @@ /** * @brief binary opcode pseudo operations * Used to bypass toolchain restriction on extension ISA - * + * * WARNING: Xuantie ISAs are not compatible to each other in opcode. * It's painful to port this file, and should be really careful. */ @@ -23,9 +23,9 @@ * @brief RISC-V instruction formats */ -/** +/** * R type: .insn r opcode6, func3, func7, rd, rs1, rs2 - * + * * +-------+-----+-----+-------+----+---------+ * | func7 | rs2 | rs1 | func3 | rd | opcode6 | * +-------+-----+-----+-------+----+---------+ From ee5014d32f7b1ee61b6d00218e6b1ffa8770ae96 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sun, 22 Sep 2024 13:28:15 -0400 Subject: [PATCH 28/54] [klibc] add kerrno.h --- include/klibc/kerrno.h | 77 ++++++++++++++++++ include/klibc/kstdio.h | 27 +++++++ include/klibc/kstring.h | 36 +++++++++ include/rtdef.h | 63 ++------------- include/rtklibc.h | 42 +--------- src/klibc/kerrno.c | 169 ++++++++++++++++++++++++++++++++++++++++ src/klibc/kstdio.c | 157 +------------------------------------ src/klibc/kstring.c | 5 +- 8 files changed, 319 insertions(+), 257 deletions(-) create mode 100644 include/klibc/kerrno.h create mode 100644 include/klibc/kstdio.h create mode 100644 include/klibc/kstring.h create mode 100644 src/klibc/kerrno.c diff --git a/include/klibc/kerrno.h b/include/klibc/kerrno.h new file mode 100644 index 00000000000..2f7699923f6 --- /dev/null +++ b/include/klibc/kerrno.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-09-22 Meco Man the first version + */ + +#ifndef __RT_KERRNO_H__ +#define __RT_KERRNO_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(RT_USING_LIBC) && !defined(RT_USING_NANO) +/* POSIX error code compatible */ +#define RT_EOK 0 /**< There is no error */ +#define RT_ERROR 255 /**< A generic/unknown error happens */ +#define RT_ETIMEOUT ETIMEDOUT /**< Timed out */ +#define RT_EFULL ENOSPC /**< The resource is full */ +#define RT_EEMPTY ENODATA /**< The resource is empty */ +#define RT_ENOMEM ENOMEM /**< No memory */ +#define RT_ENOSYS ENOSYS /**< Function not implemented */ +#define RT_EBUSY EBUSY /**< Busy */ +#define RT_EIO EIO /**< IO error */ +#define RT_EINTR EINTR /**< Interrupted system call */ +#define RT_EINVAL EINVAL /**< Invalid argument */ +#define RT_ENOENT ENOENT /**< No entry */ +#define RT_ENOSPC ENOSPC /**< No space left */ +#define RT_EPERM EPERM /**< Operation not permitted */ +#define RT_EFAULT EFAULT /**< Bad address */ +#define RT_ENOBUFS ENOBUFS /**< No buffer space is available */ +#define RT_ESCHEDISR 253 /**< scheduler failure in isr context */ +#define RT_ESCHEDLOCKED 252 /**< scheduler failure in critical region */ +#define RT_ETRAP 254 /**< Trap event */ +#else +#define RT_EOK 0 /**< There is no error */ +#define RT_ERROR 1 /**< A generic/unknown error happens */ +#define RT_ETIMEOUT 2 /**< Timed out */ +#define RT_EFULL 3 /**< The resource is full */ +#define RT_EEMPTY 4 /**< The resource is empty */ +#define RT_ENOMEM 5 /**< No memory */ +#define RT_ENOSYS 6 /**< Function not implemented */ +#define RT_EBUSY 7 /**< Busy */ +#define RT_EIO 8 /**< IO error */ +#define RT_EINTR 9 /**< Interrupted system call */ +#define RT_EINVAL 10 /**< Invalid argument */ +#define RT_ENOENT 11 /**< No entry */ +#define RT_ENOSPC 12 /**< No space left */ +#define RT_EPERM 13 /**< Operation not permitted */ +#define RT_ETRAP 14 /**< Trap event */ +#define RT_EFAULT 15 /**< Bad address */ +#define RT_ENOBUFS 16 /**< No buffer space is available */ +#define RT_ESCHEDISR 17 /**< scheduler failure in isr context */ +#define RT_ESCHEDLOCKED 18 /**< scheduler failure in critical region */ +#endif /* defined(RT_USING_LIBC) && !defined(RT_USING_NANO) */ + +rt_err_t rt_get_errno(void); +void rt_set_errno(rt_err_t no); +int *_rt_errno(void); +const char *rt_strerror(rt_err_t error); +#if !defined(RT_USING_NEWLIBC) && !defined(_WIN32) +#ifndef errno +#define errno *_rt_errno() +#endif +#endif /* !defined(RT_USING_NEWLIBC) && !defined(_WIN32) */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/klibc/kstdio.h b/include/klibc/kstdio.h new file mode 100644 index 00000000000..215e9a9245a --- /dev/null +++ b/include/klibc/kstdio.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-09-22 Meco Man the first version + */ + +#ifndef __RT_KSTDIO_H__ +#define __RT_KSTDIO_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +int rt_vsprintf(char *dest, const char *format, va_list arg_ptr); +int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list args); +int rt_sprintf(char *buf, const char *format, ...); +int rt_snprintf(char *buf, rt_size_t size, const char *format, ...); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/klibc/kstring.h b/include/klibc/kstring.h new file mode 100644 index 00000000000..48fbe600914 --- /dev/null +++ b/include/klibc/kstring.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-09-22 Meco Man the first version + */ + +#ifndef __RT_KSTRING_H__ +#define __RT_KSTRING_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +void *rt_memset(void *src, int c, rt_ubase_t n); +void *rt_memcpy(void *dest, const void *src, rt_ubase_t n); +void *rt_memmove(void *dest, const void *src, rt_size_t n); +rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_size_t count); +char *rt_strdup(const char *s); +rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen); +char *rt_strstr(const char *str1, const char *str2); +rt_int32_t rt_strcasecmp(const char *a, const char *b); +char *rt_strcpy(char *dst, const char *src); +char *rt_strncpy(char *dest, const char *src, rt_size_t n); +rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_size_t count); +rt_int32_t rt_strcmp(const char *cs, const char *ct); +rt_size_t rt_strlen(const char *src); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/rtdef.h b/include/rtdef.h index 6985bb8f51a..17dbc329b0c 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -84,12 +84,11 @@ extern "C" { #define RT_VERSION_PATCH 0 /**< Patch version number (x.x.X) */ /* e.g. #if (RTTHREAD_VERSION >= RT_VERSION_CHECK(4, 1, 0) */ -#define RT_VERSION_CHECK(major, minor, revise) ((major * 10000) + (minor * 100) + revise) +#define RT_VERSION_CHECK(major, minor, revise) ((major * 10000U) + (minor * 100U) + revise) /* RT-Thread version */ #define RTTHREAD_VERSION RT_VERSION_CHECK(RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH) - /**@}*/ /* maximum value of base type */ @@ -99,10 +98,10 @@ extern "C" { #define RT_UINT32_MAX UINT32_MAX /**< Maximum number of UINT32 */ #define RT_UINT64_MAX UINT64_MAX /**< Maximum number of UINT64 */ #else -#define RT_UINT8_MAX 0xff /**< Maximum number of UINT8 */ -#define RT_UINT16_MAX 0xffff /**< Maximum number of UINT16 */ -#define RT_UINT32_MAX 0xffffffff /**< Maximum number of UINT32 */ -#define RT_UINT64_MAX 0xffffffffffffffff +#define RT_UINT8_MAX 0xFFU /**< Maximum number of UINT8 */ +#define RT_UINT16_MAX 0xFFFFU /**< Maximum number of UINT16 */ +#define RT_UINT32_MAX 0xFFFFFFFFUL /**< Maximum number of UINT32 */ +#define RT_UINT64_MAX 0xFFFFFFFFFFFFFFFFULL /**< Maximum number of UINT64 */ #endif /* RT_USING_LIBC */ #define RT_TICK_MAX RT_UINT32_MAX /**< Maximum number of tick */ @@ -238,58 +237,6 @@ typedef int (*init_fn_t)(void); #define RT_KERNEL_REALLOC(ptr, size) rt_realloc(ptr, size) #endif /* RT_KERNEL_REALLOC */ -/** - * @addtogroup Error - */ - -/**@{*/ - -/* RT-Thread error code definitions */ -#if defined(RT_USING_LIBC) && !defined(RT_USING_NANO) -/* POSIX error code compatible */ -#define RT_EOK 0 /**< There is no error */ -#define RT_ERROR 255 /**< A generic/unknown error happens */ -#define RT_ETIMEOUT ETIMEDOUT /**< Timed out */ -#define RT_EFULL ENOSPC /**< The resource is full */ -#define RT_EEMPTY ENODATA /**< The resource is empty */ -#define RT_ENOMEM ENOMEM /**< No memory */ -#define RT_ENOSYS ENOSYS /**< Function not implemented */ -#define RT_EBUSY EBUSY /**< Busy */ -#define RT_EIO EIO /**< IO error */ -#define RT_EINTR EINTR /**< Interrupted system call */ -#define RT_EINVAL EINVAL /**< Invalid argument */ -#define RT_ENOENT ENOENT /**< No entry */ -#define RT_ENOSPC ENOSPC /**< No space left */ -#define RT_EPERM EPERM /**< Operation not permitted */ -#define RT_EFAULT EFAULT /**< Bad address */ -#define RT_ENOBUFS ENOBUFS /**< No buffer space is available */ -#define RT_ESCHEDISR 253 /**< scheduler failure in isr context */ -#define RT_ESCHEDLOCKED 252 /**< scheduler failure in critical region */ -#define RT_ETRAP 254 /**< Trap event */ -#else -#define RT_EOK 0 /**< There is no error */ -#define RT_ERROR 1 /**< A generic/unknown error happens */ -#define RT_ETIMEOUT 2 /**< Timed out */ -#define RT_EFULL 3 /**< The resource is full */ -#define RT_EEMPTY 4 /**< The resource is empty */ -#define RT_ENOMEM 5 /**< No memory */ -#define RT_ENOSYS 6 /**< Function not implemented */ -#define RT_EBUSY 7 /**< Busy */ -#define RT_EIO 8 /**< IO error */ -#define RT_EINTR 9 /**< Interrupted system call */ -#define RT_EINVAL 10 /**< Invalid argument */ -#define RT_ENOENT 11 /**< No entry */ -#define RT_ENOSPC 12 /**< No space left */ -#define RT_EPERM 13 /**< Operation not permitted */ -#define RT_ETRAP 14 /**< Trap event */ -#define RT_EFAULT 15 /**< Bad address */ -#define RT_ENOBUFS 16 /**< No buffer space is available */ -#define RT_ESCHEDISR 17 /**< scheduler failure in isr context */ -#define RT_ESCHEDLOCKED 18 /**< scheduler failure in critical region */ -#endif /* defined(RT_USING_LIBC) && !defined(RT_USING_NANO) */ - -/**@}*/ - /** * @ingroup BasicDef * diff --git a/include/rtklibc.h b/include/rtklibc.h index 52fd8b9f1c5..1577c20a6fe 100644 --- a/include/rtklibc.h +++ b/include/rtklibc.h @@ -14,44 +14,8 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - -/* kstdio */ -int rt_vsprintf(char *dest, const char *format, va_list arg_ptr); -int rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list args); -int rt_sprintf(char *buf, const char *format, ...); -int rt_snprintf(char *buf, rt_size_t size, const char *format, ...); - -rt_err_t rt_get_errno(void); -void rt_set_errno(rt_err_t no); -int *_rt_errno(void); -const char *rt_strerror(rt_err_t error); -#if !defined(RT_USING_NEWLIBC) && !defined(_WIN32) -#ifndef errno -#define errno *_rt_errno() -#endif -#endif /* !defined(RT_USING_NEWLIBC) && !defined(_WIN32) */ - -/* kstring */ - -void *rt_memset(void *src, int c, rt_ubase_t n); -void *rt_memcpy(void *dest, const void *src, rt_ubase_t n); -void *rt_memmove(void *dest, const void *src, rt_size_t n); -rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_size_t count); -char *rt_strdup(const char *s); -rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen); -char *rt_strstr(const char *str1, const char *str2); -rt_int32_t rt_strcasecmp(const char *a, const char *b); -char *rt_strcpy(char *dst, const char *src); -char *rt_strncpy(char *dest, const char *src, rt_size_t n); -rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_size_t count); -rt_int32_t rt_strcmp(const char *cs, const char *ct); -rt_size_t rt_strlen(const char *src); - -#ifdef __cplusplus -} -#endif +#include "klibc/kstring.h" +#include "klibc/kstdio.h" +#include "klibc/kerrno.h" #endif /* __RT_KLIBC_H__ */ diff --git a/src/klibc/kerrno.c b/src/klibc/kerrno.c new file mode 100644 index 00000000000..4d83b133cba --- /dev/null +++ b/src/klibc/kerrno.c @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-09-22 Meco Man the first version + */ + +#include + +#define DBG_TAG "kernel.errno" +#ifdef RT_DEBUG_DEVICE +#define DBG_LVL DBG_LOG +#else +#define DBG_LVL DBG_WARNING +#endif /* defined (RT_DEBUG_DEVICE) */ +#include + +/** + * @brief A global variable used to store the error code. + * + * This volatile static integer is used to store the most recent error code globally. + * Its volatile nature ensures that every read operation fetches the most current value, + * providing real-time error status across different parts of the program. + */ +static volatile int __rt_errno; + +/** + * @struct _errno_str_t + * @brief Structure for mapping error codes to corresponding error strings. + * + * This structure is used to create a mapping that associates an rt_err_t type error code + * with a corresponding error description string. + */ +struct _errno_str_t +{ + rt_err_t error; /**< Error code of type rt_err_t, representing different kinds of errors. */ + const char *str; /**< Pointer to the error description string. */ +}; + +/** + * @brief An array containing mappings of error codes to their corresponding error strings. + * + * This array uses the _errno_str_t structure to define several error codes and their + * corresponding error description strings. These mappings can be used at runtime + * to provide more readable error information. + */ +static struct _errno_str_t rt_errno_strs[] = +{ + {RT_EOK , "OK "}, /**< Operation successful. */ + {RT_ERROR , "ERROR "}, /**< General error. */ + {RT_ETIMEOUT, "ETIMOUT"}, /**< Operation timed out. */ + {RT_EFULL , "ERSFULL"}, /**< Resource is full. */ + {RT_EEMPTY , "ERSEPTY"}, /**< Resource is empty. */ + {RT_ENOMEM , "ENOMEM "}, /**< Not enough memory. */ + {RT_ENOSYS , "ENOSYS "}, /**< Function not implemented. */ + {RT_EBUSY , "EBUSY "}, /**< Resource is busy. */ + {RT_EIO , "EIO "}, /**< Input/output error. */ + {RT_EINTR , "EINTRPT"}, /**< Interrupted system call. */ + {RT_EINVAL , "EINVAL "}, /**< Invalid argument. */ + {RT_ENOENT , "ENOENT "}, /**< No such file or directory. */ + {RT_ENOSPC , "ENOSPC "}, /**< No space left on device. */ + {RT_EPERM , "EPERM "}, /**< Operation not permitted. */ + {RT_ETRAP , "ETRAP "}, /**< Trap error. */ +}; + +/** + * @brief This function return a pointer to a string that contains the + * message of error. + * + * @param error the errorno code + * @return a point to error message string + */ +const char *rt_strerror(rt_err_t error) +{ + int i = 0; + + if (error < 0) + error = -error; + + for (i = 0; i < sizeof(rt_errno_strs) / sizeof(rt_errno_strs[0]); i++) + { + if (rt_errno_strs[i].error == error) + return rt_errno_strs[i].str; + } + + return "EUNKNOW"; +} +RTM_EXPORT(rt_strerror); + +/** + * @brief This function gets the global errno for the current thread. + * + * @return errno + */ +rt_err_t rt_get_errno(void) +{ + rt_thread_t tid = RT_NULL; + + if (rt_interrupt_get_nest() != 0) + { + /* it's in interrupt context */ + return __rt_errno; + } + + tid = rt_thread_self(); + if (tid == RT_NULL) + { + return __rt_errno; + } + + return tid->error; +} +RTM_EXPORT(rt_get_errno); + +/** + * @brief This function sets the global errno for the current thread. + * + * @param error is the errno shall be set. + */ +void rt_set_errno(rt_err_t error) +{ + rt_thread_t tid = RT_NULL; + + if (rt_interrupt_get_nest() != 0) + { + /* it's in interrupt context */ + __rt_errno = error; + + return; + } + + tid = rt_thread_self(); + if (tid == RT_NULL) + { + __rt_errno = error; + + return; + } + + tid->error = error; +} +RTM_EXPORT(rt_set_errno); + +/** + * @brief This function returns the address of the current thread errno. + * + * @return The errno address. + */ +int *_rt_errno(void) +{ + rt_thread_t tid = RT_NULL; + + if (rt_interrupt_get_nest() != 0) + { + return (int *)&__rt_errno; + } + + tid = rt_thread_self(); + if (tid != RT_NULL) + { + return (int *) & (tid->error); + } + + return (int *)&__rt_errno; +} +RTM_EXPORT(_rt_errno); diff --git a/src/klibc/kstdio.c b/src/klibc/kstdio.c index 851b1008dd6..4bcd5d460ac 100644 --- a/src/klibc/kstdio.c +++ b/src/klibc/kstdio.c @@ -8,10 +8,7 @@ * 2024-03-10 Meco Man the first version */ -#include -#include -#include -#include +#include #define DBG_TAG "kernel.stdio" #ifdef RT_DEBUG_DEVICE @@ -684,155 +681,3 @@ int rt_sprintf(char *buf, const char *format, ...) return n; } RTM_EXPORT(rt_sprintf); - -/* errno functions */ - -/** - * @brief A global variable used to store the error code. - * - * This volatile static integer is used to store the most recent error code globally. - * Its volatile nature ensures that every read operation fetches the most current value, - * providing real-time error status across different parts of the program. - */ -static volatile int __rt_errno; - -/** - * @struct _errno_str_t - * @brief Structure for mapping error codes to corresponding error strings. - * - * This structure is used to create a mapping that associates an rt_err_t type error code - * with a corresponding error description string. - */ -struct _errno_str_t -{ - rt_err_t error; /**< Error code of type rt_err_t, representing different kinds of errors. */ - const char *str; /**< Pointer to the error description string. */ -}; - -/** - * @brief An array containing mappings of error codes to their corresponding error strings. - * - * This array uses the _errno_str_t structure to define several error codes and their - * corresponding error description strings. These mappings can be used at runtime - * to provide more readable error information. - */ -static struct _errno_str_t rt_errno_strs[] = -{ - {RT_EOK , "OK "}, /**< Operation successful. */ - {RT_ERROR , "ERROR "}, /**< General error. */ - {RT_ETIMEOUT, "ETIMOUT"}, /**< Operation timed out. */ - {RT_EFULL , "ERSFULL"}, /**< Resource is full. */ - {RT_EEMPTY , "ERSEPTY"}, /**< Resource is empty. */ - {RT_ENOMEM , "ENOMEM "}, /**< Not enough memory. */ - {RT_ENOSYS , "ENOSYS "}, /**< Function not implemented. */ - {RT_EBUSY , "EBUSY "}, /**< Resource is busy. */ - {RT_EIO , "EIO "}, /**< Input/output error. */ - {RT_EINTR , "EINTRPT"}, /**< Interrupted system call. */ - {RT_EINVAL , "EINVAL "}, /**< Invalid argument. */ - {RT_ENOENT , "ENOENT "}, /**< No such file or directory. */ - {RT_ENOSPC , "ENOSPC "}, /**< No space left on device. */ - {RT_EPERM , "EPERM "}, /**< Operation not permitted. */ - {RT_ETRAP , "ETRAP "}, /**< Trap error. */ -}; - -/** - * @brief This function return a pointer to a string that contains the - * message of error. - * - * @param error the errorno code - * @return a point to error message string - */ -const char *rt_strerror(rt_err_t error) -{ - int i = 0; - - if (error < 0) - error = -error; - - for (i = 0; i < sizeof(rt_errno_strs) / sizeof(rt_errno_strs[0]); i++) - { - if (rt_errno_strs[i].error == error) - return rt_errno_strs[i].str; - } - - return "EUNKNOW"; -} -RTM_EXPORT(rt_strerror); - -/** - * @brief This function gets the global errno for the current thread. - * - * @return errno - */ -rt_err_t rt_get_errno(void) -{ - rt_thread_t tid = RT_NULL; - - if (rt_interrupt_get_nest() != 0) - { - /* it's in interrupt context */ - return __rt_errno; - } - - tid = rt_thread_self(); - if (tid == RT_NULL) - { - return __rt_errno; - } - - return tid->error; -} -RTM_EXPORT(rt_get_errno); - -/** - * @brief This function sets the global errno for the current thread. - * - * @param error is the errno shall be set. - */ -void rt_set_errno(rt_err_t error) -{ - rt_thread_t tid = RT_NULL; - - if (rt_interrupt_get_nest() != 0) - { - /* it's in interrupt context */ - __rt_errno = error; - - return; - } - - tid = rt_thread_self(); - if (tid == RT_NULL) - { - __rt_errno = error; - - return; - } - - tid->error = error; -} -RTM_EXPORT(rt_set_errno); - -/** - * @brief This function returns the address of the current thread errno. - * - * @return The errno address. - */ -int *_rt_errno(void) -{ - rt_thread_t tid = RT_NULL; - - if (rt_interrupt_get_nest() != 0) - { - return (int *)&__rt_errno; - } - - tid = rt_thread_self(); - if (tid != RT_NULL) - { - return (int *) & (tid->error); - } - - return (int *)&__rt_errno; -} -RTM_EXPORT(_rt_errno); diff --git a/src/klibc/kstring.c b/src/klibc/kstring.c index b3fb3b00299..562c3f7ccdb 100644 --- a/src/klibc/kstring.c +++ b/src/klibc/kstring.c @@ -8,10 +8,7 @@ * 2024-03-10 Meco Man the first version */ -#include -#include -#include -#include +#include #ifdef RT_KLIBC_USING_STDLIB #include #endif /* RT_KLIBC_USING_STDLIB */ From 512dae84bef1d85f8f7670c24ab774c9afdc0133 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 29 Aug 2024 10:12:47 +0800 Subject: [PATCH 29/54] smp_ipi --- components/smp/SConscript | 10 ++++ components/smp/smp.c | 110 ++++++++++++++++++++++++++++++++++ components/smp/smp.h | 30 ++++++++++ include/rtdef.h | 4 ++ libcpu/aarch64/common/setup.c | 5 +- 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 components/smp/SConscript create mode 100644 components/smp/smp.c create mode 100644 components/smp/smp.h diff --git a/components/smp/SConscript b/components/smp/SConscript new file mode 100644 index 00000000000..9b87df0e9f1 --- /dev/null +++ b/components/smp/SConscript @@ -0,0 +1,10 @@ +from building import * + +cwd = GetCurrentDir() +src = [] +if GetDepend("RT_USING_SMP"): + src += Glob('*.c') +CPPPATH = [cwd] +group = DefineGroup('mprotect', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/components/smp/smp.c b/components/smp/smp.c new file mode 100644 index 00000000000..0fab13f9df3 --- /dev/null +++ b/components/smp/smp.c @@ -0,0 +1,110 @@ +#include "smp.h" +struct smp_call **global_work; + +rt_err_t smp_call_handler(struct smp_event * event) +{ + switch(event->event_id) + { + case SMP_CALL_EVENT_FUNC: + event->func(event->data); + break; + default: + rt_kprintf("error event id\n"); + return -RT_ERROR; + break; + } + return RT_EOK; +} +void rt_smp_call_ipi_handler(int vector, void *param) +{ + int err; + struct smp_call *work,*tmp; + int cur_cpu = rt_hw_cpu_id(); + rt_spin_lock(&global_work[cur_cpu]->lock); + rt_list_for_each_entry_safe(work,tmp,&global_work[cur_cpu]->node,node) + { + if(work->event) + { + err = smp_call_handler(work->event); + if(err) + break; + rt_list_remove(&work->node); + rt_free(work); + } + + } + rt_spin_unlock(&global_work[cur_cpu]->lock); + +} + +void rt_smp_call_func_cond(int cpu_mask, smp_func func, void *data) +{ + rt_bool_t run_cur_cpu = RT_TRUE; + rt_bool_t need_call = RT_TRUE; + int cur_cpu = rt_hw_cpu_id(); + int cpuid = 1 << cur_cpu; + int tmp_id = 0; + int tmp_mask = cpu_mask; + + if(cpuid & ~cpu_mask) + run_cur_cpu = RT_FALSE; + + if(run_cur_cpu) + func(data); + + if(!(cpu_mask & cpuid)) + need_call = RT_FALSE; + else + cpu_mask = cpu_mask & (~cpuid); + + if(need_call) + { + while(tmp_mask) + { + if((tmp_mask & 1) && tmp_id < RT_CPUS_NR) + { + struct smp_event *event = rt_calloc(1, sizeof(struct smp_event)); + event->event_id = SMP_CALL_EVENT_FUNC; + event->func = func; + event->data = data; + event->cpu_mask = cpu_mask; + struct smp_call *work = rt_calloc(1, sizeof(struct smp_call)); + if(work == RT_NULL) + break; + + work->event = event; + rt_spin_lock(&global_work[tmp_id]->lock); + rt_list_insert_before(&global_work[tmp_id]->node, &work->node); + rt_spin_unlock(&global_work[tmp_id]->lock); + } + tmp_id++; + tmp_mask = tmp_mask >> 1; + } + rt_hw_ipi_send(RT_IPI_FUNC, cpu_mask); + } +} + +void smp_init(void) +{ + struct smp_call **work_list = (struct smp_call **)rt_malloc(sizeof(struct smp_call *)); + for(int i = 0; i < RT_CPUS_NR; i++) + { + work_list[i] = rt_calloc(1, sizeof(struct smp_call)); + if(work_list[i] == RT_NULL) + break; + rt_list_init(&work_list[i]->node); + rt_spin_lock_init(&work_list[i]->lock); + } + global_work = work_list; +} + +void test_call(void *data) +{ + rt_kprintf("call cpu id = %d \n",rt_hw_cpu_id()); +} +void test() +{ + int cpu_mask = 0xf; + rt_smp_call_func_cond(cpu_mask,test_call, RT_NULL); + +} \ No newline at end of file diff --git a/components/smp/smp.h b/components/smp/smp.h new file mode 100644 index 00000000000..63a7b967126 --- /dev/null +++ b/components/smp/smp.h @@ -0,0 +1,30 @@ +#ifndef __SMP_IPI_H__ +#define __SMP_IPI_H__ +#include +typedef void (*smp_func)(void *data); + +#define SMP_CALL_EVENT_FUNC 0x1 + +struct smp_call +{ + struct rt_spinlock lock; + struct rt_list_node node; + struct smp_event *event; + +}; + +struct smp_event +{ + int cpu_mask; + int event_id; + void *data; + smp_func func; + +}; + +void test(); +void rt_smp_call_func_cond(int cpu_mask,smp_func func, void *data); +void rt_smp_call_ipi_handler(int vector, void *param); +void smp_init(void); + +#endif \ No newline at end of file diff --git a/include/rtdef.h b/include/rtdef.h index 17dbc329b0c..2d22d425249 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -672,6 +672,10 @@ typedef struct rt_cpu_usage_stats *rt_cpu_usage_stats_t; #define RT_STOP_IPI 1 #endif /* RT_STOP_IPI */ +#ifndef RT_IPI_FUNC +#define RT_IPI_FUNC 2 +#endif + #define _SCHEDULER_CONTEXT(fileds) fileds /** diff --git a/libcpu/aarch64/common/setup.c b/libcpu/aarch64/common/setup.c index 304e8565fbc..9d6c16b6394 100644 --- a/libcpu/aarch64/common/setup.c +++ b/libcpu/aarch64/common/setup.c @@ -13,7 +13,7 @@ #define DBG_TAG "cpu.aa64" #define DBG_LVL DBG_INFO #include - +#include #include #include #include @@ -302,11 +302,14 @@ void rt_hw_common_setup(void) rt_thread_idle_sethook(rt_hw_idle_wfi); #ifdef RT_USING_SMP + smp_init(); /* Install the IPI handle */ rt_hw_ipi_handler_install(RT_SCHEDULE_IPI, rt_scheduler_ipi_handler); rt_hw_ipi_handler_install(RT_STOP_IPI, rt_scheduler_ipi_handler); + rt_hw_ipi_handler_install(RT_IPI_FUNC, rt_smp_call_ipi_handler); rt_hw_interrupt_umask(RT_SCHEDULE_IPI); rt_hw_interrupt_umask(RT_STOP_IPI); + rt_hw_interrupt_umask(RT_IPI_FUNC); #endif } From 79445b6773e5af42ab5a2f6627df8aa7fbbd6b8f Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 29 Aug 2024 10:16:33 +0800 Subject: [PATCH 30/54] smp_ipi --- components/smp/smp.c | 2 +- components/smp/smp.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/smp/smp.c b/components/smp/smp.c index 0fab13f9df3..7030ee29aa2 100644 --- a/components/smp/smp.c +++ b/components/smp/smp.c @@ -107,4 +107,4 @@ void test() int cpu_mask = 0xf; rt_smp_call_func_cond(cpu_mask,test_call, RT_NULL); -} \ No newline at end of file +} diff --git a/components/smp/smp.h b/components/smp/smp.h index 63a7b967126..367c5cca05e 100644 --- a/components/smp/smp.h +++ b/components/smp/smp.h @@ -27,4 +27,4 @@ void rt_smp_call_func_cond(int cpu_mask,smp_func func, void *data); void rt_smp_call_ipi_handler(int vector, void *param); void smp_init(void); -#endif \ No newline at end of file +#endif From d1865d0d939cd1783112931589f83c984a671317 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 29 Aug 2024 16:21:19 +0800 Subject: [PATCH 31/54] smp_call --- components/smp/smp.c | 94 ++++++++++--------------- components/smp/smp.h | 17 +++-- examples/utest/testcases/Kconfig | 1 + examples/utest/testcases/smp/Kconfig | 6 ++ examples/utest/testcases/smp/SConscript | 13 ++++ examples/utest/testcases/smp/smp.c | 55 +++++++++++++++ 6 files changed, 122 insertions(+), 64 deletions(-) create mode 100644 examples/utest/testcases/smp/Kconfig create mode 100644 examples/utest/testcases/smp/SConscript create mode 100644 examples/utest/testcases/smp/smp.c diff --git a/components/smp/smp.c b/components/smp/smp.c index 7030ee29aa2..1c854946c47 100644 --- a/components/smp/smp.c +++ b/components/smp/smp.c @@ -1,7 +1,12 @@ #include "smp.h" -struct smp_call **global_work; -rt_err_t smp_call_handler(struct smp_event * event) +#define DBG_TAG "SMP" +#define DBG_LVL DBG_INFO +#include + +struct smp_call global_work[RT_CPUS_NR]; + +rt_err_t smp_call_handler(struct smp_event *event) { switch(event->event_id) { @@ -18,64 +23,57 @@ rt_err_t smp_call_handler(struct smp_event * event) void rt_smp_call_ipi_handler(int vector, void *param) { int err; - struct smp_call *work,*tmp; int cur_cpu = rt_hw_cpu_id(); - rt_spin_lock(&global_work[cur_cpu]->lock); - rt_list_for_each_entry_safe(work,tmp,&global_work[cur_cpu]->node,node) + rt_spin_lock(&global_work[cur_cpu].lock); + if(global_work[cur_cpu].event.event_id) { - if(work->event) + err = smp_call_handler(&global_work[cur_cpu].event); + if(err) { - err = smp_call_handler(work->event); - if(err) - break; - rt_list_remove(&work->node); - rt_free(work); + LOG_E("Have no event\n"); + rt_memset(&global_work[cur_cpu].event,0,sizeof(struct smp_event)); + rt_spin_unlock(&global_work[cur_cpu].lock); } - + rt_memset(&global_work[cur_cpu].event,0,sizeof(struct smp_event)); } - rt_spin_unlock(&global_work[cur_cpu]->lock); + rt_spin_unlock(&global_work[cur_cpu].lock); } void rt_smp_call_func_cond(int cpu_mask, smp_func func, void *data) { - rt_bool_t run_cur_cpu = RT_TRUE; + RT_DEBUG_NOT_IN_INTERRUPT; + struct smp_call work; + struct smp_event event; rt_bool_t need_call = RT_TRUE; int cur_cpu = rt_hw_cpu_id(); int cpuid = 1 << cur_cpu; int tmp_id = 0; - int tmp_mask = cpu_mask; + int tmp_mask; - if(cpuid & ~cpu_mask) - run_cur_cpu = RT_FALSE; - - if(run_cur_cpu) + if(cpuid & cpu_mask) + { func(data); - - if(!(cpu_mask & cpuid)) - need_call = RT_FALSE; - else cpu_mask = cpu_mask & (~cpuid); + } + + if(!cpu_mask) + need_call = RT_FALSE; + tmp_mask = cpu_mask; if(need_call) { while(tmp_mask) { - if((tmp_mask & 1) && tmp_id < RT_CPUS_NR) + if((tmp_mask & 1) && (tmp_id < RT_CPUS_NR)) { - struct smp_event *event = rt_calloc(1, sizeof(struct smp_event)); - event->event_id = SMP_CALL_EVENT_FUNC; - event->func = func; - event->data = data; - event->cpu_mask = cpu_mask; - struct smp_call *work = rt_calloc(1, sizeof(struct smp_call)); - if(work == RT_NULL) - break; - - work->event = event; - rt_spin_lock(&global_work[tmp_id]->lock); - rt_list_insert_before(&global_work[tmp_id]->node, &work->node); - rt_spin_unlock(&global_work[tmp_id]->lock); + event.event_id = SMP_CALL_EVENT_FUNC; + event.func = func; + event.data = data; + event.cpu_mask = cpu_mask; + rt_spin_lock(&global_work[tmp_id].lock); + global_work[tmp_id].event = event; + rt_spin_unlock(&global_work[tmp_id].lock); } tmp_id++; tmp_mask = tmp_mask >> 1; @@ -83,28 +81,14 @@ void rt_smp_call_func_cond(int cpu_mask, smp_func func, void *data) rt_hw_ipi_send(RT_IPI_FUNC, cpu_mask); } } - +struct rt_spinlock lock_1; void smp_init(void) { - struct smp_call **work_list = (struct smp_call **)rt_malloc(sizeof(struct smp_call *)); + rt_spin_lock_init(&lock_1); for(int i = 0; i < RT_CPUS_NR; i++) { - work_list[i] = rt_calloc(1, sizeof(struct smp_call)); - if(work_list[i] == RT_NULL) - break; - rt_list_init(&work_list[i]->node); - rt_spin_lock_init(&work_list[i]->lock); + rt_memset(&global_work[i],0,sizeof(struct smp_call)); + rt_spin_lock_init(&global_work[i].lock); } - global_work = work_list; -} - -void test_call(void *data) -{ - rt_kprintf("call cpu id = %d \n",rt_hw_cpu_id()); } -void test() -{ - int cpu_mask = 0xf; - rt_smp_call_func_cond(cpu_mask,test_call, RT_NULL); -} diff --git a/components/smp/smp.h b/components/smp/smp.h index 367c5cca05e..4148fdbe7e0 100644 --- a/components/smp/smp.h +++ b/components/smp/smp.h @@ -5,14 +5,6 @@ typedef void (*smp_func)(void *data); #define SMP_CALL_EVENT_FUNC 0x1 -struct smp_call -{ - struct rt_spinlock lock; - struct rt_list_node node; - struct smp_event *event; - -}; - struct smp_event { int cpu_mask; @@ -21,8 +13,15 @@ struct smp_event smp_func func; }; +struct smp_call +{ + struct rt_spinlock lock; + struct rt_list_node node; + struct smp_event event; + +}; + -void test(); void rt_smp_call_func_cond(int cpu_mask,smp_func func, void *data); void rt_smp_call_ipi_handler(int vector, void *param); void smp_init(void); diff --git a/examples/utest/testcases/Kconfig b/examples/utest/testcases/Kconfig index cc13e4e70ee..91b41d5aaaf 100644 --- a/examples/utest/testcases/Kconfig +++ b/examples/utest/testcases/Kconfig @@ -15,6 +15,7 @@ rsource "drivers/ipc/Kconfig" rsource "posix/Kconfig" rsource "mm/Kconfig" rsource "tmpfs/Kconfig" +rsource "smp/Kconfig" endif endmenu diff --git a/examples/utest/testcases/smp/Kconfig b/examples/utest/testcases/smp/Kconfig new file mode 100644 index 00000000000..2e144c5b60a --- /dev/null +++ b/examples/utest/testcases/smp/Kconfig @@ -0,0 +1,6 @@ +menu "SMP Testcase" + +config UTEST_SMP_CALL_FUNC + bool "Call random cpu to run func" + default n +endmenu diff --git a/examples/utest/testcases/smp/SConscript b/examples/utest/testcases/smp/SConscript new file mode 100644 index 00000000000..b3570fd0404 --- /dev/null +++ b/examples/utest/testcases/smp/SConscript @@ -0,0 +1,13 @@ +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +CPPPATH = [cwd] + +if GetDepend(['RT_USING_SMP','UTEST_SMP_CALL_FUNC']): + src += ['smp.c'] + +group = DefineGroup('utestcases', src, depend = ['RT_USING_UTESTCASES'], CPPPATH = CPPPATH) + +Return('group') diff --git a/examples/utest/testcases/smp/smp.c b/examples/utest/testcases/smp/smp.c new file mode 100644 index 00000000000..099a9f78991 --- /dev/null +++ b/examples/utest/testcases/smp/smp.c @@ -0,0 +1,55 @@ +#include +#include "utest.h" +#include "utest_assert.h" +#include "smp.h" +int pass_count = 0; +int pass = 1000; +struct rt_spinlock lock; + +void test_call(void *data) +{ + rt_spin_lock(&lock); + int *i = (int *)data; + int id = rt_hw_cpu_id(); + *i &= ~(1 << id); + if(*i == 0) + pass_count++; + rt_spin_unlock(&lock); +} + + +void test() +{ + int cpu_mask = 0xf; + for(int i =0 ;i < 1000 ;i++) + { + cpu_mask = rand()% 0xf; + if (cpu_mask == 0) + pass--; + rt_smp_call_func_cond(cpu_mask,test_call, &cpu_mask); + if(i % 20 == 0) + rt_kprintf("#"); + rt_thread_mdelay(1); + } + rt_kprintf("\n"); +} + + + +static rt_err_t utest_tc_init(void) +{ + rt_spin_lock_init(&lock); + return RT_EOK; +} + +static rt_err_t utest_tc_cleanup(void) +{ + uassert_true(pass_count == pass); + return RT_EOK; +} +static void testcase(void) +{ + UTEST_UNIT_RUN(test); +} + +UTEST_TC_EXPORT(testcase, "testcase.smp.smp", utest_tc_init, utest_tc_cleanup, 10); \ No newline at end of file From 45bc5a721f455a785bdf18f399203db67ec42f8a Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 29 Aug 2024 16:23:55 +0800 Subject: [PATCH 32/54] smp_call --- components/smp/smp.h | 1 - examples/utest/testcases/smp/smp.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/components/smp/smp.h b/components/smp/smp.h index 4148fdbe7e0..ea0a2de124f 100644 --- a/components/smp/smp.h +++ b/components/smp/smp.h @@ -16,7 +16,6 @@ struct smp_event struct smp_call { struct rt_spinlock lock; - struct rt_list_node node; struct smp_event event; }; diff --git a/examples/utest/testcases/smp/smp.c b/examples/utest/testcases/smp/smp.c index 099a9f78991..f35e243912a 100644 --- a/examples/utest/testcases/smp/smp.c +++ b/examples/utest/testcases/smp/smp.c @@ -52,4 +52,4 @@ static void testcase(void) UTEST_UNIT_RUN(test); } -UTEST_TC_EXPORT(testcase, "testcase.smp.smp", utest_tc_init, utest_tc_cleanup, 10); \ No newline at end of file +UTEST_TC_EXPORT(testcase, "testcase.smp.smp", utest_tc_init, utest_tc_cleanup, 10); From 5f83c51347788ab4414cb753485d71c5dc247b6a Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 12 Sep 2024 11:54:50 +0800 Subject: [PATCH 33/54] SMP --- components/smp/smp.c | 80 ++++++++++++++++++++++++------ components/smp/smp.h | 16 ++++-- examples/utest/testcases/smp/smp.c | 53 +++++++++++++------- 3 files changed, 113 insertions(+), 36 deletions(-) diff --git a/components/smp/smp.c b/components/smp/smp.c index 1c854946c47..134d17e3d0c 100644 --- a/components/smp/smp.c +++ b/components/smp/smp.c @@ -1,3 +1,13 @@ +/* + * Copyright (c) 2006-2024 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024/9/12 zhujiale the first version + */ + #include "smp.h" #define DBG_TAG "SMP" @@ -5,18 +15,18 @@ #include struct smp_call global_work[RT_CPUS_NR]; - +rt_atomic_t wait; rt_err_t smp_call_handler(struct smp_event *event) { switch(event->event_id) { case SMP_CALL_EVENT_FUNC: event->func(event->data); + rt_atomic_add(&wait,1); break; default: - rt_kprintf("error event id\n"); - return -RT_ERROR; - break; + LOG_E("error event id\n"); + return RT_ERROR; } return RT_EOK; } @@ -37,20 +47,36 @@ void rt_smp_call_ipi_handler(int vector, void *param) rt_memset(&global_work[cur_cpu].event,0,sizeof(struct smp_event)); } rt_spin_unlock(&global_work[cur_cpu].lock); - + } -void rt_smp_call_func_cond(int cpu_mask, smp_func func, void *data) +/** + * @brief call function on specified CPU , + * + * @param cpu_mask cpu mask for call + * @param func the function pointer + * @param data the data pointer + * @param flag call flag if you set SMP_CALL_WAIT_ALL + * then it will wait all cpu call finish and return + * else it will call function on specified CPU and return immediately + * @param cond the condition function pointer,if you set it then it will call function only when cond return true + */ +void rt_smp_call_func_cond(int cpu_mask, smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond) { RT_DEBUG_NOT_IN_INTERRUPT; - struct smp_call work; struct smp_event event; - rt_bool_t need_call = RT_TRUE; + rt_bool_t need_call = RT_TRUE,need_wait = RT_FALSE; int cur_cpu = rt_hw_cpu_id(); int cpuid = 1 << cur_cpu; - int tmp_id = 0; + int tmp_id = 0,cpu_nr = 0; int tmp_mask; + if(flag == SMP_CALL_WAIT_ALL) + { + need_wait = RT_TRUE; + rt_atomic_store(&wait,0); + } + if(cpuid & cpu_mask) { func(data); @@ -58,7 +84,7 @@ void rt_smp_call_func_cond(int cpu_mask, smp_func func, void *data) } if(!cpu_mask) - need_call = RT_FALSE; + need_call = RT_FALSE; tmp_mask = cpu_mask; if(need_call) @@ -67,6 +93,9 @@ void rt_smp_call_func_cond(int cpu_mask, smp_func func, void *data) { if((tmp_mask & 1) && (tmp_id < RT_CPUS_NR)) { + if(cond && !cond(tmp_id,data)) + continue; + cpu_nr++; event.event_id = SMP_CALL_EVENT_FUNC; event.func = func; event.data = data; @@ -80,15 +109,38 @@ void rt_smp_call_func_cond(int cpu_mask, smp_func func, void *data) } rt_hw_ipi_send(RT_IPI_FUNC, cpu_mask); } + + if(need_wait) + { + while(rt_atomic_load(&wait) != cpu_nr); + } +} + +void rt_call_each_cpu(smp_call_func_back func, void *data,rt_uint8_t flag) +{ + rt_smp_call_func_cond(RT_ALL_CPU,func,data,flag,RT_NULL); +} + +void rt_call_each_cpu_cond(smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func) +{ + rt_smp_call_func_cond(RT_ALL_CPU,func,data,flag,cond_func); +} +void rt_call_any_cpu(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag) +{ + rt_smp_call_func_cond(cpu_mask,func,data,flag,RT_NULL); } -struct rt_spinlock lock_1; + +void rt_call_any_cpu_cond(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func) +{ + rt_smp_call_func_cond(cpu_mask,func,data,flag,cond_func); +} + void smp_init(void) { - rt_spin_lock_init(&lock_1); for(int i = 0; i < RT_CPUS_NR; i++) - { + { rt_memset(&global_work[i],0,sizeof(struct smp_call)); rt_spin_lock_init(&global_work[i].lock); - } + } } diff --git a/components/smp/smp.h b/components/smp/smp.h index ea0a2de124f..821b95ff758 100644 --- a/components/smp/smp.h +++ b/components/smp/smp.h @@ -1,28 +1,34 @@ #ifndef __SMP_IPI_H__ #define __SMP_IPI_H__ #include -typedef void (*smp_func)(void *data); +typedef void (*smp_call_func_back)(void *data); +typedef rt_bool_t (*smp_cond)(int cpu, void *info); #define SMP_CALL_EVENT_FUNC 0x1 +#define SMP_CALL_WAIT_ALL (1 << 0) +#define SMP_CALL_NO_WAIT (1 << 1) + +#define RT_ALL_CPU ((1 << RT_CPUS_NR) - 1) struct smp_event { int cpu_mask; int event_id; void *data; - smp_func func; - + smp_call_func_back func; }; struct smp_call { struct rt_spinlock lock; struct smp_event event; - }; -void rt_smp_call_func_cond(int cpu_mask,smp_func func, void *data); void rt_smp_call_ipi_handler(int vector, void *param); +void rt_call_each_cpu(smp_call_func_back func, void *data,rt_uint8_t flag); +void rt_call_each_cpu_cond(smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); +void rt_call_any_cpu(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag); +void rt_call_any_cpu_cond(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); void smp_init(void); #endif diff --git a/examples/utest/testcases/smp/smp.c b/examples/utest/testcases/smp/smp.c index f35e243912a..1af161b72fc 100644 --- a/examples/utest/testcases/smp/smp.c +++ b/examples/utest/testcases/smp/smp.c @@ -2,39 +2,58 @@ #include "utest.h" #include "utest_assert.h" #include "smp.h" -int pass_count = 0; -int pass = 1000; +int pass_count = 0; +int pass = 1000; struct rt_spinlock lock; void test_call(void *data) { rt_spin_lock(&lock); - int *i = (int *)data; - int id = rt_hw_cpu_id(); - *i &= ~(1 << id); - if(*i == 0) + int *i = (int *)data; + int id = rt_hw_cpu_id(); + *i &= ~(1 << id); + if (*i == 0) pass_count++; rt_spin_unlock(&lock); } -void test() +void test1() { int cpu_mask = 0xf; - for(int i =0 ;i < 1000 ;i++) + for (int i = 0; i < 1000; i++) { - cpu_mask = rand()% 0xf; - if (cpu_mask == 0) - pass--; - rt_smp_call_func_cond(cpu_mask,test_call, &cpu_mask); - if(i % 20 == 0) + cpu_mask = rand() % 0xf; + if (cpu_mask == 0) + pass--; + rt_call_each_cpu(test_call, &cpu_mask, SMP_CALL_NO_WAIT); + if (i % 20 == 0) rt_kprintf("#"); rt_thread_mdelay(1); - } + } rt_kprintf("\n"); + uassert_true(pass_count == pass); } - +void test_call2(void *data) +{ + rt_spin_lock(&lock); + int a = 100000; + while (a--); + int *i = (int *)data; + (*i)++; + rt_spin_unlock(&lock); +} +void test2(void) +{ + int data = 0; + rt_call_each_cpu(test_call2, &data, SMP_CALL_WAIT_ALL); + uassert_true(data == RT_CPUS_NR); + rt_thread_mdelay(10); + data = 0; + rt_call_each_cpu(test_call2, &data, SMP_CALL_NO_WAIT); + uassert_true(data != RT_CPUS_NR); +} static rt_err_t utest_tc_init(void) { @@ -44,12 +63,12 @@ static rt_err_t utest_tc_init(void) static rt_err_t utest_tc_cleanup(void) { - uassert_true(pass_count == pass); return RT_EOK; } static void testcase(void) { - UTEST_UNIT_RUN(test); + UTEST_UNIT_RUN(test1); + UTEST_UNIT_RUN(test2); } UTEST_TC_EXPORT(testcase, "testcase.smp.smp", utest_tc_init, utest_tc_cleanup, 10); From 244cf61af6a0549d2a197af05183a7e902207598 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 12 Sep 2024 13:12:35 +0800 Subject: [PATCH 34/54] SMP --- components/smp/smp.c | 3 +-- examples/utest/testcases/smp/smp.c | 5 +++-- include/rtdef.h | 6 ++++-- libcpu/aarch64/common/setup.c | 4 ++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/components/smp/smp.c b/components/smp/smp.c index 134d17e3d0c..273b7ce22d1 100644 --- a/components/smp/smp.c +++ b/components/smp/smp.c @@ -107,7 +107,7 @@ void rt_smp_call_func_cond(int cpu_mask, smp_call_func_back func, void *data,rt_ tmp_id++; tmp_mask = tmp_mask >> 1; } - rt_hw_ipi_send(RT_IPI_FUNC, cpu_mask); + rt_hw_ipi_send(RT_FUNC_IPI, cpu_mask); } if(need_wait) @@ -143,4 +143,3 @@ void smp_init(void) rt_spin_lock_init(&global_work[i].lock); } } - diff --git a/examples/utest/testcases/smp/smp.c b/examples/utest/testcases/smp/smp.c index 1af161b72fc..d5ca161a8a1 100644 --- a/examples/utest/testcases/smp/smp.c +++ b/examples/utest/testcases/smp/smp.c @@ -26,10 +26,9 @@ void test1() cpu_mask = rand() % 0xf; if (cpu_mask == 0) pass--; - rt_call_each_cpu(test_call, &cpu_mask, SMP_CALL_NO_WAIT); + rt_call_any_cpu(cpu_mask,test_call, &cpu_mask, SMP_CALL_WAIT_ALL); if (i % 20 == 0) rt_kprintf("#"); - rt_thread_mdelay(1); } rt_kprintf("\n"); uassert_true(pass_count == pass); @@ -57,6 +56,8 @@ void test2(void) static rt_err_t utest_tc_init(void) { + pass_count = 0; + pass = 1000; rt_spin_lock_init(&lock); return RT_EOK; } diff --git a/include/rtdef.h b/include/rtdef.h index 2d22d425249..63038be5356 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -672,10 +672,12 @@ typedef struct rt_cpu_usage_stats *rt_cpu_usage_stats_t; #define RT_STOP_IPI 1 #endif /* RT_STOP_IPI */ -#ifndef RT_IPI_FUNC -#define RT_IPI_FUNC 2 +#ifndef RT_FUNC_IPI +#define RT_FUNC_IPI 2 #endif +#define RT_MAX_IPI 3 + #define _SCHEDULER_CONTEXT(fileds) fileds /** diff --git a/libcpu/aarch64/common/setup.c b/libcpu/aarch64/common/setup.c index 9d6c16b6394..bbc349a3699 100644 --- a/libcpu/aarch64/common/setup.c +++ b/libcpu/aarch64/common/setup.c @@ -306,10 +306,10 @@ void rt_hw_common_setup(void) /* Install the IPI handle */ rt_hw_ipi_handler_install(RT_SCHEDULE_IPI, rt_scheduler_ipi_handler); rt_hw_ipi_handler_install(RT_STOP_IPI, rt_scheduler_ipi_handler); - rt_hw_ipi_handler_install(RT_IPI_FUNC, rt_smp_call_ipi_handler); + rt_hw_ipi_handler_install(RT_FUNC_IPI, rt_smp_call_ipi_handler); rt_hw_interrupt_umask(RT_SCHEDULE_IPI); rt_hw_interrupt_umask(RT_STOP_IPI); - rt_hw_interrupt_umask(RT_IPI_FUNC); + rt_hw_interrupt_umask(RT_FUNC_IPI); #endif } From d468b936574560bf409033a498ed4b68ec845379 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 12 Sep 2024 13:23:38 +0800 Subject: [PATCH 35/54] smp --- components/smp/smp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/smp/smp.c b/components/smp/smp.c index 273b7ce22d1..cb2f0433b74 100644 --- a/components/smp/smp.c +++ b/components/smp/smp.c @@ -26,7 +26,7 @@ rt_err_t smp_call_handler(struct smp_event *event) break; default: LOG_E("error event id\n"); - return RT_ERROR; + return -RT_ERROR; } return RT_EOK; } From 8ce405f739c195d93c485ba2c23ac127f3ade689 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 12 Sep 2024 18:25:10 +0800 Subject: [PATCH 36/54] smp --- components/smp/SConscript | 2 +- components/smp/smp.c | 96 +++++++++++++++--------------- components/smp/smp.h | 16 ++--- examples/utest/testcases/smp/smp.c | 6 +- libcpu/aarch64/common/setup.c | 2 +- 5 files changed, 61 insertions(+), 61 deletions(-) diff --git a/components/smp/SConscript b/components/smp/SConscript index 9b87df0e9f1..2f4fe0b8ec4 100644 --- a/components/smp/SConscript +++ b/components/smp/SConscript @@ -5,6 +5,6 @@ src = [] if GetDepend("RT_USING_SMP"): src += Glob('*.c') CPPPATH = [cwd] -group = DefineGroup('mprotect', src, depend = [''], CPPPATH = CPPPATH) +group = DefineGroup('smp', src, depend = [''], CPPPATH = CPPPATH) Return('group') diff --git a/components/smp/smp.c b/components/smp/smp.c index cb2f0433b74..6829bdf8102 100644 --- a/components/smp/smp.c +++ b/components/smp/smp.c @@ -14,15 +14,15 @@ #define DBG_LVL DBG_INFO #include -struct smp_call global_work[RT_CPUS_NR]; -rt_atomic_t wait; -rt_err_t smp_call_handler(struct smp_event *event) +struct rt_smp_call rt_smp_work[RT_CPUS_NR]; +rt_atomic_t rt_smp_wait; +rt_err_t smp_call_handler(struct rt_smp_event *event) { - switch(event->event_id) + switch (event->event_id) { case SMP_CALL_EVENT_FUNC: event->func(event->data); - rt_atomic_add(&wait,1); + rt_atomic_add(&rt_smp_wait, 1); break; default: LOG_E("error event id\n"); @@ -34,20 +34,20 @@ void rt_smp_call_ipi_handler(int vector, void *param) { int err; int cur_cpu = rt_hw_cpu_id(); - rt_spin_lock(&global_work[cur_cpu].lock); - if(global_work[cur_cpu].event.event_id) + rt_spin_lock(&rt_smp_work[cur_cpu].lock); + + if (rt_smp_work[cur_cpu].event.event_id) { - err = smp_call_handler(&global_work[cur_cpu].event); - if(err) + err = smp_call_handler(&rt_smp_work[cur_cpu].event); + if (err) { LOG_E("Have no event\n"); - rt_memset(&global_work[cur_cpu].event,0,sizeof(struct smp_event)); - rt_spin_unlock(&global_work[cur_cpu].lock); + rt_memset(&rt_smp_work[cur_cpu].event, 0, sizeof(struct rt_smp_event)); + rt_spin_unlock(&rt_smp_work[cur_cpu].lock); } - rt_memset(&global_work[cur_cpu].event,0,sizeof(struct smp_event)); + rt_memset(&rt_smp_work[cur_cpu].event, 0, sizeof(struct rt_smp_event)); } - rt_spin_unlock(&global_work[cur_cpu].lock); - + rt_spin_unlock(&rt_smp_work[cur_cpu].lock); } /** @@ -61,48 +61,48 @@ void rt_smp_call_ipi_handler(int vector, void *param) * else it will call function on specified CPU and return immediately * @param cond the condition function pointer,if you set it then it will call function only when cond return true */ -void rt_smp_call_func_cond(int cpu_mask, smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond) +void rt_smp_call_func_cond(int cpu_mask, smp_call_func_back func, void *data, rt_uint8_t flag, smp_cond cond) { RT_DEBUG_NOT_IN_INTERRUPT; - struct smp_event event; - rt_bool_t need_call = RT_TRUE,need_wait = RT_FALSE; - int cur_cpu = rt_hw_cpu_id(); - int cpuid = 1 << cur_cpu; - int tmp_id = 0,cpu_nr = 0; - int tmp_mask; + struct rt_smp_event event; + rt_bool_t need_call = RT_TRUE, need_wait = RT_FALSE; + int cur_cpu = rt_hw_cpu_id(); + int cpuid = 1 << cur_cpu; + int tmp_id = 0, cpu_nr = 0; + int tmp_mask; - if(flag == SMP_CALL_WAIT_ALL) + if (flag == SMP_CALL_WAIT_ALL) { need_wait = RT_TRUE; - rt_atomic_store(&wait,0); + rt_atomic_store(&rt_smp_wait, 0); } - if(cpuid & cpu_mask) + if (cpuid & cpu_mask) { func(data); cpu_mask = cpu_mask & (~cpuid); } - if(!cpu_mask) + if (!cpu_mask) need_call = RT_FALSE; tmp_mask = cpu_mask; - if(need_call) + if (need_call) { - while(tmp_mask) + while (tmp_mask) { - if((tmp_mask & 1) && (tmp_id < RT_CPUS_NR)) + if ((tmp_mask & 1) && (tmp_id < RT_CPUS_NR)) { - if(cond && !cond(tmp_id,data)) + if (cond && !cond(tmp_id, data)) continue; cpu_nr++; event.event_id = SMP_CALL_EVENT_FUNC; - event.func = func; - event.data = data; + event.func = func; + event.data = data; event.cpu_mask = cpu_mask; - rt_spin_lock(&global_work[tmp_id].lock); - global_work[tmp_id].event = event; - rt_spin_unlock(&global_work[tmp_id].lock); + rt_spin_lock(&rt_smp_work[tmp_id].lock); + rt_smp_work[tmp_id].event = event; + rt_spin_unlock(&rt_smp_work[tmp_id].lock); } tmp_id++; tmp_mask = tmp_mask >> 1; @@ -110,36 +110,36 @@ void rt_smp_call_func_cond(int cpu_mask, smp_call_func_back func, void *data,rt_ rt_hw_ipi_send(RT_FUNC_IPI, cpu_mask); } - if(need_wait) + if (need_wait) { - while(rt_atomic_load(&wait) != cpu_nr); + while (rt_atomic_load(&rt_smp_wait) != cpu_nr); } } -void rt_call_each_cpu(smp_call_func_back func, void *data,rt_uint8_t flag) +void rt_smp_call_each_cpu(smp_call_func_back func, void *data, rt_uint8_t flag) { - rt_smp_call_func_cond(RT_ALL_CPU,func,data,flag,RT_NULL); + rt_smp_call_func_cond(RT_ALL_CPU, func, data, flag, RT_NULL); } -void rt_call_each_cpu_cond(smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func) +void rt_smp_call_each_cpu_cond(smp_call_func_back func, void *data, rt_uint8_t flag, smp_cond cond_func) { - rt_smp_call_func_cond(RT_ALL_CPU,func,data,flag,cond_func); + rt_smp_call_func_cond(RT_ALL_CPU, func, data, flag, cond_func); } -void rt_call_any_cpu(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag) +void rt_smp_call_any_cpu(int cpu_mask, smp_call_func_back func, void *data, rt_uint8_t flag) { - rt_smp_call_func_cond(cpu_mask,func,data,flag,RT_NULL); + rt_smp_call_func_cond(cpu_mask, func, data, flag, RT_NULL); } -void rt_call_any_cpu_cond(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func) +void rt_smp_call_any_cpu_cond(int cpu_mask, smp_call_func_back func, void *data, rt_uint8_t flag, smp_cond cond_func) { - rt_smp_call_func_cond(cpu_mask,func,data,flag,cond_func); + rt_smp_call_func_cond(cpu_mask, func, data, flag, cond_func); } -void smp_init(void) +void rt_smp_init(void) { - for(int i = 0; i < RT_CPUS_NR; i++) + for (int i = 0; i < RT_CPUS_NR; i++) { - rt_memset(&global_work[i],0,sizeof(struct smp_call)); - rt_spin_lock_init(&global_work[i].lock); + rt_memset(&rt_smp_work[i], 0, sizeof(struct rt_smp_call)); + rt_spin_lock_init(&rt_smp_work[i].lock); } } diff --git a/components/smp/smp.h b/components/smp/smp.h index 821b95ff758..9539f907b17 100644 --- a/components/smp/smp.h +++ b/components/smp/smp.h @@ -10,25 +10,25 @@ typedef rt_bool_t (*smp_cond)(int cpu, void *info); #define SMP_CALL_NO_WAIT (1 << 1) #define RT_ALL_CPU ((1 << RT_CPUS_NR) - 1) -struct smp_event +struct rt_smp_event { int cpu_mask; int event_id; void *data; smp_call_func_back func; }; -struct smp_call +struct rt_smp_call { struct rt_spinlock lock; - struct smp_event event; + struct rt_smp_event event; }; void rt_smp_call_ipi_handler(int vector, void *param); -void rt_call_each_cpu(smp_call_func_back func, void *data,rt_uint8_t flag); -void rt_call_each_cpu_cond(smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); -void rt_call_any_cpu(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag); -void rt_call_any_cpu_cond(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); -void smp_init(void); +void rt_smp_call_each_cpu(smp_call_func_back func, void *data,rt_uint8_t flag); +void rt_smp_call_each_cpu_cond(smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); +void rt_smp_call_any_cpu(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag); +void rt_smp_call_any_cpu_cond(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); +void rt_smp_init(void); #endif diff --git a/examples/utest/testcases/smp/smp.c b/examples/utest/testcases/smp/smp.c index d5ca161a8a1..f4326f5f421 100644 --- a/examples/utest/testcases/smp/smp.c +++ b/examples/utest/testcases/smp/smp.c @@ -26,7 +26,7 @@ void test1() cpu_mask = rand() % 0xf; if (cpu_mask == 0) pass--; - rt_call_any_cpu(cpu_mask,test_call, &cpu_mask, SMP_CALL_WAIT_ALL); + rt_smp_call_any_cpu(cpu_mask,test_call, &cpu_mask, SMP_CALL_WAIT_ALL); if (i % 20 == 0) rt_kprintf("#"); } @@ -46,11 +46,11 @@ void test_call2(void *data) void test2(void) { int data = 0; - rt_call_each_cpu(test_call2, &data, SMP_CALL_WAIT_ALL); + rt_smp_call_each_cpu(test_call2, &data, SMP_CALL_WAIT_ALL); uassert_true(data == RT_CPUS_NR); rt_thread_mdelay(10); data = 0; - rt_call_each_cpu(test_call2, &data, SMP_CALL_NO_WAIT); + rt_smp_call_each_cpu(test_call2, &data, SMP_CALL_NO_WAIT); uassert_true(data != RT_CPUS_NR); } diff --git a/libcpu/aarch64/common/setup.c b/libcpu/aarch64/common/setup.c index bbc349a3699..6c16801a107 100644 --- a/libcpu/aarch64/common/setup.c +++ b/libcpu/aarch64/common/setup.c @@ -302,7 +302,7 @@ void rt_hw_common_setup(void) rt_thread_idle_sethook(rt_hw_idle_wfi); #ifdef RT_USING_SMP - smp_init(); + rt_smp_init(); /* Install the IPI handle */ rt_hw_ipi_handler_install(RT_SCHEDULE_IPI, rt_scheduler_ipi_handler); rt_hw_ipi_handler_install(RT_STOP_IPI, rt_scheduler_ipi_handler); From 4953a92528d0474fea1fbd33bd6945344351e9f7 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 12 Sep 2024 18:26:21 +0800 Subject: [PATCH 37/54] smp --- components/{ => drivers}/smp/SConscript | 0 components/{ => drivers}/smp/smp.c | 0 components/{ => drivers}/smp/smp.h | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename components/{ => drivers}/smp/SConscript (100%) rename components/{ => drivers}/smp/smp.c (100%) rename components/{ => drivers}/smp/smp.h (100%) diff --git a/components/smp/SConscript b/components/drivers/smp/SConscript similarity index 100% rename from components/smp/SConscript rename to components/drivers/smp/SConscript diff --git a/components/smp/smp.c b/components/drivers/smp/smp.c similarity index 100% rename from components/smp/smp.c rename to components/drivers/smp/smp.c diff --git a/components/smp/smp.h b/components/drivers/smp/smp.h similarity index 100% rename from components/smp/smp.h rename to components/drivers/smp/smp.h From 6783d8fdecf49d377d8b9acc8d3dd05d197dc936 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Thu, 12 Sep 2024 18:30:34 +0800 Subject: [PATCH 38/54] smp --- components/drivers/smp/smp.c | 10 +++++----- components/drivers/smp/smp.h | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/components/drivers/smp/smp.c b/components/drivers/smp/smp.c index 6829bdf8102..683d3348dc3 100644 --- a/components/drivers/smp/smp.c +++ b/components/drivers/smp/smp.c @@ -61,7 +61,7 @@ void rt_smp_call_ipi_handler(int vector, void *param) * else it will call function on specified CPU and return immediately * @param cond the condition function pointer,if you set it then it will call function only when cond return true */ -void rt_smp_call_func_cond(int cpu_mask, smp_call_func_back func, void *data, rt_uint8_t flag, smp_cond cond) +void rt_smp_call_func_cond(int cpu_mask, rt_smp_call_func_back func, void *data, rt_uint8_t flag, rt_smp_cond cond) { RT_DEBUG_NOT_IN_INTERRUPT; struct rt_smp_event event; @@ -116,21 +116,21 @@ void rt_smp_call_func_cond(int cpu_mask, smp_call_func_back func, void *data, rt } } -void rt_smp_call_each_cpu(smp_call_func_back func, void *data, rt_uint8_t flag) +void rt_smp_call_each_cpu(rt_smp_call_func_back func, void *data, rt_uint8_t flag) { rt_smp_call_func_cond(RT_ALL_CPU, func, data, flag, RT_NULL); } -void rt_smp_call_each_cpu_cond(smp_call_func_back func, void *data, rt_uint8_t flag, smp_cond cond_func) +void rt_smp_call_each_cpu_cond(rt_smp_call_func_back func, void *data, rt_uint8_t flag, rt_smp_cond cond_func) { rt_smp_call_func_cond(RT_ALL_CPU, func, data, flag, cond_func); } -void rt_smp_call_any_cpu(int cpu_mask, smp_call_func_back func, void *data, rt_uint8_t flag) +void rt_smp_call_any_cpu(int cpu_mask, rt_smp_call_func_back func, void *data, rt_uint8_t flag) { rt_smp_call_func_cond(cpu_mask, func, data, flag, RT_NULL); } -void rt_smp_call_any_cpu_cond(int cpu_mask, smp_call_func_back func, void *data, rt_uint8_t flag, smp_cond cond_func) +void rt_smp_call_any_cpu_cond(int cpu_mask, rt_smp_call_func_back func, void *data, rt_uint8_t flag, rt_smp_cond cond_func) { rt_smp_call_func_cond(cpu_mask, func, data, flag, cond_func); } diff --git a/components/drivers/smp/smp.h b/components/drivers/smp/smp.h index 9539f907b17..cc497a8ae03 100644 --- a/components/drivers/smp/smp.h +++ b/components/drivers/smp/smp.h @@ -1,8 +1,8 @@ #ifndef __SMP_IPI_H__ #define __SMP_IPI_H__ #include -typedef void (*smp_call_func_back)(void *data); -typedef rt_bool_t (*smp_cond)(int cpu, void *info); +typedef void (*rt_smp_call_func_back)(void *data); +typedef rt_bool_t (*rt_smp_cond)(int cpu, void *info); #define SMP_CALL_EVENT_FUNC 0x1 @@ -15,7 +15,7 @@ struct rt_smp_event int cpu_mask; int event_id; void *data; - smp_call_func_back func; + rt_smp_call_func_back func; }; struct rt_smp_call { @@ -25,10 +25,10 @@ struct rt_smp_call void rt_smp_call_ipi_handler(int vector, void *param); -void rt_smp_call_each_cpu(smp_call_func_back func, void *data,rt_uint8_t flag); -void rt_smp_call_each_cpu_cond(smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); -void rt_smp_call_any_cpu(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag); -void rt_smp_call_any_cpu_cond(int cpu_mask,smp_call_func_back func, void *data,rt_uint8_t flag,smp_cond cond_func); +void rt_smp_call_each_cpu(rt_smp_call_func_back func, void *data,rt_uint8_t flag); +void rt_smp_call_each_cpu_cond(rt_smp_call_func_back func, void *data,rt_uint8_t flag,rt_smp_cond cond_func); +void rt_smp_call_any_cpu(int cpu_mask,rt_smp_call_func_back func, void *data,rt_uint8_t flag); +void rt_smp_call_any_cpu_cond(int cpu_mask,rt_smp_call_func_back func, void *data,rt_uint8_t flag,rt_smp_cond cond_func); void rt_smp_init(void); #endif From b206d440c7df0752b2c32b10842e119785585f09 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Fri, 13 Sep 2024 09:32:59 +0800 Subject: [PATCH 39/54] smp --- components/drivers/smp/smp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/drivers/smp/smp.c b/components/drivers/smp/smp.c index 683d3348dc3..3b6d9694eae 100644 --- a/components/drivers/smp/smp.c +++ b/components/drivers/smp/smp.c @@ -35,7 +35,7 @@ void rt_smp_call_ipi_handler(int vector, void *param) int err; int cur_cpu = rt_hw_cpu_id(); rt_spin_lock(&rt_smp_work[cur_cpu].lock); - + if (rt_smp_work[cur_cpu].event.event_id) { err = smp_call_handler(&rt_smp_work[cur_cpu].event); From aafc0ae0f815f0865fe35881306389330ae691a9 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Fri, 13 Sep 2024 09:35:06 +0800 Subject: [PATCH 40/54] smp --- components/drivers/smp/smp.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/components/drivers/smp/smp.h b/components/drivers/smp/smp.h index cc497a8ae03..6932fd1a7f8 100644 --- a/components/drivers/smp/smp.h +++ b/components/drivers/smp/smp.h @@ -7,28 +7,28 @@ typedef rt_bool_t (*rt_smp_cond)(int cpu, void *info); #define SMP_CALL_EVENT_FUNC 0x1 #define SMP_CALL_WAIT_ALL (1 << 0) -#define SMP_CALL_NO_WAIT (1 << 1) +#define SMP_CALL_NO_WAIT (1 << 1) #define RT_ALL_CPU ((1 << RT_CPUS_NR) - 1) struct rt_smp_event { - int cpu_mask; - int event_id; - void *data; + int cpu_mask; + int event_id; + void *data; rt_smp_call_func_back func; }; struct rt_smp_call { - struct rt_spinlock lock; + struct rt_spinlock lock; struct rt_smp_event event; }; void rt_smp_call_ipi_handler(int vector, void *param); -void rt_smp_call_each_cpu(rt_smp_call_func_back func, void *data,rt_uint8_t flag); -void rt_smp_call_each_cpu_cond(rt_smp_call_func_back func, void *data,rt_uint8_t flag,rt_smp_cond cond_func); -void rt_smp_call_any_cpu(int cpu_mask,rt_smp_call_func_back func, void *data,rt_uint8_t flag); -void rt_smp_call_any_cpu_cond(int cpu_mask,rt_smp_call_func_back func, void *data,rt_uint8_t flag,rt_smp_cond cond_func); +void rt_smp_call_each_cpu(rt_smp_call_func_back func, void *data, rt_uint8_t flag); +void rt_smp_call_each_cpu_cond(rt_smp_call_func_back func, void *data, rt_uint8_t flag, rt_smp_cond cond_func); +void rt_smp_call_any_cpu(int cpu_mask, rt_smp_call_func_back func, void *data, rt_uint8_t flag); +void rt_smp_call_any_cpu_cond(int cpu_mask, rt_smp_call_func_back func, void *data, rt_uint8_t flag, rt_smp_cond cond_func); void rt_smp_init(void); #endif From d8956e415e246423abd71917aea8ecb4f8fd2a47 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Fri, 13 Sep 2024 15:41:43 +0800 Subject: [PATCH 41/54] smp --- components/drivers/smp/smp.c | 7 ++++--- examples/utest/testcases/smp/smp.c | 14 +++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/components/drivers/smp/smp.c b/components/drivers/smp/smp.c index 3b6d9694eae..765d1430618 100644 --- a/components/drivers/smp/smp.c +++ b/components/drivers/smp/smp.c @@ -14,9 +14,10 @@ #define DBG_LVL DBG_INFO #include -struct rt_smp_call rt_smp_work[RT_CPUS_NR]; -rt_atomic_t rt_smp_wait; -rt_err_t smp_call_handler(struct rt_smp_event *event) +static struct rt_smp_call rt_smp_work[RT_CPUS_NR]; +static rt_atomic_t rt_smp_wait; + +static rt_err_t smp_call_handler(struct rt_smp_event *event) { switch (event->event_id) { diff --git a/examples/utest/testcases/smp/smp.c b/examples/utest/testcases/smp/smp.c index f4326f5f421..e7bbcbe199a 100644 --- a/examples/utest/testcases/smp/smp.c +++ b/examples/utest/testcases/smp/smp.c @@ -2,11 +2,11 @@ #include "utest.h" #include "utest_assert.h" #include "smp.h" -int pass_count = 0; -int pass = 1000; -struct rt_spinlock lock; +static int pass_count = 0; +static int pass = 1000; +static struct rt_spinlock lock; -void test_call(void *data) +static void test_call(void *data) { rt_spin_lock(&lock); int *i = (int *)data; @@ -18,7 +18,7 @@ void test_call(void *data) } -void test1() +static void test1() { int cpu_mask = 0xf; for (int i = 0; i < 1000; i++) @@ -34,7 +34,7 @@ void test1() uassert_true(pass_count == pass); } -void test_call2(void *data) +static void test_call2(void *data) { rt_spin_lock(&lock); int a = 100000; @@ -43,7 +43,7 @@ void test_call2(void *data) (*i)++; rt_spin_unlock(&lock); } -void test2(void) +static void test2(void) { int data = 0; rt_smp_call_each_cpu(test_call2, &data, SMP_CALL_WAIT_ALL); From d0379529886829039b999107db71b3bc3257ca7b Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Fri, 13 Sep 2024 18:01:40 +0800 Subject: [PATCH 42/54] smp --- components/drivers/smp/smp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/components/drivers/smp/smp.c b/components/drivers/smp/smp.c index 765d1430618..aa0071c576a 100644 --- a/components/drivers/smp/smp.c +++ b/components/drivers/smp/smp.c @@ -71,6 +71,7 @@ void rt_smp_call_func_cond(int cpu_mask, rt_smp_call_func_back func, void *data, int cpuid = 1 << cur_cpu; int tmp_id = 0, cpu_nr = 0; int tmp_mask; + int irq_flag; if (flag == SMP_CALL_WAIT_ALL) { @@ -101,9 +102,9 @@ void rt_smp_call_func_cond(int cpu_mask, rt_smp_call_func_back func, void *data, event.func = func; event.data = data; event.cpu_mask = cpu_mask; - rt_spin_lock(&rt_smp_work[tmp_id].lock); + irq_flag = rt_spin_lock_irqsave(&rt_smp_work[tmp_id].lock); rt_smp_work[tmp_id].event = event; - rt_spin_unlock(&rt_smp_work[tmp_id].lock); + rt_spin_unlock_irqrestore(&rt_smp_work[tmp_id].lock,irq_flag); } tmp_id++; tmp_mask = tmp_mask >> 1; From 58055e7584deeae1b75aed803177999ffdd88325 Mon Sep 17 00:00:00 2001 From: zhujiale <945386260@qq.com> Date: Fri, 20 Sep 2024 13:10:45 +0800 Subject: [PATCH 43/54] smp_ipi --- examples/utest/testcases/Kconfig | 2 +- examples/utest/testcases/{smp => smp_ipi}/Kconfig | 0 examples/utest/testcases/{smp => smp_ipi}/SConscript | 0 examples/utest/testcases/{smp => smp_ipi}/smp.c | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename examples/utest/testcases/{smp => smp_ipi}/Kconfig (100%) rename examples/utest/testcases/{smp => smp_ipi}/SConscript (100%) rename examples/utest/testcases/{smp => smp_ipi}/smp.c (100%) diff --git a/examples/utest/testcases/Kconfig b/examples/utest/testcases/Kconfig index 91b41d5aaaf..890c2b234bc 100644 --- a/examples/utest/testcases/Kconfig +++ b/examples/utest/testcases/Kconfig @@ -15,7 +15,7 @@ rsource "drivers/ipc/Kconfig" rsource "posix/Kconfig" rsource "mm/Kconfig" rsource "tmpfs/Kconfig" -rsource "smp/Kconfig" +rsource "smp_ipi/Kconfig" endif endmenu diff --git a/examples/utest/testcases/smp/Kconfig b/examples/utest/testcases/smp_ipi/Kconfig similarity index 100% rename from examples/utest/testcases/smp/Kconfig rename to examples/utest/testcases/smp_ipi/Kconfig diff --git a/examples/utest/testcases/smp/SConscript b/examples/utest/testcases/smp_ipi/SConscript similarity index 100% rename from examples/utest/testcases/smp/SConscript rename to examples/utest/testcases/smp_ipi/SConscript diff --git a/examples/utest/testcases/smp/smp.c b/examples/utest/testcases/smp_ipi/smp.c similarity index 100% rename from examples/utest/testcases/smp/smp.c rename to examples/utest/testcases/smp_ipi/smp.c From b4d30064cc36f4cb6eb4f82243ba68adbf309b4a Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Wed, 25 Sep 2024 08:04:57 +0800 Subject: [PATCH 44/54] [components] change variable name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为什么提交这份PR (why to submit this PR) #9397 你的解决方案是什么 (what is your solution) 将 line 758的dir改为link_dir --- components/finsh/msh.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/finsh/msh.c b/components/finsh/msh.c index 9cc0c6b3406..d8586e54a42 100644 --- a/components/finsh/msh.c +++ b/components/finsh/msh.c @@ -755,10 +755,10 @@ void msh_auto_complete_path(char *path) } else if (S_ISLNK(buffer.st_mode)) { - DIR *dir = opendir(path); - if (dir) + DIR *link_dir = opendir(path); + if (link_dir) { - closedir(dir); + closedir(link_dir); strcat(path, "/"); } } From f4a92e5e865e28a5c8be13e371722cbae5ae7cea Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Wed, 25 Sep 2024 22:19:53 +0800 Subject: [PATCH 45/54] [doxygen][rsoc] add adc driver example for doxygen (#9465) * [doxygen] add adc driver example for doxygen * add data structures --- components/drivers/include/drivers/adc.h | 98 +++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/components/drivers/include/drivers/adc.h b/components/drivers/include/drivers/adc.h index 7c35f1eac63..e285c0a8c2f 100644 --- a/components/drivers/include/drivers/adc.h +++ b/components/drivers/include/drivers/adc.h @@ -14,12 +14,65 @@ #define __ADC_H__ #include +/** + * @addtogroup Drivers RTTHREAD Driver + * @defgroup ADC ADC + * + * @brief ADC driver api + * + * Example + * @code {.c} + * #define ADC_DEV_NAME "adc1" + * #define ADC_DEV_CHANNEL 5 + * #define REFER_VOLTAGE 330 + * #define CONVERT_BITS (1 << 12) + * + * static int adc_vol_sample(int argc, char *argv[]) + * { + * rt_adc_device_t adc_dev; + * rt_uint32_t value, vol; + * + * rt_err_t ret = RT_EOK; + * + * adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); + * if (adc_dev == RT_NULL) + * { + * rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME); + * return RT_ERROR; + * } + * + * ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); + * + * value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); + * rt_kprintf("the value is :%d \n", value); + * + * vol = value * REFER_VOLTAGE / CONVERT_BITS; + * rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100); + * + * ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL); + * + * return ret; + * } + * MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample); + * + * @endcode + * + * @ingroup Drivers + */ + +/*! + * @addtogroup ADC + * @{ + */ #define RT_ADC_INTERN_CH_TEMPER (-1) #define RT_ADC_INTERN_CH_VREF (-2) #define RT_ADC_INTERN_CH_VBAT (-3) struct rt_adc_device; +/** + * @brief Configure the adc device + */ struct rt_adc_ops { rt_err_t (*enabled)(struct rt_adc_device *device, rt_int8_t channel, rt_bool_t enabled); @@ -27,7 +80,9 @@ struct rt_adc_ops rt_uint8_t (*get_resolution)(struct rt_adc_device *device); rt_int16_t (*get_vref) (struct rt_adc_device *device); }; - +/** + * @brief adc device + */ struct rt_adc_device { struct rt_device parent; @@ -43,10 +98,51 @@ typedef enum RT_ADC_CMD_GET_VREF = RT_DEVICE_CTRL_BASE(ADC) + 4, /* get reference voltage */ } rt_adc_cmd_t; +/** + * @brief register the adc device + * @param adc adc device + * @param name device name + * @param ops device ops + * @param user_data device private data + * @return rt_err_t error code + * @ingroup ADC + */ rt_err_t rt_hw_adc_register(rt_adc_device_t adc,const char *name, const struct rt_adc_ops *ops, const void *user_data); + +/** + * @brief read the adc value + * @param dev adc device + * @param channel adc channel + * @return rt_uint32_t adc value + * @ingroup ADC + */ rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_int8_t channel); + +/** + * @brief enable the adc channel + * @param dev adc device + * @param channel adc channel + * @return rt_err_t error code + * @ingroup ADC + */ rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_int8_t channel); + +/** + * @brief disable the adc channel + * @param dev adc device + * @param channel adc channel + * @return rt_err_t error code + * @ingroup ADC + */ rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_int8_t channel); + +/** + * @brief get the adc resolution + * @param dev adc device + * @param channel adc channel + * @return rt_int16_t adc resolution + * @ingroup ADC + */ rt_int16_t rt_adc_voltage(rt_adc_device_t dev, rt_int8_t channel); #endif /* __ADC_H__ */ From 588611d314af6850bee1d45c376b15a2829b6fd8 Mon Sep 17 00:00:00 2001 From: Shell Date: Wed, 25 Sep 2024 11:12:30 +0800 Subject: [PATCH 46/54] feat: includes: included kerrno.h in rtdef.h Those definitions are presented in rtdef.h until PR #9461 moved them to kerrno.h, which introduced unknown definition error for project building Changes: - Added includes of kerrno.h Signed-off-by: Shell --- include/rtdef.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/rtdef.h b/include/rtdef.h index 63038be5356..34bb283ae71 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -68,6 +68,8 @@ #include "rtsched.h" #include "rttypes.h" +#include "klibc/kerrno.h" + #ifdef __cplusplus extern "C" { #endif From d55931493accc078cef64b4250eea6d34a67c5d0 Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Wed, 25 Sep 2024 19:10:02 +0800 Subject: [PATCH 47/54] [doxygen]add dac driver example for doxygen --- components/drivers/include/drivers/dac.h | 89 +++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/components/drivers/include/drivers/dac.h b/components/drivers/include/drivers/dac.h index c03fa109295..d7160dd9365 100644 --- a/components/drivers/include/drivers/dac.h +++ b/components/drivers/include/drivers/dac.h @@ -11,8 +11,66 @@ #ifndef __DAC_H__ #define __DAC_H__ #include +/** + * @addtogroup Drivers RTTHREAD Driver + * @defgroup DAC DAC + * + * @brief DAC driver api + * + * Example + * @code {.c} + * + * #include + * #include + * #include + * #define DAC_DEV_NAME "dac1" + * #define DAC_DEV_CHANNEL 1 + * #define REFER_VOLTAGE 330 + * #define CONVERT_BITS (1 << 12) + * + * static int dac_vol_sample(int argc, char *argv[]) + * { + * rt_dac_device_t dac_dev; + * rt_uint32_t value, vol; + * rt_err_t ret = RT_EOK; + * + * dac_dev = (rt_dac_device_t)rt_device_find(DAC_DEV_NAME); + * if (dac_dev == RT_NULL) + * { + * rt_kprintf("dac sample run failed! can't find %s device!\n", DAC_DEV_NAME); + * return RT_ERROR; + * } + * + * ret = rt_dac_enable(dac_dev, DAC_DEV_CHANNEL); + * + * value = atoi(argv[1]); + * rt_dac_write(dac_dev, DAC_DEV_NAME, DAC_DEV_CHANNEL, value); + * rt_kprintf("the value is :%d \n", value); + * + * vol = value * REFER_VOLTAGE / CONVERT_BITS; + * rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100); + * + * rt_thread_mdelay(500); + * + * ret = rt_dac_disable(dac_dev, DAC_DEV_CHANNEL); + * + * return ret; + * } + * MSH_CMD_EXPORT(dac_vol_sample, dac voltage convert sample); + * + * @endcode + * + * @ingroup Drivers + */ +/*! + * @addtogroup DAC + * @{ + */ struct rt_dac_device; +/** + * @brief Configuration of DAC device + */ struct rt_dac_ops { rt_err_t (*disabled)(struct rt_dac_device *device, rt_uint32_t channel); @@ -20,7 +78,10 @@ struct rt_dac_ops rt_err_t (*convert)(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value); rt_uint8_t (*get_resolution)(struct rt_dac_device *device); }; - +/** + * @brief DAC device structure + * + */ struct rt_dac_device { struct rt_device parent; @@ -35,10 +96,36 @@ typedef enum RT_DAC_CMD_GET_RESOLUTION = RT_DEVICE_CTRL_BASE(DAC) + 2, } rt_dac_cmd_t; +/** + * @brief Register a DAC device + * @param dac DAC device + * @param name DAC name + * @param ops the operations of DAC device + * @param user_data device private data + * @return rt_err_t error code + */ rt_err_t rt_hw_dac_register(rt_dac_device_t dac,const char *name, const struct rt_dac_ops *ops, const void *user_data); +/** + * @brief set the value of DAC + * @param dev DAC device + * @param channel DAC channel + * @return rt_err_t error code + */ rt_err_t rt_dac_write(rt_dac_device_t dev, rt_uint32_t channel, rt_uint32_t value); + +/** + * @brief enable the DAC channel + * @param dev DAC device + * @return rt_err_t error code + */ rt_err_t rt_dac_enable(rt_dac_device_t dev, rt_uint32_t channel); + +/** + * @brief disable the DAC channel + * @param dev DAC device + * @return rt_err_t error code + */ rt_err_t rt_dac_disable(rt_dac_device_t dev, rt_uint32_t channel); #endif /* __dac_H__ */ From 633d203fa67469e1379c4dc3e86a053530ac474b Mon Sep 17 00:00:00 2001 From: imcu <12232561@mail.sustech.edu.cn> Date: Tue, 24 Sep 2024 05:05:20 -0400 Subject: [PATCH 48/54] bsp:cvitek:add all function type of pinmux --- bsp/cvitek/drivers/drv_pinmux.h | 78 +++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/bsp/cvitek/drivers/drv_pinmux.h b/bsp/cvitek/drivers/drv_pinmux.h index 56f228d2653..0bc989a86c3 100644 --- a/bsp/cvitek/drivers/drv_pinmux.h +++ b/bsp/cvitek/drivers/drv_pinmux.h @@ -12,22 +12,29 @@ /** * @brief Function Selection Type - * - * FIXME: At present, we only define the ones we will use, - * not all of them. We will need to add them later. */ typedef enum _fs_type { fs_none = 0, + ADC1, + ADC2, + ADC3, AUX0, AUX1, AUX2, CAM_HS0, CAM_MCLK0, CAM_MCLK1, + CAM_PD0, + CAM_PD1, + CAM_RST0, CAM_VS0, CLK25M, CLK32K, + CR_4WTDI, + CR_4WTDO, + CV_SCL0, + CV_SDA0, DBG_0, DBG_1, DBG_2, @@ -49,6 +56,10 @@ typedef enum _fs_type DBG_19, EMMC_CLK, EMMC_CMD, + EMMC_DAT0, + EMMC_DAT1, + EMMC_DAT2, + EMMC_DAT3, EMMC_DAT_0, EMMC_DAT_1, EMMC_DAT_2, @@ -56,6 +67,8 @@ typedef enum _fs_type EMMC_RSTN, EPHY_LNK_LED, EPHY_SPD_LED, + GPIO_RTX, + GPIO_ZQ, IIC0_SCL, IIC0_SDA, IIC1_SCL, @@ -95,9 +108,41 @@ typedef enum _fs_type MUX_SPI1_MISO, MUX_SPI1_MOSI, MUX_SPI1_SCK, + PAD_AUD_AINL_MIC, + PAD_AUD_AINR_MIC, + PAD_AUD_AOUTL, + PAD_AUD_AOUTR, + PAD_ETH_RXM, + PAD_ETH_RXP, + PAD_ETH_TXM, + PAD_ETH_TXP, + PAD_MIPIRX0N, + PAD_MIPIRX0P, + PAD_MIPIRX1N, + PAD_MIPIRX1P, + PAD_MIPIRX2N, + PAD_MIPIRX2P, + PAD_MIPIRX3N, + PAD_MIPIRX3P, + PAD_MIPIRX4N, + PAD_MIPIRX4P, + PAD_MIPIRX5N, + PAD_MIPIRX5P, + PAD_MIPI_TXM0, + PAD_MIPI_TXM1, + PAD_MIPI_TXM2, + PAD_MIPI_TXM3, + PAD_MIPI_TXM4, + PAD_MIPI_TXP0, + PAD_MIPI_TXP1, + PAD_MIPI_TXP2, + PAD_MIPI_TXP3, + PAD_MIPI_TXP4, PKG_TYPE0, PKG_TYPE1, PKG_TYPE2, + PTEST, + PWM0_BUCK, PWM_0, PWM_1, PWM_2, @@ -115,6 +160,9 @@ typedef enum _fs_type PWM_14, PWM_15, PWR_BUTTON1, + PWR_GPIO0, + PWR_GPIO1, + PWR_GPIO2, PWR_GPIO_0, PWR_GPIO_1, PWR_GPIO_2, @@ -195,12 +243,22 @@ typedef enum _fs_type RMII0_TXD1, RMII0_TXEN, RSTN, + SD0_CD, + SD0_CLK, + SD0_CMD, + SD0_D0, + SD0_D1, + SD0_D2, + SD0_D3, + SD0_PWR_EN, SD1_CLK, SD1_CMD, SD1_D0, SD1_D1, SD1_D2, SD1_D3, + SD1_GPIO0, + SD1_GPIO1, SDIO0_CD, SDIO0_CLK, SDIO0_CMD, @@ -237,6 +295,7 @@ typedef enum _fs_type SPINOR_MOSI, SPINOR_SCK, SPINOR_WP_X, + SPK_EN, UART0_RX, UART0_TX, UART1_CTS, @@ -304,6 +363,18 @@ typedef enum _fs_type VI2_D_5, VI2_D_6, VI2_D_7, + VIVO_CLK, + VIVO_D0, + VIVO_D1, + VIVO_D2, + VIVO_D3, + VIVO_D4, + VIVO_D5, + VIVO_D6, + VIVO_D7, + VIVO_D8, + VIVO_D9, + VIVO_D10, VO_CLK0, VO_CLK1, VO_D_0, @@ -429,6 +500,7 @@ typedef enum _fs_type XGPIOC_23, XGPIOC_24, XGPIOC_25, + XTAL_XIN, } fs_type; /** From caac564854e7193febcd37774aabf85131943921 Mon Sep 17 00:00:00 2001 From: heyuanjie87 <943313837@qq.com> Date: Thu, 26 Sep 2024 10:34:04 +0800 Subject: [PATCH 49/54] [bsp] add k230 --- bsp/k230/.config | 1360 ++++++++++++++++++++ bsp/k230/.gitignore | 9 + bsp/k230/Kconfig | 46 + bsp/k230/README.md | 38 + bsp/k230/SConscript | 14 + bsp/k230/SConstruct | 37 + bsp/k230/applications/SConscript | 9 + bsp/k230/applications/main.c | 20 + bsp/k230/applications/mnt.c | 58 + bsp/k230/board/Kconfig | 38 + bsp/k230/board/SConscript | 19 + bsp/k230/board/board.c | 118 ++ bsp/k230/board/board.h | 33 + bsp/k230/drivers/SConscript | 21 + bsp/k230/drivers/interdrv/SConscript | 19 + bsp/k230/drivers/interdrv/sdio/SConscript | 19 + bsp/k230/drivers/interdrv/sdio/drv_sdhci.c | 930 +++++++++++++ bsp/k230/drivers/interdrv/sdio/drv_sdhci.h | 496 +++++++ bsp/k230/drivers/interdrv/uart/SConscript | 19 + bsp/k230/drivers/interdrv/uart/drv_uart.c | 370 ++++++ bsp/k230/drivers/interdrv/uart/drv_uart.h | 15 + bsp/k230/link.lds | 184 +++ bsp/k230/link_stacksize.lds | 1 + bsp/k230/mkfm.sh | 77 ++ bsp/k230/rtconfig.h | 491 +++++++ bsp/k230/rtconfig.py | 54 + 26 files changed, 4495 insertions(+) create mode 100644 bsp/k230/.config create mode 100644 bsp/k230/.gitignore create mode 100644 bsp/k230/Kconfig create mode 100644 bsp/k230/README.md create mode 100644 bsp/k230/SConscript create mode 100644 bsp/k230/SConstruct create mode 100644 bsp/k230/applications/SConscript create mode 100644 bsp/k230/applications/main.c create mode 100644 bsp/k230/applications/mnt.c create mode 100644 bsp/k230/board/Kconfig create mode 100644 bsp/k230/board/SConscript create mode 100644 bsp/k230/board/board.c create mode 100644 bsp/k230/board/board.h create mode 100644 bsp/k230/drivers/SConscript create mode 100644 bsp/k230/drivers/interdrv/SConscript create mode 100644 bsp/k230/drivers/interdrv/sdio/SConscript create mode 100644 bsp/k230/drivers/interdrv/sdio/drv_sdhci.c create mode 100644 bsp/k230/drivers/interdrv/sdio/drv_sdhci.h create mode 100644 bsp/k230/drivers/interdrv/uart/SConscript create mode 100644 bsp/k230/drivers/interdrv/uart/drv_uart.c create mode 100644 bsp/k230/drivers/interdrv/uart/drv_uart.h create mode 100644 bsp/k230/link.lds create mode 100644 bsp/k230/link_stacksize.lds create mode 100644 bsp/k230/mkfm.sh create mode 100644 bsp/k230/rtconfig.h create mode 100644 bsp/k230/rtconfig.py diff --git a/bsp/k230/.config b/bsp/k230/.config new file mode 100644 index 00000000000..5a8eb350484 --- /dev/null +++ b/bsp/k230/.config @@ -0,0 +1,1360 @@ + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +CONFIG_RT_USING_SMART=y +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +CONFIG_RT_USING_HOOKLIST=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=8192 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192 +# CONFIG_RT_USING_TIMER_ALL_SOFT is not set +CONFIG_RT_USING_CPU_USAGE_TRACER=y + +# +# kservice optimization +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice optimization + +# +# klibc optimization +# +# CONFIG_RT_KLIBC_USING_STDLIB is not set +# CONFIG_RT_KLIBC_USING_TINY_SIZE is not set +CONFIG_RT_KLIBC_USING_PRINTF_LONGLONG=y +# end of klibc optimization + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +# CONFIG_RT_DEBUGING_PAGE_LEAK is not set +CONFIG_RT_USING_OVERFLOW_CHECK=y + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +CONFIG_RT_PAGE_MAX_ORDER=11 +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_SMALL_MEM is not set +CONFIG_RT_USING_SLAB=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +CONFIG_RT_USING_SLAB_AS_HEAP=y +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +CONFIG_RT_USING_DEVICE_OPS=y +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +CONFIG_RT_USING_SCHED_THREAD_CTX=y +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=256 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart" +CONFIG_RT_VER_NUM=0x50200 +CONFIG_RT_USING_STDC_ATOMIC=y +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +CONFIG_ARCH_CPU_64BIT=y +CONFIG_RT_USING_CACHE=y +CONFIG_ARCH_MM_MMU=y +CONFIG_KERNEL_VADDR_START=0xFFFFFFC000220000 +CONFIG_ARCH_RISCV=y +CONFIG_ARCH_RISCV_FPU=y +CONFIG_ARCH_RISCV_FPU_D=y +CONFIG_ARCH_RISCV64=y +CONFIG_ARCH_USING_NEW_CTX_SWITCH=y +CONFIG_ARCH_REMAP_KERNEL=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=8192 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=8192 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +CONFIG_RT_USING_DFS=y +CONFIG_DFS_USING_POSIX=y +CONFIG_DFS_USING_WORKDIR=y +CONFIG_DFS_FD_MAX=16 +CONFIG_RT_USING_DFS_V2=y +CONFIG_RT_USING_DFS_ELMFAT=y + +# +# elm-chan's FatFs, Generic FAT Filesystem Module +# +CONFIG_RT_DFS_ELM_CODE_PAGE=437 +CONFIG_RT_DFS_ELM_WORD_ACCESS=y +# CONFIG_RT_DFS_ELM_USE_LFN_0 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_1 is not set +# CONFIG_RT_DFS_ELM_USE_LFN_2 is not set +CONFIG_RT_DFS_ELM_USE_LFN_3=y +CONFIG_RT_DFS_ELM_USE_LFN=3 +CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y +# CONFIG_RT_DFS_ELM_LFN_UNICODE_1 is not set +# CONFIG_RT_DFS_ELM_LFN_UNICODE_2 is not set +# CONFIG_RT_DFS_ELM_LFN_UNICODE_3 is not set +CONFIG_RT_DFS_ELM_LFN_UNICODE=0 +CONFIG_RT_DFS_ELM_MAX_LFN=255 +CONFIG_RT_DFS_ELM_DRIVES=2 +CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=512 +# CONFIG_RT_DFS_ELM_USE_ERASE is not set +CONFIG_RT_DFS_ELM_REENTRANT=y +CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 +# CONFIG_RT_DFS_ELM_USE_EXFAT is not set +# end of elm-chan's FatFs, Generic FAT Filesystem Module + +CONFIG_RT_USING_DFS_DEVFS=y +# CONFIG_RT_USING_DFS_ROMFS is not set +CONFIG_RT_USING_DFS_PTYFS=y +CONFIG_RT_USING_DFS_CROMFS=y +CONFIG_RT_USING_DFS_TMPFS=y +# CONFIG_RT_USING_DFS_MQUEUE is not set +CONFIG_RT_USING_PAGECACHE=y + +# +# page cache config +# +CONFIG_RT_PAGECACHE_COUNT=4096 +CONFIG_RT_PAGECACHE_ASPACE_COUNT=1024 +CONFIG_RT_PAGECACHE_PRELOAD=4 +CONFIG_RT_PAGECACHE_HASH_NR=1024 +CONFIG_RT_PAGECACHE_GC_WORK_LEVEL=90 +CONFIG_RT_PAGECACHE_GC_STOP_LEVEL=70 +# end of page cache config +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +CONFIG_RT_USING_SYSTEM_WORKQUEUE=y +CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=8192 +CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +CONFIG_RT_USING_CPUTIME=y +CONFIG_RT_USING_CPUTIME_RISCV=y +CONFIG_CPUTIME_TIMER_FREQ=25000000 +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +CONFIG_RT_USING_NULL=y +CONFIG_RT_USING_ZERO=y +CONFIG_RT_USING_RANDOM=y +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +CONFIG_RT_USING_RTC=y +# CONFIG_RT_USING_ALARM is not set +# CONFIG_RT_USING_SOFT_RTC is not set +CONFIG_RT_USING_SDIO=y +CONFIG_RT_SDIO_STACK_SIZE=8192 +CONFIG_RT_SDIO_THREAD_PRIORITY=15 +CONFIG_RT_MMCSD_STACK_SIZE=8192 +CONFIG_RT_MMCSD_THREAD_PREORITY=22 +CONFIG_RT_MMCSD_MAX_PARTITION=16 +# CONFIG_RT_SDIO_DEBUG is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_LCD is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +CONFIG_RT_USING_KTIME=y +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CHERRYUSB is not set +# end of Device Drivers + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 +# end of Timezone and Daylight Saving Time +# end of ISO-ANSI C layer + +# +# POSIX (Portable Operating System Interface) layer +# +CONFIG_RT_USING_POSIX_FS=y +CONFIG_RT_USING_POSIX_DEVIO=y +CONFIG_RT_USING_POSIX_STDIO=y +CONFIG_RT_USING_POSIX_POLL=y +CONFIG_RT_USING_POSIX_SELECT=y +# CONFIG_RT_USING_POSIX_EVENTFD is not set +CONFIG_RT_USING_POSIX_EPOLL=y +CONFIG_RT_USING_POSIX_SIGNALFD=y +CONFIG_RT_SIGNALFD_MAX_NUM=10 +# CONFIG_RT_USING_POSIX_TIMERFD is not set +CONFIG_RT_USING_POSIX_SOCKET=y +CONFIG_RT_USING_POSIX_TERMIOS=y +# CONFIG_RT_USING_POSIX_AIO is not set +# CONFIG_RT_USING_POSIX_MMAN is not set +CONFIG_RT_USING_POSIX_DELAY=y +CONFIG_RT_USING_POSIX_CLOCK=y +CONFIG_RT_USING_POSIX_TIMER=y +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# end of Interprocess Communication (IPC) +# end of POSIX (Portable Operating System Interface) layer + +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C/C++ and POSIX layer + +# +# Network +# +CONFIG_RT_USING_SAL=y +CONFIG_SAL_INTERNET_CHECK=y + +# +# Docking with protocol stacks +# +CONFIG_SAL_USING_LWIP=y +# CONFIG_SAL_USING_AT is not set +# CONFIG_SAL_USING_TLS is not set +# end of Docking with protocol stacks + +CONFIG_SAL_USING_POSIX=y +CONFIG_RT_USING_NETDEV=y +CONFIG_NETDEV_USING_IFCONFIG=y +CONFIG_NETDEV_USING_PING=y +CONFIG_NETDEV_USING_NETSTAT=y +CONFIG_NETDEV_USING_AUTO_DEFAULT=y +# CONFIG_NETDEV_USING_LINK_STATUS_CALLBACK is not set +# CONFIG_NETDEV_USING_IPV6 is not set +CONFIG_NETDEV_IPV4=1 +CONFIG_NETDEV_IPV6=0 +CONFIG_RT_USING_LWIP=y +# CONFIG_RT_USING_LWIP_LOCAL_VERSION is not set +# CONFIG_RT_USING_LWIP141 is not set +# CONFIG_RT_USING_LWIP203 is not set +CONFIG_RT_USING_LWIP212=y +# CONFIG_RT_USING_LWIP_LATEST is not set +CONFIG_RT_USING_LWIP_VER_NUM=0x20102 +# CONFIG_RT_USING_LWIP_IPV6 is not set +CONFIG_RT_LWIP_MEM_ALIGNMENT=8 +CONFIG_RT_LWIP_IGMP=y +CONFIG_RT_LWIP_ICMP=y +# CONFIG_RT_LWIP_SNMP is not set +CONFIG_RT_LWIP_DNS=y +CONFIG_RT_LWIP_DHCP=y +CONFIG_IP_SOF_BROADCAST=1 +CONFIG_IP_SOF_BROADCAST_RECV=1 + +# +# Static IPv4 Address +# +CONFIG_RT_LWIP_IPADDR="192.168.1.30" +CONFIG_RT_LWIP_GWADDR="192.168.1.1" +CONFIG_RT_LWIP_MSKADDR="255.255.255.0" +# end of Static IPv4 Address + +CONFIG_RT_LWIP_UDP=y +CONFIG_RT_LWIP_TCP=y +CONFIG_RT_LWIP_RAW=y +# CONFIG_RT_LWIP_PPP is not set +CONFIG_RT_MEMP_NUM_NETCONN=8 +CONFIG_RT_LWIP_PBUF_NUM=16 +CONFIG_RT_LWIP_RAW_PCB_NUM=4 +CONFIG_RT_LWIP_UDP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_SEG_NUM=40 +CONFIG_RT_LWIP_TCP_SND_BUF=8196 +CONFIG_RT_LWIP_TCP_WND=8196 +CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=10 +CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 +CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=8192 +# CONFIG_LWIP_NO_RX_THREAD is not set +# CONFIG_LWIP_NO_TX_THREAD is not set +CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 +CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=8192 +CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 +# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set +CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 +CONFIG_LWIP_NETIF_LINK_CALLBACK=1 +CONFIG_RT_LWIP_NETIF_NAMESIZE=6 +CONFIG_SO_REUSE=1 +CONFIG_LWIP_SO_RCVTIMEO=1 +CONFIG_LWIP_SO_SNDTIMEO=1 +CONFIG_LWIP_SO_RCVBUF=1 +CONFIG_LWIP_SO_LINGER=0 +# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set +CONFIG_LWIP_NETIF_LOOPBACK=0 +# CONFIG_RT_LWIP_STATS is not set +# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set +CONFIG_RT_LWIP_USING_PING=y +# CONFIG_LWIP_USING_DHCPD is not set +# CONFIG_RT_LWIP_DEBUG is not set +# CONFIG_RT_USING_AT is not set +# end of Network + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set +# end of Memory protection + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +CONFIG_RT_USING_RESOURCE_ID=y +CONFIG_RT_USING_ADT=y +CONFIG_RT_USING_ADT_AVL=y +CONFIG_RT_USING_ADT_BITMAP=y +CONFIG_RT_USING_ADT_HASHMAP=y +CONFIG_RT_USING_ADT_REF=y +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# CONFIG_RT_USING_VBUS is not set +CONFIG_RT_USING_LWP=y +CONFIG_LWP_DEBUG=y +CONFIG_LWP_DEBUG_INIT=y +CONFIG_RT_LWP_MAX_NR=30 +CONFIG_LWP_TASK_STACK_SIZE=16384 +CONFIG_RT_CH_MSG_MAX_NR=1024 +CONFIG_LWP_TID_MAX_NR=64 +CONFIG_RT_LWP_SHM_MAX_NR=64 +CONFIG_RT_USING_LDSO=y +# CONFIG_ELF_DEBUG_ENABLE is not set +# CONFIG_ELF_LOAD_RANDOMIZE is not set +CONFIG_LWP_USING_TERMINAL=y +CONFIG_LWP_PTY_MAX_PARIS_LIMIT=64 + +# +# Memory management +# +# CONFIG_RT_USING_MEMBLOCK is not set +# end of Memory management + +# +# Using USB legacy version +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB legacy version + +# CONFIG_RT_USING_FDT is not set +# end of RT-Thread Components + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set +# end of RT-Thread Utestcases + +# +# RT-Thread online packages +# + +# +# 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_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set +# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# 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 +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# 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_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_IOTSHARP_SDK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C 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_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN 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 +# end of security packages + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set +# CONFIG_PKG_USING_RYAN_JSON is not set +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set +# end of multimedia packages + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR 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_MEMORYPERF 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 +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# end of tools packages + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX 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_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 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 +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_NUCLEI_SDK is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# end of sensors drivers + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_CST812T is not set +# end of touch drivers + +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# 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_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED 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_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 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_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_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_BT_MX02 is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of project laboratory + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +CONFIG_PKG_USING_ZLIB=y +CONFIG_PKG_ZLIB_PATH="/packages/misc/zlib" +# CONFIG_ZLIB_USING_SAMPLE is not set +# CONFIG_PKG_USING_ZLIB_V100 is not set +# CONFIG_PKG_USING_ZLIB_V123 is not set +CONFIG_PKG_USING_ZLIB_LATEST_VERSION=y +CONFIG_PKG_ZLIB_VER="latest" +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +# +# Drivers Configuration +# +# CONFIG_BSP_USING_SDIO is not set +# end of Drivers Configuration + +CONFIG_BOARD_fpgac908=y +CONFIG___STACKSIZE__=8192 +CONFIG_C908_PLIC_PHY_ADDR=0xF00000000 +CONFIG_BSP_ROOTFS_TYPE_CROMFS=y diff --git a/bsp/k230/.gitignore b/bsp/k230/.gitignore new file mode 100644 index 00000000000..fffebd9e3ab --- /dev/null +++ b/bsp/k230/.gitignore @@ -0,0 +1,9 @@ +#Build & install directories +build/ +packages/ +install/ + +rtthread.* + +__pycache__ +.config.old diff --git a/bsp/k230/Kconfig b/bsp/k230/Kconfig new file mode 100644 index 00000000000..e8d957f1fd9 --- /dev/null +++ b/bsp/k230/Kconfig @@ -0,0 +1,46 @@ +mainmenu "RT-Thread Project Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../rt-thread" + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +rsource "board/Kconfig" + +config BOARD_fpgac908 + bool + select ARCH_RISCV64 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + select RT_USING_CACHE + select ARCH_MM_MMU + select ARCH_RISCV_FPU_D + select ARCH_REMAP_KERNEL if RT_USING_SMART + default y + +config __STACKSIZE__ + int "stack size for interrupt" + default 4096 + +config C908_PLIC_PHY_ADDR + int "PLIC base address" + default 0xF00000000 + +config BSP_ROOTFS_TYPE_CROMFS + bool "Use CROMFS as ROOTFS" + select RT_USING_DFS_CROMFS + select PKG_USING_ZLIB + select PKG_USING_ZLIB_LATEST_VERSION + default y diff --git a/bsp/k230/README.md b/bsp/k230/README.md new file mode 100644 index 00000000000..66b5f3d5592 --- /dev/null +++ b/bsp/k230/README.md @@ -0,0 +1,38 @@ +# rt-smart canaan porting + +## 下载依赖的软件包 + +在软件包无需变更的情况下只须执行一次 +``` +source ~/.env/env.sh +pkgs --update +``` + +## 将根文件系统编译进内核 + +为了方便测试,这里将根文件系统制作成CROMFS格式转换成C代码编译进内核。 + +1. 在 https://github.com/RT-Thread/userapps 页面下载riscv64预编译镜像 +2. 解压后将其中的ext4.img挂载到一个目录中 +``` +sudo mount ext4.img dir +``` +3. 删除其中一些不必要的文件以减小内核体积 +``` +du -ha # 查看文件大小 +sudo rm -rf dir/www dir/usr/share/fonts dir/tc + +``` +4. 生成cromfs文件 +工具位于 https://github.com/RT-Thread/userapps/tree/main/tools/cromfs +``` +sudo ./cromfs-tool-x64 dir crom.img ./ # 将生成的cromfs_data.c放入applications目录 +``` + +## 编译 + +``` +export RTT_EXEC_PATH=/mnt/e/tools/riscv64gc/bin # 你自己的编译器路径 + +scons -j8 +``` diff --git a/bsp/k230/SConscript b/bsp/k230/SConscript new file mode 100644 index 00000000000..c7ef7659ece --- /dev/null +++ b/bsp/k230/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/k230/SConstruct b/bsp/k230/SConstruct new file mode 100644 index 00000000000..c800dc6f5ce --- /dev/null +++ b/bsp/k230/SConstruct @@ -0,0 +1,37 @@ +import os +import sys +import rtconfig + +from rtconfig import RTT_ROOT +import sys + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +from building import * + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + 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') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False) + +stack_size = 4096 + +stack_lds = open('link_stacksize.lds', 'w') +if GetDepend('__STACKSIZE__'): stack_size = GetDepend('__STACKSIZE__') +stack_lds.write('__STACKSIZE__ = %d;' % stack_size) +stack_lds.close() + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/k230/applications/SConscript b/bsp/k230/applications/SConscript new file mode 100644 index 00000000000..9ffdfd6d3ac --- /dev/null +++ b/bsp/k230/applications/SConscript @@ -0,0 +1,9 @@ +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/k230/applications/main.c b/bsp/k230/applications/main.c new file mode 100644 index 00000000000..664f925e156 --- /dev/null +++ b/bsp/k230/applications/main.c @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ + +#include +#include +#include +#include + +int main(void) +{ + printf("Hello RISC-V\n"); + + return 0; +} diff --git a/bsp/k230/applications/mnt.c b/bsp/k230/applications/mnt.c new file mode 100644 index 00000000000..931dac0933d --- /dev/null +++ b/bsp/k230/applications/mnt.c @@ -0,0 +1,58 @@ +#include + +#ifdef RT_USING_DFS +#include + +rt_weak uint8_t *cromfs_get_partition_data(uint32_t *len) +{ + return RT_NULL; +} + +static int mnt_cromfs(void) +{ + uint32_t length = 0; + uint8_t *data = cromfs_get_partition_data(&length); + int ret = -1; + + if (data && length) + { + ret = dfs_mount(NULL, "/", "crom", 0, data); + } + + return ret; +} + +int mnt_init(void) +{ + rt_err_t ret; + + ret = mnt_cromfs(); + if (ret != RT_EOK) + { + rt_kprintf("CromFS mount failed!\n"); + return ret; + } + + mkdir("/dev/shm", 0x777); + + if (dfs_mount(RT_NULL, "/dev/shm", "tmp", 0, 0) != 0) + { + rt_kprintf("Dir /dev/shm mount failed!\n"); + } + +#ifdef BSP_SD_SDIO_DEV + while (mmcsd_wait_cd_changed(100) != MMCSD_HOST_PLUGED) + ; + + if (dfs_mount(BSP_SD_MNT_DEVNAME, "/mnt", "elm", 0, 0) != 0) + { + rt_kprintf("Dir /mnt mount failed!\n"); + } +#endif + + rt_kprintf("file system initialization done!\n"); + + return 0; +} +INIT_ENV_EXPORT(mnt_init); +#endif diff --git a/bsp/k230/board/Kconfig b/bsp/k230/board/Kconfig new file mode 100644 index 00000000000..df2ac7fa070 --- /dev/null +++ b/bsp/k230/board/Kconfig @@ -0,0 +1,38 @@ +menu "Drivers Configuration" + + menuconfig BSP_USING_SDIO + bool "Enable SDIO" + select RT_USING_SDIO + default n + + if BSP_USING_SDIO + config BSP_USING_SDIO0 + bool "Enable SDIO0" + default n + + if BSP_USING_SDIO0 + config BSP_SDIO0_EMMC + bool "Enable eMMC" + default y + + config BSP_SDIO0_1V8 + bool "Enable 1.8V" + default y + endif + + config BSP_USING_SDIO1 + bool "Enable SDIO1" + default y + + config BSP_SD_SDIO_DEV + int "SDIO device SdCard on" + range 0 1 + default 1 + + config BSP_SD_MNT_DEVNAME + string "The name of the SD-BlkDev to be mounted" + default "sd13" + endif + + +endmenu diff --git a/bsp/k230/board/SConscript b/bsp/k230/board/SConscript new file mode 100644 index 00000000000..faea9c1bd9b --- /dev/null +++ b/bsp/k230/board/SConscript @@ -0,0 +1,19 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +objs = [group] + +list = os.listdir(cwd) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/k230/board/board.c b/bsp/k230/board/board.c new file mode 100644 index 00000000000..14e35beee3a --- /dev/null +++ b/bsp/k230/board/board.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-01-30 lizhirui first version + */ + +#include +#include +#include + +#include "board.h" +#include "tick.h" + +#include "drv_uart.h" + +#include + +#ifdef RT_USING_SMART +#include +#include "page.h" + +/* respect to boot loader, must be 0xFFFFFFC000200000 */ +RT_STATIC_ASSERT(kmem_region, KERNEL_VADDR_START == 0xFFFFFFC000220000); + +rt_region_t init_page_region = {(rt_size_t)RT_HW_PAGE_START, (rt_size_t)RT_HW_PAGE_END}; + +extern size_t MMUTable[]; + +struct mem_desc platform_mem_desc[] = { + {KERNEL_VADDR_START, (rt_size_t)RT_HW_PAGE_END - 1, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM}, +}; + +#define NUM_MEM_DESC (sizeof(platform_mem_desc) / sizeof(platform_mem_desc[0])) + +#endif /* RT_USING_SMART */ + +#ifndef ARCH_REMAP_KERNEL +#define IOREMAP_VEND USER_VADDR_START +#else +#define IOREMAP_VEND 0ul +#endif + +//初始化BSS节区 +void init_bss(void) +{ + unsigned int *dst; + + dst = &__bss_start; + while (dst < &__bss_end) + { + *dst++ = 0; + } +} + +static void __rt_assert_handler(const char *ex_string, const char *func, rt_size_t line) +{ + rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line); + asm volatile("ebreak":::"memory"); +} + +//BSP的C入口 +void primary_cpu_entry(void) +{ + //关中断 + rt_hw_interrupt_disable(); + rt_assert_set_hook(__rt_assert_handler); + //启动RT-Thread Smart内核 + entry(); +} + +#define IOREMAP_SIZE (1ul << 30) + +//这个初始化程序由内核主动调用,此时调度器还未启动,因此在此不能使用依赖线程上下文的函数 +void rt_hw_board_init(void) +{ +#ifdef RT_USING_SMART + /* init data structure */ + rt_hw_mmu_map_init(&rt_kernel_space, (void *)(IOREMAP_VEND - IOREMAP_SIZE), IOREMAP_SIZE, (rt_size_t *)MMUTable, PV_OFFSET); + + /* init page allocator */ + rt_page_init(init_page_region); + + /* setup region, and enable MMU */ + rt_hw_mmu_setup(&rt_kernel_space, platform_mem_desc, NUM_MEM_DESC); +#endif + +#ifdef RT_USING_HEAP + /* initialize memory system */ + rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END); +#endif + /* initalize interrupt */ + rt_hw_interrupt_init(); + + /* initialize hardware interrupt */ + rt_hw_uart_init(); + + rt_hw_tick_init(); + +#ifdef RT_USING_CONSOLE + /* set console device */ + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif /* RT_USING_CONSOLE */ + +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif +} + +void rt_hw_cpu_reset(void) +{ + sbi_shutdown(); + while(1); +} +MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reboot, reset machine); diff --git a/bsp/k230/board/board.h b/bsp/k230/board/board.h new file mode 100644 index 00000000000..1947c2b0bb3 --- /dev/null +++ b/bsp/k230/board/board.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-01-30 lizhirui first version + */ + +#ifndef BOARD_H__ +#define BOARD_H__ + +#include + +extern unsigned int __sram_size; +extern unsigned int __sram_base; +extern unsigned int __sram_end; +#define RAM_END (rt_size_t)((void *)&__sram_end) + +extern unsigned int __bss_start; +extern unsigned int __bss_end; + +#define RT_HW_HEAP_BEGIN ((void *)&__bss_end) +#define RT_HW_HEAP_END ((void *)(((rt_size_t)RT_HW_HEAP_BEGIN) + 8 * 1024 * 1024)) + +#define RT_HW_PAGE_START ((void *)((rt_size_t)RT_HW_HEAP_END + sizeof(rt_size_t))) +#define RT_HW_PAGE_END ((void *)(RAM_END)) + +void rt_hw_board_init(void); +void rt_init_user_mem(struct rt_thread *thread, const char *name, unsigned long *entry); + +#endif diff --git a/bsp/k230/drivers/SConscript b/bsp/k230/drivers/SConscript new file mode 100644 index 00000000000..1b5c289ce1a --- /dev/null +++ b/bsp/k230/drivers/SConscript @@ -0,0 +1,21 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() +src = [] +CPPPATH = [cwd] + +src += Glob('*.c') + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +objs = [group] + +list = os.listdir(cwd) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/k230/drivers/interdrv/SConscript b/bsp/k230/drivers/interdrv/SConscript new file mode 100644 index 00000000000..7af43915886 --- /dev/null +++ b/bsp/k230/drivers/interdrv/SConscript @@ -0,0 +1,19 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Interdrv', src, depend = [''], CPPPATH = CPPPATH) + +objs = [group] + +list = os.listdir(cwd) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/k230/drivers/interdrv/sdio/SConscript b/bsp/k230/drivers/interdrv/sdio/SConscript new file mode 100644 index 00000000000..9d22e04def8 --- /dev/null +++ b/bsp/k230/drivers/interdrv/sdio/SConscript @@ -0,0 +1,19 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Sdio', src, depend = ['BSP_USING_SDIO'], CPPPATH = CPPPATH) + +objs = [group] + +list = os.listdir(cwd) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/k230/drivers/interdrv/sdio/drv_sdhci.c b/bsp/k230/drivers/interdrv/sdio/drv_sdhci.c new file mode 100644 index 00000000000..cef781ddc58 --- /dev/null +++ b/bsp/k230/drivers/interdrv/sdio/drv_sdhci.c @@ -0,0 +1,930 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2017-10-10 Tanek first version + * 2021-07-07 linzhenxing add sd card drivers in mmu + * 2021-07-14 linzhenxing add emmc + */ + +#include +#include +#include + +#include "board.h" +#include "drv_sdhci.h" +#include "riscv_io.h" +#include +#include +#include + +#ifdef RT_USING_SDIO + +#define DBG_TAG "drv_sdhci" +#ifdef RT_SDIO_DEBUG +#define DBG_LVL DBG_LOG +#else +#define DBG_LVL DBG_WARNING +#endif /* RT_SDIO_DEBUG */ +#include + +#if defined(BSP_USING_SDIO0) || defined(BSP_USING_SDIO1) + +#define SDHCI_SDMA_ENABLE +#define CACHE_LINESIZE (64) + +#define BIT(x) (1 << x) +#define DWC_MSHC_PTR_VENDOR1 0x500 +#define MSHC_CTRL_R (DWC_MSHC_PTR_VENDOR1 + 0x08) +#define EMMC_CTRL_R (DWC_MSHC_PTR_VENDOR1 + 0x2c) +#define SDHCI_VENDER_AT_CTRL_REG (DWC_MSHC_PTR_VENDOR1 + 0x40) +#define SDHCI_VENDER_AT_STAT_REG (DWC_MSHC_PTR_VENDOR1 + 0x44) +#define SDHCI_TUNE_CLK_STOP_EN_MASK BIT(16) +#define SDHCI_TUNE_SWIN_TH_VAL_LSB (24) +#define SDHCI_TUNE_SWIN_TH_VAL_MASK (0xFF) +#define CARD_IS_EMMC 0 +#define EMMC_RST_N 2 +#define EMMC_RST_N_OE 3 + +#define DWC_MSHC_PTR_PHY_REGS 0x300 +#define DWC_MSHC_PHY_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x0) +#define PAD_SN_LSB 20 +#define PAD_SN_MASK 0xF +#define PAD_SN_DEFAULT ((0x8 & PAD_SN_MASK) << PAD_SN_LSB) +#define PAD_SP_LSB 16 +#define PAD_SP_MASK 0xF +#define PAD_SP_DEFAULT ((0x9 & PAD_SP_MASK) << PAD_SP_LSB) +#define PHY_PWRGOOD BIT(1) +#define PHY_RSTN BIT(0) + +#define DWC_MSHC_CMDPAD_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x4) +#define DWC_MSHC_DATPAD_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x6) +#define DWC_MSHC_CLKPAD_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x8) +#define DWC_MSHC_STBPAD_CNFG (DWC_MSHC_PTR_PHY_REGS + 0xA) +#define DWC_MSHC_RSTNPAD_CNFG (DWC_MSHC_PTR_PHY_REGS + 0xC) +#define TXSLEW_N_LSB 9 +#define TXSLEW_N_MASK 0xF +#define TXSLEW_P_LSB 5 +#define TXSLEW_P_MASK 0xF +#define WEAKPULL_EN_LSB 3 +#define WEAKPULL_EN_MASK 0x3 +#define RXSEL_LSB 0 +#define RXSEL_MASK 0x3 + +#define DWC_MSHC_COMMDL_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x1C) +#define DWC_MSHC_SDCLKDL_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x1D) +#define DWC_MSHC_SDCLKDL_DC (DWC_MSHC_PTR_PHY_REGS + 0x1E) +#define DWC_MSHC_SMPLDL_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x20) +#define DWC_MSHC_ATDL_CNFG (DWC_MSHC_PTR_PHY_REGS + 0x21) + +#define DWC_MSHC_PHY_PAD_SD_CLK \ + ((1 << TXSLEW_N_LSB) | (3 << TXSLEW_P_LSB) | (0 << WEAKPULL_EN_LSB) | (2 << RXSEL_LSB)) +#define DWC_MSHC_PHY_PAD_SD_DAT \ + ((1 << TXSLEW_N_LSB) | (3 << TXSLEW_P_LSB) | (1 << WEAKPULL_EN_LSB) | (2 << RXSEL_LSB)) +#define DWC_MSHC_PHY_PAD_SD_STB \ + ((1 << TXSLEW_N_LSB) | (3 << TXSLEW_P_LSB) | (2 << WEAKPULL_EN_LSB) | (2 << RXSEL_LSB)) +#define DWC_MSHC_PHY_PAD_EMMC_CLK \ + ((2 << TXSLEW_N_LSB) | (2 << TXSLEW_P_LSB) | (0 << WEAKPULL_EN_LSB) | (1 << RXSEL_LSB)) +#define DWC_MSHC_PHY_PAD_EMMC_DAT \ + ((2 << TXSLEW_N_LSB) | (2 << TXSLEW_P_LSB) | (1 << WEAKPULL_EN_LSB) | (1 << RXSEL_LSB)) +#define DWC_MSHC_PHY_PAD_EMMC_STB \ + ((2 << TXSLEW_N_LSB) | (2 << TXSLEW_P_LSB) | (2 << WEAKPULL_EN_LSB) | (1 << RXSEL_LSB)) + +static struct sdhci_host* sdhci_host0; +static struct sdhci_host* sdhci_host1; + +static inline void sdhci_writel(struct sdhci_host* host, uint32_t val, int reg) +{ + writel(val, (void*)host->mapbase + reg); +} + +static inline void sdhci_writew(struct sdhci_host* host, uint16_t val, int reg) +{ + writew((uint16_t)val, (void*)host->mapbase + reg); +} + +static inline void sdhci_writeb(struct sdhci_host* host, uint8_t val, int reg) +{ + writeb((uint8_t)val, (void*)host->mapbase + reg); +} + +static inline uint32_t sdhci_readl(struct sdhci_host* host, int reg) +{ + return (uint32_t)readl((void*)host->mapbase + reg); +} + +static inline uint16_t sdhci_readw(struct sdhci_host* host, int reg) +{ + return (uint16_t)readw((void*)host->mapbase + reg); +} + +static inline uint8_t sdhci_readb(struct sdhci_host* host, int reg) +{ + return (uint8_t)readb((void*)host->mapbase + reg); +} + +static void emmc_reg_display(struct sdhci_host* host) +{ + rt_kprintf("SD_MASA_R:%x\n", sdhci_readl(host, SDHCI_DMA_ADDRESS)); + rt_kprintf("BLCOKSIZE_R:%x\n", sdhci_readw(host, SDHCI_BLOCK_SIZE)); + rt_kprintf("BLOCKCOUNT_R:%x\n", sdhci_readw(host, SDHCI_BLOCK_COUNT)); + rt_kprintf("ARGUMENT_R:%x\n", sdhci_readl(host, SDHCI_ARGUMENT)); + rt_kprintf("XFER_MODE_R:%x\n", sdhci_readw(host, SDHCI_TRANSFER_MODE)); + rt_kprintf("CMD_R:%x\n", sdhci_readw(host, SDHCI_COMMAND)); + rt_kprintf("RESP0_R:%x\n", sdhci_readl(host, SDHCI_RESPONSE)); + rt_kprintf("RESP1_R:%x\n", sdhci_readl(host, SDHCI_RESPONSE + 4)); + rt_kprintf("RESP2_R:%x\n", sdhci_readl(host, SDHCI_RESPONSE + 8)); + rt_kprintf("RESP3_R:%x\n", sdhci_readl(host, SDHCI_RESPONSE + 12)); + rt_kprintf("BUF_DATA_R:%x\n", sdhci_readl(host, SDHCI_BUFFER)); + rt_kprintf("PSTATE_REG_R:%x\n", sdhci_readl(host, SDHCI_PRESENT_STATE)); + rt_kprintf("HOST_CTL_R:%x\n", sdhci_readb(host, SDHCI_HOST_CONTROL)); + rt_kprintf("PWR_CTRL_R:%x\n", sdhci_readb(host, SDHCI_POWER_CONTROL)); + rt_kprintf("BGAP_CTRL_R:%x\n", sdhci_readb(host, SDHCI_BLOCK_GAP_CONTROL)); + rt_kprintf("WUP_CTRL_R:%x\n", sdhci_readb(host, SDHCI_WAKE_UP_CONTROL)); + rt_kprintf("CLK_CTRL_R:%x\n", sdhci_readw(host, SDHCI_CLOCK_CONTROL)); + rt_kprintf("TOUT_CTRL_R:%x\n", sdhci_readb(host, SDHCI_TIMEOUT_CONTROL)); + rt_kprintf("SW_RSR_R:%x\n", sdhci_readb(host, SDHCI_SOFTWARE_RESET)); + rt_kprintf("NORMAL_INT_STAT_R:%x\n", sdhci_readw(host, SDHCI_INT_STATUS)); + rt_kprintf("ERROR_INT_STAT_R:%x\n", sdhci_readw(host, SDHCI_INT_STATUS + 2)); + rt_kprintf("NORMAL_INT_STAT_EN_R:%x\n", sdhci_readw(host, SDHCI_INT_ENABLE)); + rt_kprintf("ERROR_INT_STAT_EN_R:%x\n", sdhci_readw(host, SDHCI_INT_ENABLE + 2)); + rt_kprintf("NORNAL_INT_SIGNAL_EN_R:%x\n", sdhci_readw(host, SDHCI_SIGNAL_ENABLE)); + rt_kprintf("ERROR_INT_SIGNAL_EN_R:%x\n", sdhci_readw(host, SDHCI_SIGNAL_ENABLE + 2)); + rt_kprintf("AUTO_CMD_STAT_R:%x\n", sdhci_readw(host, SDHCI_AUTO_CMD_STATUS)); + rt_kprintf("HOST_CTRL2_R:%x\n", sdhci_readw(host, SDHCI_HOST_CONTROL2)); + rt_kprintf("CAPABILITIES1_R:%x\n", sdhci_readl(host, SDHCI_CAPABILITIES)); + rt_kprintf("CAPABILITIES2_R:%x\n", sdhci_readl(host, SDHCI_CAPABILITIES_1)); + rt_kprintf("FORCE_AUTO_CMD_STAT_R:%x\n", sdhci_readw(host, SDHCI_MAX_CURRENT)); + rt_kprintf("FORCE_ERROR_INT_STAT_R:%x\n", sdhci_readw(host, SDHCI_SET_ACMD12_ERROR)); + rt_kprintf("AMDA_ERR_STAT_STAT_R:%x\n", sdhci_readl(host, SDHCI_ADMA_ERROR)); + rt_kprintf("AMDA_SA_LOW_STAT_R:%x\n", sdhci_readl(host, SDHCI_ADMA_ADDRESS)); + rt_kprintf("AMDA_SA_HIGH_STAT_R:%x\n", sdhci_readl(host, SDHCI_ADMA_ADDRESS_HI)); +} + +static inline void delay_1k(unsigned int uicnt) +{ + int i, j; + + for (i = 0; i < uicnt; i++) + for (j = 0; j < 1000; j++) + asm("nop"); +} + +static void dwcmshc_phy_1_8v_init(struct sdhci_host* host) +{ + sdhci_writew(host, DWC_MSHC_PHY_PAD_EMMC_DAT, DWC_MSHC_CMDPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_EMMC_DAT, DWC_MSHC_DATPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_EMMC_CLK, DWC_MSHC_CLKPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_EMMC_STB, DWC_MSHC_STBPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_EMMC_DAT, DWC_MSHC_RSTNPAD_CNFG); +} + +static void dwcmshc_phy_3_3v_init(struct sdhci_host* host) +{ + sdhci_writew(host, DWC_MSHC_PHY_PAD_SD_DAT, DWC_MSHC_CMDPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_SD_DAT, DWC_MSHC_DATPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_SD_CLK, DWC_MSHC_CLKPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_SD_STB, DWC_MSHC_STBPAD_CNFG); + sdhci_writew(host, DWC_MSHC_PHY_PAD_SD_DAT, DWC_MSHC_RSTNPAD_CNFG); +} + +static void dwcmshc_phy_delay_config(struct sdhci_host* host) +{ + sdhci_writeb(host, 1, DWC_MSHC_COMMDL_CNFG); + if (host->tx_delay_line > 256) { + LOG_E("host%d: tx_delay_line err\n", host->index); + } else if (host->tx_delay_line > 128) { + sdhci_writeb(host, 0x1, DWC_MSHC_SDCLKDL_CNFG); + sdhci_writeb(host, host->tx_delay_line - 128, DWC_MSHC_SDCLKDL_DC); + } else { + sdhci_writeb(host, 0x0, DWC_MSHC_SDCLKDL_CNFG); + sdhci_writeb(host, host->tx_delay_line, DWC_MSHC_SDCLKDL_DC); + } + sdhci_writeb(host, host->rx_delay_line, DWC_MSHC_SMPLDL_CNFG); + sdhci_writeb(host, 0xc, DWC_MSHC_ATDL_CNFG); + sdhci_writel(host, (sdhci_readl(host, SDHCI_VENDER_AT_CTRL_REG) | BIT(16) | BIT(17) | BIT(19) | BIT(20)), SDHCI_VENDER_AT_CTRL_REG); + sdhci_writel(host, 0x0, SDHCI_VENDER_AT_STAT_REG); +} + +static int dwcmshc_phy_init(struct sdhci_host* host) +{ + uint32_t reg; + uint32_t timeout = 15000; + /* reset phy */ + sdhci_writew(host, 0, DWC_MSHC_PHY_CNFG); + + /* Disable the clock */ + sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL); + + if (host->io_fixed_1v8) { + uint32_t data = sdhci_readw(host, SDHCI_HOST_CONTROL2); + data |= SDHCI_CTRL_VDD_180; + sdhci_writew(host, data, SDHCI_HOST_CONTROL2); + dwcmshc_phy_1_8v_init(host); + } else { + dwcmshc_phy_3_3v_init(host); + } + + dwcmshc_phy_delay_config(host); + + /* Wait max 150 ms */ + while (1) { + reg = sdhci_readl(host, DWC_MSHC_PHY_CNFG); + if (reg & PHY_PWRGOOD) + break; + if (!timeout) { + return -1; + } + timeout--; + + delay_1k(1); + } + + reg = PAD_SN_DEFAULT | PAD_SP_DEFAULT; + sdhci_writel(host, reg, DWC_MSHC_PHY_CNFG); + + /* de-assert the phy */ + reg |= PHY_RSTN; + sdhci_writel(host, reg, DWC_MSHC_PHY_CNFG); + + return 0; +} + +static void sdhci_reset(struct sdhci_host* host, uint8_t mask) +{ + unsigned long timeout; + + /* Wait max 100 ms */ + timeout = 100; + sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET); + while (sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask) { + if (timeout == 0) { + LOG_E("%s: Reset 0x%x never completed.\n", + __func__, (int)mask); + return; + } + timeout--; + delay_1k(1); + } + if (mask == SDHCI_RESET_ALL) { + if (host->index == 0) { + uint16_t emmc_ctl = sdhci_readw(host, EMMC_CTRL_R); + if (host->is_emmc_card) + emmc_ctl |= (1 << CARD_IS_EMMC); + else + emmc_ctl &= ~(1 << CARD_IS_EMMC); + sdhci_writeb(host, emmc_ctl, EMMC_CTRL_R); + } + if (host->have_phy) + dwcmshc_phy_init(host); + else + sdhci_writeb(host, host->mshc_ctrl_r, MSHC_CTRL_R); + } +} + +static uint32_t sdhci_get_present_status_flag(struct sdhci_host* sdhci_host) +{ + return sdhci_readl(sdhci_host, SDHCI_PRESENT_STATE); +} + +static uint32_t sdhci_get_int_status_flag(struct sdhci_host* sdhci_host) +{ + return sdhci_readl(sdhci_host, SDHCI_INT_STATUS); +} + +static void sdhci_clear_int_status_flag(struct sdhci_host* sdhci_host, uint32_t mask) +{ + sdhci_writel(sdhci_host, mask, SDHCI_INT_STATUS); +} + +static void sdhic_error_recovery(struct sdhci_host* sdhci_host) +{ + uint32_t status; + /* get host present status */ + status = sdhci_get_present_status_flag(sdhci_host); + /* check command inhibit status flag */ + if ((status & SDHCI_CMD_INHIBIT) != 0U) { + /* reset command line */ + sdhci_reset(sdhci_host, SDHCI_RESET_CMD); + } + /* check data inhibit status flag */ + if ((status & SDHCI_DATA_INHIBIT) != 0U) { + /* reset data line */ + sdhci_reset(sdhci_host, SDHCI_RESET_DATA); + } +} + +static rt_err_t sdhci_receive_command_response(struct sdhci_host* sdhci_host, struct sdhci_command* command) +{ + if (command->responseType == card_response_type_r2) { + /* CRC is stripped so we need to do some shifting. */ + for (int i = 0; i < 4; i++) { + command->response[3 - i] = sdhci_readl(sdhci_host, SDHCI_RESPONSE + (3 - i) * 4) << 8; + if (i != 3) + command->response[3 - i] |= sdhci_readb(sdhci_host, SDHCI_RESPONSE + (3 - i) * 4 - 1); + } + } else { + command->response[0] = sdhci_readl(sdhci_host, SDHCI_RESPONSE); + } + /* check response error flag */ + if ((command->responseErrorFlags != 0U) && ((command->responseType == card_response_type_r1) || (command->responseType == card_response_type_r1b) || (command->responseType == card_response_type_r6) || (command->responseType == card_response_type_r5))) { + if (((command->responseErrorFlags) & (command->response[0U])) != 0U) + return -1; // kStatus_USDHC_SendCommandFailed; + } + + return 0; +} + +static void sdhci_send_command(struct sdhci_host* sdhci_host, struct sdhci_command* command, rt_bool_t enDMA) +{ + RT_ASSERT(RT_NULL != command); + + uint32_t cmd_r, xfer_mode; + struct sdhci_data* sdhci_data = sdhci_host->sdhci_data; + + cmd_r = SDHCI_MAKE_CMD(command->index, command->flags); + + if (sdhci_data != RT_NULL) { +#ifdef SDHCI_SDMA_ENABLE + rt_ubase_t start_addr, dma_addr; + if (sdhci_data->rxData) + start_addr = (rt_ubase_t)((uint8_t*)sdhci_data->rxData); + else + start_addr = (rt_ubase_t)((uint8_t*)sdhci_data->txData); + rt_hw_cpu_dcache_clean((void*)start_addr, sdhci_data->blockSize * sdhci_data->blockCount); + command->flags2 |= sdhci_enable_dma_flag; + dma_addr = rt_kmem_v2p((void*)start_addr); + sdhci_writel(sdhci_host, dma_addr, SDHCI_DMA_ADDRESS); +#endif + sdhci_writew(sdhci_host, SDHCI_MAKE_BLKSZ(7, sdhci_data->blockSize), SDHCI_BLOCK_SIZE); + sdhci_writew(sdhci_host, sdhci_data->blockCount, SDHCI_BLOCK_COUNT); + } + xfer_mode = command->flags2 & 0x1ff; + sdhci_writew(sdhci_host, xfer_mode, SDHCI_TRANSFER_MODE); + sdhci_writel(sdhci_host, command->argument, SDHCI_ARGUMENT); + sdhci_writew(sdhci_host, cmd_r, SDHCI_COMMAND); +} + +static rt_err_t sdhci_wait_command_done(struct sdhci_host* sdhci_host, struct sdhci_command* command, rt_bool_t executeTuning) +{ + RT_ASSERT(RT_NULL != command); + rt_uint32_t event; + /* tuning cmd do not need to wait command done */ + if (executeTuning) + return 0; + /* Wait command complete or USDHC encounters error. */ + rt_event_recv(&sdhci_host->event, SDHCI_INT_ERROR | SDHCI_INT_RESPONSE, + RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &event); + if (event & SDHCI_INT_ERROR) { + LOG_D("%s: Error detected in status(0x%X)!\n", __func__, sdhci_host->error_code); + return -1; + } + return sdhci_receive_command_response(sdhci_host, command); +} + +static rt_err_t sdhci_transfer_data_blocking(struct sdhci_host* sdhci_host, struct sdhci_data* data, rt_bool_t enDMA) +{ +#ifdef SDHCI_SDMA_ENABLE + rt_err_t err; + rt_uint32_t event; + + while (1) { + err = rt_event_recv(&sdhci_host->event, SDHCI_INT_ERROR | SDHCI_INT_DATA_END | SDHCI_INT_DMA_END, + RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, 1000, &event); + if (err == -RT_ETIMEOUT) { + rt_kprintf("%s: Transfer data timeout\n", __func__); + return -1; + } + if (event & SDHCI_INT_ERROR) { + LOG_D("%s: Error detected in status(0x%X)!\n", __func__, sdhci_host->error_code); + emmc_reg_display(sdhci_host); + return -1; + } + if (event & SDHCI_INT_DMA_END) { + sdhci_writel(sdhci_host, SDHCI_INT_DMA_END, SDHCI_INT_STATUS); + sdhci_writel(sdhci_host, sdhci_readl(sdhci_host, SDHCI_DMA_ADDRESS), SDHCI_DMA_ADDRESS); + } + if (event & SDHCI_INT_DATA_END) { + if (data && data->rxData) + rt_hw_cpu_dcache_invalidate((void*)data->rxData, data->blockSize * data->blockCount); + return 0; + } + } +#else + uint32_t stat, rdy, mask, timeout, block; + + block = 0; + timeout = 1000000; + rdy = SDHCI_INT_SPACE_AVAIL | SDHCI_INT_DATA_AVAIL; + mask = SDHCI_DATA_AVAILABLE | SDHCI_SPACE_AVAILABLE; + + while (1) { + stat = sdhci_get_int_status_flag(sdhci_host); + if (stat & SDHCI_INT_ERROR) { + LOG_D("%s: Error detected in status(0x%X)!\n", __func__, stat); + emmc_reg_display(sdhci_host); + return -1; + } + if (stat & rdy) { + if (!(sdhci_readl(sdhci_host, SDHCI_PRESENT_STATE) & mask)) { + continue; + } + sdhci_clear_int_status_flag(sdhci_host, rdy); + if (data->rxData) { + for (int i = 0; i < data->blockSize / 4; i++) + data->rxData[i + block * data->blockSize] = sdhci_readl(sdhci_host, SDHCI_BUFFER); + } else { + for (int i = 0; i < data->blockSize / 4; i++) + sdhci_writel(sdhci_host, data->txData[i + block * data->blockSize], SDHCI_BUFFER); + } + block++; + if (block >= data->blockCount) + return 0; + } + if (timeout == 0) { + rt_kprintf("%s: Transfer data timeout\n", __func__); + return -1; + } + timeout--; + delay_1k(1); + } +#endif +} + +static rt_err_t sdhci_set_transfer_config(struct sdhci_host* sdhci_host, struct sdhci_command* sdhci_command, struct sdhci_data* sdhci_data) +{ + RT_ASSERT(sdhci_command); + /* Define the flag corresponding to each response type. */ + switch (sdhci_command->responseType) { + case card_response_type_none: + break; + case card_response_type_r1: /* Response 1 */ + case card_response_type_r5: /* Response 5 */ + case card_response_type_r6: /* Response 6 */ + case card_response_type_r7: /* Response 7 */ + + sdhci_command->flags |= (sdhci_cmd_resp_short | sdhci_enable_cmd_crc_flag | sdhci_enable_cmd_index_chk_flag); + break; + + case card_response_type_r1b: /* Response 1 with busy */ + case card_response_type_r5b: /* Response 5 with busy */ + sdhci_command->flags |= (sdhci_cmd_resp_short_busy | sdhci_enable_cmd_crc_flag | sdhci_enable_cmd_index_chk_flag); + break; + + case card_response_type_r2: /* Response 2 */ + sdhci_command->flags |= (sdhci_cmd_resp_long | sdhci_enable_cmd_crc_flag); + break; + + case card_response_type_r3: /* Response 3 */ + case card_response_type_r4: /* Response 4 */ + sdhci_command->flags |= (sdhci_cmd_resp_short); + break; + + default: + break; + } + + if (sdhci_command->type == card_command_type_abort) { + sdhci_command->flags |= sdhci_enable_command_type_abort; + } else if (sdhci_command->type == card_command_type_resume) { + sdhci_command->flags |= sdhci_enable_command_type_resume; + } else if (sdhci_command->type == card_command_type_suspend) { + sdhci_command->flags |= sdhci_enable_command_type_suspend; + } else if (sdhci_command->type == card_command_type_normal) { + sdhci_command->flags |= sdhci_enable_command_type_normal; + } + + if (sdhci_data) { + sdhci_command->flags |= sdhci_enable_cmd_data_present_flag; + sdhci_command->flags2 |= sdhci_enable_block_count_flag; + + if (sdhci_data->rxData) { + sdhci_command->flags2 |= sdhci_data_read_flag; + } + if (sdhci_data->blockCount > 1U) { + sdhci_command->flags2 |= (sdhci_multiple_block_flag); + /* auto command 12 */ + if (sdhci_data->enableAutoCommand12) { + /* Enable Auto command 12. */ + sdhci_command->flags2 |= sdhci_enable_auto_command12_flag; + } + /* auto command 23 */ + if (sdhci_data->enableAutoCommand23) { + sdhci_command->flags2 |= sdhci_enable_auto_command23_flag; + } + } + } + return 0; +} + +static rt_err_t sdhci_transfer_blocking(struct sdhci_host* sdhci_host) +{ + RT_ASSERT(sdhci_host); + struct sdhci_command* sdhci_command = sdhci_host->sdhci_command; + struct sdhci_data* sdhci_data = sdhci_host->sdhci_data; + rt_bool_t enDMA = false; + int ret = RT_EOK; + + /* Wait until command/data bus out of busy status. */ + while (sdhci_get_present_status_flag(sdhci_host) & sdhci_command_inhibit_flag) { + } + while (sdhci_data && (sdhci_get_present_status_flag(sdhci_host) & sdhci_data_inhibit_flag)) { + } + sdhci_writel(sdhci_host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS); + + ret = sdhci_set_transfer_config(sdhci_host, sdhci_command, sdhci_data); + if (ret != 0) { + return ret; + } + sdhci_writel(sdhci_host, sdhci_readl(sdhci_host, SDHCI_SIGNAL_ENABLE) | + SDHCI_INT_DATA_MASK | SDHCI_INT_CMD_MASK, SDHCI_SIGNAL_ENABLE); + rt_event_control(&sdhci_host->event, RT_IPC_CMD_RESET, 0); + sdhci_send_command(sdhci_host, sdhci_command, enDMA); + /* wait command done */ + ret = sdhci_wait_command_done(sdhci_host, sdhci_command, ((sdhci_data == RT_NULL) ? false : sdhci_data->executeTuning)); + /* transfer data */ + if ((sdhci_data != RT_NULL) && (ret == 0)) { + ret = sdhci_transfer_data_blocking(sdhci_host, sdhci_data, enDMA); + } + sdhci_writel(sdhci_host, sdhci_readl(sdhci_host, SDHCI_SIGNAL_ENABLE) & + ~(SDHCI_INT_DATA_MASK | SDHCI_INT_CMD_MASK), SDHCI_SIGNAL_ENABLE); + sdhci_writel(sdhci_host, SDHCI_INT_ALL_MASK, SDHCI_INT_STATUS); + sdhci_reset(sdhci_host, SDHCI_RESET_CMD); + sdhci_reset(sdhci_host, SDHCI_RESET_DATA); + return ret; +} + +static void sdhci_init(struct sdhci_host* host) +{ + sdhci_reset(host, SDHCI_RESET_ALL); + sdhci_writeb(host, SDHCI_CTRL_HISPD, SDHCI_HOST_CONTROL); + sdhci_writeb(host, 0x7, SDHCI_TIMEOUT_CONTROL); + sdhci_writeb(host, SDHCI_POWER_ON | SDHCI_POWER_330, SDHCI_POWER_CONTROL); + sdhci_writew(host, SDHCI_CLOCK_INT_EN, SDHCI_CLOCK_CONTROL); + while ((sdhci_readw(host, SDHCI_CLOCK_CONTROL) & SDHCI_CLOCK_INT_STABLE) == 0) + ; + sdhci_writel(host, SDHCI_INT_DATA_MASK | SDHCI_INT_CMD_MASK, SDHCI_INT_ENABLE); + sdhci_writel(host, SDHCI_INT_CARD_INT, SDHCI_SIGNAL_ENABLE); +} + +static void sdhci_irq(int vector, void* param) +{ + struct sdhci_host* host = param; + uint32_t status = sdhci_get_int_status_flag(host); + + if (status & (SDHCI_INT_ERROR | SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | SDHCI_INT_RESPONSE)) { + host->error_code = (status >> 16) & 0xffff; + rt_event_send(&host->event, status & (SDHCI_INT_ERROR | SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | SDHCI_INT_RESPONSE)); + } + if (status & SDHCI_INT_CARD_INT) + sdio_irq_wakeup(host->host); + sdhci_clear_int_status_flag(host, status); +} + +static void kd_mmc_request(struct rt_mmcsd_host* host, struct rt_mmcsd_req* req) +{ + struct sdhci_host* mmcsd; + struct rt_mmcsd_cmd* cmd; + struct rt_mmcsd_data* data; + rt_err_t error; + struct sdhci_data sdhci_data = { 0 }; + struct sdhci_command sdhci_command = { 0 }; + + RT_ASSERT(host != RT_NULL); + RT_ASSERT(req != RT_NULL); + + mmcsd = (struct sdhci_host*)host->private_data; + RT_ASSERT(mmcsd != RT_NULL); + + cmd = req->cmd; + RT_ASSERT(cmd != RT_NULL); + + LOG_D("\tcmd->cmd_code: %02d, cmd->arg: %08x, cmd->flags: %08x --> ", cmd->cmd_code, cmd->arg, cmd->flags); + + data = cmd->data; + + sdhci_command.index = cmd->cmd_code; + sdhci_command.argument = cmd->arg; + + if (cmd->cmd_code == STOP_TRANSMISSION) + sdhci_command.type = card_command_type_abort; + else + sdhci_command.type = card_command_type_normal; + + switch (cmd->flags & RESP_MASK) { + case RESP_NONE: + sdhci_command.responseType = card_response_type_none; + break; + case RESP_R1: + sdhci_command.responseType = card_response_type_r1; + break; + case RESP_R1B: + sdhci_command.responseType = card_response_type_r1b; + break; + case RESP_R2: + sdhci_command.responseType = card_response_type_r2; + break; + case RESP_R3: + sdhci_command.responseType = card_response_type_r3; + break; + case RESP_R4: + sdhci_command.responseType = card_response_type_r4; + break; + case RESP_R6: + sdhci_command.responseType = card_response_type_r6; + break; + case RESP_R7: + sdhci_command.responseType = card_response_type_r7; + break; + case RESP_R5: + sdhci_command.responseType = card_response_type_r5; + break; + default: + RT_ASSERT(RT_NULL); + } + + sdhci_command.flags = 0; + sdhci_command.flags2 = 0; + sdhci_command.responseErrorFlags = 0; + mmcsd->sdhci_command = &sdhci_command; + + if (data) { + if (req->stop != RT_NULL) + sdhci_data.enableAutoCommand12 = true; + else + sdhci_data.enableAutoCommand12 = false; + + sdhci_data.enableAutoCommand23 = false; + + sdhci_data.blockSize = data->blksize; + sdhci_data.blockCount = data->blks; + + if (data->flags == DATA_DIR_WRITE) { + sdhci_data.txData = data->buf; + sdhci_data.rxData = RT_NULL; + } else { + sdhci_data.rxData = data->buf; + sdhci_data.txData = RT_NULL; + } +#ifdef SDHCI_SDMA_ENABLE + uint32_t sz = sdhci_data.blockSize * sdhci_data.blockCount; + uint32_t pad = 0; + if (sz & (CACHE_LINESIZE - 1)) + pad = (sz + (CACHE_LINESIZE - 1)) & ~(CACHE_LINESIZE - 1); + if (sdhci_data.rxData && (((uint64_t)(sdhci_data.rxData) & (CACHE_LINESIZE - 1)) || pad)) { + sdhci_data.rxData = rt_malloc_align(pad ? pad : sz, CACHE_LINESIZE); + } else if (((uint64_t)(sdhci_data.txData) & (CACHE_LINESIZE - 1)) || pad) { + sdhci_data.txData = rt_malloc_align(pad ? pad : sz, CACHE_LINESIZE); + rt_memcpy(sdhci_data.txData, data->buf, sz); + } +#endif + mmcsd->sdhci_data = &sdhci_data; + } else { + mmcsd->sdhci_data = RT_NULL; + } + error = sdhci_transfer_blocking(mmcsd); +#ifdef SDHCI_SDMA_ENABLE + if (data && sdhci_data.rxData && sdhci_data.rxData != data->buf) { + rt_memcpy(data->buf, sdhci_data.rxData, sdhci_data.blockSize * sdhci_data.blockCount); + rt_free_align(sdhci_data.rxData); + } else if (data && sdhci_data.txData && sdhci_data.txData != data->buf) { + rt_free_align(sdhci_data.txData); + } +#endif + if (error == -1) { + LOG_D(" ***USDHC_TransferBlocking error: %d*** --> \n", error); + cmd->err = -RT_ERROR; + } + + if ((cmd->flags & RESP_MASK) == RESP_R2) { + cmd->resp[3] = sdhci_command.response[0]; + cmd->resp[2] = sdhci_command.response[1]; + cmd->resp[1] = sdhci_command.response[2]; + cmd->resp[0] = sdhci_command.response[3]; + LOG_D(" resp 0x%08X 0x%08X 0x%08X 0x%08X\n", + cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]); + } else { + cmd->resp[0] = sdhci_command.response[0]; + LOG_D(" resp 0x%08X\n", cmd->resp[0]); + } + mmcsd_req_complete(host); +} + +static void kd_mmc_clock_freq_change(struct sdhci_host* host, uint32_t clock) +{ + uint32_t div, val; + + val = sdhci_readw(host, SDHCI_CLOCK_CONTROL); + val &= ~(SDHCI_CLOCK_CARD_EN | SDHCI_PROG_CLOCK_MODE); + sdhci_writew(host, val, SDHCI_CLOCK_CONTROL); + + if (clock == 0) + return; + + if (host->max_clk <= clock) { + div = 1; + } else { + for (div = 2; div < SDHCI_MAX_DIV_SPEC_300; div += 2) { + if ((host->max_clk / div) <= clock) + break; + } + } + div >>= 1; + val &= ~((SDHCI_DIV_MASK << SDHCI_DIVIDER_SHIFT) | SDHCI_DIV_HI_MASK); + val |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT; + val |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN) + << SDHCI_DIVIDER_HI_SHIFT; + val |= SDHCI_CLOCK_CARD_EN | SDHCI_PROG_CLOCK_MODE; + sdhci_writew(host, val, SDHCI_CLOCK_CONTROL); + while ((sdhci_readw(host, SDHCI_CLOCK_CONTROL) & SDHCI_CLOCK_INT_STABLE) == 0) + ; +} + +static void kd_set_iocfg(struct rt_mmcsd_host* host, struct rt_mmcsd_io_cfg* io_cfg) +{ + struct sdhci_host* mmcsd; + unsigned int sdhci_clk; + unsigned int bus_width; + uint8_t ctrl; + RT_ASSERT(host != RT_NULL); + RT_ASSERT(host->private_data != RT_NULL); + RT_ASSERT(io_cfg != RT_NULL); + + mmcsd = (struct sdhci_host*)host->private_data; + sdhci_clk = io_cfg->clock; + bus_width = io_cfg->bus_width; + + LOG_D("%s: sdhci_clk=%d, bus_width:%d\n", __func__, sdhci_clk, bus_width); + + kd_mmc_clock_freq_change(mmcsd, sdhci_clk); + ctrl = sdhci_readb(mmcsd, SDHCI_HOST_CONTROL); + ctrl &= ~(SDHCI_CTRL_4BITBUS | SDHCI_CTRL_8BITBUS); + if (bus_width == 3) + ctrl |= SDHCI_CTRL_8BITBUS; + else if (bus_width == 2) + ctrl |= SDHCI_CTRL_4BITBUS; + sdhci_writeb(mmcsd, ctrl, SDHCI_HOST_CONTROL); +} + +static void kd_enable_sdio_irq(struct rt_mmcsd_host* mmcsd_host, rt_int32_t en) +{ + struct sdhci_host* host = (struct sdhci_host*)mmcsd_host->private_data; + uint32_t val; + + val = sdhci_readw(host, SDHCI_INT_ENABLE); + if (en) + val |= SDHCI_INT_CARD_INT; + else + val &= ~SDHCI_INT_CARD_INT; + sdhci_writew(host, val, SDHCI_INT_ENABLE); +} + +static const struct rt_mmcsd_host_ops ops = { + kd_mmc_request, + kd_set_iocfg, + RT_NULL, + kd_enable_sdio_irq, + RT_NULL, +}; + +void kd_sdhci0_reset(int value) +{ + struct sdhci_host* host = sdhci_host0; + + uint16_t emmc_ctl = sdhci_readw(host, EMMC_CTRL_R); + emmc_ctl |= (1 << EMMC_RST_N_OE); + if (value) + emmc_ctl |= (1 << EMMC_RST_N); + else + emmc_ctl &= ~(1 << EMMC_RST_N); + sdhci_writeb(host, emmc_ctl, EMMC_CTRL_R); +} + +void kd_sdhci_change(int id) +{ + if (id == 0) + mmcsd_change(sdhci_host0->host); + else if (id == 1) + mmcsd_change(sdhci_host1->host); +} + +rt_int32_t kd_sdhci_init(void) +{ + uint32_t val; + void* hi_sys_virt_addr = rt_ioremap((void*)0x91585000, 0x10); +#ifdef BSP_USING_SDIO0 + val = readl(hi_sys_virt_addr + 0); + val |= 1 << 6 | 1 << 4; + writel(val, hi_sys_virt_addr + 0); + sdhci_host0 = rt_malloc(sizeof(struct sdhci_host)); + if (!sdhci_host0) + return -1; + + rt_memset(sdhci_host0, 0, sizeof(struct sdhci_host)); + sdhci_host0->mapbase = (void*)rt_ioremap((void*)SDEMMC0_BASE, 0x1000); + sdhci_host0->index = 0; + sdhci_host0->have_phy = 1; + sdhci_host0->mshc_ctrl_r = 0; + sdhci_host0->rx_delay_line = 0x0d; + sdhci_host0->tx_delay_line = 0xc0; +#ifdef BSP_SDIO0_EMMC + sdhci_host0->is_emmc_card = 1; +#else + sdhci_host0->is_emmc_card = 0; +#endif +#ifdef BSP_SDIO0_1V8 + sdhci_host0->io_fixed_1v8 = 1; +#else + sdhci_host0->io_fixed_1v8 = 0; +#endif + sdhci_host0->sdhci_data = RT_NULL; + sdhci_host0->sdhci_command = RT_NULL; + sdhci_host0->max_clk = 200000000; + sdhci_init(sdhci_host0); + + rt_event_init(&sdhci_host0->event, "sd0_event", RT_IPC_FLAG_PRIO); + rt_hw_interrupt_install(IRQN_SD0, sdhci_irq, sdhci_host0, "sd0"); + rt_hw_interrupt_umask(IRQN_SD0); + + struct rt_mmcsd_host* mmcsd_host0 = mmcsd_alloc_host(); + if (!mmcsd_host0) { + rt_free(sdhci_host0); + return -1; + } + mmcsd_host0->ops = &ops; + mmcsd_host0->freq_min = 400000; + mmcsd_host0->freq_max = 50000000; +#ifdef BSP_SDIO0_EMMC + strncpy(mmcsd_host0->name, "emmc", sizeof(mmcsd_host0->name) - 1); + mmcsd_host0->flags = MMCSD_BUSWIDTH_8 | MMCSD_MUTBLKWRITE | MMCSD_SUP_HIGHSPEED | MMCSD_SUP_SDIO_IRQ; +#else + strncpy(mmcsd_host0->name, "sd0", sizeof(mmcsd_host0->name) - 1); + mmcsd_host0->flags = MMCSD_BUSWIDTH_4 | MMCSD_MUTBLKWRITE | MMCSD_SUP_HIGHSPEED | MMCSD_SUP_SDIO_IRQ; +#endif + mmcsd_host0->valid_ocr = sdhci_host0->io_fixed_1v8 ? VDD_165_195 : VDD_32_33 | VDD_33_34; +#ifdef BSP_USING_CYW43XX + mmcsd_host0->valid_ocr = VDD_32_33 | VDD_33_34; +#endif + mmcsd_host0->max_seg_size = 512 * 512; + mmcsd_host0->max_dma_segs = 1; + mmcsd_host0->max_blk_size = 512; + mmcsd_host0->max_blk_count = 4096; + mmcsd_host0->private_data = sdhci_host0; + sdhci_host0->host = mmcsd_host0; +#endif +#ifdef BSP_USING_SDIO1 + val = readl(hi_sys_virt_addr + 8); + val |= 1 << 2 | 1 << 0; + writel(val, hi_sys_virt_addr + 8); + sdhci_host1 = rt_malloc(sizeof(struct sdhci_host)); + if (!sdhci_host1) + return -2; + + rt_memset(sdhci_host1, 0, sizeof(struct sdhci_host)); + sdhci_host1->mapbase = (void*)rt_ioremap((void*)SDEMMC1_BASE, 0x1000); + sdhci_host1->index = 1; + sdhci_host1->have_phy = 0; + sdhci_host1->mshc_ctrl_r = 0; + sdhci_host1->rx_delay_line = 0; + sdhci_host1->tx_delay_line = 0; + sdhci_host1->sdhci_data = RT_NULL; + sdhci_host1->sdhci_command = RT_NULL; + sdhci_host1->max_clk = 100000000; + sdhci_init(sdhci_host1); + + rt_event_init(&sdhci_host1->event, "sd1_event", RT_IPC_FLAG_PRIO); + rt_hw_interrupt_install(IRQN_SD1, sdhci_irq, sdhci_host1, "sd1"); + rt_hw_interrupt_umask(IRQN_SD1); + + struct rt_mmcsd_host* mmcsd_host1 = mmcsd_alloc_host(); + if (!mmcsd_host1) { + rt_free(sdhci_host1); + return -2; + } + strncpy(mmcsd_host1->name, "sd1", sizeof(mmcsd_host1->name) - 1); + mmcsd_host1->ops = &ops; + mmcsd_host1->freq_min = 400000; + mmcsd_host1->freq_max = 50000000; + mmcsd_host1->valid_ocr = VDD_32_33 | VDD_33_34; + mmcsd_host1->flags = MMCSD_BUSWIDTH_4 | MMCSD_MUTBLKWRITE | MMCSD_SUP_HIGHSPEED | MMCSD_SUP_SDIO_IRQ; + mmcsd_host1->max_seg_size = 512 * 512; + mmcsd_host1->max_dma_segs = 1; + mmcsd_host1->max_blk_size = 512; + mmcsd_host1->max_blk_count = 4096; + mmcsd_host1->private_data = sdhci_host1; + sdhci_host1->host = mmcsd_host1; +#endif +#ifdef BSP_SD_SDIO_DEV + kd_sdhci_change(BSP_SD_SDIO_DEV); +#endif + rt_iounmap(hi_sys_virt_addr); + return 0; +} +INIT_DEVICE_EXPORT(kd_sdhci_init); + +#endif /*defined(BSP_USING_SDIO0) || defined(BSP_USING_SDIO1)*/ + +#endif /*defined(RT_USING_SDIO)*/ diff --git a/bsp/k230/drivers/interdrv/sdio/drv_sdhci.h b/bsp/k230/drivers/interdrv/sdio/drv_sdhci.h new file mode 100644 index 00000000000..71bc774bc05 --- /dev/null +++ b/bsp/k230/drivers/interdrv/sdio/drv_sdhci.h @@ -0,0 +1,496 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __DRV_SDHCI__ +#define __DRV_SDHCI__ + +#define false 0 +#define true 1 +#define SDEMMC0_BASE 0x91580000 +#define SDEMMC1_BASE 0x91581000 +#define IRQN_SD0 142 +#define IRQN_SD1 144 + +/* + * Controller registers + */ + +#define SDHCI_DMA_ADDRESS 0x00 +#define SDHCI_ARGUMENT2 SDHCI_DMA_ADDRESS +#define SDHCI_32BIT_BLK_CNT SDHCI_DMA_ADDRESS + +#define SDHCI_BLOCK_SIZE 0x04 +#define SDHCI_MAKE_BLKSZ(dma, blksz) (((dma & 0x7) << 12) | (blksz & 0xFFF)) + +#define SDHCI_BLOCK_COUNT 0x06 + +#define SDHCI_ARGUMENT 0x08 + +#define SDHCI_TRANSFER_MODE 0x0C +#define SDHCI_TRNS_DMA 0x01 +#define SDHCI_TRNS_BLK_CNT_EN 0x02 +#define SDHCI_TRNS_AUTO_CMD12 0x04 +#define SDHCI_TRNS_AUTO_CMD23 0x08 +#define SDHCI_TRNS_AUTO_SEL 0x0C +#define SDHCI_TRNS_READ 0x10 +#define SDHCI_TRNS_MULTI 0x20 + +#define SDHCI_COMMAND 0x0E +#define SDHCI_CMD_RESP_MASK 0x03 +#define SDHCI_CMD_CRC 0x08 +#define SDHCI_CMD_INDEX 0x10 +#define SDHCI_CMD_DATA 0x20 +#define SDHCI_CMD_ABORTCMD 0xC0 + +#define SDHCI_CMD_RESP_NONE 0x00 +#define SDHCI_CMD_RESP_LONG 0x01 +#define SDHCI_CMD_RESP_SHORT 0x02 +#define SDHCI_CMD_RESP_SHORT_BUSY 0x03 + +#define SDHCI_MAKE_CMD(c, f) (((c & 0xff) << 8) | (f & 0xff)) +#define SDHCI_GET_CMD(c) ((c >> 8) & 0x3f) + +#define SDHCI_RESPONSE 0x10 + +#define SDHCI_BUFFER 0x20 + +#define SDHCI_PRESENT_STATE 0x24 +#define SDHCI_CMD_INHIBIT 0x00000001 +#define SDHCI_DATA_INHIBIT 0x00000002 +#define SDHCI_DOING_WRITE 0x00000100 +#define SDHCI_DOING_READ 0x00000200 +#define SDHCI_SPACE_AVAILABLE 0x00000400 +#define SDHCI_DATA_AVAILABLE 0x00000800 +#define SDHCI_CARD_PRESENT 0x00010000 +#define SDHCI_CARD_PRES_SHIFT 16 +#define SDHCI_CD_STABLE 0x00020000 +#define SDHCI_CD_LVL 0x00040000 +#define SDHCI_CD_LVL_SHIFT 18 +#define SDHCI_WRITE_PROTECT 0x00080000 +#define SDHCI_DATA_LVL_MASK 0x00F00000 +#define SDHCI_DATA_LVL_SHIFT 20 +#define SDHCI_DATA_0_LVL_MASK 0x00100000 +#define SDHCI_CMD_LVL 0x01000000 + +#define SDHCI_HOST_CONTROL 0x28 +#define SDHCI_CTRL_LED 0x01 +#define SDHCI_CTRL_4BITBUS 0x02 +#define SDHCI_CTRL_HISPD 0x04 +#define SDHCI_CTRL_DMA_MASK 0x18 +#define SDHCI_CTRL_SDMA 0x00 +#define SDHCI_CTRL_ADMA1 0x08 +#define SDHCI_CTRL_ADMA32 0x10 +#define SDHCI_CTRL_ADMA64 0x18 +#define SDHCI_CTRL_ADMA3 0x18 +#define SDHCI_CTRL_8BITBUS 0x20 +#define SDHCI_CTRL_CDTEST_INS 0x40 +#define SDHCI_CTRL_CDTEST_EN 0x80 + +#define SDHCI_POWER_CONTROL 0x29 +#define SDHCI_POWER_ON 0x01 +#define SDHCI_POWER_180 0x0A +#define SDHCI_POWER_300 0x0C +#define SDHCI_POWER_330 0x0E + +#define SDHCI_BLOCK_GAP_CONTROL 0x2A + +#define SDHCI_WAKE_UP_CONTROL 0x2B +#define SDHCI_WAKE_ON_INT 0x01 +#define SDHCI_WAKE_ON_INSERT 0x02 +#define SDHCI_WAKE_ON_REMOVE 0x04 + +#define SDHCI_CLOCK_CONTROL 0x2C +#define SDHCI_DIVIDER_SHIFT 8 +#define SDHCI_DIVIDER_HI_SHIFT 6 +#define SDHCI_DIV_MASK 0xFF +#define SDHCI_DIV_MASK_LEN 8 +#define SDHCI_DIV_HI_MASK 0x300 +#define SDHCI_PROG_CLOCK_MODE 0x0020 +#define SDHCI_CLOCK_CARD_EN 0x0004 +#define SDHCI_CLOCK_PLL_EN 0x0008 +#define SDHCI_CLOCK_INT_STABLE 0x0002 +#define SDHCI_CLOCK_INT_EN 0x0001 + +#define SDHCI_TIMEOUT_CONTROL 0x2E + +#define SDHCI_SOFTWARE_RESET 0x2F +#define SDHCI_RESET_ALL 0x01 +#define SDHCI_RESET_CMD 0x02 +#define SDHCI_RESET_DATA 0x04 + +#define SDHCI_INT_STATUS 0x30 +#define SDHCI_INT_ENABLE 0x34 +#define SDHCI_SIGNAL_ENABLE 0x38 +#define SDHCI_INT_RESPONSE 0x00000001 +#define SDHCI_INT_DATA_END 0x00000002 +#define SDHCI_INT_BLK_GAP 0x00000004 +#define SDHCI_INT_DMA_END 0x00000008 +#define SDHCI_INT_SPACE_AVAIL 0x00000010 +#define SDHCI_INT_DATA_AVAIL 0x00000020 +#define SDHCI_INT_CARD_INSERT 0x00000040 +#define SDHCI_INT_CARD_REMOVE 0x00000080 +#define SDHCI_INT_CARD_INT 0x00000100 +#define SDHCI_INT_RETUNE 0x00001000 +#define SDHCI_INT_CQE 0x00004000 +#define SDHCI_INT_ERROR 0x00008000 +#define SDHCI_INT_TIMEOUT 0x00010000 +#define SDHCI_INT_CRC 0x00020000 +#define SDHCI_INT_END_BIT 0x00040000 +#define SDHCI_INT_INDEX 0x00080000 +#define SDHCI_INT_DATA_TIMEOUT 0x00100000 +#define SDHCI_INT_DATA_CRC 0x00200000 +#define SDHCI_INT_DATA_END_BIT 0x00400000 +#define SDHCI_INT_BUS_POWER 0x00800000 +#define SDHCI_INT_AUTO_CMD_ERR 0x01000000 +#define SDHCI_INT_ADMA_ERROR 0x02000000 + +#define SDHCI_INT_NORMAL_MASK 0x00007FFF +#define SDHCI_INT_ERROR_MASK 0xFFFF8000 + +#define SDHCI_INT_CMD_MASK (SDHCI_INT_RESPONSE | SDHCI_INT_TIMEOUT | SDHCI_INT_CRC | SDHCI_INT_END_BIT | SDHCI_INT_INDEX | SDHCI_INT_AUTO_CMD_ERR) +#define SDHCI_INT_DATA_MASK (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | SDHCI_INT_DATA_END_BIT | SDHCI_INT_ADMA_ERROR | SDHCI_INT_BLK_GAP) +#define SDHCI_INT_ALL_MASK ((unsigned int)-1) + +#define SDHCI_CQE_INT_ERR_MASK ( \ + SDHCI_INT_ADMA_ERROR | SDHCI_INT_BUS_POWER | SDHCI_INT_DATA_END_BIT | SDHCI_INT_DATA_CRC | SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_INDEX | SDHCI_INT_END_BIT | SDHCI_INT_CRC | SDHCI_INT_TIMEOUT) + +#define SDHCI_CQE_INT_MASK (SDHCI_CQE_INT_ERR_MASK | SDHCI_INT_CQE) + +#define SDHCI_AUTO_CMD_STATUS 0x3C +#define SDHCI_AUTO_CMD_TIMEOUT 0x00000002 +#define SDHCI_AUTO_CMD_CRC 0x00000004 +#define SDHCI_AUTO_CMD_END_BIT 0x00000008 +#define SDHCI_AUTO_CMD_INDEX 0x00000010 + +#define SDHCI_HOST_CONTROL2 0x3E +#define SDHCI_CTRL_UHS_MASK 0x0007 +#define SDHCI_CTRL_UHS_SDR12 0x0000 +#define SDHCI_CTRL_UHS_SDR25 0x0001 +#define SDHCI_CTRL_UHS_SDR50 0x0002 +#define SDHCI_CTRL_UHS_SDR104 0x0003 +#define SDHCI_CTRL_UHS_DDR50 0x0004 +#define SDHCI_CTRL_HS400 0x0005 /* Non-standard */ +#define SDHCI_CTRL_VDD_180 0x0008 +#define SDHCI_CTRL_DRV_TYPE_MASK 0x0030 +#define SDHCI_CTRL_DRV_TYPE_B 0x0000 +#define SDHCI_CTRL_DRV_TYPE_A 0x0010 +#define SDHCI_CTRL_DRV_TYPE_C 0x0020 +#define SDHCI_CTRL_DRV_TYPE_D 0x0030 +#define SDHCI_CTRL_EXEC_TUNING 0x0040 +#define SDHCI_CTRL_TUNED_CLK 0x0080 +#define SDHCI_CMD23_ENABLE 0x0800 +#define SDHCI_CTRL_V4_MODE 0x1000 +#define SDHCI_CTRL_64BIT_ADDR 0x2000 +#define SDHCI_CTRL_PRESET_VAL_ENABLE 0x8000 + +#define SDHCI_CAPABILITIES 0x40 +#define SDHCI_TIMEOUT_CLK_MASK GENMASK(5, 0) +#define SDHCI_TIMEOUT_CLK_UNIT 0x00000080 +#define SDHCI_CLOCK_BASE_MASK GENMASK(13, 8) +#define SDHCI_CLOCK_V3_BASE_MASK GENMASK(15, 8) +#define SDHCI_MAX_BLOCK_MASK 0x00030000 +#define SDHCI_MAX_BLOCK_SHIFT 16 +#define SDHCI_CAN_DO_8BIT 0x00040000 +#define SDHCI_CAN_DO_ADMA2 0x00080000 +#define SDHCI_CAN_DO_ADMA1 0x00100000 +#define SDHCI_CAN_DO_HISPD 0x00200000 +#define SDHCI_CAN_DO_SDMA 0x00400000 +#define SDHCI_CAN_DO_SUSPEND 0x00800000 +#define SDHCI_CAN_VDD_330 0x01000000 +#define SDHCI_CAN_VDD_300 0x02000000 +#define SDHCI_CAN_VDD_180 0x04000000 +#define SDHCI_CAN_64BIT_V4 0x08000000 +#define SDHCI_CAN_64BIT 0x10000000 + +#define SDHCI_CAPABILITIES_1 0x44 +#define SDHCI_SUPPORT_SDR50 0x00000001 +#define SDHCI_SUPPORT_SDR104 0x00000002 +#define SDHCI_SUPPORT_DDR50 0x00000004 +#define SDHCI_DRIVER_TYPE_A 0x00000010 +#define SDHCI_DRIVER_TYPE_C 0x00000020 +#define SDHCI_DRIVER_TYPE_D 0x00000040 +#define SDHCI_RETUNING_TIMER_COUNT_MASK GENMASK(11, 8) +#define SDHCI_USE_SDR50_TUNING 0x00002000 +#define SDHCI_RETUNING_MODE_MASK GENMASK(15, 14) +#define SDHCI_CLOCK_MUL_MASK GENMASK(23, 16) +#define SDHCI_CAN_DO_ADMA3 0x08000000 +#define SDHCI_SUPPORT_HS400 0x80000000 /* Non-standard */ + +#define SDHCI_MAX_CURRENT 0x48 +#define SDHCI_MAX_CURRENT_LIMIT GENMASK(7, 0) +#define SDHCI_MAX_CURRENT_330_MASK GENMASK(7, 0) +#define SDHCI_MAX_CURRENT_300_MASK GENMASK(15, 8) +#define SDHCI_MAX_CURRENT_180_MASK GENMASK(23, 16) +#define SDHCI_MAX_CURRENT_MULTIPLIER 4 + +/* 4C-4F reserved for more max current */ + +#define SDHCI_SET_ACMD12_ERROR 0x50 +#define SDHCI_SET_INT_ERROR 0x52 + +#define SDHCI_ADMA_ERROR 0x54 + +/* 55-57 reserved */ + +#define SDHCI_ADMA_ADDRESS 0x58 +#define SDHCI_ADMA_ADDRESS_HI 0x5C + +/* 60-FB reserved */ + +#define SDHCI_PRESET_FOR_HIGH_SPEED 0x64 +#define SDHCI_PRESET_FOR_SDR12 0x66 +#define SDHCI_PRESET_FOR_SDR25 0x68 +#define SDHCI_PRESET_FOR_SDR50 0x6A +#define SDHCI_PRESET_FOR_SDR104 0x6C +#define SDHCI_PRESET_FOR_DDR50 0x6E +#define SDHCI_PRESET_FOR_HS400 0x74 /* Non-standard */ +#define SDHCI_PRESET_DRV_MASK GENMASK(15, 14) +#define SDHCI_PRESET_CLKGEN_SEL BIT(10) +#define SDHCI_PRESET_SDCLK_FREQ_MASK GENMASK(9, 0) + +#define SDHCI_SLOT_INT_STATUS 0xFC + +#define SDHCI_HOST_VERSION 0xFE +#define SDHCI_VENDOR_VER_MASK 0xFF00 +#define SDHCI_VENDOR_VER_SHIFT 8 +#define SDHCI_SPEC_VER_MASK 0x00FF +#define SDHCI_SPEC_VER_SHIFT 0 +#define SDHCI_SPEC_100 0 +#define SDHCI_SPEC_200 1 +#define SDHCI_SPEC_300 2 +#define SDHCI_SPEC_400 3 +#define SDHCI_SPEC_410 4 +#define SDHCI_SPEC_420 5 + +/* + * End of controller registers. + */ +#define SDHCI_MAX_DIV_SPEC_300 2046 +/*! @brief Transfer flag mask */ +enum sdhci_transfer_mode +{ + sdhci_enable_dma_flag = SDHCI_TRNS_DMA, /*!< Enable DMA */ + + sdhci_enable_block_count_flag = SDHCI_TRNS_BLK_CNT_EN, /*!< Enable block count */ + sdhci_enable_auto_command12_flag = SDHCI_TRNS_AUTO_CMD12, /*!< Enable auto CMD12 */ + sdhci_data_read_flag = SDHCI_TRNS_READ, /*!< Enable data read */ + sdhci_multiple_block_flag = SDHCI_TRNS_MULTI, /*!< Multiple block data read/write */ + sdhci_enable_auto_command23_flag = SDHCI_TRNS_AUTO_CMD23, /*!< Enable auto CMD23 */ + sdhci_enable_auto_commamd_sel_flag = SDHCI_TRNS_AUTO_SEL, /* Enable auto command sel*/ +}; + +enum sdhci_command_flag +{ + sdhci_cmd_resp_nono = SDHCI_CMD_RESP_NONE, + sdhci_cmd_resp_long = SDHCI_CMD_RESP_LONG, + sdhci_cmd_resp_short = SDHCI_CMD_RESP_SHORT, + sdhci_cmd_resp_short_busy = SDHCI_CMD_RESP_SHORT_BUSY, + + sdhci_enable_cmd_crc_flag = SDHCI_CMD_CRC, + sdhci_enable_cmd_index_chk_flag = SDHCI_CMD_INDEX, + sdhci_enable_cmd_data_present_flag = SDHCI_CMD_DATA, + + sdhci_enable_command_type_normal = 0x00, + sdhci_enable_command_type_suspend = 0x40, + sdhci_enable_command_type_resume = 0x80, + sdhci_enable_command_type_abort = 0xc0, +}; + +/*! @brief Present status flag mask */ +enum sdhci_present_status_flag +{ + sdhci_command_inhibit_flag = 0x1, /*!< Command inhibit */ + sdhci_data_inhibit_flag = 0x2, /*!< Data inhibit */ + sdhci_data_line_active_flag = 0x4, /*!< Data line active */ + sdhci_write_transfer_active_flag = 0x100, /*!< Write transfer active */ + sdhci_read_transfer_active_flag = 0x200, /*!< Read transfer active */ + sdhci_buffer_write_enable_flag = 0x400, /*!< Buffer write enable */ + sdhci_buffer_read_enable_flag = 0x800, /*!< Buffer read enable */ + + sdhci_card_insert_flag = 0x10000, /*!< Card inserted */ + sdhci_sd_clock_stable_flag = 0x20000, /*!< SD bus clock stable */ + sdhci_card_detect_pin_level_flag = 0x40000, /*!< card detect pin level */ + sdhci_write_protect_switch_pin_level_flag = 0x80000, /**/ + + sdhci_data0_line_level_flag = (1U << 20), /*!< Data0 line signal level */ + sdhci_data1_line_level_flag = (1U << (20 + 1U)), /*!< Data1 line signal level */ + sdhci_data2_line_level_flag = (1U << (20 + 2U)), /*!< Data2 line signal level */ + sdhci_data3_line_level_flag = (1U << (20 + 3U)), /*!< Data3 line signal level */ + sdhci_data4_line_level_flag = (1U << (4 + 0U)), /*!< Data4 line signal level */ + sdhci_data5_line_level_flag = (1U << (4 + 1U)), /*!< Data5 line signal level */ + sdhci_data6_line_level_flag = (1U << (4 + 2U)), /*!< Data6 line signal level */ + sdhci_data7_line_level_flag = (1U << (4 + 3U)), /*!< Data7 line signal level */ + + sdhci_command_line_signal_level_flag =0x1000000, + sdhci_host_reg_voltage_stable_flag = 0x2000000, + sdhci_command_not_issued_by_error_flag = 0x8000000, + sdhci_sub_command_status_flag = 0x10000000, + sdhci_in_dormant_status_flag = 0x20000000, + sdhci_lane_synchronization_flag = 0x40000000, + sdhci_uhs_ii_interface_detection_flag = 0x80000000, +}; + +/*! @brief Interrupt status flag mask */ +enum sdhci_interrupt_status_flag +{ + sdhci_command_complete_flag = 0x1, /*!< Command complete */ + sdhci_data_complete_flag = 0x2, /*!< Data complete */ + sdhci_block_gap_event_flag = 0x4, /*!< Block gap event */ + sdhci_dma_complete_flag = 0x8, /*!< DMA interrupt */ + sdhci_buffer_write_ready_flag = 0x10, /*!< Buffer write ready */ + sdhci_buffer_read_ready_flag = 0x20, /*!< Buffer read ready */ + sdhci_card_insertion_flag = 0x40, /*!< Card inserted */ + sdhci_card_removal_flag = 0x80, /*!< Card removed */ + sdhci_card_interrupt_flag = 0x100, /*!< Card interrupt */ + + sdhci_command_timeout_flag = 0x10000, /*!< Command timeout error */ + sdhci_command_crc_error_flag = 0x20000, /*!< Command CRC error */ + sdhci_command_end_bit_error_flag = 0x40000, /*!< Command end bit error */ + sdhci_command_index_error_flag = 0x80000, /*!< Command index error */ + sdhci_data_timeout_flag = 0x100000, /*!< Data timeout error */ + sdhci_data_crc_error_flag = 0x200000, /*!< Data CRC error */ + sdhci_data_end_bit_error_flag = 0x400000, /*!< Data end bit error */ + sdhci_auto_command_error_flag = 0x1000000, /*!< Auto CMD error */ + sdhci_dma_error_flag = 0x2000000, /*!< ADMA error */ + sdhci_tuning_error_flag = 0x4000000, /* tuning err*/ + sdhci_response_err_flag = 0x8000000, /*resp error*/ + + sdhci_command_error_flag = (sdhci_command_timeout_flag | sdhci_command_crc_error_flag | sdhci_command_end_bit_error_flag | + sdhci_command_index_error_flag), /*!< Command error */ + sdhci_data_error_flag = (sdhci_data_timeout_flag | sdhci_data_crc_error_flag | sdhci_data_end_bit_error_flag | + sdhci_auto_command_error_flag), /*!< Data error */ + sdhci_error_flag = (sdhci_command_error_flag | sdhci_data_error_flag | sdhci_dma_error_flag), /*!< All error */ + sdhci_data_flag = (sdhci_data_complete_flag | sdhci_dma_complete_flag | sdhci_buffer_write_ready_flag | + sdhci_buffer_read_ready_flag | sdhci_data_error_flag | sdhci_dma_error_flag), /*!< Data interrupts */ + sdhci_command_flag = (sdhci_command_error_flag | sdhci_command_complete_flag), /*!< Command interrupts */ + sdhci_card_detect_flag = (sdhci_card_insertion_flag | sdhci_card_removal_flag), /*!< Card detection interrupts */ + sdhci_sdr104_tuning_flag = (sdhci_tuning_error_flag), + + sdhci_all_interrupt_flags = (sdhci_block_gap_event_flag | sdhci_card_detect_flag | sdhci_command_flag | + sdhci_data_flag | sdhci_error_flag | sdhci_sdr104_tuning_flag), /*!< All flags mask */ +}; + +/*! @brief USDHC status */ +enum sdhci_status +{ + sdhci_status_busy_transferring = 65, /*!< Transfer is on-going */ + sdhci_status_prepare_adma_descriptor_failed = 66, /*!< Set DMA descriptor failed */ + sdhci_status_send_command_failed = 67, /*!< Send command failed */ + sdhci_status_transfer_data_failed = 68, /*!< Transfer data failed */ + sdhci_status_dma_data_addr_no_align = 69, /*!< data address not align */ + sdhci_status_retuning_request = 70, /*!< re-tuning request */ + sdhci_status_tuning_error = 71, /*!< tuning error */ + +}; + +/* ADMA2 data alignment */ +#define SDHCI_ADMA2_ALIGN 4 +#define SDHCI_ADMA2_MASK (SDHCI_ADMA2_ALIGN - 1) + +/*! @brief The bit shift for LENGTH field in ADMA2's descriptor */ +#define SDHCI_ADMA2_DESCRIPTOR_LENGTH_SHIFT (16U) +/*! @brief The bit mask for LENGTH field in ADMA2's descriptor */ +#define SDHCI_ADMA2_DESCRIPTOR_LENGTH_MASK (0xFFFFU) +/*! @brief The maximum value of LENGTH field in ADMA2's descriptor */ +#define SDHCI_ADMA2_DESCRIPTOR_MAX_LENGTH_PER_ENTRY (SDHCI_ADMA2_DESCRIPTOR_LENGTH_MASK - 3U) + +#define SDHCI_DESC_VALID (0x1U << 0) +#define SDHCI_DESC_END (0x1U << 1) +#define SDHCI_DESC_INT (0x1U << 2) +#define SDHCI_DESC_TRAN (0x2U << 4) +struct sdhci_64bit_adma2_descriptor +{ + uint32_t attribute; + uint32_t address; +}; + +/*! @brief The command type */ +enum sdhci_card_command_type +{ + card_command_type_normal = 0U, /*!< Normal command */ + card_command_type_suspend = 1U, /*!< Suspend command */ + card_command_type_resume = 2U, /*!< Resume command */ + card_command_type_abort = 3U, /*!< Abort command */ +}; + +/*! + * @brief The command response type. + * + * Define the command response type from card to host controller. + */ +enum sdhci_card_response_type +{ + card_response_type_none = 0U, /*!< Response type: none */ + card_response_type_r1 = 1U, /*!< Response type: R1 */ + card_response_type_r1b = 2U, /*!< Response type: R1b */ + card_response_type_r2 = 3U, /*!< Response type: R2 */ + card_response_type_r3 = 4U, /*!< Response type: R3 */ + card_response_type_r4 = 5U, /*!< Response type: R4 */ + card_response_type_r5 = 6U, /*!< Response type: R5 */ + card_response_type_r5b = 7U, /*!< Response type: R5b */ + card_response_type_r6 = 8U, /*!< Response type: R6 */ + card_response_type_r7 = 9U, /*!< Response type: R7 */ +}; + +/*! + * @brief Card data descriptor + * + * Defines a structure to contain data-related attribute. 'enableIgnoreError' is used for the case that upper card + * driver + * want to ignore the error event to read/write all the data not to stop read/write immediately when error event + * happen for example bus testing procedure for MMC card. + */ +struct sdhci_data +{ + rt_bool_t enableAutoCommand12; /*!< Enable auto CMD12 */ + rt_bool_t enableAutoCommand23; /*!< Enable auto CMD23 */ + rt_bool_t enableIgnoreError; /*!< Enable to ignore error event to read/write all the data */ + rt_bool_t executeTuning; /*!< execute tuning flag */ + + size_t blockSize; /*!< Block size */ + uint32_t blockCount; /*!< Block count */ + uint32_t *rxData; /*!< Buffer to save data read */ + const uint32_t *txData; /*!< Data buffer to write */ +}; + +/*! + * @brief Card command descriptor + * + * Define card command-related attribute. + */ +struct sdhci_command +{ + uint32_t index; /*!< Command index */ + uint32_t argument; /*!< Command argument */ + enum sdhci_card_command_type type; /*!< Command type */ + enum sdhci_card_response_type responseType; /*!< Command response type */ + uint32_t response[4U]; /*!< Response for this command */ + uint32_t responseErrorFlags; /*!< response error flag, the flag which need to check + the command reponse*/ + uint16_t flags; /*!< Cmd flags */ + uint16_t flags2; /*xfer mode*/ +}; + +struct sdhci_host +{ + struct rt_mmcsd_host *host; + void *mapbase; + struct sdhci_data *sdhci_data; + struct sdhci_command *sdhci_command; + void *usdhc_adma2_table; + struct rt_event event; + uint16_t error_code; + uint32_t max_clk; + uint8_t index; + uint8_t is_emmc_card; + uint8_t io_fixed_1v8; + uint8_t have_phy; + uint8_t mshc_ctrl_r; + uint32_t rx_delay_line; + uint32_t tx_delay_line; +}; + +#endif /*__DRV_SDHCI__*/ diff --git a/bsp/k230/drivers/interdrv/uart/SConscript b/bsp/k230/drivers/interdrv/uart/SConscript new file mode 100644 index 00000000000..0961d64537c --- /dev/null +++ b/bsp/k230/drivers/interdrv/uart/SConscript @@ -0,0 +1,19 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Uart', src, depend = [''], CPPPATH = CPPPATH) + +objs = [group] + +list = os.listdir(cwd) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/k230/drivers/interdrv/uart/drv_uart.c b/bsp/k230/drivers/interdrv/uart/drv_uart.c new file mode 100644 index 00000000000..dc6a9dbf8a4 --- /dev/null +++ b/bsp/k230/drivers/interdrv/uart/drv_uart.c @@ -0,0 +1,370 @@ +/* + * Copyright (c) 2019-2020 + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +#include +#include +#include +#include + +#include "board.h" +#include "drv_uart.h" +#include "riscv_io.h" +#include "board.h" + +#define UART_DEFAULT_BAUDRATE 115200 +#define UART_CLK 50000000 +#define UART_ADDR 0x91403000UL +#define UART_IRQ 0x13 + + +#define UART_RBR (0x00) /* receive buffer register */ +#define UART_THR (0x00) /* transmit holding register */ +#define UART_DLL (0x00) /* divisor latch low register */ +#define UART_DLH (0x04) /* diviso latch high register */ +#define UART_IER (0x04) /* interrupt enable register */ +#define UART_IIR (0x08) /* interrupt identity register */ +#define UART_FCR (0x08) /* FIFO control register */ +#define UART_LCR (0x0c) /* line control register */ +#define UART_MCR (0x10) /* modem control register */ +#define UART_LSR (0x14) /* line status register */ +#define UART_MSR (0x18) /* modem status register */ +#define UART_SCH (0x1c) /* scratch register */ +#define UART_USR (0x7c) /* status register */ +#define UART_TFL (0x80) /* transmit FIFO level */ +#define UART_RFL (0x84) /* RFL */ +#define UART_HALT (0xa4) /* halt tx register */ +#define UART_DLF (0xc0) /* Divisor Latch Fraction Register */ + +#define BIT(x) (1 << x) + +/* Line Status Rigster */ +#define UART_LSR_RXFIFOE (BIT(7)) +#define UART_LSR_TEMT (BIT(6)) +#define UART_LSR_THRE (BIT(5)) +#define UART_LSR_BI (BIT(4)) +#define UART_LSR_FE (BIT(3)) +#define UART_LSR_PE (BIT(2)) +#define UART_LSR_OE (BIT(1)) +#define UART_LSR_DR (BIT(0)) +#define UART_LSR_BRK_ERROR_BITS 0x1E /* BI, FE, PE, OE bits */ + +/* Line Control Register */ +#define UART_LCR_DLAB (BIT(7)) +#define UART_LCR_SBC (BIT(6)) +#define UART_LCR_PARITY_MASK (BIT(5)|BIT(4)) +#define UART_LCR_EPAR (1 << 4) +#define UART_LCR_OPAR (0 << 4) +#define UART_LCR_PARITY (BIT(3)) +#define UART_LCR_STOP (BIT(2)) +#define UART_LCR_DLEN_MASK (BIT(1)|BIT(0)) +#define UART_LCR_WLEN5 (0) +#define UART_LCR_WLEN6 (1) +#define UART_LCR_WLEN7 (2) +#define UART_LCR_WLEN8 (3) + +/* Halt Register */ +#define UART_HALT_LCRUP (BIT(2)) +#define UART_HALT_FORCECFG (BIT(1)) +#define UART_HALT_HTX (BIT(0)) + +/* Interrupt Enable Register */ +#define UART_IER_MASK (0xff) +#define UART_IER_PTIME (BIT(7)) +#define UART_IER_RS485 (BIT(4)) +#define UART_IER_MSI (BIT(3)) +#define UART_IER_RLSI (BIT(2)) +#define UART_IER_THRI (BIT(1)) +#define UART_IER_RDI (BIT(0)) + +/* Interrupt ID Register */ +#define UART_IIR_FEFLAG_MASK (BIT(6)|BIT(7)) +#define UART_IIR_IID_MASK (BIT(0)|BIT(1)|BIT(2)|BIT(3)) +#define UART_IIR_IID_MSTA (0) +#define UART_IIR_IID_NOIRQ (1) +#define UART_IIR_IID_THREMP (2) +#define UART_IIR_IID_RXDVAL (4) +#define UART_IIR_IID_LINESTA (6) +#define UART_IIR_IID_BUSBSY (7) +#define UART_IIR_IID_CHARTO (12) + +struct device_uart +{ + rt_ubase_t hw_base; + rt_uint32_t irqno; +}; + +static rt_err_t rt_uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg); +static rt_err_t uart_control(struct rt_serial_device *serial, int cmd, void *arg); +static int drv_uart_putc(struct rt_serial_device *serial, char c); +static int drv_uart_getc(struct rt_serial_device *serial); + +const struct rt_uart_ops _uart_ops = +{ + rt_uart_configure, + uart_control, + drv_uart_putc, + drv_uart_getc, + //TODO: add DMA support + RT_NULL +}; + +struct rt_serial_device serial1; +struct device_uart uart1; + +#define write32(addr, val) writel(val, (void*)(addr)) +#define read32(addr) readl((void*)(addr)) + +static void _uart_init(void *uart_base) +{ + uint32_t bdiv; + uint32_t dlf; + uint32_t dlh; + uint32_t dll; + + bdiv = UART_CLK / UART_DEFAULT_BAUDRATE; + dlh = bdiv >> 12; + dll = (bdiv - (dlh << 12)) / 16; + dlf = bdiv - (dlh << 12) - dll * 16; + if(dlh == 0 && dll == 0) + { + dll = 1; + dlf = 0; + } + + write32(uart_base + UART_LCR, 0x00); + /* Disable all interrupts */ + write32(uart_base + UART_IER, 0x00); + /* Enable DLAB */ + write32(uart_base + UART_LCR, 0x80); + if (bdiv) { + /* Set divisor low byte */ + write32(uart_base + UART_DLL, dll); + /* Set divisor high byte */ + write32(uart_base + UART_DLH, dlh); + /* Set divisor fraction byte*/ + write32(uart_base + UART_DLF, dlf); + } + /* 8 bits, no parity, one stop bit */ + write32(uart_base + UART_LCR, 0x03); + /* Enable FIFO */ + write32(uart_base + UART_FCR, 0x01); + /* No modem control DTR RTS */ + write32(uart_base + UART_MCR, 0x00); + /* Clear line status */ + read32(uart_base + UART_LSR); + /* Read receive buffer */ + read32(uart_base + UART_RBR); + read32(uart_base + UART_USR); + read32(uart_base + UART_FCR); + /* Set scratchpad */ + write32(uart_base + UART_SCH, 0x00); + //enable uart rx irq + // write32(uart_base + UART_IER, 0x01); +} + +static void uart_set_isr(void *uart_base, uint8_t enable, uint32_t irq_type) +{ + uint32_t value; + + value = read32(uart_base + UART_IER); + + if (enable) + { + value |= irq_type; + } + else + { + value &= ~irq_type; + } + write32(uart_base + UART_IER, value); +} + +/* + * UART interface + */ +static rt_err_t rt_uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg) +{ + return (RT_EOK); +} + +static rt_err_t uart_control(struct rt_serial_device *serial, int cmd, void *arg) +{ + struct device_uart *uart = (struct device_uart*)serial->parent.user_data; + +#ifdef RT_USING_SERIAL_V2 + rt_ubase_t ctrl_flag = 0; + rt_ubase_t ctrl_arg; +#endif + +#ifdef RT_USING_SERIAL_V2 + ctrl_arg = (rt_ubase_t)arg; + + if (ctrl_arg & (RT_DEVICE_FLAG_RX_BLOCKING | RT_DEVICE_FLAG_RX_NON_BLOCKING)) + { + ctrl_flag |= RT_DEVICE_FLAG_INT_RX; + } +#endif + + switch (cmd) + { + case RT_DEVICE_CTRL_CLR_INT: +#ifdef RT_USING_SERIAL_V2 + if (ctrl_flag & RT_DEVICE_FLAG_INT_RX) +#else + if ((size_t)arg == RT_DEVICE_FLAG_INT_RX) +#endif + { + uart_set_isr((void*)(uart->hw_base), 0, UART_IER_RDI); + } + break; + + case RT_DEVICE_CTRL_SET_INT: +#ifdef RT_USING_SERIAL_V2 + if (ctrl_flag & RT_DEVICE_FLAG_INT_RX) +#else + if ((size_t)arg == RT_DEVICE_FLAG_INT_RX) +#endif + { + uart_set_isr((void*)(uart->hw_base), 1, UART_IER_RDI); + } + break; +#ifdef RT_USING_SERIAL_V2 + case RT_DEVICE_CTRL_CONFIG: + if (ctrl_flag & RT_DEVICE_FLAG_INT_RX) + { + uart_set_isr((void*)(uart->hw_base), 1, UART_IER_RDI); + } + break; +#endif + + case RT_FIOMMAP2: + { + struct dfs_mmap2_args *mmap2 = (struct dfs_mmap2_args *)arg; + if (mmap2) + { + if (mmap2->length > 0x400) + { + return -RT_ENOMEM; + } + + mmap2->ret = lwp_map_user_phy(lwp_self(), RT_NULL, (void*)(uart->hw_base), mmap2->length, 0); + } + break; + } + } + + return (RT_EOK); +} + +static int drv_uart_putc(struct rt_serial_device *serial, char c) +{ + volatile uint32_t *sed_buf; + volatile uint32_t *sta; + struct device_uart *uart = (struct device_uart*)serial->parent.user_data; + + sed_buf = (uint32_t *)(uart->hw_base + UART_THR); + sta = (uint32_t *)(uart->hw_base + UART_USR); + + /* FIFO status, contain valid data */ + // while (!(*sta & 0x02)); + while (!(read32(uart->hw_base + UART_LSR) & 0x20)); + + *sed_buf = c; + + return (1); +} + +static int drv_uart_getc(struct rt_serial_device *serial) +{ + struct device_uart *uart = (struct device_uart*)serial->parent.user_data; + volatile uint32_t *lsr = (uint32_t *)(uart->hw_base + UART_LSR); + volatile uint32_t *rbr = (uint32_t *)(uart->hw_base + UART_RBR); + + if (!(*lsr & UART_LSR_DR)) + { + return -1; + } + return (int)*rbr; +} + +static void rt_hw_uart_isr(int irq, void *param) +{ + struct rt_serial_device *serial = (struct rt_serial_device*)param; + struct device_uart *uart; + size_t uart_base; + uint32_t iir, lsr; + + uart = (struct device_uart*)serial->parent.user_data; + uart_base = uart->hw_base; + + iir = readb((void*)(uart_base + UART_IIR)) & UART_IIR_IID_MASK; + lsr = readb((void*)(uart_base + UART_LSR)); + // rt_kprintf("uart isr iir:%x lsr:%x\r\n", iir, lsr); + + if (iir == UART_IIR_IID_BUSBSY) + { + (void)readb((void*)(uart_base + UART_USR)); + } + else if (lsr & (UART_LSR_DR | UART_LSR_BI)) + { + #ifdef RT_USING_SERIAL_V2 + struct rt_serial_rx_fifo *rx_fifo; + uint8_t data; + + rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx; + RT_ASSERT(rx_fifo != RT_NULL); + + do { + data = readb((void*)(uart_base + UART_RBR)); + rt_ringbuffer_putchar(&(rx_fifo->rb), data); + lsr = readb((void*)(uart_base + UART_LSR)); + } while(lsr & UART_LSR_DR); + + #endif + + rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); + } + else if (iir & UART_IIR_IID_CHARTO) + /* has charto irq but no dr lsr? just read and ignore */ + { + readb((void*)(uart_base + UART_RBR)); + } +} + +/* + * UART Initiation + */ +int rt_hw_uart_init(void) +{ + struct rt_serial_device *serial; + struct device_uart *uart; + struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; + + { + serial = &serial1; + uart = &uart1; + + serial->ops = &_uart_ops; + serial->config = config; + serial->config.baud_rate = UART_DEFAULT_BAUDRATE; + + uart->hw_base = (rt_base_t)rt_ioremap((void *)UART_ADDR, 0x1000); + uart->irqno = UART_IRQ; + + _uart_init((void*)(uart->hw_base)); + + rt_hw_interrupt_install(uart->irqno, rt_hw_uart_isr, serial, "uart1"); + rt_hw_interrupt_umask(uart->irqno); + + rt_hw_serial_register(serial, + RT_CONSOLE_DEVICE_NAME, + RT_DEVICE_FLAG_STREAM | RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + uart); + } + + return 0; +} diff --git a/bsp/k230/drivers/interdrv/uart/drv_uart.h b/bsp/k230/drivers/interdrv/uart/drv_uart.h new file mode 100644 index 00000000000..a7a18d0ddea --- /dev/null +++ b/bsp/k230/drivers/interdrv/uart/drv_uart.h @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2019-2020, Xim + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +#ifndef __DRV_UART_H__ +#define __DRV_UART_H__ + +void rt_hw_uart_start_rx_thread(); +int rt_hw_uart_init(void); +void drv_uart_puts(char *str); // for syscall + +#endif /* __DRV_UART_H__ */ diff --git a/bsp/k230/link.lds b/bsp/k230/link.lds new file mode 100644 index 00000000000..ad731cd615e --- /dev/null +++ b/bsp/k230/link.lds @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020/12/12 bernard The first version + */ + +INCLUDE "link_stacksize.lds" + +OUTPUT_ARCH( "riscv" ) + +/* + * Memory layout: + * 2M ==> +128K: Bootloader(sbi) + * 2M+128K ==> +sizeof(rtthread.bin): Kernel + * ~ ==> 32M: Heap + * 32M - 66M: Page + */ + +MEMORY +{ + SRAM(wx) : ORIGIN = 0xFFFFFFC000220000, LENGTH = 64M - 128K +} + +ENTRY(_start) +SECTIONS +{ + . = ORIGIN(SRAM) ; + + /* __STACKSIZE__ = 4096; */ + __sram_base = ORIGIN(SRAM); + __sram_size = LENGTH(SRAM); + __sram_end = __sram_base + __sram_size; + __text_start = .; + .start : + { + *(.start); + } > SRAM + + . = ALIGN(8); + + .text : + { + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(8); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(8); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(8); + + /* section information for initial. */ + . = ALIGN(8); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + . = ALIGN(8); + + __rt_utest_tc_tab_start = .; + KEEP(*(UtestTcTab)) + __rt_utest_tc_tab_end = .; + + . = ALIGN(8); + _etext = .; + } > SRAM + + .eh_frame_hdr : + { + *(.eh_frame_hdr) + *(.eh_frame_entry) + } > SRAM + .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } > SRAM + + . = ALIGN(8); + __text_end = .; + __text_size = __text_end - __text_start; + + .data : + { + *(.data) + *(.data.*) + + *(.data1) + *(.data1.*) + + . = ALIGN(8); + PROVIDE( __global_pointer$ = . + 0x800 ); + + *(.sdata) + *(.sdata.*) + } > SRAM + + /* stack for dual core */ + .stack : + { + . = ALIGN(64); + __stack_start__ = .; + + . += __STACKSIZE__; + __stack_cpu0 = .; + + . += __STACKSIZE__; + __stack_cpu1 = .; + } > SRAM + + . = ALIGN(8); + + .osdebug : + { + _osdebug_start = .; + . += 87K; + _osdebug_end = .; + } > SRAM + + . = ALIGN(8); + + .sbss : + { + __bss_start = .; + *(.sbss) + *(.sbss.*) + *(.dynsbss) + *(.scommon) + } > SRAM + + .bss : + { + *(.bss) + *(.bss.*) + *(.dynbss) + *(COMMON) + __bss_end = .; + } > SRAM + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/k230/link_stacksize.lds b/bsp/k230/link_stacksize.lds new file mode 100644 index 00000000000..13e6ee8b1c3 --- /dev/null +++ b/bsp/k230/link_stacksize.lds @@ -0,0 +1 @@ +__STACKSIZE__ = 8192; \ No newline at end of file diff --git a/bsp/k230/mkfm.sh b/bsp/k230/mkfm.sh new file mode 100644 index 00000000000..ef84e8965d2 --- /dev/null +++ b/bsp/k230/mkfm.sh @@ -0,0 +1,77 @@ +#/bin/sh + +#add_firmHead xxx.bin "-n" +#output fn_$1 fa_$1 fs_$1 +add_firmHead() +{ + local filename="$1" + local firmware_gen="tools/firmware_gen.py" + + if [ $# -ge 2 ]; then + firmArgs="$2" #add k230 firmware head + cp ${filename} ${filename}.t; python3 ${firmware_gen} -i ${filename}.t -o f${firmArgs##-}${filename} ${firmArgs}; + else + #add k230 firmware head + firmArgs="-n"; cp ${filename} ${filename}.t; python3 ${firmware_gen} -i ${filename}.t -o f${firmArgs##-}_${filename} ${firmArgs}; + fi + rm -rf ${filename}.t +} + +k230_gzip() +{ + local filename="$1" + local k230_gzip_tool="tools/k230_priv_gzip " + + ${k230_gzip_tool} -n8 -f -k ${filename} || ${k230_gzip_tool} -n9 -f -k ${filename} || \ + ${k230_gzip_tool} -n7 -f -k ${filename} || ${k230_gzip_tool} -n6 -f -k ${filename} || \ + ${k230_gzip_tool} -n5 -f -k ${filename} || ${k230_gzip_tool} -n4 -f -k ${filename} + + sed -i -e "1s/\x08/\x09/" ${filename}.gz +} + +bin_gzip_ubootHead_firmHead() +{ + local mkimage="tools/mkimage" + local file_full_path="$1" + local filename=$(basename ${file_full_path}) + local mkimgArgs="$2" + local firmArgs="$3" + + [ "$(dirname ${file_full_path})" == "$(pwd)" ] || cp ${file_full_path} . + + k230_gzip ${filename} + + #add uboot head + ${mkimage} -A riscv -C gzip ${mkimgArgs} -d ${filename}.gz ug_${filename} + + add_firmHead ug_${filename} + rm -rf ${filename} ${filename}.gz ug_${filename} +} + +gen_rtt_bin() +{ + local filename="fw_payload.bin" + local CONFIG_MEM_RTT_SYS_BASE="0x200000" + + bin_gzip_ubootHead_firmHead "opensbi/build/platform/kendryte/fpgac908/firmware/${filename}" \ + "-O opensbi -T multi -a ${CONFIG_MEM_RTT_SYS_BASE} -e ${CONFIG_MEM_RTT_SYS_BASE} -n rtt" + + mv fn_ug_${filename} rtt_system.bin +} + +build_sbi() +{ + cc=~/.tools/gnu_gcc/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/riscv64-unknown-linux-musl- + + if [ -n "$1" ]; then + cc=$1 + fi + + cd opensbi && make FW_PAYLOAD_PATH=../rtthread.bin FW_FDT_PATH=hw.dtb PLATFORM=kendryte/fpgac908 CROSS_COMPILE=$cc + + cd .. +} + +build_sbi $1 + +gen_rtt_bin diff --git a/bsp/k230/rtconfig.h b/bsp/k230/rtconfig.h new file mode 100644 index 00000000000..20caf683810 --- /dev/null +++ b/bsp/k230/rtconfig.h @@ -0,0 +1,491 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_USING_SMART +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_HOOKLIST +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 8192 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 8192 +#define RT_USING_CPU_USAGE_TRACER + +/* kservice optimization */ + +/* end of kservice optimization */ + +/* klibc optimization */ + +#define RT_KLIBC_USING_PRINTF_LONGLONG +/* end of klibc optimization */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT +#define RT_USING_OVERFLOW_CHECK + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_PAGE_MAX_ORDER 11 +#define RT_USING_MEMPOOL +#define RT_USING_SLAB +#define RT_USING_SLAB_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_DEVICE_OPS +#define RT_USING_SCHED_THREAD_CTX +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 256 +#define RT_CONSOLE_DEVICE_NAME "uart" +#define RT_VER_NUM 0x50200 +#define RT_USING_STDC_ATOMIC +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define ARCH_CPU_64BIT +#define RT_USING_CACHE +#define ARCH_MM_MMU +#define KERNEL_VADDR_START 0xFFFFFFC000220000 +#define ARCH_RISCV +#define ARCH_RISCV_FPU +#define ARCH_RISCV_FPU_D +#define ARCH_RISCV64 +#define ARCH_USING_NEW_CTX_SWITCH +#define ARCH_REMAP_KERNEL + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 8192 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 8192 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +#define RT_USING_DFS +#define DFS_USING_POSIX +#define DFS_USING_WORKDIR +#define DFS_FD_MAX 16 +#define RT_USING_DFS_V2 +#define RT_USING_DFS_ELMFAT + +/* elm-chan's FatFs, Generic FAT Filesystem Module */ + +#define RT_DFS_ELM_CODE_PAGE 437 +#define RT_DFS_ELM_WORD_ACCESS +#define RT_DFS_ELM_USE_LFN_3 +#define RT_DFS_ELM_USE_LFN 3 +#define RT_DFS_ELM_LFN_UNICODE_0 +#define RT_DFS_ELM_LFN_UNICODE 0 +#define RT_DFS_ELM_MAX_LFN 255 +#define RT_DFS_ELM_DRIVES 2 +#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 +#define RT_DFS_ELM_REENTRANT +#define RT_DFS_ELM_MUTEX_TIMEOUT 3000 +/* end of elm-chan's FatFs, Generic FAT Filesystem Module */ +#define RT_USING_DFS_DEVFS +#define RT_USING_DFS_PTYFS +#define RT_USING_DFS_CROMFS +#define RT_USING_DFS_TMPFS +#define RT_USING_PAGECACHE + +/* page cache config */ + +#define RT_PAGECACHE_COUNT 4096 +#define RT_PAGECACHE_ASPACE_COUNT 1024 +#define RT_PAGECACHE_PRELOAD 4 +#define RT_PAGECACHE_HASH_NR 1024 +#define RT_PAGECACHE_GC_WORK_LEVEL 90 +#define RT_PAGECACHE_GC_STOP_LEVEL 70 +/* end of page cache config */ +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SYSTEM_WORKQUEUE +#define RT_SYSTEM_WORKQUEUE_STACKSIZE 8192 +#define RT_SYSTEM_WORKQUEUE_PRIORITY 23 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_CPUTIME +#define RT_USING_CPUTIME_RISCV +#define CPUTIME_TIMER_FREQ 25000000 +#define RT_USING_NULL +#define RT_USING_ZERO +#define RT_USING_RANDOM +#define RT_USING_RTC +#define RT_USING_SDIO +#define RT_SDIO_STACK_SIZE 8192 +#define RT_SDIO_THREAD_PRIORITY 15 +#define RT_MMCSD_STACK_SIZE 8192 +#define RT_MMCSD_THREAD_PREORITY 22 +#define RT_MMCSD_MAX_PARTITION 16 +#define RT_USING_PIN +#define RT_USING_KTIME +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + +#define RT_USING_POSIX_FS +#define RT_USING_POSIX_DEVIO +#define RT_USING_POSIX_STDIO +#define RT_USING_POSIX_POLL +#define RT_USING_POSIX_SELECT +#define RT_USING_POSIX_EPOLL +#define RT_USING_POSIX_SIGNALFD +#define RT_SIGNALFD_MAX_NUM 10 +#define RT_USING_POSIX_SOCKET +#define RT_USING_POSIX_TERMIOS +#define RT_USING_POSIX_DELAY +#define RT_USING_POSIX_CLOCK +#define RT_USING_POSIX_TIMER + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +#define RT_USING_SAL +#define SAL_INTERNET_CHECK + +/* Docking with protocol stacks */ + +#define SAL_USING_LWIP +/* end of Docking with protocol stacks */ +#define SAL_USING_POSIX +#define RT_USING_NETDEV +#define NETDEV_USING_IFCONFIG +#define NETDEV_USING_PING +#define NETDEV_USING_NETSTAT +#define NETDEV_USING_AUTO_DEFAULT +#define NETDEV_IPV4 1 +#define NETDEV_IPV6 0 +#define RT_USING_LWIP +#define RT_USING_LWIP212 +#define RT_USING_LWIP_VER_NUM 0x20102 +#define RT_LWIP_MEM_ALIGNMENT 8 +#define RT_LWIP_IGMP +#define RT_LWIP_ICMP +#define RT_LWIP_DNS +#define RT_LWIP_DHCP +#define IP_SOF_BROADCAST 1 +#define IP_SOF_BROADCAST_RECV 1 + +/* Static IPv4 Address */ + +#define RT_LWIP_IPADDR "192.168.1.30" +#define RT_LWIP_GWADDR "192.168.1.1" +#define RT_LWIP_MSKADDR "255.255.255.0" +/* end of Static IPv4 Address */ +#define RT_LWIP_UDP +#define RT_LWIP_TCP +#define RT_LWIP_RAW +#define RT_MEMP_NUM_NETCONN 8 +#define RT_LWIP_PBUF_NUM 16 +#define RT_LWIP_RAW_PCB_NUM 4 +#define RT_LWIP_UDP_PCB_NUM 4 +#define RT_LWIP_TCP_PCB_NUM 4 +#define RT_LWIP_TCP_SEG_NUM 40 +#define RT_LWIP_TCP_SND_BUF 8196 +#define RT_LWIP_TCP_WND 8196 +#define RT_LWIP_TCPTHREAD_PRIORITY 10 +#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 +#define RT_LWIP_TCPTHREAD_STACKSIZE 8192 +#define RT_LWIP_ETHTHREAD_PRIORITY 12 +#define RT_LWIP_ETHTHREAD_STACKSIZE 8192 +#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_NETIF_LINK_CALLBACK 1 +#define RT_LWIP_NETIF_NAMESIZE 6 +#define SO_REUSE 1 +#define LWIP_SO_RCVTIMEO 1 +#define LWIP_SO_SNDTIMEO 1 +#define LWIP_SO_RCVBUF 1 +#define LWIP_SO_LINGER 0 +#define LWIP_NETIF_LOOPBACK 0 +#define RT_LWIP_USING_PING +/* end of Network */ + +/* Memory protection */ + +/* end of Memory protection */ + +/* Utilities */ + +#define RT_USING_RESOURCE_ID +#define RT_USING_ADT +#define RT_USING_ADT_AVL +#define RT_USING_ADT_BITMAP +#define RT_USING_ADT_HASHMAP +#define RT_USING_ADT_REF +/* end of Utilities */ +#define RT_USING_LWP +#define LWP_DEBUG +#define LWP_DEBUG_INIT +#define RT_LWP_MAX_NR 30 +#define LWP_TASK_STACK_SIZE 16384 +#define RT_CH_MSG_MAX_NR 1024 +#define LWP_TID_MAX_NR 64 +#define RT_LWP_SHM_MAX_NR 64 +#define RT_USING_LDSO +#define LWP_USING_TERMINAL +#define LWP_PTY_MAX_PARIS_LIMIT 64 + +/* Memory management */ + +/* end of Memory management */ + +/* Using USB legacy version */ + +/* end of Using USB legacy version */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +#define PKG_USING_ZLIB +#define PKG_USING_ZLIB_LATEST_VERSION +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ + +/* Drivers Configuration */ + +/* end of Drivers Configuration */ +#define BOARD_fpgac908 +#define __STACKSIZE__ 8192 +#define C908_PLIC_PHY_ADDR 0xF00000000 +#define BSP_ROOTFS_TYPE_CROMFS + +#endif diff --git a/bsp/k230/rtconfig.py b/bsp/k230/rtconfig.py new file mode 100644 index 00000000000..5d7f5b3b218 --- /dev/null +++ b/bsp/k230/rtconfig.py @@ -0,0 +1,54 @@ +import os + +# toolchains options +ARCH ='risc-v' +VENDOR ='t-head' +CPU ='c908' +CROSS_TOOL ='gcc' + +RTT_ROOT = os.getenv('RTT_ROOT', r'../..') + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') + +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'/opt/Xuantie-900-gcc-elf-newlib-x86_64-V2.8.1/bin' +else: + print('Please make sure your toolchains is GNU GCC!') + exit(0) + +EXEC_PATH = os.getenv('RTT_EXEC_PATH', EXEC_PATH) + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + #PREFIX = 'riscv64-unknown-elf-' + PREFIX = os.getenv('RTT_CC_PREFIX') or 'riscv64-unknown-linux-musl-' + CC = PREFIX + 'gcc' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcmodel=medany -march=rv64imafdc -mabi=lp64' + CFLAGS = DEVICE + ' -Wno-cpp -fvar-tracking -ffreestanding -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -D_POSIX_SOURCE ' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__' + LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start -T link.lds' + ' -lsupc++ -lgcc -static' + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O2 -g -gdwarf-2' + AFLAGS += ' -g -gdwarf-2' + else: + CFLAGS += ' -O2 -g -gdwarf-2' + + CXXFLAGS = CFLAGS + +POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' From 684bcc8d16edda8b7162bfc69cd7e3a0367c6a8d Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Thu, 26 Sep 2024 11:40:24 +0800 Subject: [PATCH 50/54] [doxygen]add rtc devices example for doxygen --- components/drivers/include/drivers/adc.h | 2 + components/drivers/include/drivers/dac.h | 2 + components/drivers/include/drivers/dev_rtc.h | 116 ++++++++++++++++++- 3 files changed, 118 insertions(+), 2 deletions(-) diff --git a/components/drivers/include/drivers/adc.h b/components/drivers/include/drivers/adc.h index e285c0a8c2f..cdb7b2704a5 100644 --- a/components/drivers/include/drivers/adc.h +++ b/components/drivers/include/drivers/adc.h @@ -145,4 +145,6 @@ rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_int8_t channel); */ rt_int16_t rt_adc_voltage(rt_adc_device_t dev, rt_int8_t channel); +/*! @}*/ + #endif /* __ADC_H__ */ diff --git a/components/drivers/include/drivers/dac.h b/components/drivers/include/drivers/dac.h index d7160dd9365..ca827c7cda8 100644 --- a/components/drivers/include/drivers/dac.h +++ b/components/drivers/include/drivers/dac.h @@ -128,4 +128,6 @@ rt_err_t rt_dac_enable(rt_dac_device_t dev, rt_uint32_t channel); */ rt_err_t rt_dac_disable(rt_dac_device_t dev, rt_uint32_t channel); +/*! @}*/ + #endif /* __dac_H__ */ diff --git a/components/drivers/include/drivers/dev_rtc.h b/components/drivers/include/drivers/dev_rtc.h index 96658968e56..740142d3d78 100644 --- a/components/drivers/include/drivers/dev_rtc.h +++ b/components/drivers/include/drivers/dev_rtc.h @@ -16,7 +16,70 @@ #include #include +/** + * @addtogroup Drivers RTTHREAD Driver + * @defgroup RTC RTC + * + * @brief RTC driver api + * + * Example + * @code {.c} + * + * #include + * #include + * + * #define RTC_NAME "rtc" + * + * static int rtc_sample(int argc, char *argv[]) + * { + * rt_err_t ret = RT_EOK; + * time_t now; + * rt_device_t device = RT_NULL; + * + * device = rt_device_find(RTC_NAME); + * if (!device) + * { + * LOG_E("find %s failed!", RTC_NAME); + * return RT_ERROR; + * } + * + * if(rt_device_open(device, 0) != RT_EOK) + * { + * LOG_E("open %s failed!", RTC_NAME); + * return RT_ERROR; + * } + * + * ret = set_date(2018, 12, 3); + * if (ret != RT_EOK) + * { + * rt_kprintf("set RTC date failed\n"); + * return ret; + * } + * + * ret = set_time(11, 15, 50); + * if (ret != RT_EOK) + * { + * rt_kprintf("set RTC time failed\n"); + * return ret; + * } + * + * rt_thread_mdelay(3000); + * + * now = time(RT_NULL); + * rt_kprintf("%s\n", ctime(&now)); + * + * return ret; + * } + * MSH_CMD_EXPORT(rtc_sample, rtc sample); + * @endcode + * + * @ingroup Drivers + */ +/*! + * @addtogroup RTC + * @{ + */ #ifdef __cplusplus extern "C" { #endif @@ -31,7 +94,9 @@ extern "C" { #define RT_DEVICE_CTRL_RTC_SET_TIMESPEC (RT_DEVICE_CTRL_BASE(RTC) + 0x08) /**< set timespec for clock_settime */ #define RT_DEVICE_CTRL_RTC_GET_TIMERES (RT_DEVICE_CTRL_BASE(RTC) + 0x09) /**< get resolution for clock_getres */ -/* used for alarm function */ +/** + * @brief RTC alarm structure + */ struct rt_rtc_wkalarm { rt_bool_t enable; /* 0 = alarm disabled, 1 = alarm enabled */ @@ -42,7 +107,9 @@ struct rt_rtc_wkalarm rt_int32_t tm_mon; /* alarm at tm_mon */ rt_int32_t tm_year; /* alarm at tm_year */ }; - +/** + * @brief RTC operations + */ struct rt_rtc_ops { rt_err_t (*init)(void); @@ -54,20 +121,63 @@ struct rt_rtc_ops rt_err_t (*set_timeval)(struct timeval *tv); }; +/** + * @brief RTC device structure + */ typedef struct rt_rtc_device { struct rt_device parent; const struct rt_rtc_ops *ops; } rt_rtc_dev_t; +/** + * @brief Register a RTC device + * + * @param rtc RTC device + * @param name RTC device name + * @param flag RTC device flag + * @param data RTC device data + * @return rt_err_t error code + */ rt_err_t rt_hw_rtc_register(rt_rtc_dev_t *rtc, const char *name, rt_uint32_t flag, void *data); +/** + * @brief set date + * + * @param year year + * @param month month + * @param day day + * @return rt_err_t error code + */ rt_err_t set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day); + +/** + * @brief set time + * + * @param hour hour + * @param minute minute + * @param second second + * @return rt_err_t error code +*/ rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second); + +/** + * @brief set timestamp + * + * @param timestamp A pointer to time + * @return rt_err_t error code + */ rt_err_t set_timestamp(time_t timestamp); + +/** + * @brief get timestamp + * + * @param timestamp A secondary pointer to time + * @return rt_err_t error code + */ rt_err_t get_timestamp(time_t *timestamp); #ifdef RT_USING_SYSTEM_WORKQUEUE @@ -79,4 +189,6 @@ rt_err_t rt_soft_rtc_set_source(const char *name); } #endif +/*! @}*/ + #endif /* __DEV_RTC_H__ */ From a98c87293426b1b690c16084259a7b5ed03715e2 Mon Sep 17 00:00:00 2001 From: hydevcode Date: Fri, 27 Sep 2024 06:08:41 +0800 Subject: [PATCH 51/54] [bsp][rsoc] remove infinite while loop counting --- bsp/apm32/apm32f030r8-miniboard/applications/main.c | 3 +-- bsp/apm32/apm32f051r8-evalboard/applications/main.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/bsp/apm32/apm32f030r8-miniboard/applications/main.c b/bsp/apm32/apm32f030r8-miniboard/applications/main.c index b341b8f997a..e0c781e2e13 100644 --- a/bsp/apm32/apm32f030r8-miniboard/applications/main.c +++ b/bsp/apm32/apm32f030r8-miniboard/applications/main.c @@ -17,11 +17,10 @@ int main(void) { - int count = 1; /* set LED2 pin mode to output */ rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT); - while (count++) + while (1) { rt_pin_write(LED2_PIN, PIN_HIGH); rt_thread_mdelay(500); diff --git a/bsp/apm32/apm32f051r8-evalboard/applications/main.c b/bsp/apm32/apm32f051r8-evalboard/applications/main.c index 421afebe8dc..71e6e6605ca 100644 --- a/bsp/apm32/apm32f051r8-evalboard/applications/main.c +++ b/bsp/apm32/apm32f051r8-evalboard/applications/main.c @@ -17,11 +17,10 @@ int main(void) { - int count = 1; /* set LED2 pin mode to output */ rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); - while (count++) + while (1) { rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(500); From 5562779056de532febfe1a41a5c19f9422b428d1 Mon Sep 17 00:00:00 2001 From: hydevcode Date: Tue, 24 Sep 2024 13:20:36 +0800 Subject: [PATCH 52/54] [BSP][LVGL]An adaptation that creates a buffer in high or low versions [bsp][stm32]lvgl creates adaptations of buffers in high or low versions [BSP][LVGL]An adaptation that creates a buffer in high or low versions,code format modifications [BSP][LVGL]An adaptation that creates a buffer in high or low versions,code format modifications [bsp][stm32]lvgl creates adaptations of buffers in high or low versions,code format modifications [bsp][stm32]lvgl creates adaptations of buffers in high or low versions --- .../board/ports/lvgl/lv_conf.h | 31 ++++----- .../board/ports/lvgl/lv_port_disp.c | 68 ++++++++----------- 2 files changed, 43 insertions(+), 56 deletions(-) diff --git a/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_conf.h b/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_conf.h index ad815137f15..666d6d6c5dc 100644 --- a/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_conf.h +++ b/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_conf.h @@ -14,30 +14,25 @@ #include #define LV_COLOR_DEPTH 16 -#define LV_USE_PERF_MONITOR 1 #define MY_DISP_HOR_RES 240 #define MY_DISP_VER_RES 240 -//#define LV_USE_LOG 1 -#ifdef PKG_USING_LV_MUSIC_DEMO /* music player demo */ -#define LV_HOR_RES_MAX MY_DISP_HOR_RES -#define LV_VER_RES_MAX MY_DISP_VER_RES -#define LV_USE_DEMO_RTT_MUSIC 1 -#define LV_DEMO_RTT_MUSIC_AUTO_PLAY 1 -#define LV_FONT_MONTSERRAT_12 1 -#define LV_FONT_MONTSERRAT_16 1 -#define LV_COLOR_SCREEN_TRANSP 1 - +#ifdef PKG_USING_LV_MUSIC_DEMO + #define LV_USE_DEMO_MUSIC 1 + #define LV_HOR_RES_MAX MY_DISP_HOR_RES + #define LV_VER_RES_MAX MY_DISP_VER_RES + #define LV_USE_DEMO_RTT_MUSIC 1 + #define LV_DEMO_RTT_MUSIC_AUTO_PLAY 1 + #define LV_FONT_MONTSERRAT_12 1 + #define LV_FONT_MONTSERRAT_16 1 + #define LV_COLOR_SCREEN_TRANSP 1 #endif - +#define LV_USE_SYSMON 1 +#define LV_USE_PERF_MONITOR 1 +#define LV_USE_DEMO_WIDGETS 1 +#define LV_FONT_MONTSERRAT_24 1 #define LV_USE_DEMO_BENCHMARK 1 - -//#define LV_USE_DEMO_WIDGETS 1 - - -//#define LV_USE_DEMO_MUSIC 1 - #endif diff --git a/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_port_disp.c b/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_port_disp.c index b615edb4c68..ff5ac4e9a4b 100644 --- a/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_port_disp.c +++ b/bsp/stm32/stm32f407-rt-spark/board/ports/lvgl/lv_port_disp.c @@ -26,6 +26,14 @@ #define MY_DISP_VER_RES 240 #endif +#if (PKG_LVGL_VER_NUM >= 0x0803FF) + #define LV_DISP_TYPE lv_display_t + #define lv_COLOR_TYPE uint8_t +#else + #define LV_DISP_TYPE lv_disp_drv_t + #define lv_COLOR_TYPE lv_color_t +#endif + /********************** * TYPEDEFS **********************/ @@ -35,9 +43,7 @@ **********************/ static void disp_init(void); -static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p); -//static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width, -// const lv_area_t * fill_area, lv_color_t color); +static void disp_flush(LV_DISP_TYPE * disp_drv, const lv_area_t * area, lv_COLOR_TYPE * color_p); /********************** * STATIC VARIABLES @@ -83,9 +89,6 @@ void lv_port_disp_init(void) * and you only need to change the frame buffer's address. */ - /* Example for 1) */ - static lv_disp_draw_buf_t draw_buf_dsc_1; - /*GCC*/ #if defined ( __GNUC__ ) static lv_color_t buf_1[MY_DISP_HOR_RES * MY_DISP_HOR_RES / 2] __attribute__((section(".LVGLccm"))); /*A buffer for 10 rows*/ @@ -94,16 +97,29 @@ void lv_port_disp_init(void) __attribute__((at(0x10000000))) lv_color_t buf_1[LCD_H * LCD_W / 2]; #endif - lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * MY_DISP_HOR_RES / 2); /*Initialize the display buffer*/ /*----------------------------------- * Register the display in LVGL *----------------------------------*/ +#if (PKG_LVGL_VER_NUM >= 0x0803FF) + + lv_display_t *display = lv_display_create(MY_DISP_HOR_RES, MY_DISP_VER_RES); + lv_display_set_buffers(display, buf_1, NULL, sizeof(buf_1), LV_DISPLAY_RENDER_MODE_PARTIAL); /*Initialize the display buffer.*/ + lv_display_set_flush_cb(display, disp_flush); + +#else + + /* Example for 1) */ + static lv_disp_draw_buf_t draw_buf_dsc_1; + + lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * MY_DISP_HOR_RES / 2); /*Initialize the display buffer*/ + + /*----------------------------------- + * Register the display in LVGL + *----------------------------------*/ static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/ lv_disp_drv_init(&disp_drv); /*Basic initialization*/ - /*Set up the functions to access to your display*/ - /*Set the resolution of the display*/ disp_drv.hor_res = MY_DISP_HOR_RES; disp_drv.ver_res = MY_DISP_VER_RES; @@ -114,16 +130,11 @@ void lv_port_disp_init(void) /*Set a display buffer*/ disp_drv.draw_buf = &draw_buf_dsc_1; - /*Required for Example 3)*/ - //disp_drv.full_refresh = 1; - - /* Fill a memory array with a color if you have GPU. - * Note that, in lv_conf.h you can enable GPUs that has built-in support in LVGL. - * But if you have a different GPU you can use with this callback.*/ - //disp_drv.gpu_fill_cb = gpu_fill; - /*Finally register the driver*/ lv_disp_drv_register(&disp_drv); + +#endif + } /********************** @@ -155,35 +166,16 @@ void disp_disable_update(void) /*Flush the content of the internal buffer the specific area on the display *You can use DMA or any hardware acceleration to do this operation in the background but *'lv_disp_flush_ready()' has to be called when finished.*/ -static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) +static void disp_flush(LV_DISP_TYPE * disp_drv, const lv_area_t * area, lv_COLOR_TYPE * color_p) { extern void lcd_fill_array(rt_uint16_t x_start, rt_uint16_t y_start, rt_uint16_t x_end, rt_uint16_t y_end, void *pcolor); lcd_fill_array(area->x1, area->y1, area->x2, area->y2, color_p); - lv_disp_flush_ready(disp_drv); } -/*OPTIONAL: GPU INTERFACE*/ - -/*If your MCU has hardware accelerator (GPU) then you can use it to fill a memory with a color*/ -//static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width, -// const lv_area_t * fill_area, lv_color_t color) -//{ -// /*It's an example code which should be done by your GPU*/ -// int32_t x, y; -// dest_buf += dest_width * fill_area->y1; /*Go to the first line*/ -// -// for(y = fill_area->y1; y <= fill_area->y2; y++) { -// for(x = fill_area->x1; x <= fill_area->x2; x++) { -// dest_buf[x] = color; -// } -// dest_buf+=dest_width; /*Go to the next line*/ -// } -//} - #else /*Enable this file at the top*/ /*This dummy typedef exists purely to silence -Wpedantic.*/ typedef int keep_pedantic_happy; -#endif +#endif \ No newline at end of file From 6fb31d486d77ad19f812d91669cb89aec376039b Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Sun, 29 Sep 2024 08:59:17 +0800 Subject: [PATCH 53/54] [doxygen][rsoc]add dac driver example for doxygen (#9483) --- components/drivers/include/drivers/dac.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/drivers/include/drivers/dac.h b/components/drivers/include/drivers/dac.h index ca827c7cda8..f3635d50b62 100644 --- a/components/drivers/include/drivers/dac.h +++ b/components/drivers/include/drivers/dac.h @@ -110,6 +110,7 @@ rt_err_t rt_hw_dac_register(rt_dac_device_t dac,const char *name, const struct r * @brief set the value of DAC * @param dev DAC device * @param channel DAC channel + * @param value the value of DAC * @return rt_err_t error code */ rt_err_t rt_dac_write(rt_dac_device_t dev, rt_uint32_t channel, rt_uint32_t value); @@ -117,6 +118,7 @@ rt_err_t rt_dac_write(rt_dac_device_t dev, rt_uint32_t channel, rt_uint32_t valu /** * @brief enable the DAC channel * @param dev DAC device + * @param channel DAC channel * @return rt_err_t error code */ rt_err_t rt_dac_enable(rt_dac_device_t dev, rt_uint32_t channel); @@ -124,6 +126,7 @@ rt_err_t rt_dac_enable(rt_dac_device_t dev, rt_uint32_t channel); /** * @brief disable the DAC channel * @param dev DAC device + * @param channel DAC channel * @return rt_err_t error code */ rt_err_t rt_dac_disable(rt_dac_device_t dev, rt_uint32_t channel); From d0cf64631a6011c07f1d19f1b8eae96e84a5bf5c Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Sun, 29 Sep 2024 08:59:28 +0800 Subject: [PATCH 54/54] =?UTF-8?q?[bsp][stm32][dosc][rsoc]=E6=9B=B4?= =?UTF-8?q?=E6=96=B0STM32=20BSP=20=E5=88=B6=E4=BD=9C=E6=95=99=E7=A8=8B=20(?= =?UTF-8?q?#9484)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [bsp][stm32][dosc]update bsp make * [bsp][stm32]注明文档中使用的cubemx版本 --- .../How to make a STM32 BSP for RT-Thread.md | 14 ++++++++---- ...66\344\275\234\346\225\231\347\250\213.md" | 20 ++++++++++++++---- bsp/stm32/docs/figures/CubeMX_1.png | Bin 123553 -> 144491 bytes bsp/stm32/docs/figures/CubeMX_2.png | Bin 104644 -> 102478 bytes bsp/stm32/docs/figures/CubeMX_3.png | Bin 79460 -> 146529 bytes bsp/stm32/docs/figures/CubeMX_4.png | Bin 96926 -> 208745 bytes bsp/stm32/docs/figures/CubeMX_5.png | Bin 15152 -> 174657 bytes bsp/stm32/docs/figures/CubeMX_6.png | Bin 0 -> 15152 bytes bsp/stm32/docs/figures_en/CubeMX_1.png | Bin 124762 -> 144491 bytes bsp/stm32/docs/figures_en/CubeMX_2.png | Bin 104023 -> 102478 bytes bsp/stm32/docs/figures_en/CubeMX_3.png | Bin 80005 -> 146529 bytes bsp/stm32/docs/figures_en/CubeMX_4.png | Bin 96567 -> 208745 bytes bsp/stm32/docs/figures_en/CubeMX_5.png | Bin 19210 -> 174657 bytes bsp/stm32/docs/figures_en/CubeMX_6.png | Bin 0 -> 19210 bytes 14 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 bsp/stm32/docs/figures/CubeMX_6.png create mode 100644 bsp/stm32/docs/figures_en/CubeMX_6.png diff --git a/bsp/stm32/docs/How to make a STM32 BSP for RT-Thread.md b/bsp/stm32/docs/How to make a STM32 BSP for RT-Thread.md index b57dfda12a2..ff0ead3e28c 100644 --- a/bsp/stm32/docs/How to make a STM32 BSP for RT-Thread.md +++ b/bsp/stm32/docs/How to make a STM32 BSP for RT-Thread.md @@ -68,21 +68,27 @@ Create a CubeMX project based on the target chip. The default CubeMX project is Change the chip model to STM32F103C8Tx in the CubeMX project. +Note:The version of CubeMX used in this article is 6.12.0 + #### 3.2.1 Generate CubeMX project Configure the system clock, peripheral pins, etc. The steps are shown in the figure below: 1. Turn on the external clock, set the download mode, and turn on the serial peripherals (note that only the pins of the serial peripherals need to be selected, no other parameters need to be configured): - ![Configure chip pins](./figures_en/CubeMX_1.png) + ![Turn on the clock](./figures_en/CubeMX_1.png) + + ![Configuring the download Mode](figures_en/CubeMX_2.png) + + ![Open the serial port](figures_en/CubeMX_3.png) 2. Configure the system clock: - ![Configuring the System Clock](./figures_en/CubeMX_2.png) + ![Configuring the System Clock](./figures_en/CubeMX_4.png) 3. Set the project name and regenerate the CubeMX project at a specified address: - ![Generate the corresponding configuration code](./figures_en/CubeMX_4.png) + ![Generate the corresponding configuration code](./figures_en/CubeMX_5.png) Note: When generating the code, do not check the following options (ie: Do not let it generate a peripheral initialization as a pair of .c/.h files per perioheral.) @@ -90,7 +96,7 @@ Configure the system clock, peripheral pins, etc. The steps are shown in the fig 4. The final project directory structure generated by CubeMX is shown in the figure below: - ![CubeMX 7](./figures_en/CubeMX_5.png) + ![CubeMX 7](./figures_en/CubeMX_6.png) #### 3.2.2 Copy initialization function diff --git "a/bsp/stm32/docs/STM32\347\263\273\345\210\227BSP\345\210\266\344\275\234\346\225\231\347\250\213.md" "b/bsp/stm32/docs/STM32\347\263\273\345\210\227BSP\345\210\266\344\275\234\346\225\231\347\250\213.md" index fc32ecdcdc6..b70fa1439b7 100644 --- "a/bsp/stm32/docs/STM32\347\263\273\345\210\227BSP\345\210\266\344\275\234\346\225\231\347\250\213.md" +++ "b/bsp/stm32/docs/STM32\347\263\273\345\210\227BSP\345\210\266\344\275\234\346\225\231\347\250\213.md" @@ -101,21 +101,33 @@ BSP 的制作过程分为如下五个步骤: 在 CubeMX 工程中将芯片型号为修改芯片型号为 STM32F103RBTx 。 +注意:本文使用的CubeMX版本为6.12.0 + #### 3.2.1 生成 CubeMX 工程 配置系统时钟、外设引脚等,步骤如下图所示: 1. 打开外部时钟、设置下载方式、打开串口外设(注意只需要选择串口外设引脚即可,无需配置其他参数): -![配置芯片引脚](./figures/CubeMX_1.png) +![打开外部时钟](./figures/CubeMX_1.png) + +![设置下载方式](./figures/CubeMX_2.png) + + + +![配置串口](figures/CubeMX_3.png) + + + + 2. 配置系统时钟: -![配置系统时钟](./figures/CubeMX_2.png) +![配置系统时钟](figures/CubeMX_4.png) 3. 设置项目名称,并在指定地址重新生成 CubeMX 工程: -![生成对应的配置代码](./figures/CubeMX_4.png) +![生成对应的配置代码](figures/CubeMX_5.png) 注意:在生成代码时,不要勾选以下选项(即:不让其生成单独的 .c/.h 驱动文件,直接全部更新到 rt-thread 要使用的 stm32xxx_hal_msp.c 文件中) @@ -123,7 +135,7 @@ BSP 的制作过程分为如下五个步骤: 最终 CubeMX 生成的工程目录结构如下图所示: -![CubeMX 图7](./figures/CubeMX_5.png) +![CubeMX 图7](./figures/CubeMX_6.png) #### 3.2.2 拷贝初始化函数 diff --git a/bsp/stm32/docs/figures/CubeMX_1.png b/bsp/stm32/docs/figures/CubeMX_1.png index 676238dd62c6a55be4480e2623ad762c355789e1..07a60f7b7c73a040300f38ca09f290e497689c60 100644 GIT binary patch literal 144491 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≫9gI{1nFwAdwfX6 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%0DgwyixFA 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 literal 123553 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 bllx(R<^GqdjLT1FG5~?6tDnm{r-UW|{tUO& diff --git a/bsp/stm32/docs/figures/CubeMX_2.png b/bsp/stm32/docs/figures/CubeMX_2.png index 2a15bcb9fbf5bc84630a6b460d05c4853a80c8a8..352a36db483aae1a1d6a7e676be60baca43f3034 100644 GIT binary patch literal 102478 zcmb5Wc|4Ts`v-oHu@uP(B?;|L3o4cD&S{a;qMah66cwdVMuwSAi=%}~S+Z3s6-881 zn8}i4nM#plW)R9Y!!X7&Gr#M8ROfuY=kxjfUcWyIGtYBB_kG>hb-mx$azA0~*V(Bm zPf|t*soJkvz7ZiZA0hd9qZHv2-u3$r;fI39?iI^6&WLP6&8fR$5$S@w{qo;7Q%TK5 z?vG}AequBX1*Yy7er$bopy-K-iM?X!$0rBso{T%UtIng&GB~Z`-mxT~4-r|_u6gFM zdvAN@_m>>$ei0#CZXobnaZo5mlBEpu70aKnaZtMP>z z#9u87qa~)3V()zAoHm#<$lbsD#toyOg)3jq9bCS0)|{&owbQ?D+WCHKjD@GNaY%RV zqen|fJUrSSBfnZ%z$o-|)$tT%7W@Sxi@2*ujFWPsQMAN(8HvYzA)fW+ePjfAWI7ZBAPZnxByLmg{LDB4PU)EYTk67TN99Xk@x zQ)0$hzaazEk!xg#FjFe@^!x-%28@<*X-wuX$9Kk(kc7W{(50Sl1B%bqAredo7Db6eh%4vEf9#=kGv zp&ibz6g(Wic6V@tf{8HK>o6I~Uh4*YUg;iu)gICFzRFE%uj=Tu;10|R_n)K=9Yt>(= zr;0pnWHa$r%4NWUU8Oya_>RMpBQ=MxFfV{62umG;quzEaheb1ow|qWaasUlm&;}#* zVF1|9mn{`>Xw`5hKf0%kGJF{}k}Lp0xrySS<{kqi7<=B+H5JNaSV;1{OkOM6msM4n^+1}T( zmgNlhz=C$?77+55f$6+?9;Eeifc7{pV%=2I-&XjFdJ6vlN&ErYH^#Oxnklt{>+r)< zl8#L?@vPjnJNNg-n~@F;uT#_UkQ7`&BiID`SuKX z7Ja(BIwCxo^BC5qi+!hNnx27($x1(f)ztN!`Y?wgy? zs`7ZVvs(FIE#WhJgQSAn=XGlF@*_ipsT9GWX|6V-Xq??-1>44q!m&zIu=HKUH-u
l%up!welR4QBhe5iQbzILt< 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

7LoIYyh zak;7xDS}veXDDvC<7xh7y{ywObf%Tw+>xHA2Blg)b?|}nK7j@rchhu?A>^wae^?F$ zyM�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%0D)N4V$tI3v&`7uGh9SnFP?JVRw%=G- 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⁣6EHw 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 VSWZo!PQkx--(I@t_#Yy7{txm^g);yE literal 104644 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

LOs_s)Zdw%HR9?TKd>i(26Nqn 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

6ya4F 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 qvhGQM)YNi=T?YPhdc>f5rCjQ@;a{(^9Jd literal 79460 zcmYhiWmH_-(lv~`bmLAp?(R-QaQ7g=-CcvbL$KhD1cwmZ-95Mk4G@Bd;PP?Kz4v*) zA3gTi(qpetyH?elRkLE$RAe#HNYG$lU@+z7q%~k*;6X4jutO+FZ&%Q)@?72yum$z`T~qOG|3`d^pKN zG)Z6F8tG|ytnEN2!XVn*+ypZ*At4o-ftf;M3#npP(4xbmL7T-nbL&LE6B0Z}PJL#4 z&$_-QK<{2Sga7pHoy{K#9*P`3b<_K1vKf8T(bAG&AqeX;*&w~}5wU5~pLN!)ng{dH zAP~e21zzjK%TV71h#|ni`dD-f+l0vVO11UDHAQ1LETRDmMg)g9p_P?rbf044n6Yq% z-Ad8?aEvu75U5f{n+q;mBqy4}kg@wGCeSS{Ep0YhISDC+aFDP4%gK>Ff|Qjpy(ykm zj+&6d`U0=%ba0aXLLZ$5-C0S5GQZCTX6t10+7I9VRso% zwqrbkg%7J%{Iw4DmT>p1#cni@nVP7Bm zTE70jhySrIYpc^v%Wr4-x$MbSy%I_NHmrz6pj?(s;c4mu;r=~>(@s;CH*vQyAy*~3SP^ha?T$Zsz#Qy z*9Yt9B3YgcjIX!PQ~$0ttgqF3Y={a* z?_*Y5SLd9!Dlr~?QJ6Ja&_L^VGPP)~*i7()ONL-k+Rv9Sc+= zjc)9XKTY-{Avw?QCpMykA};S|mtmaj%UBD!47CRW4MWJVoNG64n~ zKUQO%LF|Yh!e{{aVbfIx-hG6peE8?Yu30V?x&D zDjU@_u=Yl@bmi$cXZSn6z5SGV7c8t$1pUDi0i@+#kX(d^7Z&C;We23WOLB{c^^6Ol zHa{8dczVP1i-HPB;wnaz!5b~AEFOU@DJg#CQ@QJHRNNgOx8s6^>EUMx59S}p(hvgC zW-heVQU?ouH;KG2<_{t0Hct9}5njNL4|YuVQ*xRCsyI$=)JN^9IJz={A0l_Ss$iwv^6=-|VHhFHfz?0-u+vY5uBmnP=&$WyQ0?=X2%|=s7&DemkV;cBX$8e-O3%)fw zH_=7dJH}H#?jpg)qRdB$u7|zfS2L)#ZOn#ldkg9PjMmR>5sO?b7hN zsa*cG&Fhrp>FKHU^mkiZbVmTOsj2D4O+m`%&!}yNiAaZ!p8(WL${695Lwady?+~J~ zR(Y+SvMYw}HK-x!5TBK5BViJ<1bK;>IqJC2A55(-!1qGrzBoXDj5P+CC>$*+eN3BUh&)AX3U%ZF<1Nm&Xx0J=j7_uxEF!T0 z1d=wQ!n)=1-a}MS#=_++D^X>fE9*~^6e2zacB5Y2yo@{Tkl`OPWa2qd-zG-D81|^v z71Vl@46H1BPjVGZ>|t|$zZ*kPqndZyVWW?^(bOrZ48>Xz5iNSMqJ<>k=P`ar(1l4u z;Pj27=QCA6XA0fVy~aglA{us2k9bRB0od{$^9^OP_>mUsBkn$y}fOFZ>8+VW^22mpzp zn(S^x7B+7{PG40UY%iT#nUQ70~S#xg}NJfkp zH-?eYz|F;$HxhxvxW?}lwK0|#&aPfSSl2H|1AttKwdtztZM6Mipc`lD)OPn78zt7_ z#<)`r9P4YE)W z+!%qIRaOmwfzWKa+4^ve^uE?!=9Ishs_cLB%Z9EYU8J9b1Iu*2=!D?NdB>EvV1?G7 za)z{YoE)b|uj|wKk?z~Nxk4CdhbYZHfK&PzAI@+&D@DULbjc#3E|(~08p3erIW;m{ zOFhfpAI_W8TpS#m>8Ce^#6Z0!ksU;Fd58m8X=L<~!L<%Y(>}9V>m;t!+*6lq#*Amv9egTlZS=XXTGhe$|=!>D_T084PLmdzq3dEvT{F$OQDVMmoF2P-r)O|@ge zU>y3o5;zfNLHb6)h0@Dt@gU%jl&L=YND*rXsW7(`WW&Eh<&QLCJ|cgnB&cM>6FxvU z@I@c~4h4UyovjL+6QP3X^5YN7B3i2rOqi=q5%>EW6Pg^2o>Gf2GD8zumMk&OUBn;^ zfB3zcNYDx-lX!+4(~Bmi8UaHYgdp2W4QdxhYC``ingsHS8$1H%rTBVrW97G?erk7Q zBFKu+@W4plxhqAm(1)KLR7B&>1R$a~ZQ#Awq2r`Rn@~f^z0D}m3=N9?v&j6eUZ%Uj z(GFy=O&>QY;;8lCL9$|A8L!!mVdOTR0IM_z5vZ=sF3E!6!7cb@MV^bawZY{60ZP{5 z^?^1j_+`OG(?6`<1{KUm*KxhaLshfZ`@w$a{{a+Xu0fK7!zI5zEO>d$O?D_tq5HoW z8TJH{<5b{nwtEe=xgVbRzml{7LHoh0D8;L>-ujhub4GBVgQI9qjX1c}Vl~1LHOvZs zNJoVa@{B$e&k9P!=W49?+Qp4oebt<#qxP_%X3~pq7!%^TQJ1Xa2jaeu3$JPe#6=9= z@k*J@?e@MXMxV@)+DY+N!>RJ<5bT(2@Dg1MSy+}7Mc&1EMRDQn7k#$?M^@vPTE5$V z)iG3_j`+S#d^XL*W4lRiwB{uc<1rM> zV0|K*VR6g(4wlfCxYi=Gw`4|2p%%+-*WAu#{+0_!y=BIi;yqtnlIxH&wZYji7o5s< zH7!l_d63Jet+nWVhtm5wg<3%F*b8!_#`8q~58 zI{mS|NJtbnmj(oh5}UZ0?~f>U*Yc-16ASG<0B+;<$w-wl&|~rJUpYi9+C!?s0F-pS;y!TZoUz9$( zO@KUNb0DE+HL#zxWt0*;Ad1%DcE5?_4^9%ex{P<8X&Hd&ex_Wp0+=d$1pO%gl^X>b zHK7X0bCy&&s9Ia^;uPj|cZdu4mQa4s#p^AGWhJ>^5~Db6V&gbtmtS3atMe>z54lyEC~n+VQ||gMWHz>@pn~YYKSe8n#P1aQFqk5H$1VE z5Cq?LDTWM4ty@G~6{+D9+;(Lege6^)jYrDfRi;7B8znaYyo3iScMA(A4ad3*N5EAF zB*mX7G@dWxa+z7od#iT{xSETUpjrF0ji+RP2;RPcVbE5&aQWtl9C0u8#pRt%v@nkO zOp#%^ba00-+;eV<%RLv18#@Bheg8X8ca!GyXt?fh8nuWTc?jJnYI;!$`3l-2fv?Q1 z+%Z|na`23m=`ZF|40YtpbN6lyl4!JC`S(7DKc>T6)Aea0DX|O@Cm7- z7?#mK5xx94OCHx&Tgq0FklUIXL&OOo>Shx$RB4SIJ{9hdIgx$G#8#F@Rq1YBJ}Ba} zkuW|+%v1+BigVxoMG7Oe>RDoS(BENcjZkGX`3IDm`X_gBTbmHNvLDIks1MOh#^h(m zUP9~tPl~@3moN|?A0JQ7%p6IWC}hiAne{MfZTPcE9+Xp1kaTmpw%P)tijA#u(Te+c zqf!_)i;srrBb!9g)NDH+Nz~rVNzh`_MAfDg^;;hu?q@)F+s1*&|Kk*`n8?@^;mAPN zmeWvA_@YXZw(;3M#o{f*U7Rtp6EDta!XxJ0dJ-g-bYRE{0- zKJQFG2y@g8D>)e)$-zA#eWi?V^`jl@UTZ-l&a8t>Jl84%msozl<$a9%Z(!~7nXRCg zxE63bp~`MKkF)}UeeO1~fkWKE?7&TRP5I%mVgUbX2#g}q(h$wsEnmDqIr|TP+vtzK zZyY`}Mc!3{eOg<^k?!|1OGV(tgB}>ajX8guwj@(sG&_EzEUa+kyo^+50OO+nvzW$} zo7b_Yl`|25*Z z^LXCf_cGzz{ONb!p5iuTk<6Y>jhc2w*ta_(ht(!z(p$sG#q0#jf`CZcxS+vwE^4)u zc=$4|F>N}s7f;M?<8HE;h=tr`)8(u4`s0H0QC&Yd zX~~Gnm3At2;{=DtnIc%z0IOHxgs*M^7eCjZAybBu96V@)ky9Vk|&c4E`;P)VeMPcpt zhZlcZwoHFcH&`gbbxTP6_=@0vbKdWF74IDQBlt?(p2F;Z&UB`Ej0%9oC>4xe?IJI$ zJ1AnHM%VwQ3c@S?azrGy?n2;1VK-R)A#?%lk+vy$RB7ezC-$A+J)6hzBBAA~t{PR` za2Blc#a>ws=YCV>Z4zS|FY=T`RwlCPGPW4Z^RaLN*_cC%%~e5vhr2wNGOqS>Q!5hJ=1K zk7Js~)Yl;XhYs#Yv2I6V^214-VDvSPs20O;k?Qim?m^_!voV-%1|vodM$gXWOhRb* zlXbikOK;+y{Eh$rY(#`j@E0K(mFgCtM8pl3myOV8Ql$M?M{m-KD1m_Il$XR@Mm*ko z%Lfsx(#&jEJb%HlKUQ}66gNNnJr6nWNAxxdyPGsRdXlP=7b%)G`{=v<9TAFa5kVyJ zYZ^L{2RN}TF*u}RSiAJtT+47B1LY@^Z$=A%+M4aWR^Xve&34&UuzC>6B0kjRle|g2 zi&#`n94S4;f(p~csQ-m@bKv`I5^@$D=FuR4MvBC?eBKVh0)mmK#)WA-QJojiWay>J zX0saAyOT{OT9lf@>&^s&ScqV%6Mt3;IdhcFCtyRb^K$y|=(jnosYHLW7aBFP ziw1S)K#IsTn>*Yx3(7zYv;$|~kYo4VPwBN^qgzz2Q)!?f0Qz?JeqvY_Gu%~m?(9h} zd}l@3{`pgdhI9zUnw`Ih`-$@lCbl9$P~sx}_t8MkjR3>mhO6yL`2qf|zy$bZ5zcmN z^E0OZh0{IBFz@Rlb^9DXN6_A|)RTJ&`3s_~^67<7fy-n5Bcb~}en8hf$ro|4+3u+S zi-2DRd@evDA|ei~APAV;>}5v%d5AWy{i zI}=U}h#=0i6rSn@_6~9-0>(zl>+4P&e#T51p{Gj1F22MbZumbRy=83dqZSn<2ZO=e zX+j36G5Ak~-y^%_w@Kx;%CZNBL;fb^*-k3JVJx zW7#*}l-Wn+cXPl0zQ&>y!O_stBJS+$usCx6Cqq3AsF7wLVfpy`Z{;G!k(9rC_s+%5 z?P1wKf(8e5nM!kg^VF3I?K6xD6F3}B?CvRNy1C92{xiw+TiG%<=%u`aMAR$-K_@@$ zsmt9whvZkHcMmSL5lBZ00)z~crfO-5XJLjPaOV3=kBhVO7OFKr#b=vGKibfgE{qQ_+Jz3Nk*;V1X-za zIF)*3ZQ8)5O#DJS;+mH8^zw4zFwthhx0YLqTq@^ZARqJM<@F#(Dv5adwkR_1q?8tE zS5yJp?Ybv3t>!5bm%rTZY2WCuiX)VlxUNgtrUe58V(|*4GMqdzpfRqN@eVk&wPnU8 z-HRIyo$0Y=bnPS6OH2Rg!$^;hiuvPyF*Kn(%OHXHsm+OKmIG?~227Bf^gk*RUHZZ? zgezS93OCd4fX-?46%viyM_JD$-}1X1@*?0<(yQb`e0_=0(9t>U7Hk;suGZ;Xm_)ue zDEMycl z-7maY4iKD?<<$5WIiaIqPVVnp)JFC|N$l);yPmElh(vq3r~&^yiyjYUreSe@NQq?TeVNG<_Kw@Kml_&*Xw~)!nD>#pYko(1j&v>6<+1}; zSy|~MZ>+;ii8ke(TxAZ{EQnC@&3;OV*bv3~ev%~D%Y0%j1fm)k4~tnv6S z&@Ttdg^#|=!bnHKx|S%GQEpASz>FbppV>i{b>yvS68AjDyX_F8IaAX%563#QnWG|M zEiMKs8%lr5DCb-oZe9q&h;edrMwf;|AB5w+%@m3XutPbfXJ==h_0&9Wc^Dm1=xqBd zAJE{$U5US%^+5swbqgJClQwJo7Lu}wsuQvi=w);V5sYtVqJj)c&;FETyA4?^YN|yV{WVuZ>t)2ydpWTRKzF8bJo^|H76v3H_IDZ&Q9uC>e+?{`R&S48^Kk}nUO&fg-@q1W=1pSlNZY0P$9swl~o1bJ_ET0hB6S$j^Aq zyP!E*%|_WzYK7`)31;sPDVB7sp2<*RoJN|Q|Bgc-ky)*uL@{^D*KORe=9kA=|I4;| z1P>N?N0~~@)5`hpWthujN?U_45lJu_As7&AREud?z<8)5{gM=oJLLEmd-7cvXM7$T!e-|OrBbCjii+;-2#=hL+2go0vc~_N%Pmb1c_P%<5L8&n9K(iX~T~; zx9n?(6E>Yqq$H;wENeI=G~own_xCoJ>GrmF@JeVhlf!s&?T5g=*q`LyJ&jB8`VJMN zzMnm+3v*sf!3Jarbn+6^2*ZB9wtAZN>3Hia@c)5G+2%w>$${YJ0@Qj@!Qa&oE+B0l z61V(#AO1rK&sb>&b*g#v>cN_E07T0#q|d*2#1+fpZiG)6u8bp)H4w3 z>U~79<|tV|jW(iYW%oFin+wJTt{+NZO!m}-xvt)FusxGS&WJ_q{82T1@?%tD&K&q= ziHnfQ4v};a0OM2rm5$EZ*t?6cxbyaf)#Y{r{DUhkhli>8XZ_MmIDR3@k7X&G=}5@jt=gmwlB|t z31^z*$T?<8C920&%3yN$y@*|j(~r*2{;qZ`-`Q00+LfOP@bM$2^Msc#i#6zaWvfzM zISnEz21Eqh)BPe6|K3?BqY;RmCV-rOCUBBB|M}#?rkFr!j1H0MhOME-6L9N>S;sCl zk)!7wZ$!g5IYR8Z{PL|du+UU`NdLK>!7Kt`opE4x`Eon=?Y7P*i4e6a@{Y3{W(e#E zokR`uUC89HXFk$jYSufVSZRuA2? z60~os9G26q$>4g95jNoNIDS?A`fw3}W7E{fz~0o${NVc5lUzqccnC>LODpW`BztSN zdg{ZK-`$<=l90_(Mks-zKJ}yeF3L++&#E&cr5R2P?9iL3LmLuMp}TwIhwj_ieiXAf zuon2eTB*oY@38|Tus$!6c*HID>zN7{M3Q1QOk}dVH$*Msr_hM%jUngUv30I1)A6@# z|JCgdRio+aY$=d%eUce9n4||PY^5v#E?k%@FrZNBjq%{?c(i!3XH1I=8owLaeltK&=zgKGD;o%nzR-ycYUaAeZ7JX90z9Odpl5tDT&pw#hGLp%PTKr`06H zeT{_ctyPm+l)Vx+BaW9)HqsI-V;>rS6u}!q;Gon535=TJ;<0C6Hn@Dp4hxq)=s>lu zV4=zT6M5 z2a$M{xrA9Ru4MbZduAR1q;MoUUX?n-wtnKc7Affu!(;M@*7UrnB?x$#U%-$0Sj$`z z=cZvJm}pCQ);QFiFp)(FL<*^`I&j_n_yNltn`@_AJva-dexG?*Q&Cy zvE{CH-sk4b{*k)_56Z$d8AfO9a7jn4cZe)1O7L8DZPG{^X1Vh4VH!W@N2TTpOx`^) ziRG`trX=)V^vx_s&*|R^E{JR0x$2{mk+k0CYcZq<-3$0t#NJs(x87419NF32B2LX z1IXn7N)3=;3sCR|JQ)^bY}}J@q`I9Hf%wiLAt8qDrq51tjbqcAzc4?(=ZyU`@5=a$ zV8`>5VN^M)<9&!#t#WJlX|F=9ZX{3WG*x8tI1KB(3kD7$k>v-D)<;R=&HBJ(ce7Nl zIQy@Np&Ol%cC=6&0&+?)6gKPc_<(d_d-CBDCI^YP^7GFXk8Q5+^Aq6I3jhUv^a7bE zPD7*K#V@qU+!aKmXXOxuy#$pEm&@HDgWZJ0O~yF_v!TlZm+u}J6<=sd4!(feHfaM0 zuQP}z^7?e}*hD8M=prS$X zyWJ?PPac_lT&N?vHAba4R$HhI%xCyXyXl*XZGMV2Dcb(@KQ$lRZ=Fk(JTvLRo+`He z*@_P_8xZ4$;@_|YAv^|VV|WuXY1zDEEqLm({UgvWIQP5!bYL@T-F&^4Pfx%abVI-S zrObUg5G#TnN6P(4U~>Pnj<>2_uAzxeg-HstsZO~GT@dSaojzt<1N!!FY)1vA_~mcW zAzCxjv@@A<(nnjRh-`FLFQ(`yA2Y@GhKa9-c_b=Qi(yv)*JQf7umK{Q+k4DlBonUM z56Z*Gi&cV`Zc;?aEoHD)TsD2&_F$}EFs>4$D2Dyf2;grROg211NBA>9^M@Hkl)r?$ zPqtN31G@tRtBrJ`ywrpf-Um{qV@Rqw^3!GN>cT=WH9tZb2c%|eVu0(3Kc#ey!jqPN z4ooPc6~D(oH%3Y?aw23#ZXuO5rLk+?Yo#N){=kf$0CSdG*U zYbmOlF~QSG->Lc`zV{f?vt6}QbvzkuIcE>#xCSEx^&oRk?%cH$qTaI)_j{%2t5})GSucUW9Tcpx zL68_PmUZ0_)xC$%7vC<_Ak`~nz1QqD zp+;9+Df`C46oqK;3yug5laxC>*m~4HX7hk7RH1n%0j~qNztfd^(rL({?!^K@Rn)Lk3tQtB3f9&U}p!)G;R+l zD&xjHTjaw$9E+G8)dnXWW5m`D6)PJEUIyXCrzVc7%t(IfRs?O^I%e>PsPyDquLBy1 zZ^3UJmq#axaOv{g`!BdfG9ROvAD2K^DN-Ek9ZKruTfeH!uFp@0L)6l!5OqqbhnHQ? zsl7b7?BaPhM*j3j6v!J;*sRR`O8*^2nkS=Ykd3Bk%fjEAzXZFGM%&jg2goW(7G_OUrH-7}halBO*C!mqzjo?y8nfsVFjdTf1e@=MZ-$g7 zG2i=z#=L#?Iic^49Ww863P~1HINib<@qL4}mxU4zo`adhP}(oByx;zKTHP^5r&Ko- z<&+UM%%oFGGt#UR#G|D3B@jJ!yTJy|%$m4`;~?2V`C*zW${qDP>|5kUW!qsJor}td++!2sBKl!WR2e_cDv7gh;z>kQRA7tX;II95Pfm7E%9$)^hL9j&txYahR{z{DtZFJSPl|Kldho z@*G{uV4M&up9ryfw`HL)GAUpc$PXS_i}kg$8xM~LI=1~GTR02Vwx;zEQp+TX^@zES zjOSUy&bL?JejfwNFnslMqD{=D@m=Bj2CIJrfXjH6VGNYe*x$8MP)mwKPk*J0qmPp< zBwmd!B}iN!#mJc@?58SL3VH8%irz|`;|bKQ_hh8kKP{!(zW;iUI2a`Jh*wEP#dai+ zNGkK{2#C8|ace{&7PQQj<4Vo)-Dj`h~j2K9omoN8hyk5nr?t= zI8>oX*q2&3GqUxWdUJz;f%xBLUy2Lm(5!!0S(Ie-xBT?D<3B@cdfjd}7Yx@(qji*8 z{h2gI?KEBa?(y1I!5vz|Abs)G7>ac?o-pRJjk0`q=i_m_@GIlO9R$AJ%Kr)+;ZE8f z=qqrqp?+mvfGM&)T&XuVB(b%@#J@758CzN4J2lhEXvZC@=$N(H#wq<W59G96eY~ z_0+zHAm;mQio?!7va}G@Eo@}*DRwQ=%C|TWdMGfK_x1FNK%`+;J~z)Dm0~)7mc(&S zjwt?>i${5xki=ts$L7Pk`PRMMwZk{9$nbM~8bh+Dt$sXOD!67mTqFUtYM#d>1%;y{ zf`rnra!~ek!RN+Dkf71CzYPceir32Q6=vog6ZG&(^Kt4#&ERulRjH!-EblQHA3iyJ zYN~c5V}rLlT=<8BQGe#jYa5({5KP4pYThcmP5Ng9Z$iX01yp{Q=hdj97#Q2YI2h=G z+p8Mtm!<|*c^4LgBsqTYMzmZ}NoMxNbs}2p_z}!wJ6yO5h8Bk%4aVVgD1ALDfx9Jb z=hkQVW!w1_J};hY*+dD66RutLv(|_eO((^k@PGvdz0)oo9(_^6T)Ywo=#4mKW@@eJ z0kXLH#&#mnW{;=>bEWGsgsJ}XUp2WQy{?~c8Z%ESeO~kf>5MQWL=;{?1qu{a!GQY( zgCy(vslOjGU0A|jYE)7#`&%Puz3&uVVnp=#wRFa#wFh44kM`+bh+P~u+DEn;`7){! zXgx-Y#9)M$91d+;V&v=TJ3v8hC7k2w_l#0kWe zE}_w&Do9Ut`cf7-T5z8i3jkg|ZdTrx&6L8WqRD5gI4M)N^b?M^dgC#Q zjAD{t2|NJhh6W4v2kxkk{`?Z+D=jVki`2VbI6@wn3b@oWFW>p1&6oA!eK}CrGwH#w_ zn+7}q4y@a^-r!~mvy+b60UIiP5<6HZUl_G>so7vk-S;<9gmkb7w>5UIHot*HdCkpe zG=bXqP!>m{Aia#vOCYg|9V6eFymX)|=7+2W64gY{Nw zFmFpDM7vEAU0e&L>DtUb?%ZB1UC*JQUx((R#4i(6_w{vI!?YoM8u<$;V4Iq&R)+}< z*epz)DC8vqQSF#jTHh@ZfcUF*NrF8{enb+i+M|%%HOl10Vw0d^zI{>5hscdnSG?5g z?uEJjMz4?uZz#8(z}$|@U#JWZzM%(ak1!5M8sP{-=O~)sZjXTIDt{P_s7ZQdv=gNL z&|h9LnK>i2MNCZH9<9i%aEIHn0swtkl~9PZkOQ=&@(pgE*2?uUV|=huc~ zu7`J6=Hmh69h5FK7qWuVghpZ=hmU#2Z+ZkX@+PwSn00+bZbvT_>8oJH2*XH@J| zF+A`9`1UmTR@@2Fav)SttT5CNXEE+7<&);noUJ-+0 zvw#5uRRrXEfy5YUj4}owQ)KlHbGZJU=?FtSEITcGF4ejAY?|_&ip*oG88g6pzn{4;@Ag;--pi& z_vwhk=|0X$K*;&zp%Z+U)%9N^5=-De?`i1GI+E6fiIyCL z4P`ojxpO1-#v;#Qy}FDPqs9$LArf(|`Ssq`SHmbQ7=NOWga@$X*QHb5JI>57GAwG% zVQHu;7hO2o`C-)Y_LMB*hP6Lt`>?MeT% zC0|*OFsixCZWRSZT^l^x!8UyPI#&JOhrB*s)`IzK9}+WfbhahFEztBd#czvdhd5%X3u!beiK|DLmTH zgr?IIIiVUMwYPJio2M>AYe~}t#8Um#o=@)No3(bDuUI;tfL9r;CJV>Wz1yyPDHRPD zh=sUMLe0)6WqVT6W^$ontrNDU zQ^lTsqK!iBqs>5)JYp3zRDP8RVU^sJd?}vb9~Ke$Po?O<@1{%(bBv+C#K;A8mVrQZ zX7-k2Oqa7cT%<6h?BB~!X10*-MzV)kG$N)-fim_w(BpU^Gn0&VAeQt?U~*Ih@Y2nF zvRaF&@48KVXOF)}#?+OTpIg__0e+L!hHMwvJ%M1>=56;}Ma2QXasDIyamAL3h%_%0 zT%J@3obU0-fCyO%7~Pifc|fNX!VrB)sPW9e`w+3llI?QvV{Uk(?*|ylHh>vyRlz?# z-4nLyZ}!#C0LReK5Cn(?0(V2ksP%honiC2DDNikG_Ct{tLYVCJH@}IWFeQiL;)sZF z`;f<$1c6c$h;0qrEZW)(cOSVi5FIg zgDLe(C(ULl09kX~%lTnyAL}&+gok#1fr)f2s{WWiV*-Sk)0j%j->nx?2^;`IZ_c|x zFEAJ-6|HtDN$6Pm23kID)|<;de&)M5Ti7Z%e*JE-P~RkMsvG%YTG@Z z^9|;obK@v)wM;@bJNJ!ilU|k=u)%fur@7x{uhc zh{@dC+;g=?!jJhmWI`SQ6+1ygBO_??M2sn01O)dJw@7$qQwo!cJ5af3p*XXUlEPMSz{RJK*|z{wo-q>yk`Z4L4^dF+bGSG z?|;G}uq{5OAK&*OLEk#@!yh5fkp8|?rnIB$Pg6#vD{0zc%QHGAriS?4%9VXTL@*Wp zT6uU;Mr?FpzNOxNSqx8`OmHrpkqrOCeNr?}Fl<0=ah$F#a|5eVWV;guRglqLf$ zbU&+Q`CwU_se;*93AGpfW}6GMJF8Y?^Mg*5&{pBb-MNy}T(BOo3Z$E!-x&5@A1w&< zrdR;3H2L#S8@C2Sr6O07I7mYOYa%t~pK=V`Z-W~~EZlBX;V-3okl1T0A2g@wfPTqA z*re$uIjHh20dC1L9ZI^T$=;W|(Mq0Fc)Hw4zGBNya--YPHLruDa@ie{Rgyl~9UF>+__S6fqUzNZzi$Z7qknQbGEBFAI%pXs$+C%K zh-R0&Y_KW3ZK1FPEv5*astCC|!bcU+U=G-Sauzl~q=8t{O$_NyVJ@8L$B+dd#gi7fC5 zLA0vyRja{#@JMEQgwDAF`BokIhVOgczhqeXK}iBbxk|KGTgE1=Azj@&_W2A4LkwpUdU_Q*2sRj_-c{yW0$B86B2-|O=9-_O-oH<5L* zoz9j>iH58)dOk$CZ7R#x80&33BGuZ9$-eigjuOAlP!WNg1iNuC;?~i4Y-;kyJqT~4 zX10*IxIow&t5`Mxj@+Q@wHNjgC?oYh6HIdf`Io5chQrA}if~Y=MQU$uTxyh%*y1Dk zFdbvv>D)>8b~sKD_2pL(5ss}TCQUs#`+y< zKUQJ5%-WSHIqp+}H=lt+!4LDTxh>G%*c^7v!#OEUinRXYqu1adofL2b=YwVD z*N-DuC*q%yhLxY%7%5{i+BtvHq~l#rd(0z%+dXXKv$njpx4X^Dce4#ec7_#)Z$yRF z^`t(Ub;Q~Sr!e%g&kWYPyK?B=?PuXpDKkwQjZvNVg-MXdNI1e>&S0GgW+&3IhMIt9 zTCyDbM_l>eK(Gmf{#77w7vbUd_lV=;-5rQZgzRlv@t~QwrQfRWU#v(pQWW;ry05aL zLekUoFKdH|V4;0b+OhIQY8;dkD3#kBFCc#^d;W2})+oxokkTh3pn5Ai^pd(`HR&I; z(K8VOkNlS2WJZN*wBufFLLi+Tx z8;25)Fo+h*VJq@&#;EAkgih>Dz_HhZundQTk3XdUk8F64V&97u)cCi!u@Ucdy``n# zpHZjyS2)>3vK@V~BOy?efrL$_*4l$>Pjm3>Qr_Db=^6o*NYG2?-&v^C#snAa)%pDF z#>A}Ne+cD`aTo8QvcDUziq$+=Lju7Va_R!_Uv30|Si{p2`*cWWe`Q5RAma%0lc3 zMNJ~Xdg~zFh~A35XN|31h++iXLS zhk}O$GxJxyK%01L9t`wS>9Dkn6;$n+bJ_D|S&EgX&^4CE?~$&rSE^->`izQEVru5O zsDKU_MmDyW^^S>IiPB9tn+9A~4q|@S=!VyK!C4+87bR}9rGt}n=m`BCnb9>g-PIyu zEksv&Zl`O!wMo?6UazFHKIPTb7OrlTm$Go-2frNGn}1@+4I4)tjA1``L+0^nh>CrO z3({91-2j{r1f&L7nTalTzlttM4-~ny|3Fgd{5tQ|w!E;^=&Q|77F>`QETqF^E(Cl{ z6Cwv!p@$MThLZOKCSL-fB3u@&>9qz_oN@{PC5BJ$p@YC7>>%QdVVekj#;Dao$)=km zE{-=zs@+jEr=`tynCsnE$udM0<5C>LqANwW+gDx}ImZN7a3|%=v!3))cLCBIE3Esz zJ+rSP1vjYgitnuC4{w_=Y`!Oqz5b>HKNxq5&#p&8lNW#L-b0-v`-4v481SohswrT* zN>y#u6;7tP?GKw-6Cz52^+U?sQ2(_)=A<`u0d=Sx(5dbR9EQgQ-4X`TNZ6pG~MpOo^rsjY)fF^?UOh<%^(=$h^q@%oQq{ z@*z*xd_d>{;Vsv7m;HM2D*_g5zrF+s02BZv5s2>V5 zL{h@Ajj3=&J)+}T1cD(rDG~MS^#L=MjpWaGNPKRQXM9xBN>nckv4@bNn!}+ZL3Gs&F8J?WcuH*PK|R>+CDzk?E*kr3`C0G>uqnH@G>qhFXDA~ ztZMJJq*102)MGHWKE^3!>iF0~f-YFTbg)4XG*F}6g43guzD+*gS$Sd}bcw^Q2|r<3 zsGyzPyNOK`f8>1A2wZ4i2mm2NvU6kXbJa6R0ydrD2ZJUKYT!8cZAHkP^|}5R_JPl-dLCCt zD5Yw?s%UJn#Sw9+$w5dY!*8{`0cSZ3;ruqhWeiiA!xL~_1AT{5kf^~LJMx2lc>ew#*l4;5744+_ zmG5{t@O{;#tZB7zIOOh~ymU%`U{}`0e2j>(bbQOsvy7zl2T7Tyo${RR%ZRT8blb&S z=9~dOnq>O**g{trZK-$f!6C_pvIZ&(O!RW^AfwXS0^LK1^tE419NZ~{R0Ao@JEGin zVF$NM%(crkQ*SlKhmuonGbS7ZlPA*EQvI)@U2C+2U0M0HI%Asf--f(na;d|HP7?S7 zKVue<{C@zdKvlmjCq9G{IoVIbiWE>PdSB`Bp2ziVQ50^_fd0ZAc*X_xZyqY z?)C^Wpuv+7-7$6M1U&TCMxgvCo?84lrt}HmJhKFHS-44s9@I z{EK*W)JsT8`w3GYeIMh;4#&)S^DwyW6woOMc7E^z`i~xpli9%8bu%#HrD+&8ejz!M zjOfrF*q&C--4SIcFr-xve0M4x`xm}|F=L-Z|A(GKy8Uo{tX3YBURE6c{wi8^;Ngvz z*Fi+$%@(&}F0H84Dw5GFArlKo&LAZ5SWQ#izwlv-(wYrqiv~yz30_6Gi06*ar zu9j&a=F*}Q$t3wuaOqSHCnZs<1ewwnmr{`c3KCxuk(k5*c_#6L6WOL|S|lXt&7M9K z5+TIIKZToiA%|QiA&Ja4au81{SfR3$o_(z3$Vk~ z8sX9s96yr=iHxQnCy04Q1oeIiUytucGJo65XMCZAJEo8lqergd-e0MbLFCs7-z|9) z?m8X!UCe*MZ>e`QZ>+)+zEKh`h{A=jk2hsge*wJvRFjQdN(b4!N=O?^%=?y6OHY4tSad*Ny zvF{+-D-ym=9wZ-9+V}q3SW%Rc1D$>A|H~i6KUd>L%C|?3KZJETD>3EtWGDpxUi?!J zHMIYa+#kJPZO0?;N#A$e(J|b+J|8>vUwzj)j=p(A`~Sev_h$TiG-#2~zW#2(AxPS? z1bfOQXzOCY%a4r4k{zi~t9AHr)Z>^lZw3a>{Dw1@vX6a_{yiQ?F)`v6PZ^DUm(SqE z$+G}sJh}`Uf{8sRV%4c^&hV=XA3{+M&h1lT#Mr)=^X?0fn+&L`*3$2p6CWyJ5ndZL z9P>BFanHKA@jbNfJ{&O_RS*zk&75-xFHBts4KXt5C47Mp*OKGl?b8kI+D#yaZg+?* z)%fw1NqGMA{m4DL8jlTq8P7a74104F*z?s(_+sDB7&vei+(OIHuj@E+?@F#qn5y&= z#*Z6;zCA}`&P$UqcV#?Q&wCbMf42Z#yG_IDpWeXJudD}Os>8fzhG5FPj*h8P8h8Wuti2|uHOE9SaG*qfIc&haTygTnPJpa}H+lUY~q%LK) zRui3p{4K`DRU<`Z9ie{}Nt%r$72Uw+Q_c;!y6~4IAgagH?yNU|>^EJT`Y3La*7? zfT0YjNjY$e=!4bkm!N~r1&zYS!$a2?E5CXUy7Fe&d3HHy{gz%MgP5CxWM=pEU3@gwoUwkt^d^+UWmV(vsw2;mbET7Y9)_!v8>4_<$5I{aLfC{Nmip3R3MN5#jy!IMckeI6rb zujJCsnzx6e$DlFTe5Dc#Cy&O_tEchW<1b^@%;}gg?Fqa-`we82RASac&)~Ud+hI{m zAv;Ux2{@F+ zyCFhEQX{tikb#GvABKk>dKP^;2cqWE@95d9J64@6B5z?tjo#Lp!52zlDL9C}&7-h@ zJbUk_&tdtIWV|_M98&l^=rlxpkn?y%yj1tD_8tg)FL$&#w|pcTOgvy_fuspBVj;~ka9q-#NU)olp-bGy6_g-`L-Z=MPrnh3++b; zv_g(nOcPs-c2!oAG)sHb&}46`IHun&wR3oolJ7y;kj+EV4y~AVq7~SGCBq@7T1{s1 z_iuV}#^1tiazrakdLD*M`w|DYuYj+cFXk_L5jC+{8Qo4aeD76vMoSC#&;O@>bK=HRyuJJg zMD;}o`6i^a_0NvTet$X^F#XgPe81`h`F{SqZ~LFYC;t>e1s8twJCq6Jh{=nANuq^{ zJhMnwhKT`>aD%X^_}H}g39O7sz;_=`#hPl@%fK2X74B*%00wwKYi>;jEx)$Cz%T}%CqrCOIm4VquIzo z*!}TF^zAVbFTV2>ns(|AC%9t9hp%G#OP^r8q6>cbXe!DNeTVZ+U%{y(+o3;k(0;Xz zbx%$}?^Q84w)+d1NO@bI#IKg&W{0nGeE-o_`)>iB{PG?6*|+WnGJ%YXe>&cSj)N%D z6=Q$tE`+)TP~!u=-1>7}Y$b9Nwk~)J6DN+w@9AQkST+NT_ohRXxgFzP{RBFZ8E1Yz zgc_BE+Rrx-NmNKb^aCc29EqtPu7~gz5kd@j60eSHgfd&)@%SQWOU~efIh)9{Z`Z5h z&Y^h&Z5gHSO5c-?4@<2~#bwQT_&9lxv}nd4&!MDjGtq|=abm)kvmU{S*+0Tmn1I{G#1ZI@RjjO~TVjnuiyL55wpwuOqHV ze~SpA-?by1(%vpoBJQbAWy&fner!Gpsra!SX50fb7*_%z4=E@1Va=|+pdE(<`ckZ2 zxfa`Z|BMWy6^DK~fI@>7sl~C_eW(E8ElRQIoplK7(HtILB5e6~3BEbA2T7$?B4~@T z?1T5PBQB?b+E)vV20!!~E5e5}=iucfTj5fZgSG2_!MuKqPH)+ z;S06wI2L}go_w?x96x> zkK2y*C${1D1DA;Jd=VOQ4T~4-K(pQ+*tqfpYN`uyKJzq=UC4r{fx@ZH$oH{%%dc2D zZ#=g>>Ye4-x%)Q^@bG8=}zx1z~kS4hn0(dK+?sP-19y; ze+j>T{4Dw9hr=1yaeUopr05{RuESH9Nh=1$BUmoFCD#6MUV*@Wku=v1P-z zsFqeCHl>J!vqNT*w4?XHpvOG0VEWs5<+ESG)4QU1Ckx)2z7&neHNoDW_M=2sjjKiH zaNx`tIsaV6KWe$_A7zUwC>R{=rI!jZUb8BWN(VM^PBQ`a@9$xXzTod-}#GDjK? zdaVExX7|LBXJ5mdMc?9Dz7aL$)ld^rZ?L4{#QEJ=e{2taUhzAsi5P0#(Tvw;EJB{M zh3k@bF=iz`-@6HCPF}!ozi-55@?9jB0mhmdk{P?g$t52rGKoA9mEmV1e0N^Gj?Tjy z;fEOuVQS%zooj!BR$776X{9jVCwZB+!Zq+sPez$Q$h8WnRdP~Zi6Q5eWBuAg+pu=U3vI2mz+DsuzSIK4VW4SOKS&fR?isW<0Bv2OzZEhG3ltiLra}I_Sx^kQ`NT z=cyqU*`7_Q^>ZEg@-w^Ov+?Nm5~`#P=l4bPH&MC5ekL^~h8- z@(hNH${AOSQ}J5UH|=NIFzNXi5NyP%v&AI*d@Vo@m2kck zZ9`}~yb@1OA3-m@!NhNuWA%`Br2N~3k%QaAn!Xbw`whjywU>da6X^TOOPJhw63$#J z!dJ5&#;fm4BW1#26ea!yCtfEm?=QKy94%!nG4kC;c*u@)2IEGOctGzYUH--57dZ@VDx}l#!3W2%eDh{> zsxBaYC*KT>6Sb17pmlN*V8h}K5Ro{Nk?$+@+n;fji#xzGv_C#w`Y`l0M)I9G(uR`6 zK97igTWbt;5_?x=+Ks-hiEqPEG4W%{kC+}i4SAY8$oMk6a$zRMHysWaxf=>9N-!<_ zMQF@gNJtvq_W5j>2F}BCzCfP83&aT#`25@Pcz(p!==bb&_@;Sa+N)!bxnT~HI?Tnx zo`><(UUFZtExk)g!T;67$1vchZJ0lkaU)BY5`NXXmD+ zrE!Z@(Lsy0!FCp6-1wkVuV{F?JHbi{B7wpmeFwIIyPGFG{X@{IRU|qM?FuikJGu_+ z0#}y^4D8t$UJ;Gq?&^a{PmF;VDUiZjw}hXc51NLCkO=2GkZ@D_$%tyFn9U{xH0cO$ zg%BNk^nf$jE%RxNo?V;6&D9-#5s?URb4TwH{h%h9cI$54iSg!w7U7K%+Mzk3nsp$V zA4yQIYVbJYlzcW4XLN260Rzt;0|qpOMDBs6VF75>s~-YLAsaQI1A<*6(5Y`TcsO~Z za`AwVS_-F#7UC^)_ku{Bm0GEU)YK`Tsup$!^$8-X4Xf#@){AHr0w z@FL+ObMixEq&M0Q9f>F}vM(Tl_{$H0O`1bx6{7Xpj|C&n;iCA+`v%@L9e0XT^#TnA8@TIIbN;b6gsHhG5FPN z6eD_2Clc0fkcq5t3T%vEPfzq5PUBXFjw426VDDz65I4ZHSz83DBybN6gRjaTJ%+V| zr>hs7WVBzp?cQ{THm`^d2vqUVs#6aVmr{haZ3C4o0HcOQ!-*7%Et@w%=MmlDEe=4l z#?EjL>wv-iTOy=Y6r9y0ojx)Ood zI6HYE+TRlbr62nAZ%w`fUwHTiB0RtwU4{&RJ5P>iQZR=3Hbwg`^QQ1}^~8`zhr>s#K%+LKpd)^15)_P}R^&SsJ7dV0 z9+2_e&|`2Lc)EE*Eu{lvt=wQk8YhhVgNFJwQ%47))4bM`q%FEl2U9D>O7xHEhYkTP zu(x0jvP<)DL3;*0!#bndpnV<*0Y z;6aZ2Kp$x)ekD zwt&@W=E9KXrF2jzZ87>a<5%o2-2r!!N3Td(g~akJi0})7pNlt+Wya!-u-TB(u9V~- zUnoNU<@3;Zhr)E`Dw;h!7|SMf#9OOkAPet`w#pPt9zO#`$`Bl1`6519c^+H7T?T9O zj)?MB!fc^6-6dEz_aX+rJ{-}cY;|>YLf(lVF{J-1h@3J8%Z81?Psg@n@tQ*L9=LYJk$J99L`;jgQ;QY<#d{q zQO{!EzC^SeHw;%keHxD~{04aflHauSfyrRv(iI&%N|6dA*qXHs{?5LnylV_2&wx(B zZBSHQh9E%%`uO$b&U3&=AIkbvJg1FH@v)~p+B3C_t!1L(NB({eRmPI>^X@h<3GS> zPj@Hfh7-yQEEqI)2;6FAk5yGw+@N9F3XoNE4X<8&5v_eAu{vWdvdXVPpt2ysD;QS_ zQZUMW0zwqQ-0V=ahTd3}fy-%fw6NwO!Q=vI=5L7cY>&RCFtlx>!xfVo#QFJX*FK7* zH98K^N{ns~6kqxoZ!X!7;jd3ew6_a(eEI_B{1A)o1A5@Mj~>GFZ!bq$wHJDYXQJca zr)+W8w-uJY_z*TG`C@EeUwklZJbsMXhR;@Cz~he&!pX1a;_3J1;=MO_qishErcZqi zzZ|c`=+RxlGZ?vv253IPy({ti#ga?-Bxyb(y~6NQ+A5@0q!Bxdl(8N`IG-1X$9$iJ zkBp=bVlPVN1z0`zGN#O(2w`<0jKtPC_v0cg+` z`Ur+L{jhafcg){-5dqPi5#}yKb&ckRJ^D{U^Aoy88VzguY&!Uy=Fg7V_Gq3{$G*Fd zpzoZWoy`rrzac<6b?U?k5Qnj-aQ8v5uRGVT&O$ysZ$Ezo1_VJu5}T`E0DN2&P&j)N z!$v|3Q3V2my@}zdhnXjazpo$M+&xHPN1i59A}GKQVm{T=wt%IDq9Zfof|xIcUq~oX z)dHA!5@JXNBEa7tG65+7Ogwn_2f&#aPevkyBr11=ko(bTSKYirh!PgU-OB|$+O>ol z;WX07MPf1O#}%th2x;Bp9wr8C*Smh&Z9sUxG6ZX}`(4 zjfxbI0f7OW`1mKG0>t)llZ;iSCSmPI(gmM;SF@Q1capALh^R0UAu5vCx(m>hVj{RK703}B<`1*h1b1?cx3e57l1|;7 zBqR+4AUJ@;J&&X-64wE~zNC;NBG=1@n+3zo!vn5j0jgBhFrO%jvEn6O7aZ`-1sgG76E*T z|J~d?h$!R3DkSMSz#kI61qLGz{-J^7J$d9C@g>&;K`kNvpdTQCrZGo`dowJVyH{Op zY6}s^OjxxA2sNU&U*CZM@=dhyZGpJzIP?wc38hql(-{}=UgU?+m^Jph@kx15iAzVE zux$HML^zvK5_cZ^Gcs{pd-84CW)Bk( zqvBfZ2^fN+U^sjhz7O|?B&!lNR!>ZsIuwUKd>Oyz)es?9gdaA1gkNSK!0OY>5#=Jj zF>9kp!pDW3I}ki>IDBi!waOYSdu|K9iCu_=6ZhhUw<1xb>W@B`FGKiHf5@{dP_9*D z(&IzXrgK~9&wJvB-(Q0iB{;BdKN7B{LfvHodQ`=u-8bK$_?_R-;pOMyf2ka^_kN4! zQUl5>Ey#{5!xR!vE>_ygV;i9CD6=UOLMLM3#gEa*Jq$jsZg7*i;}l6huSMPLdgb86 zcW>bFZ?9oeA1Cmd_d;}dQ{-Mbf%YBSA%625JpSGi9JP33#`BM2)4LDj{Vxxp`{ak< zE5BJ*8IFIBc29kP#2hi6dSwbaHB)2fhGXy_H4cMXhoU&)7mS^~8Xbp>f}g^I4<74* zxWGZ^z>mS8X|s{4YC?n-F_33{kB$TUF?HIv81r0zTsoT!Q|U!CAwq7;{I_r{Hw9*= z&gjzY=9I$@0Ybkui`9&c*}tJnU`6&U9~9$Jf*yN~f z_Pp)rqo_IIV}^z4q^XgY2vmX92PyiUF0l;ngZ zJ69mu#Q;9Bg-#Ly(&^!zC_26!HLZssu>3U6mU^RSTYv8P0=@?43ViX|qBpQ<-gH!k zcR~DnFXN=E3RiX(;fdF0z~xLiK8X1eff6TlXypfm*Cf0>y(9dac7$&G1vGlN7b2q~ zabaydUS0YWj&00DxFii*E?z-syXWxH3tf>Pmk)tYbBrC;4MJk)X*4%0#Q!NA0)*Pz z^w~7bsR-fn8Is>PT>ZTMUUwAwo(=)RO~bo$=T1EJ)KlDC@qaem;QtEsgrf!I?|jbP zfF}?_M#6(+JJ9QNwYvZOy#xmb+kf5rP;pBQpZ|JXJD@E*5-CZWCLK2u+P&fHJA;0E zG#(r+Aoog~Fm4ZxQ))QSxTMAd{cR$GmpUpwXkOc@RV!|r=IzvoHWP#L(bJRAuTghW z2#DdU^2PDYSWI+!3}NapuJ)F~7s*f-_dQy7{2psE4xqQc3sQbrinotnLDi9Sa2nhU zM?O7<_YTKkYIi@JS@1sIE2)HLZw&IQB=B-^g3OJF7E_mCl4b+m-Ik4EFU-c1J$>+D zpMKcl)eBqKeu$&f`5e;Yt(49RC1D8tFC7w~cO#oTOI4!9Zc4*h`1?=FW`))fa1y@k2s zUqq6r2u=De!0T-jG4 zF$~{-@+{8%_!>U=`2xm#`W*`19*1M?UO?-EOMurufpX99NT|$$XREjI<(tj%L_}v) zjCc{N7fr%DeIG}*s|6+EAn?|%!N?Qq@I%j6@%EK{;4gRv^UDIUeA#ToF8B~<%9D^& z`3N?xnE*{`HHinyEz|JQaW3Nzj>cHxuegE)yb|^{JmsGDqyK%15C4K^zuF0Z?{dKP z9eh5wz5PgC=rp`HTYscTE>FP=m!H8C(UXYCCg6Pi0Dn@us}5%>t62wgT@54lMG`T zkus>&cqjt;lDM0K#m|hyIZ+gzoB1-jhSi{-Q+tHIy%e9lHV)gK8i9|?{PE-GuVe4x z=P>{4RKyg<2%>~%t@M!$U|H^5YG-Vxze!CXSC#o=V!aNw{9(eD&S$W$?_!pTXnY7nrf~D*8=+9xsh-g=OOg<7<8tmVdhdKKXkwwC}4J|LrCW zkncpFzVq?WnjLu6_c+=N-;1Aq?v00@xP)Wd#^RH;N8sn`ftNp+igyP+ixguuMos$+ zQwN12C$I2dnT9teCWgyfxUOOLX?W?j!&s+cKC2ym|BNr!W`{ z2IF3X3J_XjPelm*OV_Z-$jCsGCQZ0~RDe*p#nLQhJbvm?3~t$*m`Z@8+!+%C9!8Cs zPIusdwkDfl5s(7WLJLJ&(#Pu^5N~i$hK`7uuED@rrQb!6?5zM6Es2%U)s1-ZY4gguW( z!py*focIIen88Heo%oSNCy7(?AU^FTO5={ctAT{2lx*vv(V4liG*$z-#z?}V0RciW znN9d4;UlzlYm0t<1MGY69js;=CM5lHgP9wqwg92ff!PTaS1>1W7N)d)80YdY;UV=C z2v*vH$4bQ5F!9wmuz9pUzpbO*5$##kto!R7GPRuN$=gNUR{`rR4o2@nbuA?HfY z2JY_e+_PzzQvpKv)0U6>6Ae%RD#=Gyni~M{#REzPi@;`n9T=ylC zi3A1)aW$ajWo4Wp@UQVNKAORJ5TM2(byf@Qx@c?tppF{P)x@xmj*jNGYqxsQ#l&c> z_6Jwrg_Br~X(2ChhRrRD=aIaFP8Uk2X185Qw(E`aqGJYax4rck#dh3w%yBLi3_NNm z*!oo3oCWWViwXn4`P*>Hq6J(u2-9;4yq zIL~npns%swy_1Cq??)P1h>#lQ3FYxvp8W%&om%0sz$Z~}j3+z8Ma-cfEPck$!F0aYx8+?tDHG^po;x# zT`=)}S(TT;VBCa$^NzyVQP^|i(nw)SyI=L{(FMbX4u(#rBSuKQ$t=h}TANEv8Z9xN zZAJHk1zoRz)(~5XaN`WJdQgMxcE*61FM)(7hMud9HrV&xe^Bv3yNS@++6NITK&Wxf z8Mw8eEr}AolxqoajD`3wL)S>7EtOW1KN#r%#(Fp^GN|CL&&_u=l6U=Imv#JyA>v0w z-idtWQj#+D9{gHUS78fkXK)Q1y4Qu64w6wgZ(nby+~d`5z5Ld5D^lHnEf$G%go2L z=cd??G8l~eA5zd7P0(mHIC=6U1`HTz-_Kw$7>s`tO-&6qAyIsM9DKZe;Ob`Uf+Z6D zb0X-U#$-0*)amowQs31jyCYY`i>us{JT~!MNXW)Lc?W zYwW3`V?byNNL*YTdiCm!xP+_rvl)!LN8PSr|4r@%KRyUN=Q_Y0+ELxg`duk^P{>1MN;l^XKa7YV1FB98;fsm>A(Fm;k9QK;D@5 z339%fhmOb1=(2V=K2*JiowIw`Z()OkAqg1!21g+V@*1Pv?u&ST01*VVgB=|ab%)Ri z5Cn8kkx>sbUwq5b`$T?VT4*rJX8n#e&vb;7SkGT6k zweli&fAjU7Xr}OhjIYG%oJzdc-IqJ=Nkq^yD^j_07z_sELB`A`7GeAi&;janU77zf zRG9zQ{rDh2nF+%VtADBuTcmI_C>F#)(|%uh&3NQ0Uzf_@cW+Cn9|D^N@pKIjgkiYk1yX#swDq75GTQj538`=QwrZ=)s7Af`M5pH2(I`|s>V zP02oN$*Mr&nxC{@*o|*h9 zLI*qsci|~)O)f|Bsf8FhCkA5CK0N!)KF$wfw?Kr2dBEMv2k%XPliSyBL@<7x`wUK3 zI^p7Pvk@Z`W8cClNYDT+Ce1|ez%2Z7$r)e1*9ITIz7aS%WM(Jf+voamet>@u96EIz$If3x;?4!!t{K0aKt^f`o@pyU^tca^mY0qA zlLydDP7d9k{v zZ6UGRnDOhY&*6jhmu;Kc>v(bEAS~PvZ`)@4x3QXG`jc)ZvCH1V^!Ik!w}8)Q48RNX z_t>{?C2jX&OrN{??(|;a20;J4D=eJ(`DdKXueNX9IaU&O4O4l2R|!9}@k4a< z_d`VQhY@on&%T!;z__`Opz2tLZByolB|ptY>HY-UHse3bmUjoBNt+QEK4ljEXlcfF zPd*FLv723_U;5%_NDtE0sv9P3;G>WoOS|pyze4eu58$e3i!sATAtvMQjSZMm!@}*q{|Gr+jcx}Q z`xci+8UFi=N#1V=o_+S&xk*V$=-jz8wr<~zF{6ju57|geOoU7(`$t!bWc>f3vklN$ za6H^xke-o_;?hcV>d@AHl)+%!Z#d@Gr>_2tSag;mm6Hp%(yptEZQPt+)1DAswBnsl zoOn+2ly$^q<%Ek~G3DZW{K30~?<9N3?U zgsW#Ea8_XJH(TJ`$PH(X#KT2;9Vap*Fk~FZx%ksKbzOiK!3r#x@i@NzADsG$c??9&&rBmEGX6$iR%W&o5RWxbwD7rSQz{Y)9NXWkcQE(%; z!;BRhe?hh^5{+G?SogzD_S|nEBQ`5xpRw?4r0^cJT&#!;mZ}V@N&+^j(tUl45-A)ZOLfc zt_egiV%y5MF>Ttf2x#8|*N^T*I{C7y6L#Q8k^s%ZJ-B=QQ`FSda5FvGX2G&x>!J^! z>GTSAef2WRwONQI0#nV;Kx{tA3rf>*{QNPLNPNgUy4h}EM_5o!6kZUtX<7)pN>Qbi z;^gM-;Q5E(>i*wQ;~s@zPn%RrKD+@(^OSI_zJN_f^1&}ZgOiy`IBU+~V4?}p%>ux) zR^Y=KPvDz%m(jRGW1Ly}GpqrPaDLAQWEwmXdYAGTnm^N3*W(hB&?-6#+1c5gZSAnH zY5JsLLnl#kxcddV5_(Z_30$01P%4$&yL0)5{rGL6fpYtRup%oiy-uw}$>nv3_HKlw zhp*YT<9?R)BC ztSZ3yGqJdIB^edEhHE~Kem4VA5y9yB$P)V=27|%4pU^;S(4mI>@{EvR(KBzOxH=a< zesvLnO(Nju9*kzuv=&j1xic2v!0umgB*TcTZ(qdRz14_{Zh}B{270%ijwXFO!k5@F z+vofOQveTZ-`b6m>^=Bp&ovzW`bU@`M|e;mLc*IO#H;qgv|hq4+z{=K+s(02=!N zgGT^=p#t5YGeYg{2Tzp314#Ok<2~BiT^pclOW^ex z_NU(|I`G6QjD7QcJTaynPA`~>1&4KrZXN_<*?BBjvL2h4E=3MGbKM(n;bP?_e6eH$ zwtTq)>lgosA7A?kWo}|Df8`U@Xs_dkHK_<_6b^s#-9)tv0eD_0+PRSkaGM=-Wd0l& zo4eq%cQ!%pbq&*I{tE4ZZ8(%&*A6o13=lg9;=K)Dpij6AAB=hwu|`jXd8*;pM1hTO zt|b-}r3PPpxCxcH$Fc2VH44|x!kfS6qj~cHh@3o-^z}+y;m#8wFfi^h>=YvK+q%-p2V;XZ*Il6uWaPbGZtOMitVXL+PoY&g$WbUhGLA`8xV4fPlhO;0!r_{+!KSI1j{K1{N;`e)!7ngF8VBxo0y( z`_k3~cQp0shgr{!KxDWpj8!GbE384A<}HXdU_pLHF0A4(wC?VQ5dT()@^67arHS0Z z3sK?S(4}Kj)D#p$pl)UVZUm?%hJWW~0WcFmLCH-nL;E3JV7gWU*GA1SeDEZ+CN@q< zRo&F9tunwrsuP0M0`S!lL}N|BGb4K;$U_L3TXO^`g!XQ2HK^8mp=A>fRGAcL>emNv zzWxweH1#3J+|ee&8wPv*YKzv*5$M|#E~YAUd*p2>&&k6&7+#Y zP+fzkmoCDVX(N%|bSzqV%D6Kae-D2uKxp$&VPPRMGBP+97Z->4_;_4SOb0IQg~-PX zzkmLV{p{;_=o&LgAHi zq-VsET+#)d`=;aVU(S=9)CG&bdk%4V`4C(d30I?A7h~knAT-f&sW}YsAD(wo&d?Rq}=spa7_;Xa2S@7CBpJ497 z&#^A45XZJ1!Aoy1Mp3yHYrlRMV;`G_rN@X!t+3+QZ$Dz_%U>gp{69A8jXba)-g&Ac4pi14 zfS5-wty&Dr#UrS!R6*6;3PFSj(v}Jo>WFa8xri@*If-dAJCZA1(XoFf-u^WKN_{+5 zT+c(yPv4`2*eMfNeuQuO&&HE0p2Wo;_8?JQ0A-{cCx1IaERdU|q$eUF%@)u{R{n_W zfGhZ9)p6VQ&&zN{V7_!-DTP zn~0}~h6h$*mF*M5V*>|a)YC(48~-W_bn7m}lu=_))8}b4Bf{zNxdC`#$rTK0S^=*C z6XA1ZJuG7dT#yzYpaoOSi7oyt#fu|lPj)U-2v;G9C9*8nl%I> z>*`F6eLKTS5}S2phHd-sdjqY}gI=+A@$#`QJXvVnJEMy=xc}4Ep-w*5SGHfX7Oi{9 zst)O5Z5h(UdN7|}QEqJksdagB6?c7IDy*l^=4`!nR2r{}!+2hLgOneFMSzIE$%l{QPI-}0y2th)!-^1JJd zoyu{aKVQ!Xwr%{(D3*gdO7WNY+4w|Yf1ICX} zH+xp78Ry!%QXf4Gg&F47E9ug(&mT)jh@0CU8)~_e#wsQ&;}7m%*C|WQv{?pdbdkI} z+zuv)76y!bZG?dWROix`8}c`1f=~Nah6XAs#!Sr2P39IBdJm_|c5&^=-xL(a8uDHr z>dks&PHMgbU5sLVek7-8mNQf=2!P!MudlCL8Wu^}oeehQ@8i0n2vs#_;y*je3JmTB2SUfB&YSX#SffUnx7vyR`j--s+VU=Y-Zr! z_P5jTA^*u$(yR3@>q0BpaY_e;koRkc=T#vW14E2l5zuW{|8eRfD%VF?MOD{a(D{Y) zNx#1J;j`;uA{R6Bg!hm^O<582x5G@-f~ls|Hx^+B$%muOudG(0H z$550O*Z>WaVw*S6I0{v4Hmjq^&X<Uqb*w)WF^3SF4*n-M-zeTL|KgF69*tvZ%fMFik>nr{oL0AahnaDe^<~UXj zA+vjR;`_$AB0DZKQXW{|%u;2r9(*gtCa`XKrqAs>;$=lQa=*-&O-j1zBb*gQ6%l>4 z&tRIEmjxA5u7EdN1JZopRL3CmAo{f!lb;IHBPPiy3ObJdF=LJB1w!-GxyXZ*{8zv6 zbNJ*+Xl0&|$)?F#dt&eXv`Tls1Ed4Es%vz!1L~=(p|^|Gg!2AOJLZsJmiBcK&3K<> z_39{f;@(cGj~6sF=Hyu@NC3W4x-6~#3P?_!isp$pWO!@v6=>^QihP=7T3x(I_4lg!lERIT@T5v$2wpERt zueQ0dbrd(X|E=IIf7-E%F2rcZvg|~DtwgNZT}Y-QJ8nbGe7p56F5i9yMde)a@ODbg z)BdYkF(F@AA~E#VPnHOeB2C9+nW;8Y+;8WgOwKn@RxDm$F1EKX;o2n zvyfs6XrmEhBi8$&iNO|;RiNWN{?a3}V}tskV6}zxiApmio|2uRn>X- zzWSbY=;eyP${-n~$qvlCbq$l0q`|@Hib`1A=ruVL{glrQ+!<2po}b48y2$9aOgV^1 z%r0mS( z>G2WMo+1;J#9AksW|egULm$7XACC_!wuOck%Ucr5|5v^89o{#n68w?r!~4flhLPT* z8@ie`=fAPBV^OqZd!p;F+!5I6+y3m*RiB$hwdmZx9b9vn0jn5 zAPr9(FY#eQ9`wjPKXwH!7V&s~na_T76sdN5sq|y9&+D5P(wtP$GhJ=6i;RtxP*z4g z2o4FEuF&C_P>zeL9anc9YrOYcV~Z#ch<|Mf36JM^cxZp-be(uTr`4>YN_z9K$rOlO z(+oUaZ${BstP(BJbm1a&mApm3VOdFl@=msLJz9bBG2OZBEe^tc08!U1#@|s1AX9TY1UENPZ!Yk>cQ&3Xd<1Yf+cT|z$)mF))MWX?NS8e^*6 z!$ID#foNDTa9Z5EXmP4`DaU$jk>zx?PXYT{I#d@>zBT2h(P6SIp>1@=7 ztnog!fUqZs$>n{Owp;6>+Tm+3+Mq!n9sHv|7b_TPYus!1!l!%fAxP6uWb8|KZjQ*# z`zF6ZbBLyGctnH?RIx%9cXkmIeZz@5kT#-3k9z$J+tT;LwNvB+z$#?qX_5)$RTAGg z04*L1#yVp6gzdWTe!yMInYR@oH)D}D;B_I5e9)DYcKI#}cDE~-Uwd(+@)g>S&+G0D z+uS)Zx+ncXNaLd-&mKDc#?x-|(O_kJUYeY=iH8RGb*phCZiEF5-@^|tjxIXMTPbZ!al5j;naWtC#H6P@Vi3ZY3KZE#378*zN zSf3DdqdstcB8qM9(oNX!svbmH`09H(44hSYB6_@Wadf>?7ht=Af3xMSCNC4tC7Nl1 ztnC(mmkuWvQSs5Z&60S?3Nj=+Z$`s|^t_1pRorhG3B?Gu2VliI=s07{v3~RnQuGKV z)*lyFu0Om_!8;XmsH)%F75W*aQ1W4O;%K&%E#S?!!Fv9lmK$uo$Qkq_ffq!4o1L+q>S^0T#m}aGh>PMO#;?OQ|*vkgbfM$lZJ+M&?=@Ez%KyH;G7YbXOp|+a&de$m zMU|s6PZP1$ys}mZsKH~NiKtyDON8F_!eAuU9$Q^vf^hF1>zBO3sz%0uR1ONUdZ_jz zwf0xBxDA+U|7%XE2uTovKSDz?w8g~FojXgRiA0y2d8*9m4w(3R-0;#@F=OmwvQuK`FkpIN{dh=43&S-pus2aJVS6fRX6tp!t1%0(Ib> zUG>Njp>9jl44o1w}g(*kcq9{TM%zKrWWQGDS|Z%b?4wthp17VVzJ!>WJ=j&Rabhtl4OZO zT50E9p~dkwrgQ_wn8pXegZGZjiG5vnt9lzh;k&;VKQ{kPoWAWpC8E4`OlvfT~Zg#s49 z(HGD#B0w5DxCfW7rabyQ7#(ibP%ikhVbRFL@@7qdnoCNRtHeD7G^;oX*$q_a`t_FK z(5Cx_U{lx-6dgnOPB`zWxCi5Br4wJ~c?rd_<1gg<^9U@q4xVVf&cYgB_jXOMNyo3G zu8Sv$22?7!RE88SO;$2z3$ir1_2>muh~XHaSkCb~ab~dBem(X&jnYm)Dzcy$Fqddw zJTNWn!nYXEWl5NEa=BUGms($BE_tAA+J`+{(_7W0DnwA~}w~gaY^sP4CeQLCeB0uRPznX${&qpYP9N z&ez*bpKp&6iFRb_IKqOz*0=Ue)3t;02WF8@6Wdsq@>RV=DpM{(c<*j+Mee_o2v*n= zh^(!z*M2)P(!M^RSJ5=t`8j@he^pzZ_KIf#Dx`IqW{Z>(*k>|~pXY#$f-vq2eMbtZ za5%i`tzWu*m0@i2h2_|<6wM-=G`)#cd8D95?_$;oD#;U$OJN0#zd<`uLmvv91~|ra zM57~F=c|OV!~ez)T*z4!OG%sEUW#s*Q!gIM7JC<}-dbkS1idUwvROSjnb}3WcR*C{ zN_Z|-hI6}#*MLhM9J`mpyKsENjU@8P$h{wjFG0b`>vm;^TpyZBBS_usan!A*(WcGx zM7lhP{i81Xa%<{&pSns}pCXzsH&)~PF+muVfI+CN zxyCY<303cbN4Qc05z`q!O!CSH$?{gi=2N=(9XyTj=(&878Nd!{v*C|o6m~W^vNLwM zv6R=Z%kuJSXAuj2g?~A5mjJiM4jj~Hvi7J(sUluQR{Iomi{J)C-#HKA$}x<#&jZ^ z@4lq2sp4zfd$YE_O2-e1{TEUw$M2sU8(2!gBcHNkZ{z?6fTU{Mq9?d*+M6_z$i#xvHIFs2`kA3l|M6Egjr;EBO|a zxw6$-?6Je-S>_}5{(Jm79LeQ!IFRqE-Me4951sDAnv>UGHrz>EjfQj8&3OLA;YV#o zMa=z}FL!!gqe491gj*F8=R=k;gxsC`r3McVuWU$4|BNdVNzCj8li2M{#*2X#qzc(N z8nqrETB0gm3Rl(NFKXu)T$+WzXs+h}nU4M&{grXGn7KJSBeyi~XX^o*kt_0Ra_HdG zLZf?4jan1Qy$5Dsn4H^rSE5&H*d=vqp6-|&IlyQh@{8|lZEoL`!a-J{B1)51UK1pBG};+ z;qZjsG#AxZ*6;+vDsp)i-FqI`+p~cn_!|rn#aw}3v7xzn5Oo3X{v~4@t6wJAca-(9 zM_c*2HOj?2>ptcpTYD1BT{{19Poh}=42xPAA!i6F!QJERpR zD2`IeBhg%JI+s&6XxmmIuHi@lQdFzW)Z~T1w??_U7Yqb!=6;~z@|jJLypwI&k!j$vN#Ej7 z^5s#Iy00TIjND|2>3A4tDrcF>(2XwA@OQznD{!GOtHVY$?^hCy*R_f9B_ICw#ly^^ zldDydm@BZujT7xcxLm|rlY=k`9CH+0z5d{Ko`vcCn%9ySxn?U0P#AulCRee$Q&1!j zVe5i1I+JCJ{2p%`rDTj939Lr$J++G`;%wvN#j)H}r`K$MxL%Ia=5`isKK_H8YY*tB zp5lpFzx*Kp2kym-8AD5w{A#A$iF6}$y_UMga^7*y5P?qzXQ6O0CB@P9$y4CwT-I!v zCWJ(Cj7%-<=we7Pf+sfs#-Zy0AJ+Gg=P%vo{`(71|7Hs7VT$DA^$~Vv3m4YPcwYWN z=D?_5WMt%_kWLFBt&!-5FjbLXGli*iTjcjgCkPGpuz&o)#5Iv+mZKbjyBc7!BSQ7e zu2bAWzfLp<#f{K%rx96#>b?jR3IPGapSRy6EPf@KG?31lgc%lzMV7;YB_Uc9?L|G4 z(dfM(^9@8wo-eyaeIHk?5Pb^hzDD;Z&7^JBfIQ50|90-|7X}omT7I@g?)0rf7J#zp z#*k*c%GkkO>4KqGr%iyq>5{OW{iw~_>2j|a1w8VbSCUN8i9YhLA3Sz8k)} zlS_9ABEv*UG^SSBz1=arnXhCQ;K}6!-PAyo`6R0(uT6@qD)H}9rvzSj z>N)0(WjGa!<5~v|qA^^8@nSACF9x2Q+<26zY2O|vg_MTJz$HC1?Zxkbi3zIdp2@&N zR|NgL#T7^5l{&PKAEORmm&Y8@ZpKRe;^g*LOm`BXYq!$gA~}r)Iw?R)f4p<*UXv;b zl2QpHXoS7K;H?BKx7(>Sfz>&yw_#{dnvkf-fs3C08jyWxw)7*s!Dqa1%&)u2m5*N9E+xW2s&Pi>tM9PmCF*-`rWqsyEY(fo7j!n4 zLwc2IX8)U$$A8b!3co%+j^*#~508wj3Cnc*@DM?$b8oJQtlL1h7mV-=TY}OYRwy@S~tGFC|lrtk{@>(_R^)^UZ9kK?C~H=Q&@qZ{KpZBHej%X8t(l zEUPH_)DEb$P#uk3xsq>J?kx+4_rH5{0`KG8oDj9c&>^plLuY6DR|Ugp%gCkZe;=d7 z2&9A|k~|%KluI@Z-_=rAPxXri3?(v>7#qeJX}AM8v{9o3SUDO1N69B4k~ddSj_jMp zmFj^8@ewAEm!M|M))#<8xv%{1zYax{EIuXf1P^hO1_b~!#ecjPlN;%pSMzK;(_A{D*u1%P7wjSg^#Vex1`$TcNjuGpG2FCq|KbNMb!;qYs`fZauz_o;6yH+)UtXR?|)^0^d2it2K6*(tT^JgWVmeci|BwJc| z-w;c0CSFVm4GZbpj1D2cFD_6zzxPTlBh`+=l(~Ck01erMpNksZqI%RxCJ@?Kx`4Yi ze|+h>4(2g;6P?BQP`5QzBOoI;D;Z)$NuS{gh*{L0ey5tLMv54=UgUA|s0h zpk@3AAxE5eRy8ZM(QsG{CB(#_&@nL5R{!NJ+fs>OuO|^x#t~y$8m${6wV#*<{ho;y zF8E3+UX4#_<@0VZn(S8+n%lX1idg)j$3G{KU0*6P8rES3FdIZ8t@hQvm)7EfUuE@` zZHy&3g?ul>ecz@%WE2yI&JBDVzrK6hZn$7M;Vk4Ut%D+Qz}$w0F-=&yCfCh*CW9mv zNo`;Y-{&29-+K`HUhSqI$cu5=8B+(?>Hl5P0??5~MW&rYkWNk`#PF=byZK?)_$Yji z#)@=mKN0CQegl);RUxCG5GW;)81s>?Z0ZT`_S5a)cRP!IehSTTy@VFIFD<%1u{Tbi z$UF16@ZL`rA@BHa2SYsuP1ja0w)WmCYfYWV{eN6yyH1gFUEwZNA%&bd3rz5N8TT`U zT+PiokqNfgE_`OsE)c-yJlo^;Irb9Gkg&`;k-X z;Wt7G)q79uzsWD-9plg$wqd(oZP)M*k@e@}9UfF}c6N8~tZEv-Q9_0ywtD_#_;Sui zNxU8?e1F#MWRR|1+9zEvO~%HBWoFuJeEU3rD`d%7_04?q#+xNz8E+h%5FWDQR7|k4 zT`3yp^mi6|J}GDfqjPYLkHy3f(b4sa@-JT(JjQ{o^zHAw8ctK1cn6`#WsU%e$|R$L z@632w3~6D+CCb9zh&EPn<9EQwDJ(FG&Vv%%0Z$23XYrwfY__yu! z^z`M`m5P+a}rxCY?`kJ~W>ZCkI`V=QbA8v^0Lz~tnGaLT!m68QV-4f9<|GE`n6$lKgKx^wSQA%U?v(*4uLj z?l5?ITiL;iOd0k)-50_5-eEfzS3rxTR+razV0X5PHl4G!C}qz6x8E$&iJuMwM~xkg z%AR9fQ@i4n3UI+?tcOCAXA+(K+1#rK2&cu*`>13jG|gs!@E%v{KJY5$#9C;X2*$e-zg7y1k)CTN)?8nP zV_U@bK0n~!)Lp(=QO_M?WWN9M8ZM%nfo5uN+J62KZ6o}SR@^*l2JBfCD=1+YLZT}; zGy{J>6(d3DYmbTER__78mIGNvT^*C#VWT3}wiC#8oUSz@NSRJ7ZHegr#Il&FkjdCF zF4I`@ABf~Doplr%kM&GJ(yF(uiDvybyYEQjiB!vth&-HWx=`XZej)E`da~2HBJ@@6jD@5)82Y-}yq-UkF22|#ddPjo>OOf$wja{(%jf!Z z4K$)#lC!;t`(&2Gx}8z4El|LwkC^M|GMzuv3}+mp8~Q`k45VAaR`^%sF?bP8y#NjW z1OAk4KRLLb6j;4_Ht58n&t%=aThC^NYs&Q|EIj(DulZa(ZRgLKkTF5xd8A(y59X40 z{~8&cI~MSx8K{xYBO@d0e#>l#lxy0yPR4=_p-@duNyA55j!7@#rOZ*lvUu)Yc156X zvzi_>O2ACPYB!DJO)&{q@w1!iF*nEy%gE$1P#oNY9#SbkaG{NIKAf+l=YFk4yYs%o zIT@FUhVKq6waMQoQtDHi$V2W%aPGWGxs=km^{=CDdVhkOFoP|y=+Hg9o5^zggB!0T z9o2ocg8tW@IL03X$Mnqt$Xr{~-ZO%+&*?tiTL92PJ$9J|ak74q)`zLPF_Dx-Y_bFv zlpZrBIbu~+tlyuTw-VB{{q|6=xj#`?olqM=e#K$4=SIQ+D_Zn-wHmVZ?O;MjTEZi> z8b48BSt4;M0M>>(!gM~|R7O#;XCM<-ztb1b$;qikmvM^kFwvG%oZ=oQ$9!Ob6Hk^g zQ7hAvZ)vNb!@V*}(l9d@J8JxZGxJH(f>ek|XDKG33%T#lz@$h<;wL$CPVPM6C~vC% zdmUrTqA6U3tB)lDI}pjy$aT5Zt>&%=HI#69|}303N^YyM) z*#2if4@xE<#CU)_N$Bw!z&}j)%kayQ-TS)Wj=Em-59xUK&}%W{o-8=@?=uxF)i^OQ z>;Hi_G7<)_*rxfeIr5W1SK(v%+wH_P+qCV}!x|2=>VZ!4!;5J7G~e1j?unDLnaVY= zcX_OvKQ7J|THmnA=sge#y}Q#{tH+3)V3Qb6WzwK^T0_%oMM<3OlYH$yQ6hVpY=ke{ z3A~OojIbJ$ui$S$h_F-Sy*fycK?4(TzADYFfss2Gkb6driKhHy;9hRU7-Dr!B1#xG zREbmmeg6@A#oG&(!lnuXNEbkeeXJX|X2wG_=7FRHR)Zs5BFg@7AlTZ@^MS?Btg@XqkYo#$^G65GvJf2)yD<9 zDy-H5Ojn%FMZtaHj<0c|`wz2UEBIjJJ^aoP(e{RKPB%wJKH@7tHan~TO2l)^28941 z$3F>DELVOkrpCcu%+C%Pp`p}FUync+#;_q+M{Fb*lw>Oj1hu-jg~ zPFOd#?rWQuH>5fIx<_$HJ9%T+{ybiiwblOC8dWw0CFB3Y-QbTW+QCFldr7u%0I|8t zeG9pSge%3em$wkVG7SKQFuh>02G6$HA1c1}wpuR+$;m zI~McrueNPx2JF*1TA#|3EAPDux5w2|vmGXMi1W$gx9O8a)X9Th)NaXBBUiCZa*CGz z88_`TA`!o9Zxja2RD+coquv{j_x+)XQ5utw5OGyi)zs1MgAI%{cQt_JQ~l00sZ&0# zHakeiU^AV{RYk?eYvyV-TF>V@jr4CfHy5tUb>y>`kS=u<`;}+4_OY-*Qjypo1hADd zsX)6Wn;KhAqnq8e?y)k-nw5wzmVFE+bU3AMp^Z_JQSa6J=%ADxB@j}6HDWna*6GJI zeKwA^ckFaEsiHCw<($43M61G0s+!7iz3{_8am+*tT%kR8jWMlS6qZpMv6LAZ`DrZI z4^Fw+9cfP$N?KaFWcbFWQnTFkky4LnFLj%of&-&gYiH}|{1YGu-LuFb(%;j8zBU3t zbss=SlR+mk0s)?=rDd6)oxhiOP93peR-EKb+x(?eJu&X&IC{!(xmHlPd!T*EH z#vF*CVlS(CQGJx&Vn5Vl0R`Ga>+FmqCoeG~v24^>P7=M(G5vKhku?_h5W!9evQ@eW z%h#hC4ybgD?e3<7-HVB+-};N+{bJ+}#6g-qgg@`fQL@tVwr)|AjM|2apvFQ}oL7w3 z1p@rYfHiHhE4@I(_xUr<3oq#tWqGl)i?~Zosw1PWAhgj$UMviQ$M!?@dv|TUMeV_< z?u*kSZL;cZnPD?wQ^g~~G5`GK;^l#3g*DTm+Wps=m*vOXqKhOt_u2ba8s(l+wD8Uc z-j_eYj-Km7xIFJTjGN4>ynqb={c}Z?!@|Or)0ysq(uJ{CX!5aMJnm z_Ex>~FymkeK!CC+wR|NliHp=Eg8t||L6DbsH)_m{m-qJ*?Xbl)!#t*kQw6N}ak5DA zib)E+y8{PApWW4))cA0fdubrdBp;_@ys86LFP+>%WAr|Hwno*{R>DEaMw6O!LCjK! zgrYpDovbMj3PY5fg2d@HI)l-LD77Y&x8KfD)PatM{|L2Xz`KWeQTdOhGfe|dOFyQ) zz1@%D-$&%$$^g*>$bH^YoJ9V`p+F#-VgZq4H**Uk01N-`-JuC)1L-+r5~1LM7@VEM z=_2h`YpireonW~Pmeob`m@e;+TFgdbzRth>z8G#_hHCk}__3`E1$3w#8gw!aGIu=~ zmUfb?!laG4b#GeSfPMdW8~-*t2tKc4O7Gjlpdpd~LW4F}(F4VVZ3)j7Kf9(Vq8Bvv z2ewqFhoOpBy89B3?YN9CqA30i#rvm|uzVwFBSPMQ%AxXhuH7P-DXB_n_1}bF;{F>s z`o}6PYRCqpPlA4L#U{$u&?XRm9)HTt`NtatrO+sWPD|ejYXGSd)(6|S+3Fvyj(_!~BydXwGT$f*12pc`_SqK61Gf2?)d1UDECBkd8JJ33Z zBc3@o`bhXaT7r+9Blhtq<;&y!;<$(^?*`$!kiTB%hZL#KxJFQvh&iSZ_#1iW_t)kn zRoSpl{FZaeI1^bW_gnQN7;OH%LrZAiiy0~Yy^g|OmsJQ8Ha*ZqrRdHNLrdK;1n){1 z^B63%v2@9!nG%(SYDV^%6cFJY0$bBJ#EPBJ^}PGutQ&6AUNr;OlVG0Txw?THeg1=L z6o#T_GlrHot_WzvxdZ7-r!9#M#zOwOL}7f@3H=YoBaUwDBBioJy=2uUqd&(YAB|C^ zCSM3hgjbP?2SWUnSs2>Q9os+Ok0*aUJelTnOL%TjQqVhey)scAQdteOj zQHJeySEx2eu5T@Y>n|PDB$yIeF0tkOWJk>^Qyh@Uix1uNpX{J&2RdE?!u+I=DpHJt zNhxug%Mj75C>M)Dv%wug)Hu3GImW3fp=^y%P;_0+&Z-VRIE?To# z_ivPpH(HUeWl`ehLnGy`Jk16X5r6GO7H^eaiXpHx_`KVx{~-*Lg*FEQ?IDm_EnjX$ zVt7$d2WwqB(pa+;J(%JBrQP$Pgl5X2e=KsN1D0XGa^P~3M!Y_NX(9>^-hPItQLeRM zF(YNV)IZRf)_H-8lbo)(9ts$TgrNw zeAqA=K_|-T_VLRHIN0vRNtA+u0>IgI`T?}`Qio5oAH6WAr{6I>BltTgq-=QDUf~PM zrzihksR4B{*`1x2KoX#kyi5c-QnS2KX>Y>3o{ViQmgCF!mdxZRmk}LS9ow1}p8@hh zG4uV+ZD`3(gVC#5!(CU!+R=Zsy`)kQcMreg7KF7?K+dqRZA-RwumVi+cUx9o;G6=L zy`-TN4wYJHVm~8-_2Vu#;IEOmdkTH_xJ*ByzpZ`bt(U#-Aw&Kx3sF1TS3z5cmre!d zW`Z`&Eem;fvxh6=vJIA$P#<3UaH5M*0rim-z>m_dw_b;?`~a)ACt0CWpWZTFg%&l| zuw@yHW|qwbl=WWn<3eb!!k=zUg$$a|rNpfqwXl3euXA8{=D`&?%*Eq?gfo1(5=mmJ zVB}j2h%~9~rjPFdkl4}D5j+N*-zIwx>!I5}N;WJOvN*6Ba=G4u$9k?J=z1?irNkP` zav%m5&ug#~dnyWL#QGdR)dgTr{GuLDW$4rMCi^o0_Jo5QflI)R)&`X%*Ilb`Ki~Q3 zx@_+v6!K=$c+o=;RK^rGy0>=q?0}Qx_UxgKm7vj{%8~n{bJ3rL{Fz6UJx)emR$SGY ze=I~bc_xX}en%n-YcH7==ZuP)3R=fJ=5-y&+W-eMDFcUpAjgFu#A*u0VhaK#FOt&J zf6s;E#!2!1X5!5-S8a-u=c4FW2wCvwFaBY-gk>Xu?zj379||32@i4uLFZq z7>|BWqA&LrxXH8th@l%Jc=&4k0=K%cl^|G>kWVAj1jGz> z-3Vk8Q&#HA5rkqVu5$W<{9+A=B?E)T>-)$ z_CPK6lE>1KnGVCv_tvrLAw8{+t%gZ6l(>6?B1T!|FHgV`PPR}JlG4Lzf;ebwx)oIP zXgcd(>(6#vGo<|QPK9t%K_3zcvE?=dt3I?Gs!S-LgoMDpG4mgC!aQUCx1X26GfdS7 zXlZGI=W>3j(=RdS21ED3{hOC*@e&b?Kn1)co`8x`cwNByftZk$u7Mt22O&8lH1q>d zdu2nl%CO^8IpJN#e}fUzhG{}4FE#;ve@Da4fH}^~4gs67yFUt}*7M2)oc_OY z@@c0al9Q87@<#QXo$LJQJ)AM`CUQRi18cZ!CjG*DXm(nbJp#w(CGuPm|uCJW7Y*1RKrJ(2&N@Maq;PJeF zrMhn=FeBm%t$E}G>!bc;^nr#2ujOQe?eLhFOC1WT!;=Kt$uESu{)e2r!`zV~F|o13 z0W7l(Jhd#J^DaC<#Gl#RT%4xKl^uK&4Q9s)Y0fR*BXRk%&J0G^lmFFk^gc zAbC!huy1QTUKjOzXqEw5XW}u&jEcz~5;h!90lje~yZHp*8o>f_igw}jjf7U9fI=Uz z|1uZx&l}IZlJiI3oiDtjUjMC<(Pk(lQfs$2kHvgZXg~-9hsB^NQ6ig`s@mc0#%Z(g zw^Pzzr`B$P?WN;I(zjtF_Og{j*=f$U!oP}cMj6{>!v}}sO*hK$&To1r&I(?@9j)$4 zv-GNOE7ucKgFitegH({2unlT*)bP>zU)V8CqShAQ+Z4B10QEO>$w5Hg41@J;FOB#4 zfxdx+9jk9O)dJ~1$U1F6KLxS9y={_5kBc8SDC9-~7h%(vM-yJz|8_kII)!0~M>+Z6 zcJ?Xr{Yv|##jY!oI#7Wq!C^4IyKVL(Z=FB>eq~-*7kM(I9TP53XIzmXQrfFNe_mvr zhBXSKK)~Y}XxCVS(h3(3#3a7YuBIbyPIg=+~oIl*_#~swMv0!jSPmiweB&{CAv z7&15KMsN`EG-}4gAS;PvJIyemu&s-O@V9F(oI^+0JV@^{k^%aEv$Re-XCrdnKRt~$ zDR6_xY}8qCo0+Dzy|bh8Tb<7Ja7uJp@nSzXe@j(aG$h~JEDeMNJ*puFW5i=7$T?Al ziVh`>w1tHlns}YIb&^XYGRLD{gR5Mrs*`%lghW%Tf2NJj#W4Js)KR56{(}~jNu(*8 z_DSqZ7euP#JpIjoR+cIZgD>*Q+p#;I=yRc3sbVwcvS4*-Y3ctRoM2i)d{Izn{9h^? zZT+_hKr#+Neqqy1wC3!y1aV>hHw;P&*c(a4lUlQQM0fhC1uh_)AWbZIj8)9wV>KeA(8op(jKJ&1};f zrvKd2wjvfbwz*!DEuK^YahRyM)YrGQ@An!{&EG~;YiW|q)#*!o)^1}F8?2Wm*Wy4*SjgyYi@@kL?vl0m2n{L;G-MXUcX< zMtgy&ccO)}EcOe0*%Q2P6|tzN33{^N$=0|KQyRG9-45Sf!aQH6y1-IxV*`3Y{BZ6& z?YD2=3T0(j7b=Y+E+cPn`D`QqF)H83&9xcReR)cX3q?CE>Y!0|b{l+2%)Tfo4gFH1 zQQ@xDUv)IpkA0!p&n71*| z{~s8qgs0lKy4wB~YB*0WqtK?={+^HYS&Wl?;EQ9}C#+PjqGdn~p+kEB3Uv=K3eF0_ z*CCJfJf5e$C>$uWwjV|($)w7uw^6p;r$wyNg`;T?2pP{42+7;>M31;|HIaV z!?{XbaJ+MJX?uYC0a-ZGA4jTiMqcpE+832Y`W?jr2U+?4hSdb3z=sS49uAqX#W+#P zn{}AQ@7v>WYnmi%Vr(qphjhA-=eR7<(s}kkR5UDh*hDB~QlN!o)CU(YLP0ke?D9`a z9*j}q#y-l;hJt%AOlKDnMN-o0?u&)9D-5(&Q{6-PgG~%l4OjD~j*>K~Ztj5@JB?0U z)XkN#eSSDQ2ap=IuP0ipZhC~wX{Yf_Mt5SPS0u_+XVi@NHa!I3(VHNL)H>|hB~N|L)ZcCemZ ze{4q8*O@0`%RjG3{YYR0F7xIAJrkkxIWbSX)6d?+tbwS4+0IarjMOP#K9WWt69oqx z)j7_c-~lwjCp_rkMhI0>;er8^f%MAHHKvRHwi|62G>TG@I2Yl@gP=kUkgqJZVflWz zhjn{Vcque_8@MR08uDP4i6=B6Qyk$+?$GH)&;`A>3QFj0e!5smF16EJN~g>I+^7Y; z9=$JMBgV-Axu+qIW@qtBHRxMZ`lI7$Xau(}>U1AX=|~zP5f4sQoIwr-n#!~q0FG=H zt1Q=AYOjO-?L`7J1<=94_AgCL-Q#HfipVX=<`Q}V%cr9-_*nT`tIC6SgB$hwulU9r zNgPWrXO^kX4WepIOmB~GN);c+t8%PfUJfE-SK`JCrVlk08Ou0uN7@61hO7ODmP&uq zul|qH`ghy@uTy=%xhg;%ba{Ch_>WZ?k0a!?Zh&_b_5BHBksKE}##)pOt~7XPO9gh> zy)m+4S)^3gbh{a@OUJvwjMCD&4IW-xQL{0MG70x;o#b*OzB$GdyS)FA0flAC_}`!S zPA+Bea2_|+Z~iC#8PEgVm=~FXe-5uxuh4%w8wr#cV3VoCN&lCH|4(>Q=1H4Mt*vUf zgESmCQ*9(1i^~QD2;sU45b-%>@R|evhlUsd_qz+B{Y2Fs2guQGUDeAqk&OJGs5+mI z%Lzsa9R4^ZD72W=9+tbY0_Y}*nZ)7aundsi_nH-dgWRt$@a$N0 zMI#HG+d*KpF#Qx?We|vfkHsDPiWwkTF*rn_*;_o`|Fl%z;(O2jO>oQzV+fRRCU>>| zXI4h|8t3P@LD%G>c;t1`o>@sg zJx>-@HAh@K>Hm5tmC2b!1#xYNic5EwgreBiYSr9{@Des~O%;f7#2$lb8Hamw-P)7P zZ-O$KKbDd+7p|MWD%XZ~Ud|AxK#p0}6=4sgm0U)LU|Toxx9>Iykqk&;U*+=0tiF&W z0c-J`L_=FU({8!W3|G(_6BY?C=*h)mMQgnyG7?_BOu0ws;i9;t#27d*;Q4yD2*|bh zysnF95Hv3~I?!6Jpf}#VaQuI8K>uzJZ=$VU;Wuk z_B%p{(9PigPMvCs*8m1EE}jn6*CU)IgbzIuaUkgWnGm zdJGowKgJ;*au*Vw)YSnXDhzi&pf0;gQz&_BF~l7CCxOJ8GJaeU&vcSNX2~Ljz+=kd z{+ab5yRZN{f0RUC8lw$RLdlrJZp@QNZtCtqz`>#d?B*bZGgBbup;G4J60yW>VB+TB zSfNEL3)R7$=7H+CQ|SY_g@L_fQz?T`p7B390_Ne6nv_)d|0!-f)O@%Dv&GDZ$NZAY zRveX(x29I4`bIur88l+j=pZVA0<(;Bf42vSL`+Be;zs;^1X~rEGj`JVZRG#}2va2j zJ$zS`Vl-)9PtMMUp~dlc6xy20TEe0%AHBKmARWPq`n1)z-DxPQOuII3>vL3JSeC%I zmqi*dA2_`-OX86B0P@rUN`Q*RbL1o0y&ZPco>3Y)1`iXEEi4QMwgU3d zFZlaee>Z6G^5Q?HrnLt9Q*&5h815-ANdjY;`B zQ^K@Y)qn@&?c$!6g{=^jtF3EUQPhdt=ej(E*y3@C|b@b!+$TmQ*WIDi5ZW z$D<_MI^#_Z3`NQxU)9I#_39cg1CTq9=?{<8;I!CLj7LW%r@41oLU~@0%+zVFKv5%> zY9J-E&f>dZfVEODj#Az-A!&9o%YGc%P@6r*b?PO7N4)z$?*O}!1M^n)QN6DDFxw6P z&>NQ40O}I0M?^Ewwhf+Bh@Kj;dq;@eH4@^wWXW8=0iJ@K^bbYwpc=XS+&cArD;%yn zd;9hFI)%yS+JKIw$qg5iAb1I++ip|CZUMGD=3J#yjjsmus2LCf9T=IOh5}XEMrxSf z{}1-QDyojIO%p?;-GT*|1b26LcMb0DZd1wEJ>4_?&#a#N zsasg5cGZ^J`>~gAH}t{JvPBZWO>C%RqUDQ6!>acfx3&+k1H`pNG|XtGrl#X3M~ueR zst#&%VW@G8;Sq2#a;8f-GmZOt9pD`dR&~=v8ot@%YC~XFw$mMfd)TwT11TLw!52~l zVB>-BttO-YhRj!tC@@7a!7}jryps<=OgSW9@L&{-zEgH8I-$Cs$P&z^^?(k1Y@OQUO=;Gm$$=VjnKxmvnNDdf%?oe)wbV;ML1wF)6 z<%ynZGRUA28~$?Pe-U*lB)z?>g&~kJ2$cMwZeDyHLfbW{OG5N3{D5n=w?zU3|Mgwm z5wQQ+&lnir@TMmvg=Z7uooM?^?O>q-g&B@2D7XWd-=TGNbxm)e3Lmrj`ST&@S zo?9%R8?vyIkfqQpm^f*VH#p5x3q=1s_imq_KnjD# zcpGN>4e|jmzdgFfI=DMepeF;PWKJ>e*-U$GMihT;DxB44;va0R%w@b?W)}`$No_-GF{Igvd(tOm0!4;$eg7 zfXJ+ARN0J~=F z$Xofo%MGi#Uq@=?>sQ}EizZe(rc4X@A+L~&DGIMNmA^CNuH1&@QLGd9+=)*OC&F^j zdjVSmcx!|5aGfF0T2U!qr|xC|!ka18oac8oalbtl^oK$`w&$qcIKNy&Eus$IJK{Fn z*i0|D*|u-E);GN7o4`_KkE*eD9&HMh&Fv1x(jQ(h(6y`nKzDy@(z7%}rQM3yR9j-9 z>*dVvSw+`ZQV_fy(cADqlQ;o6T?xX3v6zI=ZtapQb2CY%ZSgPgJfr?Ha7M;=Ov*X` z@(y~sJZl%9;TMitKO}+mNoPZqN#%JCX@)sYh;lebjz{WkLyaXHQXkn?VSa{)9FDhB zx70(PLwB)4r+R+i?a@w0rD=yRW%*qK0=y~%spIX(p^{ZW#Ncw(?H8Saxsobc9jiNtr zEip9Jp`E$>(H?>OC7j9FvTl6M^r2wa#Y&Zx&XXS;pE5ZXgKxNPmx0_uq*fzSzrPW~ zrkXKss?G~0iGa3py>w{*#g^M5X>V(NCS#wa7>)$_%aFM8w2@13kwGv$62^&?RbqoD z+|cbaWWT{}u2LU&L7Lcx-u~M}#bSLjcO#9?Tc=Mi2;?g;9t48~rw5kp@f}>GaZaOD z$U%$70qT~+z5U?E?fG)~9fH^6=UA+o&1C)Id3Sw`>~4y8A+u(RO+xi*BSV%NZro^$ z+9D5^7}@g&fY0+U0^s-$G{R5SJCAc4pbFTXI-2MJhntY>=E=6ky z!%B0u=P>2PQ`gOowm6~ut?2363acIQkktzejrx-i@#Xry z01y(*a=_~+g6Nu~s5N9A<=y&mg6OD|CVfG*5|;Mk;tkW41JR!3-&Tc_YR{vL1+zPB z*SK8h&EDSH>WOLkEgKq1D_5(6#T59=Ci9|3UgPCwIhNnWTsBvF4P+qrBn>*DTQ6M3 zqlw&~TNXP@KW^+U!T#EgFr*JyM}dldL}M3byY?!gRFGxpFd;k+%teNl1d-(!Tz`{wM!FMz7S0Ft0}e4o)52s@jNZNiUiC~*qik)8xLoTEh zoIIHJYbQ({Z?PWGxcTpxAEOHW1tX0j12EDvTnYV+J);S#5IGPw7lXIzEf4O!Ce@fd zY1deO>C0=YK=~!!$+CXxmDP>*bvA~JqI4%-G!V%zqKq+OsA`NOKq)-Hkr>r$v=(hy zJ=kQgH)lV+*U@U1k-lGoS}q~pR#T5FajG%Ad-Qg~ zR=T=#VR2pbRcu~DjHZE?!bypi_qtIp@2;E)F~*Idds^3j;QGq6w#PQNi0<%Pce7q0 z)4|qverS7##kv)Xf)$O8*Ryoi*EL#(-bS#_C6{av{m8(Tr)m7kdkST+dMkbQNq&bJ4NFHn$!@er7>dG2L7gaxaGqerJ@jlg(+%A`w3c-1 z=ekRUd;YY~HUjAsY`w3B60PtLG#7+J>|5&q(fj}*!21g z148$gOc0VIECaPfa3iOUafd3J z;R3quVII{e$RkG=orkDi|6L4v>~rJd?6rBcDi^aVcEw@o+ih zp@U@o1i=$c*0HV$x6kuikuLcyCzwX3xe0>-9T~UslEEzoD z@?;k*j%X}F`9geSrW*Eqis0uR6{7NPx@?x^=9xMMA@tpDt*<@o?XRzgH}9v~Q|WaG zp$kML8u0%h51WzT+aNe1@n`~3K+$?^uY?V3;m{}vejpGzsFp#ZByb)$ia#EmY+Nt8 zb<9JkgO0`fNXf4dh`61dv7tclv%en%=4AwO^CS^Fga@I%7Sv2IYQDcoe35`%MwaT8 zlnd3f;rRoZ^nQepK-~|z6Rh01BSgt9_RnvcYu|!oolAbXx0|$5DqTdv*WA^Hk9Tro z-8~)>Xy=da+Cf6Bm3?ML8fU1`KRY8_O8UK+P<+wg@Bjw^vyzYsA<_3_-Nk8vfR|bF zewmghW^(Z?3S1=0zn-cOm2H(E05^Qs;4tNi$u$HbqSY`cI8-?xnn;#D1I9Msa2i<; z`-(jdnJ|E@;T=HyO$tW!JGfjrCCGcKj;FMxH!YDLIax;2Io75fm@>?FBrb zv?*l04n=F?UViUU3|<{plrKlhV%_>6;S*i>zEZ{Wku3F?q=CKO#uh|I&@w)1J%|vM zQf*0Kk*r5piT#z_P&1tlHaps>)qJ#^ zkON0ms<3g}4QfdcooyH0JCWNQo++M!^Uk?XF3pEV&`vN68$l?PL_O*^6A4W^xE?h$ zVmKXIMopEh2mnbJr_GEZzr%AUlCl`$D?4Aq2t@3B9WZFB{n3xi*cM`l;chq`Rvv46 zzW~JY?8-r*w2h5k)uuS16pmgbu72&Jxa(e9^{@2Y`P9RxNj%p0$&|b+B(?gr&(hlc zQUzScW}IMsA;q0F!Jn0qcyf!mhLLu)z>F`Oog()xMm*k8O4l9IoiD}krD-h-RE7N5 z!EY1V{vO$X+OnORe27t5qv*c7DSTIP^X~VWvOn1P@o8;p;$*J6y0|<7vi3LaG1OI= z-o0f&j+x`9l9d_fJdJ3*D!n;aXmj!;{4s-G6YbSYX8+=Wn~p$1n`=^~P%`W7ezAUr zyQPL3&pJs9PC0as+4Y9QhVwqV%F~7mQ4;h}S~cne*H)myigF@OC%3B$b0IpbVKiyA zU_IpF4C15VWd=j7w3?uiDqC!O{E(tlj(qPV(6b0R^hkFVNom2Td==QQ99DD zumV;dN0P+}qTKzx4(Hvn*8D-^<_A)4Rd3{`q2WdWb?`A#c%)~x@j9vl+&g^Fp$ z31PD49+-C3mB&Q(#3jXgj=0$~xY&h$>)stt%;}&1p6yU|qz#+t$$6g0V4m-64UVuB zbp9jqT%vI=yYR+uK~>%3{>JoY`3iYmNO#z@>bh<&g8@6>X}?e-u!RJlJzAgY!#8-P zsne-jFTK+Za1XjjeBp2%vKNthVo zO1eup+SP*oW8vY6iMbr}4Zowa0r%dak9IS^Rk>J3mWY8?iI;USODWIA^_z`ZpF~3u zUd)ms?B+aT-<2{?D4Ugp__q<@m>7S5?2dx*DRmV`#aVShZSc zEl2k*3cGUmLsN|lW@h^mCSkN@Fmtso1Ri&`$rG;2<|N93T_L~eVk>hVuOd7|dsxp; z-TrWL^@&Y7{?rL(_L#YCi($pfUO_{> zglD|3R87*00rP7gBNl~^a*t9|neA>r5E&q`tdu76Uy|?Rl}CCDIh=`Xx1JVzq^`mq zvYmBrU0`J^gbR%P!RSQpvL^b#8`lix+CzPAGxfT37$ZqGr~f})0g#XYg=XpQg=C_aB_Elq3wdk=AZG@sd9_?XMw?jk(9e>-H&gO#7F+l zS>Em>?w!D(z4g1%z41#(P$O z7~F=?la?Mkjz;MZ*6CCRI;5}D;ZHoFc6=tKaOKBsVXw=ElRVdOP{$2^Cc=i3s_}bY zQHL|Jh951O{r2j0d!^jVXcG8Kegllr;~5~MV8*p?j!y|8kWgWr`TUv0L#wz~&WOx} zk+$PJHj(8cqBCzGBGy{q_^Rzas{t4RvUyZWbDx0q#Af-qS8`I^duL^ujOD|i-KUQR zracrTJRI+dk33LX&P01s(JxG{=kK?lSvYmDgtlj5zmmp%!EDi<#iusTviBjyO`OQ~ ztw$=A+K)AY6jQbpm(GI>MvIuh%w)^}V7RcKPml8EwTpn`HDLPlkC4x!JqJC~KT}JX z*1kAriYQqOWK?_b@nq$;VGOy0!s#z2lD}Tw*;*Y|zBZ@q#P2rB!$xcpwU{}lq68sNOC|Mw!9}M!N8iLSHu4v z6`533aUh8~7mAi{-1mDx={={}L{R{E6p8N#xi+AybF_f>*Jzo_hRQoeZnPoUghLUI z$PG|_y`g?zEUatPY=}n#JXNQTKcY`|_n5JEz7KC06^bK=`EK44S|0tWZ%=)!fCz~i zXBXFI=n?a&>Z^STnFszW`BGqnIJ7DjS@QQ7qjQmvIecYp^X^{bHe%l79%(~D{3&{s zG)ZPdJy)y(3z~SxDI&S|NEhvD)&e{rh&~lZaSUf@tq=Xwr7)kWJ|`a+M*(jWPQ}-w zNlYZIZ>bhAJH+`Req`4>s$dbIc&SMdp z5-5VPo;4*zX=Oyp%vGw)6TW=hDrsDdsJ!CHqye5g8YEqeA%-eHq5?RWF?xt$cC^_{ z&-OyXe;B_H(IbhLWv}cHl)s8KkTih#Lu~3nUJkmQuY=c|O%O!la)=bG(97qDz>0{8 zEzQ4kyPzU2GgCsLd}nw|u{pd&Er}j79+jteH%q5lRb|6Ia`BK-=neo~&P$Al{FbbTL$T#?ct)alg#I$7x-|OeZ!>-5X(!J=158Z#+@U?1l${=r(n| z8{Y@YE2(Yq=JG|;yZ?H9Hw+zv$BQB!=p?MtztS$v<%y%*o<7r3|Ay?EulpnhfU zqRxh`bHl1sL*CiGotlif025B)?Kfr*<}~|^X*7ca$V(^vsQ|N8bJcWZ*(o6v>FaCo zJWTg46zzG5JI)L}E9CT0UC{R}()-HQq+|_Gj#tWeBH>lv&(lm4r3;-n9MGGp=G>57dCw|4F_o?1>xU=zH)HQhK2T}ITpLYaHGTHWIP9B5|^9Iji zManHYbsr`p=DFD z`h;WZLsXg`lb`UmYQ4KE?t~E#JtWn|M35P9gyOdEF)E0)e^Z3T>0?~w{0wn4PQ@8C zP!H3xswR@68~-r8?a`E+sH^pJkV4CVzdn||s)W7rbuNx>DzN=Kk|SU4`C{c8@!&o6 zEd_l*yUFJn2di+Rq^XLKeqc!dWd+IjNZ}oe-L@`NeD{~wVN}9VF@%IrP*A|Uy}dcH z@v>QrI~E1~>&==v$K^{s&hM!A03PkNrkS zm|{qPBeN~QQj(GVBw@E$2*7W?HJIMDY;ZWJf*}CEtz9gNcj!LoLEtR%c_{T{DvaXc zFW3wH^c};>4H4nZq3tZ>4bri<;0CEt!-WTXr4l$+-f(fG9NxlY%-+3Mqt5Dgilo2!8)|!Ty1&U6V3}d zcZ?Qh=d@;n%1E=!)u&L$Wmj!16>7y*YkC0h`^qt6vZpR0+U?jXJJ{~*Y7-ky5I~Zu ze!#}vB6myAyU7AZ;3kVIJ<@2EYJv)CX8EJ7X{3n(i|e)+Yc8#c&i#vacc}+YF}Rs7 zbR)=D#!#2f)v00+REp9YJPOiWx}l4g!h2kU8!W{gu|H57UsRi1R-po&zO3+nU=_Tc zIRPuUL1uHcFm#t(wG;jm9!C8CS!jSS_UF)kZ=&D`!#>Rk}cS9yVytjLR;gX*iRXjRV#6}OyKWT*S`KIk;QO)0fZ-e0TI+i)YW`y|5cwN*gd_1;z)R24y!@E!RCShv%5_5n!!h-4t4eRl zIW(?br{!Gvfc|%Sn$rum2t*`y}0k@$~z~xOEmSQq$9Jcwl(<+Fq^o znDJPn8Hbi5kaoE3>}sL(eM!7w82 z`_U_U$tRw?K6pB~{p6U-s14&{ub z=v0pv zFpCRl z2)&_@_Hd-x{N8OtQjPk^#t_LupF$)6@slT^bE!gj-|Xd`cK@-6+X$SrrrSFnkT)T@ zTa@@Oh@%aVDL2J+c@Q^WU#_SHiNcPe5Jl8kT}OXR#CZPD`8ra%3UqqaDR)#El_h_$ z6f=gNEk3J6G!IK1e5PgUSHpZNB8S5R@B>4Kdl0*8GuEp z07}796?4GDptGEzQ%^w68CFmE7UV_PLYC-~n+Hdweq!rzuqrY#%pLmS`EuIsp1qJh zPkTMs#e@4owdZSEm*~$dF%R9adc20YPn9Z%HKLfI#dBMqa!M@sm?ww-I^!b;NG0x)`3z_f0{zwHG?KbC;00=R~?8q zf&8BbQ_W`UjN@wpgk!{fd@q@CDJfw+J!D3$opB&-pzk8<}idy~TEmO8y*_h8S z?tJ|*Y-r{Y&LU2sTg%n>t9~pvVzls`VkniW!jjKooZp_EWrc~6WY1a6<&V7kK0+^zD*Rb3#BQ)I>!c?+-@*#UpPq zn_1jIXdLtMyrKijcN*X@!5)%MFJ1MOh{U2=6k>zt=u4Rz)# z1eyGhG$lQq&T*=!l7TB)c^}QTo=o+p@06Y~Ou=Gnu^-5x=@8)H{My^!K))OgrV7;L z=bS!7G+90w^bDY4UmgRA@McT|P!Gtyf4lq+P`v^m5%jiB58hH(?eZl@N?&0lEwl3q z!PD<4X}%e&<&CBMv+sNnGNYnRc5Ydm4BX11&T7z=j}h2Njo zkMS%6>nRhTra_#nbEW^}?UmxW;oTe2xCNcy{cfzwLM{B zE97z{w$5Tu_M(**<%AI0rF{U7p@1kgAFxG!KfWyVK>(6_bxP2J`$q_{f5Khz!>6VRU9$N4qB+w z+L^-Uw5(5-^)FAhe(BPS$ZXSC#TTY|B5v>l5#Tfm{Agc=_r~uv*OAJyI}K#48&zb` z@oo%aY~e*T<$7dXKUTWXy548YDrvBcEZ;*^%+OphJGtnRTBCl#R$qo?INjuG=Ks#8 zE6%GU@$HklAU`OpvwA$cE*i5*L7RE=;_FPw9897PUxn>;t|{n}(c%X;jOSW<_`yrB z$6MRIS0u(wae|!5I<%X|Y%ZAu+8XBJ1(S)@e3R(~Q&j&hxz$_-&&Mb=dz->-Wyi6ZxzG_z`UpSLwBfZ!_t2FU&o+LlfManbLOb5h2xHtX(91bMB)E&3*;W|jQ<_=O4mTesD$t5{kz?qO^=jm zG2hmoaj!Eyv0;Nj{VkT_HcV`=QQY`=mKtg+U8vu#x}h0s#CB&LYVfC&e+&92^6T8& z{2q5X>{gBEgHmQh^f&yBr+!a7m&qSAv9heEoNutQ>TggAS|yyp>|1cCA(-0AJax7I zZQnBJM0L*= zSN@meym%fiC|M+Au* zkfPsp@Kah#dQc?3Vf2%xer46N+TZ0PSP)o3m+RH5H-scH%YLTD8dnLGD{qC#LxxL6 zI(&!3QuxA&@}wJ4@{i9z^fO@192lUoSgL{jfrGP9Wd!eZ{2MlR@~bXh85w7&Gt8d0VIHe6{HJvnF|0G9XSVP*)wR^wuf3lqWz-Bfp&>e)hzPn2y zG>G%0AwWs+D=ZavXT<@#ngdlAPpUH|Tph@K!vMU}^4*HTERW`+6)Nec?`D^(_8aoS z)10F_rV3(V7AFZD>)ozAPdX|cAv%XvStAvx(2R=w^dz@p9o1)GB@BfwY;d2w-3q5d~C&7ejg zSAm#&G%Wm^ahg zhMFeT8 z7#V=a{QyVZRH^#C8?ORVD-UG18FMyp8lwUNK!L*@WO^?8OrAr-;U{d>X~ecDGqO~R zefc?5f1$K&%xsa;xurWOH4Cwynhc~Aw8C`lK7!dd8y^~Q%_Vu(LrFoTi*9(8yGoxf z3jL{3L7fE{s6BIV=(O|Q16#uho@%003L6^L3<;xjuNyEMelX|FOG7maeL*PUCR{d?6$_8^udLpnYmv7_x@EsdZ+*$^i4udqC@_cc&~*NYH1h(( zVBk#7m)SoCbtJkNGB&n|{Lciw)9uuPFfd`!K61Nr@gnXBbp>9_%E^dO~tX_vO2EPb(F+{#|yQR z(#hap&D@rG(LmQV_l|%Ou|2GusGHy0{aXlJyIE!%7S^PWHhSuG8KRZM-^MuS%Pk86 zkjln3AosD|3{Z%|Bt_sPWT;vGuemg=?pF1c3d zQuLfUE$H7 za3e}1`zm{v7B_J`OnKAJg87Ttn&=73Yt%#Ef~!}mw))Gd7L zs@{u)C)}XWhh~HLFaL4seIS4)BP^le;&y|I64#U$I;i5n9nE+|7)NyMM|TXOzLG^u z4l)sQ4B-B3^)Y;oZ`Eh$frxv~9k!}drM7>GST5;>)Jnqxyl4P+pW`MbIov-O^D6E73G-UdAa1pwqNr8$1?)P>$&t_TLTXg`!{0)60-e22AH(O zU_VXv8gAZ~7R;1IE##5Wkf5^Wm3IfyiubxX&!8cnsbrHjIat15)T4Df6YLp;i@EMr z!z2t@t4|Y}7_wb(VTNTOM@VM2_#m_7<5gZOkZ<-fQ4mHu_gqJ)AxfaswmgR z^A7Y}f%<57u+Xqchj2)S7r7XXQ@q!~w*XCvUS0mBaD@R3Ltq5@J3D&SCtI>Q zbNaHZlMF_e+AH-B>`K%@;7ICjbbKG9%JXIV54rq%#klD}=s~d7GTo1sgo3HmyM|pC z($k5_=daa6Rx?P8supVNk-jg@or*glUgd33mt{M0rCu;lp6o~%UkXDwi@Nq*38_aL z%x-Xe#ET$v@2)xIA8D92!@p6Tm5cYH8Jz=8?}CH%aKW|qcW)y@*jJ*m1yfb2?m!W9 zq{F8Wqw>07Sv@I)Q(detLCC`B*2oS7tWX$I?0u=@ssXyyR{K+J;QX4m^zXLPCL5H= zXUtv@bO>ey7Los~FY>nkIvu$g>)-J`0tD6Q^8N@=*ZI`_5IV0jrjhxR^#eMXW+yx ztk=MI(IRN@D_XxVLRw^)kX|DS_BHq4#IHYc#{Zi56;NHx3RHr;#371)0TRFdm7cm; z&s>0@r;^X3sHR)9m(1hu8jRr>h*pVKJtBcgKAiRh7^D7NO1!{1xzW%bF%=Q^2ZcrS zXW^zrxbL$;q_AQlWM4_x>ES8hq3{3tL}^X|ZF7M&x`4tL%o5I2xau!~d9Py4Y`@6Q+gBy=xVvLZksE>Q2uv#xjV!`0+%tq&f2 zMPX*H0{o?p+B==Kq=-rP@8`n@pXflDL3U*tGdD4Yt`cI;d@oWhZ=Lnfa6f(3S@1tCNb!RuBH?+ix`tVOw1DXIXaZL?_>R(K`4PxDi#R{G!JbyInJp1i zNW}S}(m@s$trG~i`N_Vj+cM0;K;P8vYAQds>et?Hn5Nh%y^JANRo6pNoOT;EYe zJ0+LgI$)2ibliwezIFXrX{&ELE$t@YzS9bf=-z)zEu^O;;h>^B2#X}nc1 zjapcGjXIG?TsFBzJ0s3!_YPr8-)5a~ZXKkM(VBIGCJbtl(3x8&0eV?ztt60Kn+{}& zP8Cc(@~Psk|B=bKIKfi!h`A%uMA3|dbPHT@IHi_$918kJf9e(U?4xj9;?V+&KWY;| z!!8YwY+PV-kBFKT`ifL@mJ4Bq{jvhNgN=Elsi`sm)gs-ZF^WMrdnLeUjnBY~;gd*? z$eC#s)ZE$G_G_W;E5;}HGDOMV^s$V)!mwS>5b(KWiH2jE&K6;4)LDcw$nyGD89|(wS3fjz=R_1E zB~3?|?r-_{Vx-0D*L8h{sQj(BMw4pz5Or_AD`~O#6wXqPY!&?rRMKPo^h}y-vUNB+ z&1tuf#+`@;UvwSF?19do+KgB3R9avm{Le$n0uNoP0uKbq08VQ&|3&9iNj@Ir1js@VlwxOy4i^EDC z4a(2-!X*`p=s4f#wx)uBM(WAnb3fJu2n)cM;-3S!k0l*fItUvjWM#!ynj9~7l5{tV z%iEf=TOM{(Iqi2NJcpZYajrn>f!;jQAzTlfI$oD-WJ`O0KYdi*aP&SuflAEzR^t|9 zp3?R>GBbzfvV3+oCN8g$y|<02UyVs7jVs6F1$y&d2j-cGE0b)SO$r=~{WQK|_ALCT zUjf*65@O_c0?A6v_t(=`#LpD`_{`W_t52x0w(6X< zCJ-g$@8T_UoGb;^zOu+1YeW}(Enc|h#e8i-QME8IIz&aVn8#Xst;L|WGn_VhuGOn; z-R<#vfmYdAPpEl@#Q8f%9>udEQMmN7Cry>gZW`JKjEp?<2pp~CIUkgg z(s!C99yaxre5Mp9P`@7IEa7j$)g9;djraG~UmbdpU^m8Gfj9l9j|+r&f*F7WN)Jy@ zz@&R43mn4)0jlyub9&R+bnAB78!#|SkAA$h(xO!uL?65^Oh)*u8< zRROse+}PNpiIOiI?;E~#c(wd(%c)H4E1GUpMaD<2DL0ufpSSZQv<4hHHP2dt!q;9y zeN4nQM`T|nt>?hwKOE756yQN#mn<@5oCX)$^%cX9&~4fu3xD6;FwSlCivLbH*k!Em zeC;OKpLl-PwOQ)2$!1;SX3VRV-5&tTTfaOM9XO}=Pg!}?>)$N2FP34WDgP{4fwYMN+^{Ts)?d`8EKn(!Xg^KL|OFe@4=AIsN&n8zFmuJ>YRcl8j zoBsr>9DEffxVyaiw=c0g_Zia<=}pd<{{>btI=LePOvOz9VQr$N_x^99Dot!em)%aC zevrxBj)#ca=R;Pm-j4^A|Fc%XMX1`}39Gct4CILXnUtR0V1MLjfFKR=p8y@y6^=iO zU*K|B1L86!>GAOK6E2*#>4#rv8y#zDlh#JviJR?58kNmmLMZ>hw*yfSLU%!102>-( z_+{X`F4z4Y@a41F9lat#A^*6huf|z zn9hz!Nc}5VECiZLnFhLBIt0*sd16B_eK6{}KgMn?&{ACqWOf&6w{X;R3l>+WaAK;s z5XgS_(@=bAN9;ssNEjGY4747Z14)zj_MrJ#{k~Xk>@Sqz8()(8n+IwZp8W$D1|5q z7#mXnp@o&!Yy40sP%)c<-~sy^cFkaM85vR4CgV9)D@{YZz+*8aNCF$taP4L%zH9J+ z`9CQ`idA#|Yyfg13K88u4=e@${?-&m3Xbdlt`MS=i1R+r*89cDcUQ9#IM`;-n%R($ps9o-CI}B*-~zSlI?{nUM`2+KW#F;HfI#eg z(45Z&ao`J9HnNv3+3rY6RD8VB(@GUYum|yWa4N5D(p8mn!oYxp=_lML6=Z^kY9Q3* z#P>xn@hsGXkq$H56E^;ibW=M1o_sD_0rF3Eyv|l2Pv$x6W2GlM#?PE*4yXLJo1Dj% z@L_vnu*NT74-fg)Z?Hs{kTHZ>SPWVMp=jjm`}+lSNo-`7{$F$k--zPcQL2;*6?S|P zh%P<(^M zFUP@-?(KGGu#B!T9d8ehCu|9}mA4%z6)||jHOy!*JvDV~FABsKKhcl>04IwEBk_LN z?sPd{?;K*>+ROAF15*$g0EythJ>8v^w}61%l!$@?8U)Ow@V*s<#8~L$>&ugT)z{BE zUVvCcpE0_yRHK&0j#B4ZFOKs2rO0r1H|hNM-7XUEc11A2%4QBH zKp^&!CuW=rD40G!L6(^h^um-+j)Qi&$5?+fq4>+=jWw(&P$35!TBJ>lI~@sV6de*C zr_af9J?)i}!+`Fb>(wrG`%hq-`IL`?i7M|ku=RYiv9oL7FZqC?EG9p0t;-%#T6zx}8C*jz3Z&xeEHzci%&5|co z@9(aIC;Siei~Wcf&UCLb${G-9__d8z&h_Nw?XrzJP_4gDQ?<+R4efL@ohu7#Z0>9V zRTA3gL;B-+nk{?cC~Km5FJW{%E<{IC*p7VL_ggq)sa*k0jwDmsr*CLLp>)E96g(0d zHzhN~h>N`nMhnJU!e}4m(pGz{H5!bXyXOZY(5RxV#~c4KrvseX$!PR1KS7huXzSa~ zEl=?+gCK}cjl4Ln26YaXtosW)=s%lzXbG)oT)T)fKFY^Zc!`f5e3SUXA?Ufhri$TU z2A>yo41hlLzC*J%d+mclMA0AXW~3I{_L%6nInuP*!2Kyoe0AREb&-n`)^BXL$sO~$ ziSf%nT|O&*>lsI>g{!4?>gfwFoCu8(eH+8q6?E0^1j4?ea9EAAfJr1;gnOY+QB0Hy z)KLYZm>`XY;u{U?2Sr4jzx?v2v4>v8zJy48y@&K#Lq+u0LB>+W;vA^Xvc->d()n_Mot#k(xX`b%EK}Z=l zXw-olz;f;v{+*PLY5jz--B(rw0Z_;v;q|VC-1FE>47am-5<{aUTspsOITMmP^jhB= z3b-7npR#p)9u@iu5Ol2quUR5x!NKa~Fp z=S-BiWJ~JjPQUyje#iJ7E$DT!W1l4Z_LzAkNLytlTX&IYm&g@jXHSpuCJ_?Gv527f@Z{Xk#z|Fw_jqSr zoxHA?3+thni)x~j9Z=7~n{L3Iw^q!Vk{4J_1MI#(VKYXg`2D+`KpY6{yJSoaNf5~$RxG!Y#+=TI{v>=>Gx;1<(nT1(n zhqj*+?=Tw+P{&(QHlzPNC6i@RZiW3kLPZC{hG<<$~9$x^Il2nvgluq1^YJe34}Lyn4Ag#4YxyVutTk|1w>RC|g@ zjD9MeC6!wwesIGV|UNmnOrbAgt{6+a-x>?+x+@d{&LL1>*(PJ%*=R?+ICp z>g8RGdN@c2I6Km53x+>B0Q&OZ`rc~<0Ux$SYcVK|6f z-2w^m?Rh5ik|UkTocIU4m^1Cne`%;-#@&kc@L5|L@AnC$KY!W3N`5rwX<4zNfMRfm zC!dZ~dwA%Vu(~G8FvEMFJ7@tqT$A*&C1o5bRW4Skd^*qXB9^6aK3k29iHYF_4(c1b zhMfUpo&d&;WJ!4{+Nui?ykk%65QSS^1RRc{s~`xm^HI9nKSDov$D^<_r5Qfm0+&Z&Ol>3 zvc4ZR3&&x{O$#c1=IRVr;hx2Qizzd6Asx;5bWm~u!2?~pdJw~N4 zoAkRisCq@AvXYTi5=&$d@Uz@w3@DlPF5!6{;F-+q^KpQ+#dm)N1M1HFjMQ@z#)oOzQ(Fb=fdKkgy-}WAeF84w$^?GoT z2>qh0@;;Rqw!?XMoD*gK)vVaTP=#eMbfta{wFVUCYPE_ND7}L&+`b$}Gdxf698Z!EkXx<6qk?ryQ3H(cy z)v|9TsLTst{kzFEWH;JUbr!WPqfau z@CXvfcw1SSz`kkp?19QH&} zskS9HHjVm2&pM+S>dTGo#Jqruv1PTi zaQI}88Br30lc5!oj095y;feofYiUJTsDxt*Jb2{zrV>iN$Iein4@ynqppi@I;4&S0 zM9=m`l%rTbHHBj?v^)M?!i$~7 z_%*SFJ8+Ls1+rmR5@DvkIz~zIu4B|Ih@s}`dY8C_kSyoZ)u}^X!XZsP*NKyklpG-I zr^}KZOHWHty{pi-GP0Sx4$gBwmw<93W)8tJpV7{ry{O=YC~?s`=Dvf)h*P<7RSHZ@ zEV<~s;_^>4dq=j5o5oO!VzD2dbPbEC;Y(g85hn^vXT+Sl`QM8PXqv`oxzad2>u zh0(yaLGHu1?0}JKGf23Gy}yazED2wQL{{i>KPH%>G&m}Z*VNpgr#e*vAY$~+I!U2# zk`gRt)OhPzqmOW`-->>kyq4#LA@N<-qNKoNYo%PE>}ZU0?bY~|+J6BT)-+P#?(ll~ zt)kT#8o|A}(f&-XHRnCcw)aaNDdD`+Pd^UZi=-ktqoAl2QJY=l+zsEDg>v%3{L-tx zzdzhW`v4Z~1GAk|k-Zc~iOWyTHL%~wtJ{R7PDxH7HGYf!2*;$^Pd>=*y?p^Xl~JDU z66D0h6yzk^$k%yvXY zK;Tl)u-#j|+3(T((u0QA7!Y#h(qA4X3>OssfRwFCnLE%Yrd1v1XUl#IU67W?6Az`ASQiNv zv&@6TZ+fMvI*gGIlTrnrzg=AnWL_x4NFLv#o(x&~Y|{d(Q42V?)>O_Hv~&L*)++y~ zKe)f@y~93SBgyHUf|EUXurX)zUwF$PiL>nGTu=H2wmn97WD(FjwVa&xy}em-npx3|?u*^3r;wXZyAn2OHmm`|A)ctn8Pj7#dpl{8QGCbM#kL#oN>b3Y9Ze4-DP0&L03! za8`2sj75!~l=)5-##{y<42`2r*iUKk#Dk23mb>2(21-4T7j59>t51dFY9eK5+oqTq zf*Lb7+`ROL*aC*)r_2<^RsORIe1K7%JfLSm5#1OFr*YYJJb=k#I z6nUXcHug=s6G!hOuU&@C3G^?+zxGQ(($s+!dq+n$##Ecpw(%v9lz2WwU5JBzVr z80k}fjc`F95=O*&*mAq$2qU990%4Q${5(HIMcCXh`8WX3p6lTBk9n>~4#(Hc_bSA> zrT2o_D8=wU82Y{&T~NHG_8(;53=4ZjSO`V+%9ufupZ6YG$#nV!X+xtIT)|)9$b_l4 z5l6B0HRj?8-^BSF6Y|8f zsh4Z!wlTNT$GajWnolkYPYvYhog^qn(+){btITj`x1>Rqp{`^di-@h7?Z$@o7R!MP zh9ZH(Jl-pWs|K)|&XSkWu5SvA{h5+Q1(-nL%v#OeUUWE#!e5c)k=#@A-f}n!0*$E& z4sA`qA+nBACzel2e=)g*)xkb77xMj!iL;z(OSSfiXYF0cbt`Shf3Gt zjKv9vMV#SfCt8jgIg}ui$rkUzmqZXwC^Eu}4KN0VgQUMJ`w)nC05L0&FlZXwsr-)l zF*#VRA}9w2x4^RX=PQ|#L#~z4d#!vbr{LVHOQwV}8 zz|6gwO~g9``u&U>*FX40>)b!FKk-Y1ro&ayNgB@oWF##snx_GkuzYfN(cONNh zc4P81ZdUKL&~{O6WU{i}n^TZrcvH+z@ijsAV}|b0uKoUkaWtHtalcB`IsVh@UkOAq zR!kx_2Wy3udDBL12Wo@onS5<+YHQ+hKLF~5wA8m#zRf>sLErINm#AyN-1dyX1eSG( zbp3`wAI(z6;lCeb3X876diZ-KLMEWTz+MbYDj{g{9Su#8N(ZTFLSN@9c3N`NR8?Zd5E^ zAXocKyb?<^8Ti%Hd*^FkCU@i#OH*$ zQ8akH-|m4UHy|yODxMhStg;Y%f8&X-e+a4*jkST3DB#(g{b!|BdKAz|LN>6O_U3RV z(p6B>f*A8AU^l}e`<3dNiLH)`Tr6&#IxK){oG^)jTm|p@rX<`4Ni4h{WvcKcB~-b* z;*5F0I648>2K*W0r+z#ck{>Scli!O9ie`K9d*~p;?29dSC)!`z_`4`;%PFm#P=1u^ z#7u4g15wxA9+Y$3_i-KK9h3$qTA5#qJhv~zGsq(g{OO$?PBw4Ck-V&?KbL`S82GqQ zIAp&DVPSSxCSulOJl^CpP#zZRbiR3uQU_u6?=7H&wXB{dxP5u}PFP>z_X8)+=QZh} z*~)YN=-XKWy^IWpV*g`Gm{Q={)|X`Pt*KdG0vWD!n+W9wf1WGawaG?8GL+WO*++@!_u(>P1K+vFYRDp(FTe(0;IW983PnTp_SU9YT zJ$q4bfo|%|DgB2dExNAGd!(NxOviGLM`GOFS>jdUiUZ|h=t2#L%C%+mvXf)gww)Q# zV05Pimro~$Va-4AS553Mpgn0pl%k_ORVb^o1dgnSbj27sRP2QFF$aCe_$;a1F0>DV ztzKR|?tag<6r{HX+m8>pnS%Z?CAE!RryInqVqtHTe!j-7FQx2_XH{#bhJXD=Xd+o_ zhAz)RD{dE+Ilz+96H>|82%m;bmrMIN?P?Un=8XD->P6 zsT9JlzwQ-?{$fx(y1gaQ-kF9g@tcX|d7eY-EgBIZiUiL6N9A;uio+NUlZq^N8DCyRJ18JvB(=Vx?r<&;q_TeI)&bTP$tkejh6&%>z-ElI4msOm9%@58_>(N?QDulnQ=xwlVrV^vN5eGt!McpUbQ+bqU=ntO1P?biZmbhqX zJ$-TWc~X%Tn$3B`+<<#%Y<3|sKv$};|GbzwG%_||YZIFhS$kPqu0L5bGzh0@0j|jj z=VE)Fx_gKy>^(}1k1wF(I9;?EOO5ibaYk$MYBHYRODN!oQ>hBVdXw>3kc}PbS3;(K z{q%>zPXZUqjp5o5C+?}Rdu|3H<5`c}1$9IHLHMvUgN{lJ8TKrRJ%g4tG%S4m|KMQp z34R~!;gGZ55GFR3`kyz$3`-t@g`Rw14(Ni8n_XEbL$J1izpW_$`5-cNU!c>&r5Vi0 z{Z!#=gZ{iZ>V-!s7pS;%Va!SlKxEx|YCv9Y`qAOP(;!hD|6byMrVClc zmJSa4zw?Th(U}||VW-2w;ARoZSVGP;MbIcn}(XXg3tKu*VQhy41cY$#4| zHIrvX{~%mZKE4#;h({w&KaC6)QkrbpUgGObTBrQy?QKfGUsiJv3A^LXZ0L?tw*N{Y zYR@9B?Wh6yVb{7Ky0OI4F6eX^%1Xmrrqz-yZM5;)J2L}_R53Um)JQ0O0hr@kxc=uk zCw&mG1FjKl$W8#D-Ra*OH?zh;E_)kyHMpKmV%mjOHzsSxz@+~dB`m1mN+x;K{?C1r zU1gRmYzbDhb6@%MCjk!8bDJ~T>*@MlTzuQ`1mk}JX1YMl@|ao+>zFRPNI9_dRK3o-iTTTyOR#7Z zX0H&FRT2}szaU)oU1?0EJ!8A{U#jCdIMCZM$2!@>klcff$OGBcZrjiw4?i07 z4Y9*nzxeAO@#Z$4Pr|Jjj04DNg96j-^71_ctkw4T+k`rr4$r_qv^Zd#;OGxs>htWicWG@aRA+j|tE zkQmYkD49*iy9)7x;SZ1wmT95__kI#Bbbe7=H~89!h|rXYKe%7~h08=g30gJBaaZ`} zLXJ%Skf-WQBXEi(9C~NI=T&GKVQi{JDYE1hg3t4Gxf)qZybKoInkL@A^)Grh2&!_H z-kJm@-pM~!TXb`Z2{r7Uj9dGN;|0ThocrijV_L1D%AwXo-21puWG3tRYnfWDL1gsj zuWJ7k##JcK=NF}ZSo4R(<3A@^D<}7^5)#H8I7T-+yoTBIGnVYBM~eh{>ok14uyMb| zu&fVGPNG&ET^TLPZ_h4Dszb|IO!&wq#mRY!cv$ap8ipw|5@os-I(Sj0n$lvgzW=2p z1FA*+DufFypQk??Qv5B{@SWYk>u)M$@2LrPo$ExN(g_xTf<+oP<(&;Vqr~*k1bE=< zsz>$h3V=&;*pzfASEc`HB>7CXtDladTrf`a_eersCiVSNbI@U}mFOO=IYz~38VA9p z;yGe%7?hGnp%Rc@TJhGvCOuN59LKT?So?= z@f?+DFkU36BkI;a_i>c4$^7W^egN#9&Bwp=4J63Rl4?(_T!zCM|Fv7pQ?+H>mF89sk5UkbbrfhPx*bfpm4$Xd7d;s ze-$CE-CeKW)@s6I7Rbz5b3p{3b2PXkqCDlHqnueHqjc<}pzZh0$HJj(egx92iBt`_ z_M6CliV)~cxj5ZLuAq1hP{uemQS;owjs55*?pY&+?mgkDBp8ZY2y~xz=p+5RSkQpt z?__u9z3ZS8>>a6szuZX*H!r{e=W#rz@2O(H$1!)FB~~o zJ2HSe)6Zuc)$-LA0=LU?AC{2i{hcM31i|7Ol7Vg_2xR$FtAx^>O|L zyqu_vO3@g8#DqlE>MPb?#erZbV0$__H8l)IeTCJ{gK9(=arM8!J$U10cdYO8)G~46 zZ=OQM4RlBt7&Ytoy{{1&SM|o|82&InJ!}PJ|M}xe=KJheJEJv0-}e#`8(S<9jh6pOJeVkx#G|?7xu_s9Tz;q(fm~$3WJTPcn zS%=B@s0Uqk_u9>4+g$;-6~(Q0|f1 zLG49&X-V7m!I@DxcvTShaYOEFkmuB?5^PI!Dg)cf!1gJU^H(vvXaEZg-2+bKa!nVDo!QnaV1ry$fitbRp1ys|ZuSyFE6J0jQ+c(b2dopumm zOzrwvFEM~juz(6Lt6?*!*vGYRu(g%nm%+eR=akZ;hq1O!aSWpDp1Tpz>adCkL3}Iz7|8u0Gq5`_x%Jvk?x)Be{ zuXcvYA)=GOg3b%01J~v#iaTzX4IsJ)W~@&qLcWu0f0Ye>OJVQDWlKQuC< zOU(eHiASt76YL(X8*FVDO_ahy<+r~-y;rF_J}Iogl{_*)XjzR9fUVyk zV`Kr!2!*-!Dn4CIk!raFjn5|g{1byjgx@yo+btI=MASruNB{o%b#FB?^<3CUq$kS-$$!hP~AN|-Syj8*y}N^xMXHm@zySDVrL@z#~~o%!_Hyer#qUK7qw~6c?eh* z_uyWEh&uYod3XLp5&EHgv5;TXT9L)v(DDzvsq}PxhEEnsJN@a<%U`m-$ekqdeTC(cgEb2$24z@zF)CPXFRu|3ktTNO(hp{+p{Ad0!cT$LFRvXjSJ z#GWP|{3kJ$w4Q!b6=#9xnTWHDEmo6#vUxHF8_*<75$w-#5jHY0AD`%zsXmIq^<-+dcr2MeLYe=-0nybTO7rZ_CzcDjPAcq>`B7Xg3I@%;ik(Jsp&z z_}T$_#eO##*U|p*m9LZDMj@F`3M!x{x{^Y*&+^DOD;N6VuoP4^Fn*2+48hjdTdFk^ z74rB(!%s<*tAtNn`)WwXMUAZ~N?2FCwtwO5(Z+ePGz)FJgqo9i06*qsoySDc^Hx$z>r>uPclMohaFLSeWeG)x&qf~1EHZyaC1I@DnVU;x zgJP@q()9S?W!l&Mivu7Fk!E7+(Z#v~Lkq8ew~;Zs zXLOInuwNgnr`LWsxo{q9xK8HZQj*mdX0DD7YRO9)W&s*cl+aPN;Q0tCoX9_)29s6t zq!Ng%n;u-Jj!VgDvX&o1V=6-npuZwL>(V~ucIl-h8?x<$YU_I%x5gMLe^KS(9(J8m zop0bZ1_SQzwM3!;Ybun7(1Yky=i1Ws3S4yGe6N?zQ0->}((6ye!5njQe`AVka&kIj z-E4#3U#h(%Df8^w41)}RKd%CLmQuOkQ)_;o=LRLlJ!YSz=N@fa4`L1F)ef!-A6dV-Xtr-{+v7bohzDqCP z-CZ&N^&B5gt(}wALr<+>(EZ7yTnsd%$3R8IrIQz+;HY~6|r7PELI`EW`4}{vCeUq}sKrD>m zVYyIWpF>wvB3SZfQ{!jr`NEKJbnyYAw=$mYP*MF{kcD=nnlnoHF$W$7jYacJcHF+6 zzQS8viuVN4`mh@q_g|YWYI1Q>+mcQ1#Z>vZpe+bYnu(jfM=b*Wv=aL0)Cv2)O@gTB zlmN@@s@i9^W_9kZ+iDD~N(z5x4fIW)ln;OO4mlYOsohG<8i~P3MPnF6?hw)!f{t7l zsJ*EEp`+aC`epjtr*8YW0ogv=a5A)1F>Seq?1IjC=+;8^zV$uxVClwUl0ywILw|u{ zfyA$2$MjfD{mo>k?$q(UhOBJTjTHSr64mJB=zsuk)UCN;-6=7!`h_TaF8j~yg9%xy zE9h>)*5Wy7_>W$POwoGwRQF8U=Msah<~fymRsqX0)tV4*Y$fV)eRL)J)o}3x>)Bdm zqm6@}ijUjVMee@Cvcf%w9Js0NLYYa5h6MKCaenXx&3?YNS&pozculQGv0bN-4c8fW z6eZ|B2;yNy79B})qHT8DArWl8bT*%B_(R?1T$NdhHWT5syGOFhs~=ocT7EjN)C zU-Fe^-1ySD{33Si*k6_3lVM$)h`^>zi{Fx~D(CSMG<)zI6r0s$ZUKI=4tC9tV7Uiz zNGF?v_owSWTucup_buf3iXKDHw|xJ|$g4d60xF^~7iVor)6xyD=35`RC&?-HEamZ^ zkYYg6DwOk;C+SX~y^@yWHV;KibzQ9(NfMFg^tX=nrq%RIgB-lWj~J zY;ZHZmFb(l@qwak6=Od!J{Y;%sK)qDLI*1x@8yJ=V-5QY4vn26Ie0TCb7Tk%~k@A{Ux94gtEi1h-c0moIYe%~=-f&x)WL&m?@KGcC%>u{#(e zo~oTtSxq$os05|hdtxh=iH@XR26NAZgkq^NRqe) zwp7mi0Ob4QHdul5?`qOk5j&O*PhvMs7h&slrLMpVHI zGVC1Lp&LQieIb<)i3cql_P*+?aywqn2Q~OgX)Nd|qyBz>j`JXATk)iRu57P27Iw_( zkw;atFj}Rq71NWaybpqO1N~b^<+dp(@elatbw3#0EHxARn5+e&bM zmYrcXx3tKSMZki2aW^pqHzor{#^Q~>ycPon8+`v15@}fL1kCkA77(7FH> zPe+lR-KqH1z}pIdEgf_9W0XOTcFIWjP)T(wJio}mbxv|y0ia-wRz~-Lg_+ow$As~( z0atQ(dOH4wv=RH?9}#+>?^#yB@!J6wTLvG^hU3})Y0}iEp&CbBA?GJ`7*;@Oc$&bX z|7z9L5z+sb0|@&`ixT!9ML!5De^CaW=6}@vASV8Vfd3z-@{>d()-LJb{8uLrqcPG* zz~H-^f^}=A_xAP@e{lzd#*h`Lj}}4p_H;dP|MxV}NtJT5wGg{H+xY;Tj*jDvPD)Wx zQC`?eWp_M7fXAtaZnv{BDgrwClQ->e=>KIXax83YMw|ELqrA2R+uGV;NsM=|udkLc z@`{;3r=M^lgQ98;9@57ssUzzDj)Q!$u(Yy*OX?FC5b#bOUKQ4P!ON(e%_}V}J=5yp z;3|~mrukplKj{8xmXR7JBpk1`rl=Om;ddY;q@{%qo7S`u{qGE7VJ19YdPzwke*5;# z^54IIV~2^ctE+mKmzPXTOjUF=jfDSqDIV4W{ZEn6id%mv-QC?`h+MPjOaB8}pI(^{ SJ@M~gFIh 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 z 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%0D-rG)sz$<-mph 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 z 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

+tu0>Ha+ai0vX} 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 diff --git a/bsp/stm32/docs/figures/CubeMX_5.png b/bsp/stm32/docs/figures/CubeMX_5.png index ec5f929abdf10dded1567e32d39601c9fc578a93..937e7a4780264537eb23a6b3c0ebf60bdc1f9344 100644 GIT binary patch literal 174657 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 D$;vgy literal 15152 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 diff --git a/bsp/stm32/docs/figures/CubeMX_6.png b/bsp/stm32/docs/figures/CubeMX_6.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5f929abdf10dded1567e32d39601c9fc578a93 GIT binary patch literal 15152 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 literal 0 HcmV?d00001 diff --git a/bsp/stm32/docs/figures_en/CubeMX_1.png b/bsp/stm32/docs/figures_en/CubeMX_1.png index df1501aa3d2ac824ad30578a7021fc48852871a7..07a60f7b7c73a040300f38ca09f290e497689c60 100644 GIT binary patch literal 144491 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≫9gI{1nFwAdwfX6 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%0DgwyixFA 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 literal 124762 zcmYhC1yCJ9v#5dKc5ruhcXti$?(Xgo?BH;42yVgM-JM{;-Ccq^yxe#1{omWFt*xG! z-I|*2>FsZNCQ4aR8VMc`9t;c&NmfQe6%6bf2^bjo5G?e+l72qL#eWZQH&tmdu$pOt z(|-b_m8gO!7+8G*!n+C7KN-$hM#l{d40-6kZtzrkWPC8NuM$}aQFU*_iySCp%+WRA z_CB5$+P`a~z&cUPg+>*7P49YJ@49-sW3xl;DGj2et+P`cBqF9Cx$g4P>omg)3QGnH zS6!R_!^GRk-^tI;f7@+FpCugB!_UTs#*~f#5iIi8YR8>VDMeJS1kJG(-?d$T4I7q1 zPX0%QT>h`a4dH?mYU!uci$6~-ZWxBT) z)V~4}6j(@z;GG2VX~u;Ah$7CUC;?;t5qCo7!oXa}D<^=0!_72h^<+f@v7r{07+Lo7 zy#MFNa(0SHG^;~ zM;HlaLVn`Zh?q$|UF%P8+Mt7rnY(@iyX%s3evYYW2%NuQ`|Bi%`Y znc@m{FP9hSvNyK$pxx>KlY;7CJh>IAk@ZA&Icq{NO)IIMfqah5AgbKiGV516w$efn zVHb*u{c9jNuCm_p4=RV#HX5EZCs&P5cn&{+l%^dM0>gYw@3zkWitb{DR@D7FLsP|T z$LYzd4-Me_2W-w$AMHxL?T8bIx=Ffj&8_(FEcC@#T0v$5N+n>Kgq8}Yc@$v$aHZN5 z3rOEkCl-z-hf$(0KD0`OZ>p-5=O;>q9U3!-2{bv3`PL?|_<^+Uv=h9m9Mek^#n)tL#uoR689 zYto|bkBv-p56j3!-o8$TS+Hx7H9}^lvNc5(v84VoTblP6qjp&pAjQLs zXf+-m+2r||8}s8t+tmn&N&lGdGkKJ6ExnZcpsjG6iW&vGNDu1vBG;^12bjf3K$cf& zvpW%~Cj25VoeHPu=xzQ>f>pH0BZvzkw?a=)lCqOh$p#}!9&4Fa4u54E%{%C zzt?-5YtmrA+hEG(?lY2SB|*W}GT~0qKj%dU|Jl`Tv_o0bUa<{;xW!*lAq)tel15&SN{&E*~c1!XszIv~^##J%#H^CWPU z=iVAM9Qm7+sdhqI856yjsG(4Nmf-bZN^Z0nr$(K!fF{<8%S#v>Y^C6jSXcJw-%{TR zgpqT^=<3;v2!1vAyAudOn@J-{u@@1RcSaj0V#;@OO-H+5@DTmDL6_b+0cw;vw;9Wv z1V@>zoBVnGI2eFVuHltRAPP;ZV7Oo|=BZ&4Q|Ip3J_%mwa1q2Xk;UQk z)Rp!@EB}vv2L|#rDmATF8z_^KlM^#CBE!NU%SZS8*?||G5BOa99UXY->;iadd1t=U zD*W(irpzff7*T+Uh*%f|{V!%Qq)S4BRty;Wsaa6aQ?*e9W#cd7={0x0{gIw#`g;3S zQwE*JP()j(1y%!8v-KDTbiv0JXr5$fGUZFwwTNwZ#$P>OOk%Hb5{-P_H1A}Gu6bdg z#EJtJY~$BuwR-P#Li=Uue-4u9+y1LRgR2yq~i*c}S5=GQyYeD%8kfYyZ$UYgFH?%P0U z+&pWLABJ(Qlc}@kNh@~3o1@~B&X14V?wh1LJIB( z_6Zas%z|30n+>oppQFS+-?4OC9WMoa zEuS$-pqt?fY;nanT-DbM#>zbk`wm#YuSb-DF7TxfB~9#uqxNCQgP!ym)_?8_>Jr09 zinMaEuJo7@Kc>MHs!fWFgDea8l0g`DeZc{v#UE3GcJ+hVKU53`#zNV6>^-Qx#|qRd zDF+QpmPBMB`emPNHXDV3N^RgSErT=@vV$XL7PHn(&I?#YQ+q!qO{B9PtDU`X6My1FrTbC^X{Rr%d* zHwoBE(P$lfN$Mr>-4$X>pG23J2nJs7*~-S571em<*q_L_^AV)t@Zu|(&LJCDfj`CfYVL`m( zCsxgNBCef}%9=-How4e1lVKh)$7BsNGEE#~#%?^aEWb#2NwI95

{1$6d8f#f59xB<9}nA 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