Quality RTOS & Embedded Software

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




Loading

Interrupts and FreeRTOS

Posted by qasimzca on October 7, 2017

I am using ARM Cortex-M4 core-based MT2523G microcontroller. My issues that, when I use interrupts with FreeRTOS, I never receive an interrupt. For example, I am using external interrupts in my code. Without FreeRTOS the interrupts are working perfect. But whenever I try to use any kind of interrupts with FreeRTOS, no interrupts is generated. I tried to check weather interrupts are disable or not but I could not find any solution.

Please guide me how can i enable interrupts while using FreeRTOS.

NOTE: Interrupts are perfectly working without FreeRTOS


Interrupts and FreeRTOS

Posted by rtel on October 7, 2017

Are you encountering this problem before or after starting the scheduler? If you have made calls to the FreeRTOS API, but not started the scheduler, then it is expected that interrupts will be disabled. That is done deliberately to prevent interrupt service routines attempting to perform a context switch before the scheduler is running. Interrupts are automatically re-enabled when the first task starts running.


Interrupts and FreeRTOS

Posted by qasimzca on October 9, 2017

My code is shown below. I have created the task that continuously prints a string on screen. But, interrupts are still not working

int main(void) { /* Do system initialization, eg: hardware, nvdm. */ system_init();

log_init(NULL, NULL, NULL);

LOG_I(template, "start to create task.\n");



/*this function initializes the GPIOs and external interupts */
eint_sample();

BaseType_t pdchk;
if((pdchk = xTaskCreate(print_task,"idle",2048,NULL,1,NULL)) == pdPASS){
    LOG_I(template, "\n\r idle create\n\r");
}



/* Call this function to indicate the system initialize done. */
SysInitStatus_Set();


/* Start the scheduler. */
vTaskStartScheduler();

for (;;);

}


Interrupts and FreeRTOS

Posted by rtel on October 9, 2017

The last thing vTaskStartScheduler() does is call into the portable layer, which enables interrupts globally, clears the BASEPRI register so no interrupts are masked, then starts the first task.

Is the first task starting? How do you know? If you put a break point at the start of the first task, before it does anything (even before it modifies the stack frame) what values do the I bit (global interrupt disable) and BASEPRI registers hold?

If you step through prvStartFirstTask() (line 303 on the following link at the time of writing: https://sourceforge.net/p/freertos/code/HEAD/tree/trunk/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c) you will see the cpsie i instruction, which enables global interrupts. It then executes svc 0, which results in vPortSVCHandler() executing (line 284 on the same link at the time of writing), where you will see it loads basepri with 0. If the first task has started, then those lines must have executed. If you step through those functions, what do you see happening?


Interrupts and FreeRTOS

Posted by qasimzca on October 11, 2017

My interrupts have started working now. When I introduced a delay inside my first task using for loop, just for test purposes, I started getting interrupts. But now the situation is if delay is much smaller, then i am getting interrupts without any event. I am not able to understand why is this happening and why i don't get interrupts if i don't introduce delay inside my task.


Interrupts and FreeRTOS

Posted by rtel on October 11, 2017

By 'interrupts' do you mean context switching from one task to another, or do you mean all interrupts. How are you determining this? Are you actually looking at the register values in the chip or just observing externally?


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




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

FreeRTOS kernel V10 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

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

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

OpenRTOS and SafeRTOS