From 7031eabcfcdb606998d5398e22676d2714355596 Mon Sep 17 00:00:00 2001 From: Evan Lojewski Date: Wed, 28 Oct 2020 21:04:32 -0600 Subject: timer: Add an initial timer library. (#155) --- libs/Timer/CMakeLists.txt | 67 +++++++++++++++++++++++++++ libs/Timer/include/Timer.h | 112 +++++++++++++++++++++++++++++++++++++++++++++ libs/Timer/timer.c | 85 ++++++++++++++++++++++++++++++++++ 3 files changed, 264 insertions(+) create mode 100644 libs/Timer/CMakeLists.txt create mode 100644 libs/Timer/include/Timer.h create mode 100644 libs/Timer/timer.c (limited to 'libs/Timer') diff --git a/libs/Timer/CMakeLists.txt b/libs/Timer/CMakeLists.txt new file mode 100644 index 0000000..47589a4 --- /dev/null +++ b/libs/Timer/CMakeLists.txt @@ -0,0 +1,67 @@ +################################################################################ +### +### @file libs/Timer/CMakeLists.txt +### +### @project bcm5719-fw +### +### @brief Timer CMake file +### +################################################################################ +### +################################################################################ +### +### @copyright Copyright (c) 2020, Evan Lojewski +### @cond +### +### All rights reserved. +### +### Redistribution and use in source and binary forms, with or without +### modification, are permitted provided that the following conditions are met: +### 1. Redistributions of source code must retain the above copyright notice, +### this list of conditions and the following disclaimer. +### 2. Redistributions in binary form must reproduce the above copyright notice, +### this list of conditions and the following disclaimer in the documentation +### and/or other materials provided with the distribution. +### 3. Neither the name of the copyright holder nor the +### names of its contributors may be used to endorse or promote products +### derived from this software without specific prior written permission. +### +################################################################################ +### +### THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +### AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +### IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +### ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +### LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +### CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +### SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +### INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +### CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +### ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +### POSSIBILITY OF SUCH DAMAGE. +### @endcond +################################################################################ + +project(Timer) + +SET(${PROJECT_NAME}_SRC + timer.c include/Timer.h +) + +# Host Simulation library +simulator_add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SRC}) +target_link_libraries(${PROJECT_NAME} PRIVATE simulator) +target_include_directories(${PROJECT_NAME} PUBLIC ../../include) +target_include_directories(${PROJECT_NAME} PUBLIC include) + +# MIPS Library +mips_add_library(${PROJECT_NAME}-mips STATIC ${${PROJECT_NAME}_SRC}) +target_include_directories(${PROJECT_NAME}-mips PUBLIC ../../include) +target_include_directories(${PROJECT_NAME}-mips PUBLIC include) + +# ARM Library +arm_add_library(${PROJECT_NAME}-arm STATIC ${${PROJECT_NAME}_SRC}) +target_include_directories(${PROJECT_NAME}-arm PUBLIC ../../include) +target_include_directories(${PROJECT_NAME}-arm PUBLIC include) + +format_target_sources(${PROJECT_NAME}) diff --git a/libs/Timer/include/Timer.h b/libs/Timer/include/Timer.h new file mode 100644 index 0000000..a443bb6 --- /dev/null +++ b/libs/Timer/include/Timer.h @@ -0,0 +1,112 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// @file Timer.h +/// +/// @project +/// +/// @brief Timer Support Routines +/// +//////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// @copyright Copyright (c) 2020, Evan Lojewski +/// @cond +/// +/// All rights reserved. +/// +/// Redistribution and use in source and binary forms, with or without +/// modification, are permitted provided that the following conditions are met: +/// 1. Redistributions of source code must retain the above copyright notice, +/// this list of conditions and the following disclaimer. +/// 2. Redistributions in binary form must reproduce the above copyright notice, +/// this list of conditions and the following disclaimer in the documentation +/// and/or other materials provided with the distribution. +/// 3. Neither the name of the copyright holder nor the +/// names of its contributors may be used to endorse or promote products +/// derived from this software without specific prior written permission. +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +/// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +/// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +/// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +/// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +/// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +/// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +/// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +/// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +/// POSSIBILITY OF SUCH DAMAGE. +/// @endcond +//////////////////////////////////////////////////////////////////////////////// +#ifndef TIMER_H +#define TIMER_H + +#include + +/** + * @fn uint32_t Timer_getCurrentTime10Hz(void); + * + * @brief Returns the current time for the 10Hz timer. + * + * @returns The current 10Hz time + */ +uint32_t Timer_getCurrentTime10Hz(void); + +/** + * @fn bool Timer_didTimeElapsed10Hz(uint32_t startTime, uint32_t checkTime); + * + * @brief DEtermines if the specified time has elapsed. + * + * @param startTime The start time to compare with + * @param checkTime The delta minimum time required to elapse. + * + * @returns true if the time has elapsed, false otherwise. + */ +bool Timer_didTimeElapsed10Hz(uint32_t startTime, uint32_t checkTime); + +/** + * @fn uint32_t Timer_getCurrentTime1KHz(void); + * + * @brief Returns the current time for the 1KHz timer. + * + * @returns The current 1KHz time + */ +uint32_t Timer_getCurrentTime1KHz(void); + +/** + * @fn bool Timer_didTimeElapsed1KHz(uint32_t startTime, uint32_t checkTime); + * + * @brief DEtermines if the specified time has elapsed. + * + * @param startTime The start time to compare with + * @param checkTime The delta minimum time required to elapse. + * + * @returns true if the time has elapsed, false otherwise. + */ +bool Timer_didTimeElapsed1KHz(uint32_t startTime, uint32_t checkTime); + +/** + * @fn uint32_t Timer_getCurrentTime1MHz(void); + * + * @brief Returns the current time for the 1MHz timer. + * + * @returns The current 1MHz time + */ +uint32_t Timer_getCurrentTime1MHz(void); + +/** + * @fn bool Timer_didTimeElapsed1MHz(uint32_t startTime, uint32_t checkTime); + * + * @brief DEtermines if the specified time has elapsed. + * + * @param startTime The start time to compare with + * @param checkTime The delta minimum time required to elapse. + * + * @returns true if the time has elapsed, false otherwise. + */ +bool Timer_didTimeElapsed1MHz(uint32_t startTime, uint32_t checkTime); + +#endif /* TIMER_H */ diff --git a/libs/Timer/timer.c b/libs/Timer/timer.c new file mode 100644 index 0000000..632148a --- /dev/null +++ b/libs/Timer/timer.c @@ -0,0 +1,85 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// @file MII.c +/// +/// @project +/// +/// @brief MII Support Routines +/// +//////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// @copyright Copyright (c) 2020, Evan Lojewski +/// @cond +/// +/// All rights reserved. +/// +/// Redistribution and use in source and binary forms, with or without +/// modification, are permitted provided that the following conditions are met: +/// 1. Redistributions of source code must retain the above copyright notice, +/// this list of conditions and the following disclaimer. +/// 2. Redistributions in binary form must reproduce the above copyright notice, +/// this list of conditions and the following disclaimer in the documentation +/// and/or other materials provided with the distribution. +/// 3. Neither the name of the copyright holder nor the +/// names of its contributors may be used to endorse or promote products +/// derived from this software without specific prior written permission. +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +/// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +/// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +/// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +/// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +/// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +/// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +/// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +/// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +/// POSSIBILITY OF SUCH DAMAGE. +/// @endcond +//////////////////////////////////////////////////////////////////////////////// + +#include + +#ifdef __mips__ +#include +#else +#include +#endif + +#ifdef CXX_SIMULATOR +#define volatile +#endif + +uint32_t Timer_getCurrentTime10Hz(void) +{ + return APE.Tick10hz.r32; +} + +bool Timer_didTimeElapsed10Hz(uint32_t startTime, uint32_t checkTime) +{ + return (APE.Tick10hz.r32 - startTime) > checkTime; +} + +uint32_t Timer_getCurrentTime1KHz(void) +{ + return APE.Tick1khz.r32; +} + +bool Timer_didTimeElapsed1KHz(uint32_t startTime, uint32_t checkTime) +{ + return (APE.Tick1khz.r32 - startTime) > checkTime; +} + +uint32_t Timer_getCurrentTime1MHz(void) +{ + return APE.Tick1mhz.r32; +} + +bool Timer_didTimeElapsed1MHz(uint32_t startTime, uint32_t checkTime) +{ + return (APE.Tick1mhz.r32 - startTime) > checkTime; +} -- cgit v1.2.1