source: rtems/c/src/lib/libcpu/arm/at91rm9200/pmc/pmc.c @ 9b4422a2

4.115
Last change on this file since 9b4422a2 was 9b4422a2, checked in by Joel Sherrill <joel.sherrill@…>, on 05/03/12 at 15:09:24

Remove All CVS Id Strings Possible Using a Script

Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines

next to each other after Id string line removed.

+ remove entire comment blocks which only exited to

contain CVS Ids

+ If the processing left a blank line at the top of

a file, it was removed.

  • Property mode set to 100644
File size: 2.4 KB
Line 
1/*
2 * Atmel AT91RM9200 PMC functions
3 *
4 * Copyright (c) 2004 by Jay Monkman <jtm@lopingdog.com>
5 *
6 *  The license and distribution terms for this file may be
7 *  found in the file LICENSE in this distribution or at
8 *  http://www.rtems.com/license/LICENSE.
9 */
10
11#include <rtems.h>
12#include <bsp.h>
13#include <at91rm9200.h>
14#include <at91rm9200_pmc.h>
15
16int at91rm9200_get_mainclk(void)
17{
18    return BSP_MAIN_FREQ;
19}
20
21int at91rm9200_get_slck(void)
22{
23    return BSP_SLCK_FREQ;
24}
25
26int at91rm9200_get_mck(void)
27{
28    uint32_t mck_reg;
29    uint32_t mck_freq = 0;  /* to avoid warnings */
30    uint32_t pll_reg;
31    int prescaler = 0;  /* to avoid warnings */
32
33    mck_reg = PMC_REG(PMC_MCKR);
34
35    switch(mck_reg & PMC_MCKR_PRES_MASK) {
36    case PMC_MCKR_PRES_1:
37        prescaler = 1;
38        break;
39    case PMC_MCKR_PRES_2:
40        prescaler = 2;
41        break;
42    case PMC_MCKR_PRES_4:
43        prescaler = 4;
44        break;
45    case PMC_MCKR_PRES_8:
46        prescaler = 8;
47        break;
48    case PMC_MCKR_PRES_16:
49        prescaler = 16;
50        break;
51    case PMC_MCKR_PRES_32:
52        prescaler = 32;
53        break;
54    case PMC_MCKR_PRES_64:
55        prescaler = 64;
56        break;
57    }
58
59    /* Let's find out what MCK's source is */
60    switch (mck_reg & PMC_MCKR_CSS_MASK) {
61    case PMC_MCKR_CSS_SLOW:
62        /* I'm assuming the slow clock is 32.768 MHz */
63        mck_freq = at91rm9200_get_slck() / prescaler;
64        break;
65
66    case PMC_MCKR_CSS_MAIN:
67        mck_freq = at91rm9200_get_mainclk() / prescaler;
68        break;
69
70    case PMC_MCKR_CSS_PLLA:
71        pll_reg = PMC_REG(PMC_PLLAR);
72        mck_freq = at91rm9200_get_mainclk() / prescaler;
73        mck_freq = mck_freq / (pll_reg & PMC_PLLAR_DIV_MASK);
74        mck_freq = mck_freq * (((pll_reg & PMC_PLLAR_MUL_MASK) >> 16) + 1);
75        break;
76
77    case PMC_MCKR_CSS_PLLB:
78        pll_reg = PMC_REG(PMC_PLLBR);
79        mck_freq = at91rm9200_get_mainclk() / prescaler;
80        mck_freq = mck_freq / (pll_reg & PMC_PLLBR_DIV_MASK);
81        mck_freq = mck_freq * (((pll_reg & PMC_PLLBR_MUL_MASK) >> 16) + 1);
82        break;
83    }
84
85    if ((mck_reg & PMC_MCKR_MDIV_MASK) == PMC_MCKR_MDIV_2) {
86        mck_freq = mck_freq / 2;
87    } else if ((mck_reg & PMC_MCKR_MDIV_MASK) == PMC_MCKR_MDIV_3) {
88        mck_freq = mck_freq / 3;
89    } else if ((mck_reg & PMC_MCKR_MDIV_MASK) == PMC_MCKR_MDIV_4) {
90        mck_freq = mck_freq / 4;
91    }
92
93
94    return mck_freq;
95}
96
Note: See TracBrowser for help on using the repository browser.