Make the timer used for the PIC32 port layer user configurable.

pull/4/head
Richard Barry 12 years ago
parent dbe0ae2bff
commit f446f77fd4

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

@ -79,16 +79,16 @@
.global vPortStartFirstTask .global vPortStartFirstTask
.global vPortYieldISR .global vPortYieldISR
.global vT1InterruptHandler .global vPortTickInterruptHandler
/******************************************************************/ /******************************************************************/
.set noreorder .set noreorder
.set noat .set noat
.ent vT1InterruptHandler .ent vPortTickInterruptHandler
vT1InterruptHandler: vPortTickInterruptHandler:
portSAVE_CONTEXT portSAVE_CONTEXT
@ -97,7 +97,7 @@ vT1InterruptHandler:
portRESTORE_CONTEXT portRESTORE_CONTEXT
.end vT1InterruptHandler .end vPortTickInterruptHandler
/******************************************************************/ /******************************************************************/

Loading…
Cancel
Save