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