Quality RTOS & Embedded Software

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




Loading

vPortSetupTimerInterrupt changes break STM32F4

Posted by pbleyer on December 15, 2013

Hello.

I have been checking out the FreeRTOS development releases that implement tickless mode and, after realizing that SysTick was running slower than before on some STM32F4-based boards, I saw that the portNVICSYSTICKCTRLREG initialization in vPortSetupTimerInterrupt (ARMCM4F, tickless mode disabled) was modified to update only the INT and ENABLE bits instead of updating the complete register as before. In particular:

678c686
< 	portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
---
> 	portNVIC_SYSTICK_CTRL_REG |= ( portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );

The CM4 standard states that the reset value of STKCTRL is 0x00000004 --i.e., default CLKSOURCE is the AHB clock. However from the debugger output I can see the value on my chip after reset is 0x0000_0000 instead, effectively selecting CLKSOURCE as AHB/8 and the reason for the slower behavior.

Is there any rationale behind the change to bit ORing in the case of tick-mode vPortSetupTimerInterrupt function? I understand the code may be written directly from the standard but it seems the STM32F4 is deviant, at least the ones I have.

Best regards.


vPortSetupTimerInterrupt changes break STM32F4

Posted by rtel on December 15, 2013

Try the latest head revision now. It reverts to the old line:

portNVICSYSTICKCTRLREG = portNVICSYSTICKCLKBIT | portNVICSYSTICKINTBIT | portNVICSYSTICKENABLEBIT;

but sets portNVICSYSTICKCLKBIT to 0 if configSYSTICKCLOCK_HZ is defined. It is checked in with the following comment:

"Force the SysTick clock bit to be set in Cortex-M3 and Cortex-M4F bits if configSYSTICKCLOCKHZ is not defined, otherwise leave the bit as it is found as the SysTick may use a divided clock."

Please let us know if this works for you or not.

Regards.


vPortSetupTimerInterrupt changes break STM32F4

Posted by pbleyer on December 16, 2013

That certainly fixes it. Many thanks.


[ 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