From 59d7a0a5b11eeebf9f9c1f7cf0558240f30523ab Mon Sep 17 00:00:00 2001 From: Daniel Nemeth <97036561+silabs-DanielN@users.noreply.github.com> Date: Wed, 25 Sep 2024 11:15:15 +0200 Subject: [PATCH] Platform Applications v2.1.0 --- README.md | 4 +- platform_timer_cascade/README.md | 93 +++++++ .../platform_timer_cascade.slcp | 136 ++++++++++ .../sl_emlib_gpio_init_timer0_config.h | 51 ++++ .../sl_emlib_gpio_init_timer1_config.h | 51 ++++ .../sl_emlib_gpio_init_timer0_config.h | 51 ++++ .../sl_emlib_gpio_init_timer1_config.h | 51 ++++ .../sl_emlib_gpio_init_timer0_config.h | 51 ++++ .../sl_emlib_gpio_init_timer1_config.h | 51 ++++ .../sl_emlib_gpio_init_timer0_config.h | 51 ++++ .../sl_emlib_gpio_init_timer1_config.h | 51 ++++ .../sl_emlib_gpio_init_timer0_config.h | 51 ++++ .../sl_emlib_gpio_init_timer1_config.h | 51 ++++ .../sl_emlib_gpio_init_timer0_config.h | 51 ++++ .../sl_emlib_gpio_init_timer1_config.h | 51 ++++ .../sl_emlib_gpio_init_timer0_config.h | 51 ++++ .../sl_emlib_gpio_init_timer1_config.h | 51 ++++ .../image/create_project.png | Bin 0 -> 94729 bytes platform_timer_cascade/inc/app.h | 31 +++ platform_timer_cascade/src/app.c | 233 ++++++++++++++++++ platform_timer_cascade/src/main.c | 58 +++++ templates.xml | 15 ++ 22 files changed, 1282 insertions(+), 2 deletions(-) create mode 100644 platform_timer_cascade/README.md create mode 100644 platform_timer_cascade/SimplicityStudio/platform_timer_cascade.slcp create mode 100644 platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer0_config.h create mode 100644 platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer1_config.h create mode 100644 platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer0_config.h create mode 100644 platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer1_config.h create mode 100644 platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer0_config.h create mode 100644 platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer1_config.h create mode 100644 platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer0_config.h create mode 100644 platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer1_config.h create mode 100644 platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer0_config.h create mode 100644 platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer1_config.h create mode 100644 platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer0_config.h create mode 100644 platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer1_config.h create mode 100644 platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer0_config.h create mode 100644 platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer1_config.h create mode 100644 platform_timer_cascade/image/create_project.png create mode 100644 platform_timer_cascade/inc/app.h create mode 100644 platform_timer_cascade/src/app.c create mode 100644 platform_timer_cascade/src/main.c diff --git a/README.md b/README.md index 9ce9aea..77de1e5 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ # Silicon Labs Platform Applications # -[![Version Badge](https://img.shields.io/badge/-v2.0.0-green)](https://github.com/SiliconLabs/bluetooth_applications/releases) +[![Version Badge](https://img.shields.io/badge/-v2.1.0-green)](https://github.com/SiliconLabs/bluetooth_applications/releases) [![GSDK Badge](https://img.shields.io/badge/GSDK-v4.4.3-green)](https://github.com/SiliconLabs/gecko_sdk/releases) ![License badge](https://img.shields.io/badge/License-Zlib-green) @@ -77,7 +77,7 @@ This repository provides both SLCP projects (as External Repositories) and SLS p | 50 | Platform - EFR32xG21 LDMA SPI Throughput | [Click Here](./platform_spi_flash_bandwidth/ldma) | | 51 | Platform - EFR32xG21 Polled SPI Throughput | [Click Here](./platform_spi_flash_bandwidth/polled) | | 52 | Platform - Flash blank checking using the GPCRC | [Click Here](./platform_gpcrc_blank_check) | - +| 53 | Platform - Timer cascading |[Click Here](./platform_timer_cascade) | ## Requirements ## diff --git a/platform_timer_cascade/README.md b/platform_timer_cascade/README.md new file mode 100644 index 0000000..516c2c7 --- /dev/null +++ b/platform_timer_cascade/README.md @@ -0,0 +1,93 @@ +# Platform - Timer cascading # +![Type badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_timer_cascade_common.json&label=Type&query=type&color=green) +![Technology badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_timer_cascade_common.json&label=Technology&query=technology&color=green) +![License badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_timer_cascade_common.json&label=License&query=license&color=green) +![SDK badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_timer_cascade_common.json&label=SDK&query=sdk&color=green) +![Build badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_timer_cascade_build_status.json) +![Flash badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_timer_cascade_common.json&label=Flash&query=flash&color=blue) +![RAM badge](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/SiliconLabs/application_examples_ci/master/platform_applications/platform_timer_cascade_common.json&label=RAM&query=ram&color=blue) + +## Overview ## + +This project cascades two timers (TIMER0 and TIMER1) to be able to utilize a virtual timer peripheral, that has a bigger precision due to the extended bit size. The cascading is implemented in two different ways via PRS and the default linked conenction interface. + +## Gecko SDK version ## + +- GSDK v4.4.3 + +## Hardware Required ## + +- [EFR32xG24 Wireless 2.4 GHz +10 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg24-rb4186c-efr32xg24-wireless-gecko-radio-board?tab=overview) + +- Wireless Starter Kit (WSTK) Mainboard (SLWMB4002A, formerly BRD4002A) + +**Note:** + + - Tested boards for working with this example: + + | Board ID | Description | + | ---------------------- | ------ | + | BRD4181c | [EFR32xG21B Wireless Gecko 2.4 GHz +10 dBm Radio Board with Secure Vault](https://www.silabs.com/development-tools/wireless/slwrb4181c-efr32xg21-wireless-gecko-radio-board?tab=overview)| + | BRD4182a | [EFR32xG22 Wireless Gecko 2.4 GHz +6 dBm 5x5, QFN40 Radio Board](https://www.silabs.com/development-tools/wireless/slwrb4182a-efr32xg22-wireless-gecko-radio-board?tab=overview)| + | BRD4210a | [EFR32XG23 868-915 MHz +20 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg23-rb4210a-efr32xg23-868-915-mhz-20-dbm-radio-board?tab=overview)| + | BRD4186c | [EFR32xG24 Wireless 2.4 GHz +10 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg24-rb4186c-efr32xg24-wireless-gecko-radio-board?tab=overview)| + | BRD4270b | [EFR32FG25 902-928 MHz +16 dBm Radio Board](https://www.silabs.com/development-tools/wireless/proprietary/fg25-rb4270b-efr32fg25-radio-board?tab=overview)| + | BRD4194a | [EFR32xG27 Wireless 2.4 GHz +8 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg27-rb4194a-efr32xg27-8-dbm-wireless-radio-board?tab=overview)| + | BRD4400c | [EFR32xG28 2.4 GHz BLE and +14 dBm Radio Board](https://www.silabs.com/development-tools/wireless/xg28-rb4400c-efr32xg28-2-4-ghz-ble-and-14-dbm-radio-board?tab=overview)| + +## Connections Required ## + +Connect the board via the connector cable to your PC to flash the example. + +## Setup ## + +To test this application, you can either create a project based on an example project or start with an "Empty C Project" project based on your hardware. + +### Create a project based on an example project ### + +1. Make sure that this repository is added to [Preferences > Simplicity Studio > External Repos](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-about-the-launcher/welcome-and-device-tabs). + +2. From the Launcher Home, add your product name to My Products, click on it, and click on the **EXAMPLE PROJECTS & DEMOS** tab. Find the example project filtering by "cascading". + +3. Click the **Create** button on **Platform - Timer cascading** example. Example project creation dialog pops up -> click Create and Finish and the project should be generated. + +![create_project](image/create_project.png) + +4. Build and flash this example to the board. + +### Start with an "Empty C Project" project ### + +1. Create an **Empty C Project** project for your hardware using Simplicity Studio 5. + +2. Copy all files in the `inc` and `src` folders into the project root folder (overwriting the existing file). + +3. Install the software components: + + 3.1. Open the .slcp file in the project + + 3.2. Select the SOFTWARE COMPONENTS tab + + 3.3. Install the following components: + + - [Platform] → [Peripheral] → [GPIO] + + - [Platform] → [Peripheral] → [PRS] + + - [Platform] → [Peripheral] → [TIMER] + +4. Build and flash the project to your board. + +## How It Works ## + +The example uses two timers (TIMER0 and TIMER1), that are available on all of the Series 2 device MCUs. TIMER0 is a 32-bit generic timer with 3 compare/capture channels, whereas TIMER1 can be both 32-bit and 16-bit long depending on the selected device, thus the maximum precision reachable by the application is 64-bit or 48-bit respectively. + +The application defines the `PRS_MODE` macro to switch between the default timer connection interface and the PRS peripheral to connect the two timers together. + +When the timer connection interface is used (`PRS_MODE = 0`), the timers are only allowed to count on overflow/underflow events from the lower numbered neighbouring timers to create a larger timer. This also means, that all timers must be set to count the same direction and less +significant timer(s) can only be set to count up or down. + +When PRS is used (`PRS_MODE = 1`), there are no constraints on which timer instances can be used with one another. + +A specific output frequency can be on TIMER0 via the `TIMER0_OUT_FREQ` macro, which makes it easier to test the connection between the peripherals, whereas `TIMER1_TOP` sets the top value of the second timer. By default, both timers' output are routed to LED0 and LED1 respectively and a frequency of 1Hz is set for TIMER0, which is then devided by setting `TIMER1_TOP`. + +The theoretical maximum precision achievable by the cascaded timers are defined by the bit count of each timer and the top values' configurations. If two 32-bit timers are used and the top values are set to the highest possible number (**0xFFFFFFFF**) then the combined precision on TIMER1's output reaches 64-bits. diff --git a/platform_timer_cascade/SimplicityStudio/platform_timer_cascade.slcp b/platform_timer_cascade/SimplicityStudio/platform_timer_cascade.slcp new file mode 100644 index 0000000..95706a0 --- /dev/null +++ b/platform_timer_cascade/SimplicityStudio/platform_timer_cascade.slcp @@ -0,0 +1,136 @@ +# Silicon Labs Project Configuration Tools: slcp, v0, Component selection file. +project_name: platform_timer_cascading +label: platform_timer_cascading + +description: | + This project cascades two 32-bit timers to be able to utilize a virtual 64-bit timer peripheral. The cascading is both done via PRS and the default cascade interface. + +category: Example|Platform +package: Platform +quality: experimental + +filter: + - name: Device Type + value: [SoC] + - name: MCU + value: [32-bit MCU] + - name: Project Difficulty + value: [Beginner] + +readme: + - path: ../README.md + +source: + - path: ../src/app.c + - path: ../src/main.c + +include: + - path: ../inc + file_list: + - path: app.h + +component: + - id: sl_system + - id: device_init + - id: emlib_timer + - id: emlib_prs + - id: emlib_gpio_simple_init + instance: [timer0, timer1] + +config_file: + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer0 + path: ../config/brd4186c/sl_emlib_gpio_init_timer0_config.h + condition: [brd4186c] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer1 + path: ../config/brd4186c/sl_emlib_gpio_init_timer1_config.h + condition: [brd4186c] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer0 + path: ../config/brd4181c/sl_emlib_gpio_init_timer0_config.h + condition: [brd4181c] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer1 + path: ../config/brd4181c/sl_emlib_gpio_init_timer1_config.h + condition: [brd4181c] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer0 + path: ../config/brd4210a/sl_emlib_gpio_init_timer0_config.h + condition: [brd4210a] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer1 + path: ../config/brd4210a/sl_emlib_gpio_init_timer1_config.h + condition: [brd4210a] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer0 + path: ../config/brd4182a/sl_emlib_gpio_init_timer0_config.h + condition: [brd4182a] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer1 + path: ../config/brd4182a/sl_emlib_gpio_init_timer1_config.h + condition: [brd4182a] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer0 + path: ../config/brd4270b/sl_emlib_gpio_init_timer0_config.h + condition: [brd4270b] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer1 + path: ../config/brd4270b/sl_emlib_gpio_init_timer1_config.h + condition: [brd4270b] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer0 + path: ../config/brd4194a/sl_emlib_gpio_init_timer0_config.h + condition: [brd4194a] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer1 + path: ../config/brd4194a/sl_emlib_gpio_init_timer1_config.h + condition: [brd4194a] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer0 + path: ../config/brd4400c/sl_emlib_gpio_init_timer0_config.h + condition: [brd4400c] + - override: + component: emlib_gpio_simple_init + file_id: emlib_gpio_simple_init_config_file_id + instance: timer1 + path: ../config/brd4400c/sl_emlib_gpio_init_timer1_config.h + condition: [brd4400c] + +define: + - name: DEBUG_EFM + +other_file: + - path: ../image/create_project.png + directory: "image" + +ui_hints: + highlight: + - path: README.md + focus: true diff --git a/platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer0_config.h b/platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer0_config.h new file mode 100644 index 0000000..dc8ee44 --- /dev/null +++ b/platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer0_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER0_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER0_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER0 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER0] +#define SL_EMLIB_GPIO_INIT_TIMER0_PORT gpioPortD +#define SL_EMLIB_GPIO_INIT_TIMER0_PIN 2 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H diff --git a/platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer1_config.h b/platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer1_config.h new file mode 100644 index 0000000..27a0454 --- /dev/null +++ b/platform_timer_cascade/config/brd4181c/sl_emlib_gpio_init_timer1_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER1_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER1_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER1 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER1] +#define SL_EMLIB_GPIO_INIT_TIMER1_PORT gpioPortD +#define SL_EMLIB_GPIO_INIT_TIMER1_PIN 3 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H diff --git a/platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer0_config.h b/platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer0_config.h new file mode 100644 index 0000000..dc8ee44 --- /dev/null +++ b/platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer0_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER0_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER0_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER0 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER0] +#define SL_EMLIB_GPIO_INIT_TIMER0_PORT gpioPortD +#define SL_EMLIB_GPIO_INIT_TIMER0_PIN 2 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H diff --git a/platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer1_config.h b/platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer1_config.h new file mode 100644 index 0000000..27a0454 --- /dev/null +++ b/platform_timer_cascade/config/brd4182a/sl_emlib_gpio_init_timer1_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER1_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER1_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER1 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER1] +#define SL_EMLIB_GPIO_INIT_TIMER1_PORT gpioPortD +#define SL_EMLIB_GPIO_INIT_TIMER1_PIN 3 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H diff --git a/platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer0_config.h b/platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer0_config.h new file mode 100644 index 0000000..63ce3cb --- /dev/null +++ b/platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer0_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER0_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER0_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER0 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER0] +#define SL_EMLIB_GPIO_INIT_TIMER0_PORT gpioPortB +#define SL_EMLIB_GPIO_INIT_TIMER0_PIN 2 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H diff --git a/platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer1_config.h b/platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer1_config.h new file mode 100644 index 0000000..801b87e --- /dev/null +++ b/platform_timer_cascade/config/brd4186c/sl_emlib_gpio_init_timer1_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER1_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER1_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER1 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER1] +#define SL_EMLIB_GPIO_INIT_TIMER1_PORT gpioPortB +#define SL_EMLIB_GPIO_INIT_TIMER1_PIN 4 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H diff --git a/platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer0_config.h b/platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer0_config.h new file mode 100644 index 0000000..c469d45 --- /dev/null +++ b/platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer0_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER0_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER0_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER0 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER0] +#define SL_EMLIB_GPIO_INIT_TIMER0_PORT gpioPortB +#define SL_EMLIB_GPIO_INIT_TIMER0_PIN 0 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H diff --git a/platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer1_config.h b/platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer1_config.h new file mode 100644 index 0000000..a55331e --- /dev/null +++ b/platform_timer_cascade/config/brd4194a/sl_emlib_gpio_init_timer1_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER1_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER1_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER1 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER1] +#define SL_EMLIB_GPIO_INIT_TIMER1_PORT gpioPortB +#define SL_EMLIB_GPIO_INIT_TIMER1_PIN 1 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H diff --git a/platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer0_config.h b/platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer0_config.h new file mode 100644 index 0000000..63ce3cb --- /dev/null +++ b/platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer0_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER0_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER0_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER0 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER0] +#define SL_EMLIB_GPIO_INIT_TIMER0_PORT gpioPortB +#define SL_EMLIB_GPIO_INIT_TIMER0_PIN 2 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H diff --git a/platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer1_config.h b/platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer1_config.h new file mode 100644 index 0000000..27a0454 --- /dev/null +++ b/platform_timer_cascade/config/brd4210a/sl_emlib_gpio_init_timer1_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER1_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER1_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER1 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER1] +#define SL_EMLIB_GPIO_INIT_TIMER1_PORT gpioPortD +#define SL_EMLIB_GPIO_INIT_TIMER1_PIN 3 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H diff --git a/platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer0_config.h b/platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer0_config.h new file mode 100644 index 0000000..5fb450c --- /dev/null +++ b/platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer0_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER0_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER0_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER0 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER0] +#define SL_EMLIB_GPIO_INIT_TIMER0_PORT gpioPortC +#define SL_EMLIB_GPIO_INIT_TIMER0_PIN 6 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H diff --git a/platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer1_config.h b/platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer1_config.h new file mode 100644 index 0000000..3025bf3 --- /dev/null +++ b/platform_timer_cascade/config/brd4270b/sl_emlib_gpio_init_timer1_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER1_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER1_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER1 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER1] +#define SL_EMLIB_GPIO_INIT_TIMER1_PORT gpioPortC +#define SL_EMLIB_GPIO_INIT_TIMER1_PIN 7 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H diff --git a/platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer0_config.h b/platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer0_config.h new file mode 100644 index 0000000..63ce3cb --- /dev/null +++ b/platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer0_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER0_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER0_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER0 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER0] +#define SL_EMLIB_GPIO_INIT_TIMER0_PORT gpioPortB +#define SL_EMLIB_GPIO_INIT_TIMER0_PIN 2 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER0_CONFIG_H diff --git a/platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer1_config.h b/platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer1_config.h new file mode 100644 index 0000000..27a0454 --- /dev/null +++ b/platform_timer_cascade/config/brd4400c/sl_emlib_gpio_init_timer1_config.h @@ -0,0 +1,51 @@ +#ifndef SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H +#define SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Pin settings + +// Pin mode +// Disabled +// Input +// Input with pull-up/down +// Input with pull-up/down and filter +// Push-pull output +// Push-pull output (alternate) +// Open-source output +// Open-source output with pull-down +// Open-drain output +// Open-drain output with filter +// Open-drain output with pull-up +// Open-drain output with pull-up and filter +// Open-drain output (alternate) +// Open-drain output with filter (alternate) +// Open-drain output with pull-up (alternate) +// Open-drain output with pull-up and +// filter (alternate) +// Default: gpioModePushPull +#define SL_EMLIB_GPIO_INIT_TIMER1_MODE gpioModePushPull + +// DOUT <0-1> +// In push-pull mode: The drive direction for the pin +// In input mode: Pull-up (1) or pull-down (0) +// In open-source mode: Set to 0 for the idle state +// In open-drain mode: Set to 1 for the idle state +// Default: 0 +#define SL_EMLIB_GPIO_INIT_TIMER1_DOUT 0 + +// end pin settings + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// SL_EMLIB_GPIO_INIT_TIMER1 +// $[GPIO_SL_EMLIB_GPIO_INIT_TIMER1] +#define SL_EMLIB_GPIO_INIT_TIMER1_PORT gpioPortD +#define SL_EMLIB_GPIO_INIT_TIMER1_PIN 3 +// [GPIO_SL_EMLIB_GPIO_INIT_TIMER1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_EMLIB_GPIO_INIT_TIMER1_CONFIG_H diff --git a/platform_timer_cascade/image/create_project.png b/platform_timer_cascade/image/create_project.png new file mode 100644 index 0000000000000000000000000000000000000000..415dd661dc9ebafcac55a79e5d99a3d344527e6f GIT binary patch literal 94729 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

Kfu0?I{wwCgZ~rtdJZdiwT#xgkZzxo$JWj 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 2020 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#ifndef APP_H +#define APP_H + +/***************************************************************************//** + * Initialize application. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * App ticking function. + ******************************************************************************/ +void app_process_action(void); + +#endif // APP_H diff --git a/platform_timer_cascade/src/app.c b/platform_timer_cascade/src/app.c new file mode 100644 index 0000000..88c57d5 --- /dev/null +++ b/platform_timer_cascade/src/app.c @@ -0,0 +1,233 @@ +/***************************************************************************//** + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#include "em_chip.h" +#include "em_cmu.h" +#include "em_device.h" +#include "em_emu.h" +#include "em_gpio.h" +#include "em_prs.h" +#include "em_timer.h" + +#include "sl_emlib_gpio_simple_init.h" +#include "sl_emlib_gpio_init_timer0_config.h" +#include "sl_emlib_gpio_init_timer1_config.h" + +/******************************************************************************* + ******************************* DEFINES *********************************** + ******************************************************************************/ + +#define PRS_MODE 1 + +#define TIMER0_OUT_FREQ 1 + +#define TIMER1_TOP 2 + +#if (PRS_MODE) +#define TIMER0_PRS_CHANNEL 0 +#define TIMER1_PRS_CHANNEL 1 +#endif + +/**************************************************************************//** + * @brief CMU initialization + *****************************************************************************/ +static void initCMU(void) +{ + // Enable peripheral clocks +#if (PRS_MODE) + CMU_ClockEnable(cmuClock_PRS, true); +#endif + + CMU_ClockEnable(cmuClock_TIMER0, true); + + CMU_ClockEnable(cmuClock_TIMER1, true); +} + +#if (PRS_MODE) + +/**************************************************************************//** + * @brief PRS initialization + *****************************************************************************/ +static void initPRS(void) +{ + // Connect TIMER0's output to a PRS channel + PRS_SourceAsyncSignalSet(TIMER0_PRS_CHANNEL, + PRS_ASYNC_CH_CTRL_SOURCESEL_TIMER0, + _PRS_ASYNC_CH_CTRL_SIGSEL_TIMER0CC0); + + // Connect TIMER1's output to a PRS channel + PRS_SourceAsyncSignalSet(TIMER1_PRS_CHANNEL, + PRS_ASYNC_CH_CTRL_SOURCESEL_TIMER1, + _PRS_ASYNC_CH_CTRL_SIGSEL_TIMER1CC0); +} + +#endif + +/**************************************************************************//** + * @brief TIMER0 initialization + *****************************************************************************/ +static void initTIMER0(void) +{ + uint32_t timerFreq, topValue; + TIMER_Init_TypeDef timer0_Init = TIMER_INIT_DEFAULT; + TIMER_InitCC_TypeDef timer0_CCInit = TIMER_INITCC_DEFAULT; + + // Don't start counter on initialization + timer0_Init.enable = false; + + // Configure capture/compare channel for output compare + timer0_CCInit.mode = timerCCModeCompare; + timer0_CCInit.cofoa = timerOutputActionToggle; + +#if (PRS_MODE) + // Configure the output to create PRS pulses + timer0_CCInit.prsOutput = timerPrsOutputPulse; +#endif + + // Timer initialization + TIMER_Init(TIMER0, &timer0_Init); + + // Route CC0 output to a GPIO + GPIO->TIMERROUTE[0].ROUTEEN = GPIO_TIMER_ROUTEEN_CC0PEN; + GPIO->TIMERROUTE[0].CC0ROUTE = + (SL_EMLIB_GPIO_INIT_TIMER0_PORT << _GPIO_TIMER_CC0ROUTE_PORT_SHIFT) + | (SL_EMLIB_GPIO_INIT_TIMER0_PIN << + _GPIO_TIMER_CC0ROUTE_PIN_SHIFT); + + // Timer Compare/Capture channel 0 initialization + TIMER_InitCC(TIMER0, 0, &timer0_CCInit); + + /* + * Set the TOP register value. Each time the counter overflows TOP + * is one half of the signal period. + */ + timerFreq = CMU_ClockFreqGet(cmuClock_TIMER0) / (timer0_Init.prescale + 1); + topValue = timerFreq / (2 * TIMER0_OUT_FREQ) - 1; + TIMER_TopSet(TIMER0, topValue); + + // Enable TIMER0 interrupts + TIMER_IntEnable(TIMER0, TIMER_IEN_CC0 | TIMER_IEN_OF); + NVIC_ClearPendingIRQ(TIMER0_IRQn); + NVIC_EnableIRQ(TIMER0_IRQn); + + // Now start the TIMER + TIMER_Enable(TIMER0, true); +} + +/**************************************************************************//** + * @brief TIMER1 initialization + *****************************************************************************/ +static void initTIMER1(void) +{ + TIMER_Init_TypeDef timer1_Init = TIMER_INIT_DEFAULT; + TIMER_InitCC_TypeDef timer1_CC0Init = TIMER_INITCC_DEFAULT; + + // Don't start counter on initialization + timer1_Init.enable = false; +#if (PRS_MODE) + // Use CC1 as a PRS input + TIMER_InitCC_TypeDef timer1_CC1Init = TIMER_INITCC_DEFAULT; + + // Configure capture/compare channel for input capture + timer1_Init.clkSel = timerClkSelCC1; + timer1_CC1Init.mode = timerCCModeCapture; + + // Select the TIMER0's PRS signal + timer1_CC1Init.prsSel = TIMER0_PRS_CHANNEL; + timer1_CC1Init.prsInput = true; + timer1_CC1Init.prsInputType = timerPrsInputAsyncPulse; +#else + // Select the previous timer's (TIMER0) output as a clock source + timer1_Init.clkSel = timerClkSelCascade; +#endif + // Configure capture/compare channel for output compare + timer1_CC0Init.mode = timerCCModeCompare; + timer1_CC0Init.cofoa = timerOutputActionToggle; + + // Timer initialization + TIMER_Init(TIMER1, &timer1_Init); + + // Route CC0 output to a GPIO + GPIO->TIMERROUTE[1].ROUTEEN = GPIO_TIMER_ROUTEEN_CC0PEN; + GPIO->TIMERROUTE[1].CC0ROUTE = + (SL_EMLIB_GPIO_INIT_TIMER1_PORT << _GPIO_TIMER_CC0ROUTE_PORT_SHIFT) + | (SL_EMLIB_GPIO_INIT_TIMER1_PIN << + _GPIO_TIMER_CC0ROUTE_PIN_SHIFT); + +#if (PRS_MODE) + // Timer Compare/Capture channel 1 initialization + TIMER_InitCC(TIMER1, 1, &timer1_CC1Init); +#endif + + // Timer Compare/Capture channel 0 initialization + TIMER_InitCC(TIMER1, 0, &timer1_CC0Init); + + // Set the TOP register value. + + TIMER_TopSet(TIMER1, TIMER1_TOP - 1); + + // Enable TIMER1 interrupts + TIMER_IntEnable(TIMER1, TIMER_IEN_CC0 | TIMER_IEN_CC1 | TIMER_IEN_OF); + NVIC_ClearPendingIRQ(TIMER1_IRQn); + NVIC_EnableIRQ(TIMER1_IRQn); + + // Now start the TIMER + TIMER_Enable(TIMER1, true); +} + +void TIMER0_IRQHandler(void) +{ + // Acknowledge the interrupt + uint32_t flags = TIMER_IntGet(TIMER0); + + // Clear interrupt flags + TIMER_IntClear(TIMER0, flags); +} + +void TIMER1_IRQHandler(void) +{ + // Acknowledge the interrupt + uint32_t flags = TIMER_IntGet(TIMER1); + + // Clear interrupt flags + TIMER_IntClear(TIMER1, flags); +} + +/******************************************************************************* + ************************** GLOBAL FUNCTIONS ******************************* + ******************************************************************************/ + +/***************************************************************************//** + * Initialize example. + ******************************************************************************/ +void app_init(void) +{ + // Enable clock sources for all of the used peripherals + initCMU(); +#if (PRS_MODE) + // Initialize the PRS peripheral + initPRS(); +#endif + // Initialize the TIMERs + initTIMER0(); + initTIMER1(); +} + +/***************************************************************************//** + * App ticking function. + ******************************************************************************/ +void app_process_action(void) +{ + // Nothing +} diff --git a/platform_timer_cascade/src/main.c b/platform_timer_cascade/src/main.c new file mode 100644 index 0000000..9ab168a --- /dev/null +++ b/platform_timer_cascade/src/main.c @@ -0,0 +1,58 @@ +/***************************************************************************//** + * @file main.c + * @brief main() function. + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/templates.xml b/templates.xml index 4b5a3b9..ee5e5ba 100644 --- a/templates.xml +++ b/templates.xml @@ -776,4 +776,19 @@ + + + + + + + + + + + + + + +