forked from Minki/linux
55 lines
1.6 KiB
C
55 lines
1.6 KiB
C
|
/*
|
||
|
* include/asm-v850/v850e_timer_d.c -- `Timer D' component often used
|
||
|
* with V850E CPUs
|
||
|
*
|
||
|
* Copyright (C) 2001,02,03 NEC Electronics Corporation
|
||
|
* Copyright (C) 2001,02,03 Miles Bader <miles@gnu.org>
|
||
|
*
|
||
|
* This file is subject to the terms and conditions of the GNU General
|
||
|
* Public License. See the file COPYING in the main directory of this
|
||
|
* archive for more details.
|
||
|
*
|
||
|
* Written by Miles Bader <miles@gnu.org>
|
||
|
*/
|
||
|
|
||
|
#include <linux/kernel.h>
|
||
|
|
||
|
#include <asm/v850e_utils.h>
|
||
|
#include <asm/v850e_timer_d.h>
|
||
|
|
||
|
/* Start interval timer TIMER (0-3). The timer will issue the
|
||
|
corresponding INTCMD interrupt RATE times per second.
|
||
|
This function does not enable the interrupt. */
|
||
|
void v850e_timer_d_configure (unsigned timer, unsigned rate)
|
||
|
{
|
||
|
unsigned divlog2, count;
|
||
|
|
||
|
/* Calculate params for timer. */
|
||
|
if (! calc_counter_params (
|
||
|
V850E_TIMER_D_BASE_FREQ, rate,
|
||
|
V850E_TIMER_D_TMCD_CS_MIN, V850E_TIMER_D_TMCD_CS_MAX, 16,
|
||
|
&divlog2, &count))
|
||
|
printk (KERN_WARNING
|
||
|
"Cannot find interval timer %d setting suitable"
|
||
|
" for rate of %dHz.\n"
|
||
|
"Using rate of %dHz instead.\n",
|
||
|
timer, rate,
|
||
|
(V850E_TIMER_D_BASE_FREQ >> divlog2) >> 16);
|
||
|
|
||
|
/* Do the actual hardware timer initialization: */
|
||
|
|
||
|
/* Enable timer. */
|
||
|
V850E_TIMER_D_TMCD(timer) = V850E_TIMER_D_TMCD_CAE;
|
||
|
/* Set clock divider. */
|
||
|
V850E_TIMER_D_TMCD(timer)
|
||
|
= V850E_TIMER_D_TMCD_CAE
|
||
|
| V850E_TIMER_D_TMCD_CS(divlog2);
|
||
|
/* Set timer compare register. */
|
||
|
V850E_TIMER_D_CMD(timer) = count;
|
||
|
/* Start counting. */
|
||
|
V850E_TIMER_D_TMCD(timer)
|
||
|
= V850E_TIMER_D_TMCD_CAE
|
||
|
| V850E_TIMER_D_TMCD_CS(divlog2)
|
||
|
| V850E_TIMER_D_TMCD_CE;
|
||
|
}
|