blob: e2916f18325456d78f632280a4f6cc84327703c5 [file] [log] [blame]
/*
FreeRTOS V8.1.0 - Copyright (C) 2014 Real Time Engineers Ltd.
All rights reserved
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
***************************************************************************
* *
* FreeRTOS provides completely free yet professionally developed, *
* robust, strictly quality controlled, supported, and cross *
* platform software that has become a de facto standard. *
* *
* Help yourself get started quickly and support the FreeRTOS *
* project by purchasing a FreeRTOS tutorial book, reference *
* manual, or both from: http://www.FreeRTOS.org/Documentation *
* *
* Thank you! *
* *
***************************************************************************
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
>>! NOTE: The modification to the GPL is included to allow you to !<<
>>! distribute a combined work that includes FreeRTOS without being !<<
>>! obliged to provide the source code for proprietary components !<<
>>! outside of the FreeRTOS kernel. !<<
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. Full license text is available from the following
link: http://www.freertos.org/a00114.html
1 tab == 4 spaces!
***************************************************************************
* *
* Having a problem? Start by reading the FAQ "My application does *
* not run, what could be wrong?" *
* *
* http://www.FreeRTOS.org/FAQHelp.html *
* *
***************************************************************************
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd. contact details.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
compatible FAT file system, and our tiny thread aware UDP/IP stack.
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
licenses offer ticketed support, indemnification and middleware.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
1 tab == 4 spaces!
*/
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
/* Demo includes. */
#include "IntQueueTimer.h"
#include "IntQueue.h"
/* Hardware includes. */
#include "lpc11xx.h"
/* The two timer frequencies. */
#define tmrTIMER_2_FREQUENCY ( 2000UL )
#define tmrTIMER_3_FREQUENCY ( 2001UL )
/* The priorities for the two timers. Note that a priority of 0 is the highest
possible on Cortex-M devices. */
#define tmrMAX_PRIORITY ( 0UL )
#define trmSECOND_HIGHEST_PRIORITY ( tmrMAX_PRIORITY + 1 )
void vInitialiseTimerForIntQueueTest( void )
{
/* Enable AHB clock for GPIO and 16-bit timers. */
LPC_SYSCON->SYSAHBCLKCTRL |= ( 7 << 6 );
/* Interrupt and reset on MR0 match. */
LPC_TMR16B0->MCR = 0x03;
LPC_TMR16B1->MCR = 0x03;
/* Configure the frequency of the interrupt generated by MR0 matches. */
LPC_TMR16B0->MR0 = SystemCoreClock / tmrTIMER_2_FREQUENCY;
LPC_TMR16B1->MR0 = SystemCoreClock / tmrTIMER_3_FREQUENCY;
/* Don't generate interrupts until the scheduler has been started.
Interrupts will be automatically enabled when the first task starts
running. */
taskDISABLE_INTERRUPTS();
/* Set the timer interrupts to be above the kernel. The interrupts are
assigned different priorities so they nest with each other. */
NVIC_SetPriority( TIMER_16_0_IRQn, trmSECOND_HIGHEST_PRIORITY );
NVIC_SetPriority( TIMER_16_1_IRQn, tmrMAX_PRIORITY );
/* Enable the timer interrupts. */
NVIC_EnableIRQ( TIMER_16_0_IRQn );
NVIC_EnableIRQ( TIMER_16_1_IRQn );
/* Start the timers. */
LPC_TMR16B0->TCR = 0x01;
LPC_TMR16B1->TCR = 0x01;
}
/*-----------------------------------------------------------*/
void TIMER16_0_IRQHandler(void)
{
/* Clear the interrupt. */
LPC_TMR16B0->IR = LPC_TMR16B0->IR;
/* Call the standard demo int queue timer function for this first timer. */
portEND_SWITCHING_ISR( xFirstTimerHandler() );
}
/*-----------------------------------------------------------*/
void TIMER16_1_IRQHandler(void)
{
/* Clear the interrupt. */
LPC_TMR16B1->IR = LPC_TMR16B1->IR;
/* Call the standard demo int queue timer function for this second timer. */
portEND_SWITCHING_ISR( xSecondTimerHandler() );
}
/*-----------------------------------------------------------*/