]> rtime.felk.cvut.cz Git - sysless.git/blob - arch/arm/mach-lpc13xx/libs/hal/hal_machperiph.h
Added arch for lpc13xx
[sysless.git] / arch / arm / mach-lpc13xx / libs / hal / hal_machperiph.h
1 #ifndef _HAL_MACHPERIPH_H
2 #define _HAL_MACHPERIPH_H
3
4 #include <system_def.h>
5
6 /*----------------------------------------------------------------------------
7   Define clocks
8  *----------------------------------------------------------------------------*/
9
10 #define WDTOSCCTRL_Val        0x000000A0 //frekvence WDT oscilatoru 1,6MHz, delicka 2, vysledna frekvence 0.8MHz
11
12 #ifndef __SYS_OSC_CLK
13         #define __SYS_OSC_CLK     (    __XTAL)    /* Main oscillator frequency        */
14 #endif
15
16 #define __FREQSEL   ((WDTOSCCTRL_Val >> 5) & 0x0F)
17 #define __DIVSEL   (((WDTOSCCTRL_Val & 0x1F) << 1) + 2)
18
19 #ifdef WATCHDOG_ENABLED                    /* Watchdog Oscillator Setup*/
20         #if  (__FREQSEL ==  0)
21           #define __WDT_OSC_CLK        ( 400000 / __DIVSEL)
22         #elif (__FREQSEL ==  1)
23           #define __WDT_OSC_CLK        ( 500000 / __DIVSEL)
24         #elif (__FREQSEL ==  2)
25           #define __WDT_OSC_CLK        ( 800000 / __DIVSEL)
26         #elif (__FREQSEL ==  3)
27           #define __WDT_OSC_CLK        (1100000 / __DIVSEL)
28         #elif (__FREQSEL ==  4)
29           #define __WDT_OSC_CLK        (1400000 / __DIVSEL)
30         #elif (__FREQSEL ==  5)
31           #define __WDT_OSC_CLK        (1600000 / __DIVSEL)
32         #elif (__FREQSEL ==  6)
33           #define __WDT_OSC_CLK        (1800000 / __DIVSEL)
34         #elif (__FREQSEL ==  7)
35           #define __WDT_OSC_CLK        (2000000 / __DIVSEL)
36         #elif (__FREQSEL ==  8)
37           #define __WDT_OSC_CLK        (2200000 / __DIVSEL)
38         #elif (__FREQSEL ==  9)
39           #define __WDT_OSC_CLK        (2400000 / __DIVSEL)
40         #elif (__FREQSEL == 10)
41           #define __WDT_OSC_CLK        (2600000 / __DIVSEL)
42         #elif (__FREQSEL == 11)
43           #define __WDT_OSC_CLK        (2700000 / __DIVSEL)
44         #elif (__FREQSEL == 12)
45           #define __WDT_OSC_CLK        (2900000 / __DIVSEL)
46         #elif (__FREQSEL == 13)
47           #define __WDT_OSC_CLK        (3100000 / __DIVSEL)
48         #elif (__FREQSEL == 14)
49           #define __WDT_OSC_CLK        (3200000 / __DIVSEL)
50         #else
51           #define __WDT_OSC_CLK        (3400000 / __DIVSEL)
52         #endif
53 #else
54           #define __WDT_OSC_CLK        (1600000 / 2)
55 #endif  // WATCHDOG_ENABLED
56
57
58
59 #if (CLOCK_SETUP)                         /* Clock Setup              */
60   #if (SYSCLK_SETUP)                      /* System Clock Setup       */
61
62     /* sys_pllclkin calculation */
63     #if   ((SYSPLLCLKSEL_Val & 0x03) == 0)
64       #define __SYS_PLLCLKIN           (__IRC_OSC_CLK)
65     #elif ((SYSPLLCLKSEL_Val & 0x03) == 1)
66       #define __SYS_PLLCLKIN           (__SYS_OSC_CLK)
67     #elif ((SYSPLLCLKSEL_Val & 0x03) == 2)
68       #define __SYS_PLLCLKIN           (__WDT_OSC_CLK)
69     #else
70       #define __SYS_PLLCLKIN           (0)
71     #endif
72
73     #if (SYSPLL_SETUP)                    /* System PLL Setup         */
74       #define  __SYS_PLLCLKOUT         (__SYS_PLLCLKIN * ((SYSPLLCTRL_Val & 0x01F) + 1))
75     #else
76       #define  __SYS_PLLCLKOUT         (__SYS_PLLCLKIN * (1))
77     #endif  // SYSPLL_SETUP
78
79     /* main clock calculation */
80     #if   ((MAINCLKSEL_Val & 0x03) == 0)
81       #define __MAIN_CLOCK             (__IRC_OSC_CLK)
82     #elif ((MAINCLKSEL_Val & 0x03) == 1)
83       #define __MAIN_CLOCK             (__SYS_PLLCLKIN)
84     #elif ((MAINCLKSEL_Val & 0x03) == 2)
85       #define __MAIN_CLOCK             (__WDT_OSC_CLK)
86     #elif ((MAINCLKSEL_Val & 0x03) == 3)
87       #define __MAIN_CLOCK             (__SYS_PLLCLKOUT)
88     #else
89       #define __MAIN_CLOCK             (0)
90     #endif
91
92     #define __SYSTEM_CLOCK             (__MAIN_CLOCK / SYSAHBCLKDIV_Val)         
93
94   #else // SYSCLK_SETUP
95         #define __MAIN_CLOCK                 (__IRC_OSC_CLK)
96     #if (SYSAHBCLKDIV_Val == 0)
97       #define __SYSTEM_CLOCK           (0)
98     #else
99       #define __SYSTEM_CLOCK           (__MAIN_CLOCK / SYSAHBCLKDIV_Val)
100     #endif
101   #endif // SYSCLK_SETUP
102
103 #else
104   #define __SYSTEM_CLOCK               (__IRC_OSC_CLK)
105   #define __MAIN_CLOCK                 (__IRC_OSC_CLK)
106 #endif  // CLOCK_SETUP 
107
108 extern unsigned int system_frequency;   //Tahle promenna ma smysl,jen pokud by se za chodu menilo nastaveni hodin a bylo by treba upravit aktualni hodnotu.
109                                         //Jinak plati CCLK
110 #define CCLK    __SYSTEM_CLOCK       
111 #define PCLK    CCLK                    /* na LPC13xx se hodiny pousti do periferii primo povolenim prislusnych bitu v SYSAHBCLKCTRL */
112 #define PCLK2   __MAIN_CLOCK    /* UART, SPI atd. ma zdroj hodin pred delickou SYSAHBCLKDIV */
113
114 void system_clock_init(void);
115 void system_core_clock_update (void);
116 void power_down_unused_periph(void);
117
118 void lpc_watchdog_init(int on,int timeout_ms);
119 void lpc_watchdog_feed();
120
121 #endif /* _HAL_MACHPERIPH_H */
122