]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/FreeRTOS_tick_config.c
7a8afdda3ae8b536d5f184c385bb6c15d154baf2
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D4x_EK_IAR / FreeRTOS_tick_config.c
1 /*\r
2  * FreeRTOS Kernel V10.3.0\r
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28 /* FreeRTOS includes. */\r
29 #include "FreeRTOS.h"\r
30 #include "task.h"\r
31 \r
32 /* Library includes. */\r
33 #include "board.h"\r
34 \r
35 /*\r
36  * The FreeRTOS tick handler.  This function must be installed as the handler\r
37  * for the timer used to generate the tick interrupt.  Note that the interrupt\r
38  * generated by the PIT is shared by other system peripherals, so if the PIT is\r
39  * used for Tick generation then FreeRTOS_Tick_Handler() can only be installed\r
40  * directly as the PIT handler if no other system interrupts need to be\r
41  * serviced.  If system interrupts other than the PIT need to be serviced then\r
42  * install System_Handler() as the PIT interrupt handler in place of\r
43  * FreeRTOS_Tick_Handler() and add additional interrupt processing into the\r
44  * implementation of System_Handler().\r
45  */\r
46 extern void FreeRTOS_Tick_Handler( void );\r
47 static void System_Handler( void );\r
48 \r
49 /*-----------------------------------------------------------*/\r
50 \r
51 static void System_Handler( void )\r
52 {\r
53         /* See the comments above the function prototype in this file. */\r
54         FreeRTOS_Tick_Handler();\r
55 }\r
56 /*-----------------------------------------------------------*/\r
57 \r
58 /*\r
59  * The application must provide a function that configures a peripheral to\r
60  * create the FreeRTOS tick interrupt, then define configSETUP_TICK_INTERRUPT()\r
61  * in FreeRTOSConfig.h to call the function.  This file contains a function\r
62  * that is suitable for use on the Atmel SAMA5.\r
63  */\r
64 void vConfigureTickInterrupt( void )\r
65 {\r
66         /* NOTE:  The PIT interrupt is cleared by the configCLEAR_TICK_INTERRUPT()\r
67         macro in FreeRTOSConfig.h. */\r
68 \r
69         /* Enable the PIT clock. */\r
70         PMC->PMC_PCER0 = 1 << ID_PIT;\r
71 \r
72         /* Initialize the PIT to the desired frequency - specified in uS. */\r
73         PIT_Init( 1000000UL / configTICK_RATE_HZ, ( BOARD_MCK / 2 ) / 1000000 );\r
74 \r
75         /* Enable IRQ / select PIT interrupt. */\r
76         PMC->PMC_PCER1 = ( 1 << ( ID_IRQ - 32 ) );\r
77         AIC->AIC_SSR  = ID_PIT;\r
78 \r
79         /* Ensure interrupt is disabled before setting the mode and installing the\r
80         handler.  The priority of the tick interrupt should always be set to the\r
81         lowest possible. */\r
82         AIC->AIC_IDCR = AIC_IDCR_INTD;\r
83         AIC->AIC_SMR  = AIC_SMR_SRCTYPE_EXT_POSITIVE_EDGE;\r
84         AIC->AIC_SVR = ( uint32_t ) FreeRTOS_Tick_Handler;\r
85 \r
86         /* Start with the interrupt clear. */\r
87         AIC->AIC_ICCR = AIC_ICCR_INTCLR;\r
88 \r
89         /* Enable the interrupt in the AIC and peripheral. */\r
90         AIC_EnableIT( ID_PIT );\r
91         PIT_EnableIT();\r
92 \r
93         /* Enable the peripheral. */\r
94         PIT_Enable();\r
95 \r
96         /* Prevent compiler warnings in the case where System_Handler() is not used\r
97         as the handler.  See the comments above the System_Handler() function\r
98         prototype at the top of this file. */\r
99         ( void ) System_Handler;\r
100 }\r
101 /*-----------------------------------------------------------*/\r
102 \r