]> rtime.felk.cvut.cz Git - arc.git/blob - include/Mcu.h
Converted all line endings to Windows (CR LF)
[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_ResetType;\r
92 \r
93 typedef struct {\r
94         //      This is the frequency for the specific instance of the McuClockReference-\r
95         //      Point container. It shall be givn in Hz.\r
96         uint32 McuClockReferencePointFrequency;\r
97 \r
98         uint8 Pll1; // PLL setting 1\r
99         uint8 Pll2; // PLL setting 2\r
100         uint8 Pll3; // PLL setting 3\r
101 \r
102 } Mcu_ClockSettingConfigType;\r
103 \r
104 typedef struct {\r
105         // This parameter shall represent the Data pre-setting to be initialized\r
106         uint32 McuRamDefaultValue;\r
107 \r
108         // This parameter shall represent the MCU RAM section base address\r
109         uint32 McuRamSectionBaseAddress;\r
110 \r
111         // This parameter shall represent the MCU RAM Section size\r
112         uint32 McuRamSectionSize;\r
113 \r
114 } Mcu_RamSectorSettingConfigType;\r
115 \r
116 typedef struct {\r
117         //      Enables/Disables clock failure notification. In case this feature is not supported\r
118         //      by HW the setting should be disabled.\r
119         uint8   McuClockSrcFailureNotification;\r
120 \r
121         //      This parameter shall represent the number of Modes available for the\r
122         //      MCU. calculationFormula = Number of configured McuModeSettingConf\r
123         //uint8 McuNumberOfMcuModes; /* Not supported */\r
124 \r
125         //  This parameter shall represent the number of RAM sectors available for\r
126         //  the MCU. calculationFormula = Number of configured McuRamSectorSet-\r
127         //  tingConf\r
128         uint8 McuRamSectors;\r
129 \r
130         //  This parameter shall represent the number of clock setting available for\r
131         //  the MCU.\r
132         uint8 McuClockSettings;\r
133 \r
134         // This parameter defines the default clock settings that should be used\r
135         // It is an index into the McuClockSettingsConfig\r
136         Mcu_ClockType McuDefaultClockSettings;\r
137 \r
138         //      This parameter relates to the MCU specific reset configuration. This ap-\r
139         //      plies to the function Mcu_PerformReset, which performs a microcontroller\r
140         //      reset using the hardware feature of the microcontroller.\r
141         //uint32 McuResetSetting;\r
142 \r
143         //      This container contains the configuration (parameters) for the\r
144         //      Clock settings of the MCU. Please see MCU031 for more in-\r
145         //      formation on the MCU clock settings.\r
146         Mcu_ClockSettingConfigType * McuClockSettingConfig;\r
147 \r
148         //      This container contains the configuration (parameters) for the\r
149         //      Mode setting of the MCU. Please see MCU035 for more information\r
150         //  on the MCU mode settings.\r
151         //Mcu_ModeSettingConfigType  *McuModeSettingConfig;\r
152 \r
153         //      This container contains the configuration (parameters) for the\r
154         //      RAM Sector setting. Please see MCU030 for more information\r
155         //      on RAM sec-tor settings.\r
156         Mcu_RamSectorSettingConfigType *McuRamSectorSettingConfig;\r
157 \r
158 } Mcu_ConfigType;\r
159 \r
160 extern const Mcu_ConfigType McuConfigData[];\r
161 \r
162 \r
163 \r
164 void Mcu_Init( const Mcu_ConfigType *configPtr );\r
165 void Mcu_DeInit();\r
166 Std_ReturnType Mcu_InitRamSection( const Mcu_RamSectionType RamSection );\r
167 Std_ReturnType Mcu_InitClock( const Mcu_ClockType ClockSetting );\r
168 void Mcu_DistributePllClock( void );\r
169 Mcu_PllStatusType Mcu_GetPllStatus( void );\r
170 Mcu_ResetType Mcu_GetResetReason( void );\r
171 Mcu_RawResetType Mcu_GetResetRawValue( void );\r
172 #if ( MCU_PERFORM_RESET_API == STD_ON )\r
173 void Mcu_PerformReset( void );\r
174 #endif\r
175 void Mcu_SetMode( const Mcu_ModeType McuMode );\r
176 \r
177 #if ( MCU_VERSION_INFO_API == STD_ON )\r
178 #define Mcu_GetVersionInfo(_vi) STD_GET_VERSION_INFO(_vi,MCU)\r
179 #endif\r
180 \r
181 typedef uint32_t imask_t;\r
182 \r
183 /* ArcCore extensions */\r
184 void Irq_InstallVector(void (*func)(), IrqType vector, uint8_t priority, Cpu_t cpu );\r
185 void Irq_GenerateSoftInt( IrqType vector );\r
186 uint8_t Irq_GetCurrentPriority( Cpu_t cpu);\r
187 uint32_t McuE_GetSystemClock( void );\r
188 #if defined(CFG_MPC55XX)\r
189 uint32_t McuE_GetPeripheralClock( McuE_PeriperalClock_t type );\r
190 #endif\r
191 imask_t McuE_EnterCriticalSection(void);\r
192 void McuE_ExitCriticalSection(imask_t old_state);\r
193 \r
194 \r
195 \r
196 #endif /*MCU_H_*/\r
197 /** @} */\r