]> rtime.felk.cvut.cz Git - arc.git/blob - include/Mcu.h
Added reset for Cortex R4.
[arc.git] / include / Mcu.h
1 /* -------------------------------- Arctic Core ------------------------------\r
2  * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
3  *\r
4  * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
5  *\r
6  * This source code is free software; you can redistribute it and/or modify it\r
7  * under the terms of the GNU General Public License version 2 as published by the\r
8  * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
9  *\r
10  * This program is distributed in the hope that it will be useful, but\r
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
13  * for more details.\r
14  * -------------------------------- Arctic Core ------------------------------*/\r
15 \r
16 /** @addtogroup Mcu MCU Driver\r
17  *  @{ */\r
18 \r
19 /** @file Mcu.h\r
20  * API and type definitions for MCU Driver.\r
21  */\r
22 \r
23 #ifndef MCU_H_\r
24 #define MCU_H_\r
25 \r
26 #define MCU_SW_MAJOR_VERSION            2\r
27 #define MCU_SW_MINOR_VERSION        0\r
28 #define MCU_SW_PATCH_VERSION            0\r
29 \r
30 #define MCU_AR_MAJOR_VERSION            2\r
31 #define MCU_AR_MINOR_VERSION            2\r
32 #define MCU_AR_PATCH_VERSION            2\r
33 \r
34 #include "Cpu.h"\r
35 #include "irq_types.h"\r
36 #include "Std_Types.h"\r
37 #include "Mcu_Cfg.h"\r
38 //#include "mpc55xx_aos.h"\r
39 \r
40 /** @name Service id's */\r
41 //@{\r
42 #define MCU_INIT_SERVICE_ID                 0x00\r
43 #define MCU_INITRAMSECTION_SERVICE_ID       0x01\r
44 #define MCU_INITCLOCK_SERVICE_ID            0x02\r
45 #define MCU_DISTRIBUTEPLLCLOCK_SERVICE_ID   0x03\r
46 #define MCU_GETPLLSTATUS_SERVICE_ID         0x04\r
47 #define MCU_GETRESETREASON_SERVICE_ID       0x05\r
48 #define MCU_GETRESETRAWVALUE_SERVICE_ID     0x06\r
49 #define MCU_PERFORMRESET_SERVICE_ID         0x07\r
50 #define MCU_SETMODE_SERVICE_ID              0x08\r
51 #define MCU_GETVERSIONINFO_SERVICE_ID       0x09\r
52 #define MCU_INTCVECTORINSTALL_SERVICE_ID    0x0A // Not in spec but follows pattern\r
53 //@}\r
54 \r
55 /** @name Error Codes */\r
56 //@{\r
57 #define MCU_E_PARAM_CONFIG                  0x0A\r
58 #define MCU_E_PARAM_CLOCK                   0x0B\r
59 #define MCU_E_PARAM_MODE                    0x0C\r
60 #define MCU_E_PARAM_RAMSECTION              0x0D\r
61 #define MCU_E_PLL_NOT_LOCKED                0x0E\r
62 #define MCU_E_UNINIT                        0x0F\r
63 //@}\r
64 \r
65 /* Specific return values */\r
66 #define MCU_GETRESETRAWVALUE_NORESETREG_RV  0x00 /**< MCU006 */\r
67 #define MCU_GETRESETRAWVALUE_UNINIT_RV      0xffffffff /**< MCU135 */\r
68 \r
69 \r
70 typedef enum {\r
71         MCU_PLL_LOCKED,\r
72         MCU_PLL_UNLOCKED,\r
73         MCU_PLL_STATUS_UNDEFINED,\r
74 } Mcu_PllStatusType;\r
75 \r
76 \r
77 typedef enum {\r
78         MCU_MODE_NORMAL=0\r
79 } Mcu_ModeType;\r
80 \r
81 //TODO\r
82 typedef uint8_t Mcu_RamSectionType;\r
83 \r
84 typedef uint32_t Mcu_RawResetType;\r
85 \r
86 typedef enum {\r
87         MCU_POWER_ON_RESET,\r
88         MCU_WATCHDOG_RESET,\r
89         MCU_SW_RESET,\r
90         MCU_RESET_UNDEFINED,\r
91         MCU_OSC_FAILURE_RESET,\r
92     MCU_CPU_RESET,\r
93     MCU_EXT_RESET,\r
94     MCU_VSW_RESET\r
95 } Mcu_ResetType;\r
96 \r
97 typedef struct {\r
98         //      This is the frequency for the specific instance of the McuClockReference-\r
99         //      Point container. It shall be givn in Hz.\r
100         uint32 McuClockReferencePointFrequency;\r
101 \r
102         uint8 Pll1; // PLL setting 1\r
103         uint8 Pll2; // PLL setting 2\r
104         uint8 Pll3; // PLL setting 3\r
105         uint8 Pll4; // PLL setting 4\r
106 \r
107 } Mcu_ClockSettingConfigType;\r
108 \r
109 typedef struct {\r
110         // This parameter shall represent the Data pre-setting to be initialized\r
111         uint32 McuRamDefaultValue;\r
112 \r
113         // This parameter shall represent the MCU RAM section base address\r
114         uint32 McuRamSectionBaseAddress;\r
115 \r
116         // This parameter shall represent the MCU RAM Section size\r
117         uint32 McuRamSectionSize;\r
118 \r
119 } Mcu_RamSectorSettingConfigType;\r
120 \r
121 typedef struct {\r
122         //      Enables/Disables clock failure notification. In case this feature is not supported\r
123         //      by HW the setting should be disabled.\r
124         uint8   McuClockSrcFailureNotification;\r
125 \r
126         //      This parameter shall represent the number of Modes available for the\r
127         //      MCU. calculationFormula = Number of configured McuModeSettingConf\r
128         //uint8 McuNumberOfMcuModes; /* Not supported */\r
129 \r
130         //  This parameter shall represent the number of RAM sectors available for\r
131         //  the MCU. calculationFormula = Number of configured McuRamSectorSet-\r
132         //  tingConf\r
133         uint8 McuRamSectors;\r
134 \r
135         //  This parameter shall represent the number of clock setting available for\r
136         //  the MCU.\r
137         uint8 McuClockSettings;\r
138 \r
139         // This parameter defines the default clock settings that should be used\r
140         // It is an index into the McuClockSettingsConfig\r
141         Mcu_ClockType McuDefaultClockSettings;\r
142 \r
143         //      This parameter relates to the MCU specific reset configuration. This ap-\r
144         //      plies to the function Mcu_PerformReset, which performs a microcontroller\r
145         //      reset using the hardware feature of the microcontroller.\r
146         //uint32 McuResetSetting;\r
147 \r
148         //      This container contains the configuration (parameters) for the\r
149         //      Clock settings of the MCU. Please see MCU031 for more in-\r
150         //      formation on the MCU clock settings.\r
151         Mcu_ClockSettingConfigType * McuClockSettingConfig;\r
152 \r
153         //      This container contains the configuration (parameters) for the\r
154         //      Mode setting of the MCU. Please see MCU035 for more information\r
155         //  on the MCU mode settings.\r
156         //Mcu_ModeSettingConfigType  *McuModeSettingConfig;\r
157 \r
158         //      This container contains the configuration (parameters) for the\r
159         //      RAM Sector setting. Please see MCU030 for more information\r
160         //      on RAM sec-tor settings.\r
161         Mcu_RamSectorSettingConfigType *McuRamSectorSettingConfig;\r
162 \r
163 } Mcu_ConfigType;\r
164 \r
165 extern const Mcu_ConfigType McuConfigData[];\r
166 \r
167 \r
168 \r
169 void Mcu_Init( const Mcu_ConfigType *configPtr );\r
170 void Mcu_DeInit();\r
171 Std_ReturnType Mcu_InitRamSection( const Mcu_RamSectionType RamSection );\r
172 Std_ReturnType Mcu_InitClock( const Mcu_ClockType ClockSetting );\r
173 void Mcu_DistributePllClock( void );\r
174 Mcu_PllStatusType Mcu_GetPllStatus( void );\r
175 Mcu_ResetType Mcu_GetResetReason( void );\r
176 Mcu_RawResetType Mcu_GetResetRawValue( void );\r
177 #if ( MCU_PERFORM_RESET_API == STD_ON )\r
178 void Mcu_PerformReset( void );\r
179 #endif\r
180 void Mcu_SetMode( const Mcu_ModeType McuMode );\r
181 \r
182 #if ( MCU_VERSION_INFO_API == STD_ON )\r
183 #define Mcu_GetVersionInfo(_vi) STD_GET_VERSION_INFO(_vi,MCU)\r
184 #endif\r
185 \r
186 /* ArcCore extensions */\r
187 \r
188 void Irq_InstallVector(void (*func)(), IrqType vector, uint8_t priority, Cpu_t cpu );\r
189 void Irq_GenerateSoftInt( IrqType vector );\r
190 uint8_t Irq_GetCurrentPriority( Cpu_t cpu);\r
191 uint32_t McuE_GetSystemClock( void );\r
192 #if defined(CFG_MPC55XX) || defined(CFG_ARM_CR4)\r
193 uint32_t McuE_GetPeripheralClock( McuE_PeriperalClock_t type );\r
194 #endif\r
195 #include "McuExtensions.h"\r
196 \r
197 \r
198 \r
199 #endif /*MCU_H_*/\r
200 /** @} */\r