]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/ARM7_AT91FR40008_GCC/ParTest/ParTest.c
Update version numbers ready for release.
[freertos] / FreeRTOS / Demo / ARM7_AT91FR40008_GCC / ParTest / ParTest.c
1 /*\r
2  * FreeRTOS Kernel V10.1.1\r
3  * Copyright (C) 2018 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 /* Scheduler includes. */\r
29 #include "FreeRTOS.h"\r
30 #include "portable.h"\r
31 \r
32 /* Demo app includes. */\r
33 #include "partest.h"\r
34 \r
35 /* Hardware specific definitions. */\r
36 #include "AT91R40008.h"\r
37 #include "pio.h"\r
38 #include "aic.h"\r
39 \r
40 #define partstNUM_LEDS                  ( 8 )\r
41 #define partstALL_OUTPUTS_OFF   ( ( unsigned long ) ~(0xFFFFFFFF << partstNUM_LEDS) )\r
42 \r
43 static unsigned long ulLEDReg;\r
44 \r
45 /*-----------------------------------------------------------\r
46  * Simple parallel port IO routines.\r
47  *-----------------------------------------------------------*/\r
48 \r
49 static void SetLeds (unsigned int leds)\r
50 {\r
51 unsigned long ulPIOSetReg, ulPIOClearReg;\r
52 \r
53         /* LEDs are grouped in different port bits: P3-P6 and P16-P19.\r
54         A port bit set to '0' turns an LED on, '1' turns it off. */\r
55 \r
56         ulPIOSetReg = ( (leds & 0xF) << 16 ) | ( (leds & 0xF0) >> 1 );\r
57         ulPIOClearReg = (~ulPIOSetReg) & 0x000F0078;\r
58 \r
59         AT91C_BASE_PIO->PIO_SODR = ulPIOSetReg;\r
60         AT91C_BASE_PIO->PIO_CODR = ulPIOClearReg;\r
61 }\r
62 /*-----------------------------------------------------------*/\r
63 \r
64 void vParTestInitialise( void )\r
65 {\r
66         /* This is performed from main() as the io bits are shared with other setup\r
67         functions.  Ensure the outputs are off to start. */\r
68         ulLEDReg = partstALL_OUTPUTS_OFF;  \r
69 \r
70         /* Enable clock to PIO... */\r
71         AT91C_BASE_PS->PS_PCER = AT91C_PS_PIO;\r
72 \r
73         /* Enable all 8 LEDs and the four switches to be controlled by PIO... */\r
74         AT91C_BASE_PIO->PIO_PER = P3 | P4 | P5 | P6 | P16 | P17 | P18 | P19 | P1 | P2 | P9 | P12;\r
75 \r
76         /* Configure all LED PIO lines for output... */\r
77         AT91C_BASE_PIO->PIO_OER = P3 | P4 | P5 | P6 | P16 | P17 | P18 | P19;\r
78 \r
79         /* Configure all switch PIO lines for input... */\r
80         AT91C_BASE_PIO->PIO_ODR = P1 | P2 | P9 | P12;\r
81 \r
82         /* Set initial state of LEDs. */\r
83         SetLeds( ulLEDReg );\r
84 }\r
85 /*-----------------------------------------------------------*/\r
86 \r
87 void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
88 {\r
89         /* Switch an LED on or off as requested. */\r
90         if (uxLED < partstNUM_LEDS)\r
91         {\r
92                 if( xValue )\r
93                 {\r
94                         ulLEDReg &= ~(1 << uxLED);\r
95                 }\r
96                 else\r
97                 {\r
98                         ulLEDReg |= (1 << uxLED);\r
99                 }\r
100 \r
101                 SetLeds( ulLEDReg );\r
102         }\r
103 }\r
104 /*-----------------------------------------------------------*/\r
105 \r
106 void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
107 {\r
108         /* Toggle the state of the requested LED. */\r
109         if (uxLED < partstNUM_LEDS)\r
110         {\r
111                 ulLEDReg ^= ( 1 << uxLED );\r
112                 SetLeds( ulLEDReg );\r
113         }\r
114 }\r
115 \r