マイコンのプログラミングでは、数msのディレイ関数を利用する事が良くありますが、LPCXpressoでは、デフォルトでその様な関数は用意されていません。そこで今回は、SysTickタイマを利用してdelay関数を作成してみたいと思います。
SysTick タイマは,リアルタイム・オペレーティングシステム(Real Time Operating System: RTOS)などの時間管理を行うために装備されているシステムに近いものですが、今回は、簡単に使用できるということで、これを利用してdelay関数を作成していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* * timer_systick.h * * Created on: 2013/09/16 * Author: easylabo */ #ifndef TIMER_SYSTICK_H_ #define TIMER_SYSTICK_H_ #ifdef __USE_CMSIS #include "LPC11xx.h" #endif void SysTick_Handler(void); void delaySysTick(uint32_t tick); void SysTickInit(void); #endif /* TIMER_SYSTICK_H_ */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* * timer_systick.c * * Created on: 2013/09/16 * Author: easylabo */ #include <cr_section_macros.h> #include <NXP/crp.h> #include "timer_systick.h" volatile uint32_t TimeTick = 0; /* SysTick interrupt happens every 10 ms */ void SysTick_Handler(void) { TimeTick++; } void delaySysTick(uint32_t tick) { uint32_t timetick; timetick = TimeTick; while ((TimeTick - timetick) < tick); } void SysTickInit(void){ volatile static uint32_t period; // Assigned to a variable for debug period = SystemCoreClock / 100; // Period for 10msec SYSTICK SysTick_Config(period); } |
SysTickInit()でイニシャライズした後、delaySysTick(10)等と記述して使用してください。引数の数字に10をかけたミリ秒のディレイが生成されます。
Sponsored Link