]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_M0_Infineon_Boot_Kits_IAR_Keil/ParTest.c
Create full Keil project for XMC boot kit (not yet tested).
[freertos] / FreeRTOS / Demo / CORTEX_M0_Infineon_Boot_Kits_IAR_Keil / ParTest.c
index 9346703b80206922e23e1bded7d04198f897058c..fbad4ad47f792ecddbbf39334e16dc15a61d00f3 100644 (file)
 #include "FreeRTOS.h"\r
 #include "task.h"\r
 \r
+/* Hardware includes. */\r
+#include <XMC1300.h>\r
+\r
 /* Standard demo include. */\r
 #include "partest.h"\r
 \r
+/* The port bits on which LEDs are connected. */\r
+static const unsigned long ulLEDBits[] = \r
+{ \r
+       1UL << 0, /* P0.0 */\r
+       1UL << 2, /* P0.2 */\r
+       1UL << 5, /* P0.5 */\r
+       1UL << 6, /* P0.6 */\r
+       1UL << 7  /* P0.7 */\r
+};\r
+\r
+#define partstNUM_LEDS ( sizeof( ulLEDBits ) / sizeof( unsigned long ) )\r
+\r
+/* Shift the LED bit into the correct position within the POW register to\r
+perform the desired operation. */\r
+#define partstON_SHIFT ( 16UL )\r
+#define partstOFF_SHIFT        ( 0UL )\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 void vParTestInitialise( void )\r
 {\r
+       /* Configure relevant port P0 to push pull output to drive LEDs. */\r
+       \r
+       /* P0.0 */\r
+       PORT0->IOCR0 &= ~( ( 0xFFUL <<  0 ) );\r
+       PORT0->IOCR0 |= ( 0x80UL <<  0 );\r
+\r
+       /* P0.2 */\r
+       PORT0->IOCR0 &= ~( ( 0xFFUL << 16 ) );\r
+       PORT0->IOCR0 |= ( 0x80UL << 16 );\r
+\r
+       /* P0.5 */\r
+       PORT0->IOCR4 &= ~( ( 0xFFUL << 8 ) );\r
+       PORT0->IOCR4 |= ( 0x80UL << 8 );\r
+\r
+       /* P0.6 */\r
+       PORT0->IOCR4 &= ~( ( 0xFFUL << 16 ) );\r
+       PORT0->IOCR4 |= ( 0x80UL << 16 );\r
+\r
+       /* P0.7 */\r
+       PORT0->IOCR4 &= ~( ( 0xFFUL << 24 ) );\r
+       PORT0->IOCR4 |= ( 0x80UL << 24 );\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
 void vParTestSetLED( unsigned long ulLED, signed portBASE_TYPE xValue )\r
 {\r
+       if( ulLED < partstNUM_LEDS )\r
+       {\r
+               if( xValue == pdTRUE )\r
+               {\r
+                       /* Turn the LED on. */\r
+                       PORT0->OMR = ( ulLEDBits[ ulLED ] << partstON_SHIFT );\r
+               }\r
+               else\r
+               {\r
+                       /* Turn the LED off. */\r
+                       PORT0->OMR = ( ulLEDBits[ ulLED ] << partstOFF_SHIFT );\r
+               }\r
+       }\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r
 void vParTestToggleLED( unsigned long ulLED )\r
 {\r
+       if( ulLED < partstNUM_LEDS )\r
+       {\r
+               /* Setting both the ON and OFF bits simultaneously results in the bit\r
+               being toggled. */\r
+               PORT0->OMR = ( ulLEDBits[ ulLED ] << partstON_SHIFT ) | ( ulLEDBits[ ulLED ] << partstOFF_SHIFT );\r
+       }\r
 }\r
 /*-----------------------------------------------------------*/\r
 \r