کتابخانه system tick timer میکروکنترلر LPC1768
این کتابخونه ای که نوشتم براتون، دارای توابع و define های مورد نیاز زیر هستش، که بعدش میریم سراغ شرح تک تک توابع :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
void SysTick_SetTimeInterrupt_ms( uint16_t Time ); void SysTick_SetTimeInterrupt_us( uint32_t Time ); /*****************************************/ void SysTick_Enable(void); void SysTick_Disable(void); /*****************************************/ #define SysTick_INTERNAL_CLOCK 1 #define SysTick_EXTERNAL_CLOCK 0 #define SysTick_INTERRUPT_ENABLE ۱ #define SysTick_INTERRUPT_DISABLE 0 uint8_t SysTick_Init( uint8_t ClockSource, uint8_t EnableInterrupt ); /*****************************************/ uint32_t SysTick_CurrentCounterValue(void); /*****************************************/ uint8_t SysTick_ReadInterruptFlag(void); /*****************************************/ void SysTick_Delay_s(int32_t Time); void SysTick_Delay_ms(int32_t Time); void SysTick_Delay_us(int32_t Time); |
این بود لیست توابع و ماکرو ها - بریم توضیح تک تک توابع، به ترتیب نحوه استفاده :
|
void SysTick_Delay_s(int32_t Time); void SysTick_Delay_ms(int32_t Time); void SysTick_Delay_us(int32_t Time); |
به کمک این ۳ تا تابع، میتونید از واحد system tick timer به عنوان یه تابع تاخیر زمانی ( delay ) دقیق استفاده کنید؛ اگه از این توابع استفاده کنید، دیگه نمیتونید از توابع دیگه ای که برا این واحد نوشتم استفاده کنید؛ پروژه ای برای این قسمت براتون در ته مطلب قرار میدم. ( کلا تو این مطلب ۳-۴ تا پروژه بیشتر برا این واحد قرار نمیدم، همین هم زیادشه ^_^ ) دیگه تابع ها هم تابلو هستن کاربردشون ولی باز یه کوچولو توضیح میدم :
SysTick_Delay_s : تولید تاخیر زمانی ( واحد ثانیه )
SysTick_Delay_ms : تولید تاخیر زمانی ( واحد میلی ثانیه )
SysTick_Delay_us : تولید تاخیر زمانی ( واحد میکرو ثانیه )
|
void SysTick_SetTimeInterrupt_ms( uint16_t Time ); void SysTick_SetTimeInterrupt_us( uint32_t Time ); |
به کمک این دو تابع، زمان بین هر بار رخ دادن این واحد رو تعیین میکنیم.
SysTick_SetTimeInterrupt_ms : اگه زمانتون بین ۱ - ۱۶۷ میلی ثانیه هستش، از این تابع استفاده کنید.
SysTick_SetTimeInterrupt_us : اگه زمانتون بین ۱ - ۱۶۷,۷۷۲ میکرو ثانیه هستش، از این تابع استفاده کنید.
توجه : از مقداری بیش از محدوده تعیین شده برای هر تابع، استفاده نکنید.
|
#define SysTick_INTERNAL_CLOCK 1 #define SysTick_EXTERNAL_CLOCK 0 #define SysTick_INTERRUPT_ENABLE ۱ #define SysTick_INTERRUPT_DISABLE 0 uint8_t SysTick_Init( uint8_t ClockSource, uint8_t EnableInterrupt ); |
SysTick_Init : به کمک این تابع میتونیم تنظیمات دلخواه واحد system tick timer رو اعمال کنیم؛ این تابع دو تا پارامتر داره که به ترتیب توضبیح میدم در زیر :
توجه مهم : اگه از خود تابع وقفه نمیخوام استفاده کنیم و فقط از پرچمش میخوایم استفاده کنیم، بهتره وقفه این واحد رو غیر فعال کنیم.
ClockSource : در این پارامتر، منبع کلاک این واحد رو تعیین میکنیم که داخلی باشه یا خارجی، اگه خارجی باشه باید به پایه p3.26 کلاک اعمال کنید؛ برا راحتی کار دو تا ماکرو تعریف کردم با نام های SysTick_INTERNAL_CLOCK و SysTick_INTERRUPT_DISABLE تا برنامتون خوانا تر بشه.
EnableInterrupt : فعال/غیر فعال کردن وقفه این واحد؛ برا اینم دو تا ماکرو با نام های SysTick_INTERRUPT_ENABLE و SysTick_INTERRUPT_DISABLE تعریف کردم کیه میتونید ازشون استفاده کنید و به عنوان مقدار اولیه به این پارامتر ( EnableInterrupt ) بدید.
|
void SysTick_Enable(void); void SysTick_Disable(void); |
خب بعد از تنظیم زمان، و اون دو تا تنظیمات دیگه ( منبع کلاک و وقفه ) نوبت فعال کردن این واحد میرسه.
SysTick_Enable : فعال کردن شمارنده این واحد.
SysTick_Disable : متوقف کردن شمارنده این واحد.
|
uint32_t SysTick_CurrentCounterValue(void); |
SysTick_CurrentCounterValue : برا خوندن مقدار فعلی شمارنده تایمر این واحد به کار میاد.
|
uint8_t SysTick_ReadInterruptFlag(void); |
SysTick_ReadInterruptFlag : برا خودن پرچم وقفه ( اگه وقفه رخ بده/شمارنده ۰ بشه؛ این بیت ۱ میشه ) این واحد به کار میاد.
خب دیگه توضیح توابع تموم شد، بریم سراغ پروژه هامون ^_^
مهمان
ممنون آقای دمیرچیلو بابت اشتراک گذاریتون.فقط اینو در نظر داشته باشین که مطالبتون خونده میشه و بسیار مفید واقع میشه.
نویسنده این مطلب
امیدوارم!
مهمان
سلام.
فرق این با تابع وقفه زمانی و وقفه و تایمر/کانتر چه؟
نویسنده این مطلب
سلام

یه وقفه داخلی داریم و یه خارجی – داخلی که معلومه – از داخل تحریک میشه – خارجی هم از اسمش معلومه از خارج تحریک میشه ( توسط پایه هایی )
حالا مثلا بحث وقفه داخلی – مثلا تایمر یه شمارنده ای داره – وقتی به مقدار حداکثر خودش برسه دوباره ۰ میشه – که به این حالت میگن سر ریز شدن – که در این زمان میتونه یه وقفه رخ بده ( اگه فعالش کرده باشیم )
راستی تو چقدر بین این موضوع و اون موضوع میپری – یه چیزو کامل یاد بگیر – یا شاید هم سرعت یادگیریت بالاس
مهمان
سلام.

اره.
اخه این انقدر واحد داره برای ساخت تاخیر قاطی کردم.
الان ای وی ار و تو ۵روز یاد گرفتم.