2 FreeRTOS V8.1.1 - Copyright (C) 2014 Real Time Engineers Ltd.
5 VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
7 ***************************************************************************
9 * FreeRTOS provides completely free yet professionally developed, *
10 * robust, strictly quality controlled, supported, and cross *
11 * platform software that has become a de facto standard. *
13 * Help yourself get started quickly and support the FreeRTOS *
14 * project by purchasing a FreeRTOS tutorial book, reference *
15 * manual, or both from: http://www.FreeRTOS.org/Documentation *
19 ***************************************************************************
21 This file is part of the FreeRTOS distribution.
23 FreeRTOS is free software; you can redistribute it and/or modify it under
24 the terms of the GNU General Public License (version 2) as published by the
25 Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
27 >>! NOTE: The modification to the GPL is included to allow you to !<<
28 >>! distribute a combined work that includes FreeRTOS without being !<<
29 >>! obliged to provide the source code for proprietary components !<<
30 >>! outside of the FreeRTOS kernel. !<<
32 FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
33 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
34 FOR A PARTICULAR PURPOSE. Full license text is available from the following
35 link: http://www.freertos.org/a00114.html
39 ***************************************************************************
41 * Having a problem? Start by reading the FAQ "My application does *
42 * not run, what could be wrong?" *
44 * http://www.FreeRTOS.org/FAQHelp.html *
46 ***************************************************************************
48 http://www.FreeRTOS.org - Documentation, books, training, latest versions,
49 license and Real Time Engineers Ltd. contact details.
51 http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
52 including FreeRTOS+Trace - an indispensable productivity tool, a DOS
53 compatible FAT file system, and our tiny thread aware UDP/IP stack.
55 http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
56 Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
57 licenses offer ticketed support, indemnification and middleware.
59 http://www.SafeRTOS.com - High Integrity Systems also provide a safety
60 engineered and independently SIL3 certified version for use in safety and
61 mission critical applications that require provable dependability.
69 /* Constants used to configure the interrupts. */
70 #define portPRESCALE_VALUE 64
71 #define portPRESCALE_REG_SETTING ( 5 << 8 )
72 #define portPIT_INTERRUPT_ENABLED ( 0x08 )
73 #define configPIT0_INTERRUPT_VECTOR ( 55 )
76 * FreeRTOS.org requires two interrupts - a tick interrupt generated from a
77 * timer source, and a spare interrupt vector used for context switching.
78 * The configuration below uses PIT0 for the former, and vector 16 for the
79 * latter. **IF YOUR APPLICATION HAS BOTH OF THESE INTERRUPTS FREE THEN YOU DO
80 * NOT NEED TO CHANGE ANY OF THIS CODE** - otherwise instructions are provided
81 * here for using alternative interrupt sources.
83 * To change the tick interrupt source:
85 * 1) Modify vApplicationSetupInterrupts() below to be correct for whichever
86 * peripheral is to be used to generate the tick interrupt.
88 * 2) Change the name of the function __cs3_isr_interrupt_119() defined within
89 * this file to be correct for the interrupt vector used by the timer peripheral.
90 * The name of the function should contain the vector number, so by default vector
91 * number 119 is being used.
93 * 3) Make sure the tick interrupt is cleared within the interrupt handler function.
94 * Currently __cs3_isr_interrupt_119() clears the PIT0 interrupt.
96 * To change the spare interrupt source:
98 * 1) Modify vApplicationSetupInterrupts() below to be correct for whichever
99 * interrupt vector is to be used. Make sure you use a spare interrupt on interrupt
100 * controller 0, otherwise the register used to request context switches will also
101 * require modification. By default vector 16 is used which is free on most MCF52xxx
104 * 2) Change the definition of configYIELD_INTERRUPT_VECTOR within FreeRTOSConfig.h
105 * to be correct for your chosen interrupt vector.
107 * 3) Change the name of the function __cs3_isr_interrupt_80() within portasm.S
108 * to be correct for whichever vector number is being used. By default interrupt
109 * controller 0 vector number 16 is used, which corresponds to vector number 80.
111 void vApplicationSetupInterrupts( void )
113 const unsigned short usCompareMatchValue = ( ( configCPU_CLOCK_HZ / portPRESCALE_VALUE ) / configTICK_RATE_HZ );
115 /* Configure interrupt priority and level and unmask interrupt for PIT0. */
116 MCF_INTC0_ICR55 = ( 1 | ( configKERNEL_INTERRUPT_PRIORITY << 3 ) );
117 MCF_INTC0_IMRH &= ~( MCF_INTC_IMRH_INT_MASK55 );
119 /* Do the same for vector 16 (interrupt controller 0). I don't think the
120 write to MCF_INTC0_IMRH is actually required here but is included for
122 MCF_INTC0_ICR16 = ( 0 | ( configKERNEL_INTERRUPT_PRIORITY << 3 ) );
123 MCF_INTC0_IMRH &= ~( MCF_INTC_IPRL_INT16 );
125 /* Configure PIT0 to generate the RTOS tick. */
126 MCF_PIT0_PCSR |= MCF_PIT_PCSR_PIF;
127 MCF_PIT0_PCSR = ( portPRESCALE_REG_SETTING | MCF_PIT_PCSR_PIE | MCF_PIT_PCSR_RLD | MCF_PIT_PCSR_EN );
128 MCF_PIT0_PMR = usCompareMatchValue;
130 /*-----------------------------------------------------------*/
132 void __attribute__ ((interrupt)) __cs3_isr_interrupt_119( void )
134 unsigned long ulSavedInterruptMask;
136 /* Clear the PIT0 interrupt. */
137 MCF_PIT0_PCSR |= MCF_PIT_PCSR_PIF;
139 /* Increment the RTOS tick. */
140 ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();
141 if( xTaskIncrementTick() != pdFALSE )
145 portCLEAR_INTERRUPT_MASK_FROM_ISR( ulSavedInterruptMask );