source: rtems/c/src/lib/libbsp/m68k/genmcf548x/clock/clock.c @ 27b355b

4.104.115
Last change on this file since 27b355b was 27b355b, checked in by Ralf Corsepius <ralf.corsepius@…>, on Sep 30, 2008 at 5:10:09 AM

2008-09-30 Ralf Corsépius <ralf.corsepius@…>

  • clock/clock.c: include "../../../shared/clockdrv_shell.h".
  • Makefile.am: Reflect changes above.
  • Property mode set to 100644
File size: 5.2 KB
Line 
1/*===============================================================*\
2| Project: RTEMS generic mcf548x BSP                              |
3+-----------------------------------------------------------------+
4| File: clock.c                                                   |
5+-----------------------------------------------------------------+
6| The file contains the clock driver code of generic MCF548x BSP. |
7+-----------------------------------------------------------------+
8|                    Copyright (c) 2007                           |
9|                    Embedded Brains GmbH                         |
10|                    Obere Lagerstr. 30                           |
11|                    D-82178 Puchheim                             |
12|                    Germany                                      |
13|                    rtems@embedded-brains.de                     |
14+-----------------------------------------------------------------+
15|                                                                 |
16| Parts of the code has been derived from the "dBUG source code"  |
17| package Freescale is providing for M548X EVBs. The usage of     |
18| the modified or unmodified code and it's integration into the   |
19| generic mcf548x BSP has been done according to the Freescale    |
20| license terms.                                                  |
21|                                                                 |
22| The Freescale license terms can be reviewed in the file         |
23|                                                                 |
24|    Freescale_license.txt                                        |
25|                                                                 |
26+-----------------------------------------------------------------+
27|                                                                 |
28| The generic mcf548x BSP has been developed on the basic         |
29| structures and modules of the av5282 BSP.                       |
30|                                                                 |
31+-----------------------------------------------------------------+
32|                                                                 |
33| The license and distribution terms for this file may be         |
34| found in the file LICENSE in this distribution or at            |
35|                                                                 |
36| http://www.rtems.com/license/LICENSE.                           |
37|                                                                 |
38+-----------------------------------------------------------------+
39|                                                                 |
40|   date                      history                        ID   |
41| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
42| 12.11.07                    1.0                            ras  |
43|                                                                 |
44\*===============================================================*/
45
46/*
47 * Use first slice timer (SLT0) as the system clock.
48 *
49 */
50
51#include <rtems.h>
52#include <bsp.h>
53#include <mcf548x/mcf548x.h>
54
55/*
56 * Use SLT 0
57 */
58#define CLOCK_VECTOR (64+54)
59
60/*
61 * Periodic interval timer interrupt handler
62 */
63#define Clock_driver_support_at_tick()             \
64    do {                                           \
65        MCF548X_SLT_SSR0 = MCF548X_SLT_SSR_ST;     \
66    } while (0)                                    \
67
68/*
69 * Attach clock interrupt handler
70 */
71#define Clock_driver_support_install_isr( _new, _old )                   \
72    do {                                                                 \
73        _old = (rtems_isr_entry)set_vector(_new, CLOCK_VECTOR, 1);       \
74    } while(0)
75
76/*
77 * Turn off the clock
78 */
79#define Clock_driver_support_shutdown_hardware()                         \
80    do {                                                                 \
81        MCF548X_SLT_SCR0 &= ~(MCF548X_SLT_SCR_TEN | MCF548X_SLT_SCR_RUN | MCF548X_SLT_SCR_IEN); \
82    } while(0)
83
84/*
85 * Set up the clock hardware
86 *
87 * We need to have 1 interrupt every 10,000 microseconds
88 * XLB clock 100 MHz / MCF548X_SLT_SLTCNT0 = XLB clock/100
89 */
90#define Clock_driver_support_initialize_hardware()                                             \
91    do {                                                                                       \
92        int level;                                                                             \
93        MCF548X_INTC_ICR54 =   MCF548X_INTC_ICRn_IL(SLT0_IRQ_LEVEL) |                          \
94                           MCF548X_INTC_ICRn_IP(SLT0_IRQ_PRIORITY);                            \
95        rtems_interrupt_disable( level );                                                      \
96        MCF548X_INTC_IMRH &= ~(MCF548X_INTC_IMRH_INT_MASK54 |                                  \
97                           MCF548X_INTC_IMRL_MASKALL);                                         \
98        rtems_interrupt_enable( level );                                                       \
99        MCF548X_SLT_SLTCNT0 = get_CPU_clock_speed()/100;                                   \
100                MCF548X_SLT_SCR0 |= (MCF548X_SLT_SCR_TEN | MCF548X_SLT_SCR_RUN | MCF548X_SLT_SCR_IEN); \
101    } while (0)
102
103#include "../../../shared/clockdrv_shell.h"
104
Note: See TracBrowser for help on using the repository browser.