تایمر Systick یک از تایمر 24 بیتی  است که در پردازنده های سری  CortexM کمپانی ARM قرار دارد .در واقع این تایمر یکی از واحد های جانبی پردازنده است که است که یک مقدار اولیه (Reload  value)به ان داده می شود و از اون مقدار به سمت پایین شمارش  (Down Counter) میکند . و زمانیکه به مقدار صفر رسید یک فلگ (Flag) به عنوان وقفه (Interrupt) فعال میکند و فلگ باعث می شود که یک وقفه تولید شود . از این تایمر اغلب در سیستم عامل های Real-time استفاده می شود و همچنین می توان به عنوان تاخیر (Delay)  استفاده کرد.

  • فرکانس شمارش این تایمر برابر با مقدار فرکانس پردانده است.

                                                          Core Clock :72000000

                                                                   Systick Timer Clock: 7200000

  • برای فعال کردن این تایمر از دستور زیر استفاده می شود و یک مقدار به عنوان ورودی به ان داده می شود که در واقع این مقدار به عنوان مقدار اولیه است که تایمر هنگام راه اندازی از این مقدار (Reload value)شروع به شمارش یه سمت پایین می کند که وقتی صفر رسید ، یک وقفه تولید می کند.

با استفاده از این دستور که یکی از دستورات پر کاربرد توابع CMSIS  است می توانید این تایمر را فعال بکنید .

  SysTick_Config(numberOfTicks);

مثال : واحد Systick Timer را طوری تنظیم بکنید تا  هر یک میلی ثانیه مقدار ان صفر شود و یک وقفه تولید بکند.

قدم اول :

اولین قدم این است که تایمر را  با استفاده از دستوری که در قبل توضیح داده شد فعال بکنید.

باید مقدار اولیه تایمر رو طوری تنظیم بکنیم (مقدار اولیه مقداری است که تایمر همیشه از این مقدار شروع به شمارش میکند البته همیشه به سمت پایین !!!) که به زمان یک میلی ثانیه برسیم.

                   SystemFrequency=72000000

                   Interrupt Time = (1/ SystemFrequency) * numberOfTicks

                   Interrupt Time =(1/72000000)*72000

                   Interrupt Time = 1ms

SysTick_Config (SystemFrequency/1000); // Configure the SYSTICK

قدم دوم :

زمانیکه تایمر به مقدار صفر می رسد فلگ مربوط به وقفه ی ان یک می شود و در صورتیک شما واحد NVIC رو فعال کرده باشین (دستور بالا خودش این کار انجام میده) به روتین وقفه ی مربوط به تایمر Systick پرش میکند. پس باید این روتین وقفه رو داخل برنامتون داشته باشین تا بتونین بسته کاری که می خواهید انجام بدید بتونید ازش استفاده بکنید.

void SysTick_Handler (void){

// Write your code here

}

 

 

کانال تلگرام میکروکنترلر ARM