From b0eee0bcdf5ca3233d399b3df5bd445ea54a2bbd Mon Sep 17 00:00:00 2001 From: Fabien Chouteau Date: Sun, 17 Jul 2022 15:30:26 +0200 Subject: [PATCH] arch/ARM/cortex_m: add Systick package --- arch/ARM/cortex_m/src/cortex_m-systick.adb | 96 ++++++++++++++++++++++ arch/ARM/cortex_m/src/cortex_m-systick.ads | 55 +++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 arch/ARM/cortex_m/src/cortex_m-systick.adb create mode 100644 arch/ARM/cortex_m/src/cortex_m-systick.ads diff --git a/arch/ARM/cortex_m/src/cortex_m-systick.adb b/arch/ARM/cortex_m/src/cortex_m-systick.adb new file mode 100644 index 00000000..277118dd --- /dev/null +++ b/arch/ARM/cortex_m/src/cortex_m-systick.adb @@ -0,0 +1,96 @@ +------------------------------------------------------------------------------ +-- -- +-- Copyright (C) 2022, AdaCore -- +-- -- +-- Redistribution and use in source and binary forms, with or without -- +-- modification, are permitted provided that the following conditions are -- +-- met: -- +-- 1. Redistributions of source code must retain the above copyright -- +-- notice, this list of conditions and the following disclaimer. -- +-- 2. Redistributions in binary form must reproduce the above copyright -- +-- notice, this list of conditions and the following disclaimer in -- +-- the documentation and/or other materials provided with the -- +-- distribution. -- +-- 3. Neither the name of the copyright holder nor the names of its -- +-- contributors may be used to endorse or promote products derived -- +-- from this software without specific prior written permission. -- +-- -- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- +-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- +-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- +-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -- +-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -- +-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -- +-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -- +-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -- +-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -- +-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- +-- -- +------------------------------------------------------------------------------ + +with Cortex_M_SVD.SysTick; use Cortex_M_SVD.SysTick; + +with HAL; use HAL; + +package body Cortex_M.Systick is + + --------------- + -- Configure -- + --------------- + + procedure Configure + (Source : Clock_Source; + Generate_Interrupt : Boolean; + Reload_Value : HAL.UInt24) + is + begin + SysTick_Periph.CSR.CLKSOURCE := + (case Source is + when CPU_Clock => Cpu_Clk, + when External_Clock => External_Clk); + + SysTick_Periph.CSR.TICKINT := + (if Generate_Interrupt then Enable else Disable); + + SysTick_Periph.RVR.RELOAD := Reload_Value; + SysTick_Periph.CVR.CURRENT := Counter; + end Configure; + + ------------ + -- Enable -- + ------------ + + procedure Enable is + begin + SysTick_Periph.CSR.ENABLE := Enable; + end Enable; + + ------------- + -- Disable -- + ------------- + + procedure Disable is + begin + SysTick_Periph.CSR.ENABLE := Disable; + end Disable; + + --------------------- + -- Counted_To_Zero -- + --------------------- + + function Counted_To_Zero return Boolean is + begin + return SysTick_Periph.CSR.COUNTFLAG; + end Counted_To_Zero; + + ------------- + -- Counter -- + ------------- + + function Counter return HAL.UInt24 is + begin + return SysTick_Periph.CVR.CURRENT; + end Counter; + +end Cortex_M.Systick; diff --git a/arch/ARM/cortex_m/src/cortex_m-systick.ads b/arch/ARM/cortex_m/src/cortex_m-systick.ads new file mode 100644 index 00000000..6af1134d --- /dev/null +++ b/arch/ARM/cortex_m/src/cortex_m-systick.ads @@ -0,0 +1,55 @@ +------------------------------------------------------------------------------ +-- -- +-- Copyright (C) 2022, AdaCore -- +-- -- +-- Redistribution and use in source and binary forms, with or without -- +-- modification, are permitted provided that the following conditions are -- +-- met: -- +-- 1. Redistributions of source code must retain the above copyright -- +-- notice, this list of conditions and the following disclaimer. -- +-- 2. Redistributions in binary form must reproduce the above copyright -- +-- notice, this list of conditions and the following disclaimer in -- +-- the documentation and/or other materials provided with the -- +-- distribution. -- +-- 3. Neither the name of the copyright holder nor the names of its -- +-- contributors may be used to endorse or promote products derived -- +-- from this software without specific prior written permission. -- +-- -- +-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- +-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- +-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- +-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -- +-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -- +-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -- +-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -- +-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -- +-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -- +-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -- +-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -- +-- -- +------------------------------------------------------------------------------ + +with HAL; + +package Cortex_M.Systick is + pragma Preelaborate; + + type Clock_Source is (CPU_Clock, External_Clock); + + procedure Configure (Source : Clock_Source; + Generate_Interrupt : Boolean; + Reload_Value : HAL.UInt24); + + procedure Enable; + -- Enable Systick + + procedure Disable; + -- Disable Systick + + function Counted_To_Zero return Boolean; + -- Return the value of the COUNTFLAB bit of the Control and Status Register + + function Counter return HAL.UInt24; + -- Return the current value of the counter + +end Cortex_M.Systick;