source: rtems/c/src/lib/libbsp/m68k/uC5282/clock/clock.c @ 572484f

4.104.114.84.95
Last change on this file since 572484f was 572484f, checked in by Eric Norum <WENorum@…>, on 01/28/05 at 19:35:23

New BSP for Arcturus uCDIMM ColdFire? 5282.

  • Property mode set to 100644
File size: 2.6 KB
Line 
1/*
2 * Use the last periodic interval timer (PIT3) as the system clock.
3 *
4 *  $Id$
5 */
6
7#include <rtems.h>
8#include <bsp.h>
9#include <mcf5282/mcf5282.h>
10
11/*
12 * Use INTC0 base
13 */
14#define CLOCK_VECTOR (64+58)
15
16/*
17 * Periodic interval timer interrupt handler
18 */
19#define Clock_driver_support_at_tick()             \
20    do {                                           \
21        MCF5282_PIT3_PCSR |= MCF5282_PIT_PCSR_PIF; \
22    } while (0)                                    \
23
24/*
25 * Attach clock interrupt handler
26 */
27#define Clock_driver_support_install_isr( _new, _old )             \
28    do {                                                           \
29        _old = (rtems_isr_entry)set_vector(_new, CLOCK_VECTOR, 1);  \
30    } while(0)
31
32/*
33 * Turn off the clock
34 */
35#define Clock_driver_support_shutdown_hardware()   \
36    do {                                           \
37        MCF5282_PIT3_PCSR &= ~MCF5282_PIT_PCSR_EN; \
38    } while(0)
39
40/*
41 * Set up the clock hardware
42 *
43 * Prescale so that it counts in microseconds
44 * System clock frequency better be 2**n (1<=n<=16) MHz!
45 */
46#define Clock_driver_support_initialize_hardware()                       \
47    do {                                                                 \
48        int level;                                                       \
49        int preScaleCode = -2;                                           \
50        int preScaleDivisor = get_CPU_clock_speed() / 1000000;   \
51        while (preScaleDivisor) {                                        \
52            preScaleDivisor >>= 1;                                       \
53            preScaleCode++;                                              \
54        }                                                                \
55        MCF5282_INTC0_ICR58 = MCF5282_INTC_ICR_IL(PIT3_IRQ_LEVEL) |      \
56                              MCF5282_INTC_ICR_IP(PIT3_IRQ_PRIORITY);    \
57        rtems_interrupt_disable( level );                                \
58        MCF5282_INTC0_IMRH &= ~MCF5282_INTC_IMRH_INT58;                  \
59                MCF5282_PIT3_PCSR &= ~MCF5282_PIT_PCSR_EN;                       \
60        rtems_interrupt_enable( level );                                 \
61                MCF5282_PIT3_PMR = BSP_Configuration.microseconds_per_tick - 1;  \
62                MCF5282_PIT3_PCSR = MCF5282_PIT_PCSR_PRE(preScaleCode) |         \
63                            MCF5282_PIT_PCSR_PIE |                       \
64                            MCF5282_PIT_PCSR_RLD |                       \
65                            MCF5282_PIT_PCSR_EN;                         \
66    } while (0)
67
68#include "../../../shared/clockdrv_shell.c"
Note: See TracBrowser for help on using the repository browser.