]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/PIC18_WizC/serial/isrSerialTx.c
b58e126a6f1262b583beed5c37b9064f9357106d
[freertos] / FreeRTOS / Demo / PIC18_WizC / serial / isrSerialTx.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         + ISRcode pulled inline to reduce stack-usage.\r
31 \r
32         + Added functionality to only call vTaskSwitchContext() once\r
33           when handling multiple interruptsources in a single interruptcall.\r
34 \r
35         + Filename changed to a .c extension to allow stepping through code\r
36           using F7.\r
37 \r
38 Changes from V3.0.1\r
39 */\r
40 \r
41 #ifndef _FREERTOS_SERIAL_ISRSERIALTX_C\r
42 #define _FREERTOS_SERIAL_ISRSERIALTX_C\r
43 \r
44 #define serINTERRUPT_DISABLED   ( 0 )\r
45 \r
46 \r
47 {\r
48         /*\r
49          * Was the interrupt the Tx register becoming empty?\r
50          */\r
51         if( bTXIF && bTXIE)\r
52         {\r
53                 /*\r
54                  * Queue to interface between comms API and interrupt routine.\r
55                 */\r
56                 extern QueueHandle_t xCharsForTx;\r
57 \r
58                 /*\r
59                  * Because we are not allowed to use local variables here,\r
60                  * PRODL and PRODH are (ab)used as temporary storage. This\r
61                  * is allowed because these SFR's will be restored before\r
62                  * exiting the ISR.\r
63                  */\r
64                 extern char                             cChar;\r
65                 #pragma locate cChar            &PRODL\r
66                 extern portBASE_TYPE            pxTaskWoken;\r
67                 #pragma locate pxTaskWoken      &PRODH\r
68 \r
69                 if( xQueueReceiveFromISR( xCharsForTx, &cChar, &pxTaskWoken ) == pdTRUE )\r
70                 {\r
71                         /*\r
72                          * Send the next character queued for Tx.\r
73                          */\r
74                         TXREG = cChar;\r
75                 }\r
76                 else\r
77                 {\r
78                         /*\r
79                          * Queue empty, nothing to send.\r
80                          */\r
81                         bTXIE = serINTERRUPT_DISABLED;\r
82                 }\r
83 \r
84                 /*\r
85                  * If we woke another task, ask for a contextswitch\r
86                  */\r
87                 if( pxTaskWoken == pdTRUE )\r
88                 {\r
89                         uxSwitchRequested = pdTRUE;\r
90                 }\r
91         }\r
92 }\r
93 \r
94 #endif  /* _FREERTOS_SERIAL_ISRSERIALTX_C */\r