mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-02 17:23:11 +00:00
Replace the existing Apache 2.0 boilerplate header with an SPDX tag throughout the zephyr code tree. This patch was generated via a script run over the master branch. Also updated doc/porting/application.rst that had a dependency on line numbers in a literal include. Manually updated subsys/logging/sys_log.c that had a malformed header in the original file. Also cleanup several cases that already had a SPDX tag and we either got a duplicate or missed updating. Jira: ZEP-1457 Change-Id: I6131a1d4ee0e58f5b938300c2d2fc77d2e69572c Signed-off-by: David B. Kinder <david.b.kinder@intel.com> Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
/*
|
|
* Copyright (c) 2016 Jean-Paul Etienne <fractalclone@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <kernel.h>
|
|
#include <arch/cpu.h>
|
|
#include <device.h>
|
|
#include <system_timer.h>
|
|
#include <board.h>
|
|
|
|
/* Timer Ctrl Bitfields */
|
|
#define TIMER_CTRL_EN (1 << 0) /* Timer Enable Bit */
|
|
#define TIMER_CTRL_PRE(x) (((x) & 0x07) << 3) /* Prescaler Value */
|
|
|
|
typedef struct {
|
|
uint32_t val;
|
|
uint32_t ctrl;
|
|
uint32_t cmp;
|
|
} pulpino_timer_t;
|
|
|
|
static volatile pulpino_timer_t *timer = (pulpino_timer_t *)PULP_TIMER_A_BASE;
|
|
|
|
static uint32_t accumulated_cycle_count;
|
|
|
|
static void pulpino_timer_irq_handler(void *unused)
|
|
{
|
|
ARG_UNUSED(unused);
|
|
|
|
/* Reset counter */
|
|
timer->val = 0;
|
|
|
|
accumulated_cycle_count += sys_clock_hw_cycles_per_tick;
|
|
|
|
_sys_clock_tick_announce();
|
|
}
|
|
|
|
#ifdef CONFIG_TICKLESS_IDLE
|
|
#error "Tickless idle not yet implemented for pulpino timer"
|
|
#endif
|
|
|
|
int _sys_clock_driver_init(struct device *device)
|
|
{
|
|
ARG_UNUSED(device);
|
|
IRQ_CONNECT(PULP_TIMER_A_CMP_IRQ, 0,
|
|
pulpino_timer_irq_handler, NULL, 0);
|
|
irq_enable(PULP_TIMER_A_CMP_IRQ);
|
|
|
|
/*
|
|
* Initialize timer.
|
|
* Reset counter and set timer to generate interrupt
|
|
* every sys_clock_hw_cycles_per_tick
|
|
*/
|
|
timer->val = 0;
|
|
timer->cmp = sys_clock_hw_cycles_per_tick;
|
|
timer->ctrl = TIMER_CTRL_EN;
|
|
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @brief Read the platform's timer hardware
|
|
*
|
|
* This routine returns the current time in terms of timer hardware clock
|
|
* cycles.
|
|
*
|
|
* @return up counter of elapsed clock cycles
|
|
*/
|
|
uint32_t k_cycle_get_32(void)
|
|
{
|
|
return accumulated_cycle_count + timer->val;
|
|
}
|