]> git.sur5r.net Git - freertos/commitdiff
Make the timer used for the PIC32 port layer user configurable.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 16 Oct 2012 09:48:45 +0000 (09:48 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Tue, 16 Oct 2012 09:48:45 +0000 (09:48 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1797 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/portable/MPLAB/PIC32MX/port.c
FreeRTOS/Source/portable/MPLAB/PIC32MX/port_asm.S

index 7c22b4933cabb48148badb1e04db1b266f2abcde..538c9bee8a3baff744e2776fab4aaeff6482ce29 100644 (file)
 the first task is being restored. */\r
 #define portINITIAL_SR                         ( portIE_BIT | portEXL_BIT )\r
 \r
+#ifndef configTICK_INTERRUPT_VECTOR\r
+       #define configTICK_INTERRUPT_VECTOR _TIMER_1_VECTOR\r
+#endif\r
+\r
 /* Records the interrupt nesting depth.  This starts at one as it will be\r
 decremented to 0 when the first task starts. */\r
 volatile unsigned portBASE_TYPE uxInterruptNesting = 0x01;\r
@@ -101,9 +105,9 @@ const portSTACK_TYPE * const xISRStackTop = &( xISRStack[ configISR_STACK_SIZE -
  * Place the prototype here to ensure the interrupt vector is correctly installed. \r
  * Note that because the interrupt is written in assembly, the IPL setting in the\r
  * following line of code has no effect.  The interrupt priority is set by the\r
- * call to ConfigIntTimer1() in prvSetupTimerInterrupt(). \r
+ * call to ConfigIntTimer1() in vApplicationSetupTickTimerInterrupt(). \r
  */\r
-extern void __attribute__( (interrupt(ipl1), vector(_TIMER_1_VECTOR))) vT1InterruptHandler( void );\r
+extern void __attribute__( (interrupt(ipl1), vector( configTICK_INTERRUPT_VECTOR ))) vPortTickInterruptHandler( void );\r
 \r
 /*\r
  * The software interrupt handler that performs the yield.  Note that, because\r
@@ -152,9 +156,15 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
- * Setup a timer for a regular tick.\r
+ * Setup a timer for a regular tick.  This function uses peripheral timer 1.\r
+ * The function is declared weak so an application writer can use a different\r
+ * timer by redefining this implementation.  If a different timer is used then\r
+ * configTICK_INTERRUPT_VECTOR must also be defined in FreeRTOSConfig.h to\r
+ * ensure the RTOS provided tick interrupt handler is installed on the correct\r
+ * vector number.  When Timer 1 is used the vector number is defined as \r
+ * _TIMER_1_VECTOR.\r
  */\r
-void prvSetupTimerInterrupt( void )\r
+__attribute__(( weak )) void vApplicationSetupTickTimerInterrupt( void )\r
 {\r
 const unsigned long ulCompareMatch = ( (configPERIPHERAL_CLOCK_HZ / portTIMER_PRESCALE) / configTICK_RATE_HZ ) - 1;\r
 \r
@@ -182,7 +192,7 @@ extern void *pxCurrentTCB;
 \r
        /* Setup the timer to generate the tick.  Interrupts will have been \r
        disabled by the time we get here. */\r
-       prvSetupTimerInterrupt();\r
+       vApplicationSetupTickTimerInterrupt();\r
 \r
        /* Kick off the highest priority task that has been created so far. \r
        Its stack location is loaded into uxSavedTaskStackPointer. */\r
index 8d4a4eab8dbdbfebc99364fd3e5707e9f40004de..722a5c3bbe93760af1eed874cc475b977f3d6ab8 100644 (file)
        \r
        .global vPortStartFirstTask\r
        .global vPortYieldISR\r
-       .global vT1InterruptHandler\r
+       .global vPortTickInterruptHandler\r
 \r
 \r
 /******************************************************************/\r
 \r
        .set            noreorder\r
        .set            noat\r
-       .ent            vT1InterruptHandler\r
+       .ent            vPortTickInterruptHandler\r
        \r
-vT1InterruptHandler:\r
+vPortTickInterruptHandler:\r
 \r
        portSAVE_CONTEXT\r
 \r
@@ -97,7 +97,7 @@ vT1InterruptHandler:
 \r
        portRESTORE_CONTEXT\r
 \r
-       .end vT1InterruptHandler\r
+       .end vPortTickInterruptHandler\r
 \r
 /******************************************************************/\r
 \r