]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MB9B500_IAR_Keil/ParTest.c
Update to MIT licensed FreeRTOS V10.0.0 - see https://www.freertos.org/History.txt
[freertos] / FreeRTOS / Demo / CORTEX_MB9B500_IAR_Keil / ParTest.c
1 /*\r
2  * FreeRTOS Kernel V10.0.0\r
3  * Copyright (C) 2017 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. If you wish to use our Amazon\r
14  * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
15  *\r
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
18  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
19  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
20  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22  *\r
23  * http://www.FreeRTOS.org\r
24  * http://aws.amazon.com/freertos\r
25  *\r
26  * 1 tab == 4 spaces!\r
27  */\r
28 \r
29 /*-----------------------------------------------------------\r
30  * Simple parallel port IO routines.\r
31  *-----------------------------------------------------------*/\r
32 \r
33 /* Kernel includes. */\r
34 #include "FreeRTOS.h"\r
35 #include "task.h"\r
36 \r
37 /* Fujitsu drivers/libraries. */\r
38 #include "mb9bf506n.h"\r
39 #include "system_mb9bf50x.h"\r
40 \r
41 /* Only the LEDs on one of the two seven segment displays are used. */\r
42 #define partstMAX_LEDS          8\r
43 \r
44 /* The LEDs are controlled by bits 8 to 15 of the IO port. */\r
45 #define partstLED_0_OFFSET      8\r
46 \r
47 /*-----------------------------------------------------------*/\r
48 \r
49 void vParTestInitialise( void )\r
50 {\r
51 const unsigned short usGPIOState = 0xFF00U;\r
52 \r
53         /* Analog inputs are not used on the LED outputs. */\r
54         FM3_GPIO->ADE  = 0x00FF;\r
55         \r
56         /* LED seg1 to GPIO output (P18->P1F). */\r
57         FM3_GPIO->DDR1 = 0xFF00;\r
58         FM3_GPIO->PFR1 = 0x0000;\r
59         \r
60         /* LED seg2 to GPIO output (P30->P3F). */\r
61         FM3_GPIO->DDR3 = 0xFF00;\r
62         FM3_GPIO->PFR3 = 0x0000;\r
63         \r
64         /* Start with all LEDs off. */\r
65         FM3_GPIO->PDOR3 = usGPIOState;\r
66         FM3_GPIO->PDOR1 = usGPIOState;\r
67 }\r
68 /*-----------------------------------------------------------*/\r
69 \r
70 void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
71 {\r
72         if( uxLED < partstMAX_LEDS )\r
73         {\r
74                 /* A critical section is used as the LEDs are also accessed from an\r
75                 interrupt. */\r
76                 taskENTER_CRITICAL();\r
77                 {\r
78                         if( xValue == pdTRUE )\r
79                         {\r
80                                 FM3_GPIO->PDOR3 &= ~( 1UL << ( uxLED + partstLED_0_OFFSET ) );\r
81                         }\r
82                         else\r
83                         {\r
84                                 FM3_GPIO->PDOR3 |= ( 1UL << ( uxLED + partstLED_0_OFFSET ) );\r
85                         }\r
86                 }\r
87                 taskEXIT_CRITICAL();\r
88         }\r
89 }\r
90 /*-----------------------------------------------------------*/\r
91 \r
92 void vParTestSetLEDFromISR( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
93 {\r
94 unsigned portBASE_TYPE uxInterruptFlags;\r
95 \r
96         uxInterruptFlags = portSET_INTERRUPT_MASK_FROM_ISR();\r
97         {\r
98                 if( uxLED < partstMAX_LEDS )\r
99                 {\r
100                         if( xValue == pdTRUE )\r
101                         {\r
102                                 FM3_GPIO->PDOR3 &= ~( 1UL << ( uxLED + partstLED_0_OFFSET ) );\r
103                         }\r
104                         else\r
105                         {\r
106                                 FM3_GPIO->PDOR3 |= ( 1UL << ( uxLED + partstLED_0_OFFSET ) );\r
107                         }\r
108                 }\r
109         }\r
110         portCLEAR_INTERRUPT_MASK_FROM_ISR( uxInterruptFlags );\r
111 }\r
112 /*-----------------------------------------------------------*/\r
113 \r
114 void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
115 {\r
116         if( uxLED < partstMAX_LEDS )\r
117         {\r
118                 /* A critical section is used as the LEDs are also accessed from an\r
119                 interrupt. */\r
120                 taskENTER_CRITICAL();\r
121                 {\r
122                         if( ( FM3_GPIO->PDOR3 & ( 1UL << ( uxLED + partstLED_0_OFFSET ) ) ) != 0UL )\r
123                         {\r
124                                 FM3_GPIO->PDOR3 &= ~( 1UL << ( uxLED + partstLED_0_OFFSET ) );\r
125                         }\r
126                         else\r
127                         {\r
128                                 FM3_GPIO->PDOR3 |= ( 1UL << ( uxLED + partstLED_0_OFFSET ) );\r
129                         }\r
130                 }\r
131                 taskEXIT_CRITICAL();\r
132         }\r
133 }\r
134 /*-----------------------------------------------------------*/\r
135 \r
136 long lParTestGetLEDState( unsigned long ulLED )\r
137 {\r
138 long lReturn = pdFALSE;\r
139 \r
140         if( ulLED < partstMAX_LEDS )\r
141         {\r
142                 taskENTER_CRITICAL();\r
143                 {\r
144                         if( ( FM3_GPIO->PDOR3 & ( 1UL << ( ulLED + partstLED_0_OFFSET ) ) ) == 0UL )\r
145                         {\r
146                                 lReturn = pdTRUE;\r
147                         }\r
148                 }\r
149                 taskEXIT_CRITICAL();\r
150         }\r
151 \r
152         return lReturn;\r
153 }\r
154 /*-----------------------------------------------------------*/\r