Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training


Using ARM7 IRQ mode with STR750

Posted by Jack Peacock on September 28, 2007
Environment is FreeRTOS V4.3, GCC 4.2, ST peripheral driver library and the STR750 (ARM7TDMI-S) controller. Interrupts are not nested, and FIQ not used. IRQ mode has a separate stack allocated.

Which CPU mode should be used when handling interrupts when RTOS calls are made for queues and context switching inside the interrupt handler? The example library provided by ST switches from IRQ to SYS mode while procesing an interrupt event generated by peripherals, switching back to IRQ after the interrupt handler completes. However, I am not switching modes, staying in IRQ mode through the entire interrupt, and I don't use the ST provided interrupt handler examples to go with the ST library. Does the interrupt mode make a difference to FreeRTOS?
Jack Peacock

RE: Using ARM7 IRQ mode with STR750

Posted by Dave on September 28, 2007
If you are not wanting the interrupt to cause a context switch then there are no special requirements. If you are wanting the interrupt to cause a context switch then FreeRTOS demonstrates two methods which are

i/ Vector directly to each interrupt individually. In this scheme the interrupt should be declared naked and the FreeRTOS macros used to save and restore the task context. This is done from IRQ mode. This is the way most of the ARM7 ports are configured, but not I don't think all.

ii/ Have a common interrupt entry point that saves the task context, then vectors to the interrupt handler which is just an ordinary C function, then restores the context after the C function completes. The restored context might be different to that which was saved if a context switch has occurred. This is demonstrated in the STR9 demo and maybe some others. This also uses IRQ mode.

Never use startup code that manipulates the registers and processor mode before vectoring to an interrupt other than the method ii/ FreeRTOS code described here. The system will simply crash if you do as this is not how the FreeRTOS code expects to find the processor or stacks.

[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]

Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.

Free TCP/IP and file system demos for the RTOS

Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists