Skip to content
Snippets Groups Projects
Commit e03b6ec6 authored by Daniele Cattaneo's avatar Daniele Cattaneo Committed by Federico
Browse files

Recalibrate delay loops for stm3220g-eval board when code is in XRAM.


CMSIS update improved FSMC configuration to use lower delays.

Signed-off-by: default avatarTerraneo Federico <fede.tft@miosix.org>
parent 21759916
No related branches found
No related tags found
2 merge requests!40Update to Miosix 2.7,!17Draft: Improved miosix build system and fixed cmake scripts
...@@ -44,16 +44,16 @@ void delayMs(unsigned int mseconds) ...@@ -44,16 +44,16 @@ void delayMs(unsigned int mseconds)
// This delay has been calibrated to take 1 millisecond // This delay has been calibrated to take 1 millisecond
// It is written in assembler to be independent on compiler optimization // It is written in assembler to be independent on compiler optimization
asm volatile(" mov r1, #0 \n" asm volatile(" mov r1, #0 \n"
"___loop_m: cmp r1, %0 \n" "1: cmp r1, %0 \n"
" itt lo \n" " itt lo \n"
" addlo r1, r1, #1 \n" " addlo r1, r1, #1 \n"
" blo ___loop_m \n"::"r"(count):"r1"); " blo 1b \n"::"r"(count):"r1");
} }
#else //__CODE_IN_XRAM #else //__CODE_IN_XRAM
#ifdef SYSCLK_FREQ_120MHz #ifdef SYSCLK_FREQ_120MHz
register const unsigned int count=2662; register const unsigned int count=4998;
#else #else
#warning "Delays are uncalibrated for this clock frequency" #warning "Delays are uncalibrated for this clock frequency"
#endif #endif
...@@ -62,11 +62,10 @@ void delayMs(unsigned int mseconds) ...@@ -62,11 +62,10 @@ void delayMs(unsigned int mseconds)
{ {
// This delay has been calibrated to take 1 millisecond // This delay has been calibrated to take 1 millisecond
// It is written in assembler to be independent on compiler optimization // It is written in assembler to be independent on compiler optimization
asm volatile(" mov r1, #0 \n" asm volatile(" mov r1, %0 \n"
"___loop_m: cmp r1, %0 \n" " .align 2 \n" // <- important!
" itt lo \n" "1: subs r1, r1, #1 \n"
" addlo r1, r1, #1 \n" " bpl 1b \n"::"r"(count):"r1");
" blo ___loop_m \n"::"r"(count):"r1");
} }
#endif //__CODE_IN_XRAM #endif //__CODE_IN_XRAM
...@@ -81,23 +80,21 @@ void delayUs(unsigned int useconds) ...@@ -81,23 +80,21 @@ void delayUs(unsigned int useconds)
asm volatile(" mov r1, #30 \n" asm volatile(" mov r1, #30 \n"
" mul r2, %0, r1 \n" " mul r2, %0, r1 \n"
" mov r1, #0 \n" " mov r1, #0 \n"
"___loop_u: cmp r1, r2 \n" "1: cmp r1, r2 \n"
" itt lo \n" " itt lo \n"
" addlo r1, r1, #1 \n" " addlo r1, r1, #1 \n"
" blo ___loop_u \n"::"r"(useconds):"r1","r2"); " blo 1b \n"::"r"(useconds):"r1","r2");
#else //__CODE_IN_XRAM #else //__CODE_IN_XRAM
// This delay has been calibrated to take x microseconds // This delay has been calibrated to take x microseconds
// It is written in assembler to be independent on compiler optimization // It is written in assembler to be independent on compiler optimization
asm volatile(" mov r1, #2 \n" asm volatile(" mov r1, #5 \n"
" mul r2, %0, r1 \n" " mul r1, %0, r1 \n"
" mov r1, #0 \n" " sub r1, r1, #1 \n"
"___loop_u: cmp r1, r2 \n" " .align 2 \n" // <- important!
" nop \n" "1: subs r1, r1, #1 \n"
" itt lo \n" " bpl 1b \n"::"r"(useconds):"r1");
" addlo r1, r1, #1 \n"
" blo ___loop_u \n"::"r"(useconds):"r1","r2");
#endif //__CODE_IN_XRAM #endif //__CODE_IN_XRAM
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment