| /* |
| * 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; |
| } |