]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC18_WizC/Demo4/interrupt.c
1d831e44514c2f9c46302764955bb3f745232839
[freertos] / FreeRTOS / Demo / PIC18_WizC / Demo4 / interrupt.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 /* \r
29 Changes from V3.0.0\r
30         + Added functionality to only call vTaskSwitchContext() once\r
31           when handling multiple interruptsources in a single interruptcall.\r
32 \r
33         + Included Filenames changed to a .c extension to allow stepping through\r
34           code using F7.\r
35 \r
36 Changes from V3.0.1\r
37 */\r
38 \r
39 #include <pic.h>\r
40 \r
41 /* Scheduler include files. */\r
42 #include <FreeRTOS.h>\r
43 #include <task.h>\r
44 #include <queue.h>\r
45 \r
46 static bit uxSwitchRequested;\r
47 \r
48 /*\r
49  * Vector for the ISR.\r
50  */\r
51 void pointed Interrupt()\r
52 {\r
53         /*\r
54          * Save the context of the current task.\r
55          */\r
56         portSAVE_CONTEXT( portINTERRUPTS_FORCED );\r
57 \r
58         /*\r
59          * No contextswitch requested yet\r
60          */\r
61         uxSwitchRequested       = pdFALSE;\r
62         \r
63         /*\r
64          * Was the interrupt the FreeRTOS SystemTick?\r
65          */\r
66         #include <libFreeRTOS/Drivers/Tick/isrTick.c>\r
67 \r
68 /*******************************************************************************\r
69 ** DO NOT MODIFY ANYTHING ABOVE THIS LINE\r
70 ********************************************************************************\r
71 ** Enter the includes for the ISR-code of the FreeRTOS drivers below.\r
72 **\r
73 ** You cannot use local variables. Alternatives are:\r
74 ** - Use static variables       (Global RAM usage increases)\r
75 ** - Call a function            (Additional cycles are needed)\r
76 ** - Use unused SFR's           (preferred, no additional overhead)\r
77 ** See "../Serial/isrSerialTx.c" for an example of this last option\r
78 *******************************************************************************/\r
79 \r
80 \r
81 \r
82         /*\r
83          * Was the interrupt a byte being received?\r
84          */\r
85         #include "../Serial/isrSerialRx.c"\r
86 \r
87 \r
88         /*\r
89          * Was the interrupt the Tx register becoming empty?\r
90          */\r
91         #include "../Serial/isrSerialTx.c"\r
92 \r
93 \r
94 \r
95 /*******************************************************************************\r
96 ** DO NOT MODIFY ANYTHING BELOW THIS LINE\r
97 *******************************************************************************/\r
98         /*\r
99          * Was a contextswitch requested by one of the\r
100          * interrupthandlers?\r
101          */\r
102          if ( uxSwitchRequested )\r
103          {\r
104                 vTaskSwitchContext();\r
105          }\r
106          \r
107         /*\r
108          * Restore the context of the (possibly other) task.\r
109          */\r
110         portRESTORE_CONTEXT();\r
111 \r
112         #pragma asmline retfie  0\r
113 }\r