1 #ifndef _HAL_MACHPERIPH_H
2 #define _HAL_MACHPERIPH_H
4 #include <system_def.h>
6 /*----------------------------------------------------------------------------
8 *----------------------------------------------------------------------------*/
10 #define WDTOSCCTRL_Val 0x000000A0 //frekvence WDT oscilatoru 1,6MHz, delicka 2, vysledna frekvence 0.8MHz
13 #define __SYS_OSC_CLK ( __XTAL) /* Main oscillator frequency */
16 #define __FREQSEL ((WDTOSCCTRL_Val >> 5) & 0x0F)
17 #define __DIVSEL (((WDTOSCCTRL_Val & 0x1F) << 1) + 2)
19 #ifdef WATCHDOG_ENABLED /* Watchdog Oscillator Setup*/
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)
51 #define __WDT_OSC_CLK (3400000 / __DIVSEL)
54 #define __WDT_OSC_CLK (1600000 / 2)
55 #endif // WATCHDOG_ENABLED
59 #if (CLOCK_SETUP) /* Clock Setup */
60 #if (SYSCLK_SETUP) /* System Clock Setup */
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)
70 #define __SYS_PLLCLKIN (0)
73 #if (SYSPLL_SETUP) /* System PLL Setup */
74 #define __SYS_PLLCLKOUT (__SYS_PLLCLKIN * ((SYSPLLCTRL_Val & 0x01F) + 1))
76 #define __SYS_PLLCLKOUT (__SYS_PLLCLKIN * (1))
77 #endif // SYSPLL_SETUP
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)
89 #define __MAIN_CLOCK (0)
92 #define __SYSTEM_CLOCK (__MAIN_CLOCK / SYSAHBCLKDIV_Val)
95 #define __MAIN_CLOCK (__IRC_OSC_CLK)
96 #if (SYSAHBCLKDIV_Val == 0)
97 #define __SYSTEM_CLOCK (0)
99 #define __SYSTEM_CLOCK (__MAIN_CLOCK / SYSAHBCLKDIV_Val)
101 #endif // SYSCLK_SETUP
104 #define __SYSTEM_CLOCK (__IRC_OSC_CLK)
105 #define __MAIN_CLOCK (__IRC_OSC_CLK)
106 #endif // CLOCK_SETUP
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.
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 */
114 void system_clock_init(void);
115 void system_core_clock_update (void);
116 void power_down_unused_periph(void);
118 void lpc_watchdog_init(int on,int timeout_ms);
119 void lpc_watchdog_feed();
121 #endif /* _HAL_MACHPERIPH_H */