نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
مهدی دمیرچیلو

آموزش آرم میکروکنترلر lpc1768 جلسه ۱۳ system tick timer

به نام خدا : تو این مطلب از سری مطالب آموزش آرم میخوام آموزش واحد system tick timer میکروکنترلر lpc1768 رو قرار بدم براتون، این واحد کارش تولید وقفه در زمان های از قبل تعیین شده هستش، مثلا دوست دارین یه کاری در هر ۳۰ میلی ثانیه یکبار انجام بشه، این واحد بکارتون میاد، ازش برا تولید وقفه زمانی هم میشه استفاده کرد ^_^ حالا چطوریش بماند در مطلب پروژه این مطلب! کتابخونه و پروژه اش رو میزارم. ( آموزش آرم میکروکنترلر lpc1768 جلسه ۱۳ system tick timer )
آموزش آرم میکروکنترلر lpc1768 جلسه ۱۳ system tick timer

آموزش آرم میکروکنترلر lpc1768 جلسه ۱۳ system tick timer


پیکربندی ابتدایی واحد System Tick Timer

پیکربندی ابتدایی واحد System Tick Timer

  1. منبع کلاک : این واحد میتونه کلاکش رو از منبع داخلی یا پایه ( STCLK ( P3.26 تامین کنه.
  2. پایه ها : پایه ( STCLK ( P3.26 میتونه به عنوان منبع کلاک این واحد مورد استفاده قرار بگیره و باید با رجیسترهای مربوطه این پایه رو پیکربندی کنیم. ( که در مطالب جلسات اولیه نحوه تعیین نقش پایه ها توضیح داده شده است! نقطه سز خط ^_^ ) - این واحد پایه دیگه ای نداره، کلا ماهیتش اینطوری هستش که نیاز به پایه نداره ^_^
  3. وقفه : به کمک NVIC وقفه این واحد رو فعال کنید.
خصوصیات واحد System Tick Timer

خصوصیات واحد System Tick Timer

  1. قابلیت تایین منبع کلاک از کلاک داخلی CPU یا پایه STCLK
  2. دارای Vector اختصاصی ( تابع وقفه اختصاصی )
  3. قابلیت تنظیم زمان رخ دادن وقفه ( تنظیم مقدار Top تایمر )
  4. وجود یه تایمر ۲۴ بیتی که از Top میشموره تا ۰ و وقتی به ۰ برسه وقفه تولید میکنه.

بلوک دیاگرام واحد System Tick Timer رو در شکل زیر مشاهده میکنید :

System Tick Timer block diagram

پایه های واحد System Tick Timer

پایه های واحد System Tick Timer

با توجه به کاربرد و ماهیت این واحد، نیاز به پایه ای نداره، ولی یه پایه هستش که میتونه ازش به عنوان منبع کلاک استفاده کنه، که در زیر مشاهده میکنید این پایه رو :
پایه های واحد System Tick Timer

 
توضیح رجیسترهای واحد System Tick Timer

توضیح رجیسترهای واحد System Tick Timer

System Tick Timer register map
STCTRL : رجیستر کنترل تایمر و رجیستر وضعیت ( R/W )
STRELOAD : رجیستر بارگزاری مقدار تایمر ( R/W )
STCURR : مقدار فعلی شمارنده تایمر ( R/W )
STCALIB : رجیستر کالیبراسیون مقدار تایمر ( Read Only )

رجیستر کنترل تایمر و رجیستر وضعیت ( STCTRL - 0xE000 E010 )

رجیستر کنترل تایمر و رجیستر وضعیت ( STCTRL - 0xE000 E010 )

نحوه استفاده از این رجیستر در کامپایلر کیل به صورت زیر است :

این رجیستر برای تنظیمات واحد System Tick Timer هستش.
توجه : این رجیستر R/W است.
System Timer Control and status register - STCTRL
بیت ۰ ( ENABLE ) : فعال کردن شمارنده واحد System Tick؛ میکرو وقتی ریست بشه، این بیت ۰ میشه ( این واحد غیر فعال میشه )
۱ : فعال کردن شمارنده واحد System Tick
۰ : غیر فعال کردن شمارنده واحد System Tick
بیت ۱ ( TICKINT ) : با ۱ کردن این بیت، وقفه واحد System Tick فعال میشه ( به طبع با ۰ کردن این بیت، وقفه غیر فعال میشه ^_^ )؛ وقتی شمارنده ۰ بشه، وقفه رخ میده؛ با ریست شدن میکرو، به صورت خودکار این بیت ۰ میشه.
بیت ۲ ( CLKSOURCE ) : انتخاب کننده منبع کلاک واحد System Tick
۱ : CPU
۰ : کلاک خارجی که از پایه ( STCLK ( P3.26 تامین میشه.
توجه : حداکثر فرکانس اعمالی به پایه STCLK باید کمتر از PCLK/2 باشد.
بیت ۳ تا ۱۵ : رزرو شده.
بیت ۱۶ ( COUNTFLAG ) : پرچم شمارنده System Tick؛ این پرچم فعال میشه ( ۱ میشه ) وقتی که شمارنده ۰ میشه و با خوندن این رجیستر، مقدارش پاک میشه به صورت خودکار.
بیت ۱۷ تا ۳۱ : رزرو شده.

رجیستر بارگزاری مقدار تایمر ( STRELOAD - 0xE000 E014 )

رجیستر بارگزاری مقدار تایمر ( STRELOAD - 0xE000 E014 )

نحوه استفاده از این رجیستر در کامپایلر کیل به صورت زیر است :

این رجیستر مقدار TOP شمارنده رو تعیین میکنه، شمارنده از این مقدار شروع به شمارش میکنه و مقدارش ۱دونه ۱دونه کم میشه تا ۰ بشه، وقتی شمارنده ۰ شد، وقفه رخ میده؛ به کمک این رجیستر میتونیم مقدار TOP تایمر رو تعیین کنیم؛ رجیستر STCALIB ممکنه خونده بشه و مورد استفاده قرار بگیره اگه CPU یا کلاک خارجی در حال اجرا باشین در frequency intended برای استفاده با مقدار STCALIB
توجه : این رجیستر R/W است.

System Timer Reload value register - STRELOAD

بیت ۰ تا ۲۳ ( RELOAD ) : وقتی شمارنده به مقدار ذخیره شده در این ۲۴ بیت برسه ۰ میشه. ( با ریست شدن میکرو، این ۲۴ تا بیت ۰ میشن )، در این ۲۴ تا بیت از مقدار ۰ تا ۱۶۷۷۷۲۱۵ میتونید قرار بدید.
بیت ۲۴ تا ۳۱ : رزرو شده.

رجیستر مقدار فعلی شمارنده تایمر (STCURR - 0xE000 E018)

رجیستر مقدار فعلی شمارنده تایمر (STCURR - 0xE000 E018)

نحوه استفاده از این رجیستر در کامپایلر کیل به صورت زیر است :

این رجیستر مقدار فعلی شمارنده رو به ما میده.
توجه : این رجیستر R/W است.

System Timer Current value register - STCURR

بیت ۰ تا ۲۳ ( CURRENT ) : خوندن این رجیستر، مقدار این ۲۴ تا بیت رو به ما میده، نوشتن هر مقدار در این ۲۴ تا بیت، باعث ۰ شدن مقدار شمارنده میشه و پرچم COUNTFLAG از رجیستر STCTRL رو هم پاک میکنه.
بیت ۲۴ تا ۳۱ : رزرو شده.

رجیستر کالیبراسیون مقدار تایمر ( STCALIB – ۰xE000 E01C ) - در حال تکمیل - استفاده از این رجیستر ظرروی نیست

رجیستر کالیبراسیون مقدار تایمر ( STCALIB - 0xE000 E01C )

نحوه استفاده از این رجیستر در کامپایلر کیل به صورت زیر است :

The STCALIB register contains a value that is initialized by the Boot Code to a factory programmed value that is appropriate for generating an interrupt every 10 milliseconds if the System Tick Timer is clocked at a frequency of 100 MHz.
This is the intended use of the System Tick Timer by ARM.
It can be used to generate interrupts at other frequencies by selecting the correct reload value.

توجه : این رجیستر فقط خواندنی است.

System Timer Calibration value register - STCALIB

بیت ۰ تا ۲۳ ( TENMS ) : مقدار RELOAD برای بدست آوردن تیک سیستم با نرخ underflow ده میلی ثانیه در صورتی که کلاک ۱۰۰ مگاهرتز باشد؛ این مقدار در زمان ریست با مقدار اولیه عرضه شده توسط کارخانه برای خانواده ۱۷۶x/175x مقداردهی می شود؛ مقادیر TNEMS و SKEW و NOREF فقط در صورت استفاده از کلاک CPU یا کلاک اعمال شده به STCLK در فرکانس ۱۰۰ مگاهرتز قابل استفاده و بکار بردن هستند. ( نحوه استفاده، این که دستی هستش یا خودکار و ... دیتاشیت چیزی نگفته، منم هر چی زور زدم نتونستم در عمل جواب بگیرم )
بیت ۲۴ تا ۲۹ : رزرو شده.
بیت ۳۰ ( SKEW ) : این بیت نشان دهنده این است که آیا مقدار TENMS دقیقا زمان ۱۰ میلی ثانیه را تولید می کند یا نه؛ این بیت در زمان ریست با مقدار اولیه عرضه شده توسط کارخانه برای خانواده ۱۷۶x/175x مقداردهی می شود ( به توضیح TENMS در بالا مراجعه کنید )؛ زمانی که این بیت صفر باشد نشان دهنده دقیق بودن مقدار TENMS است و ۱ بودن آن نشان دهنده عدم دقت مقدار TENMS است. ( اینم مثل بیت پایینی من نتونستم جواب بگیرم ازش )
بیت ۳۱ ( NOREF ) : این بیت نشان دهنده در دسترس یودن کلاک مرجع خارجی است؛ این بیت در زمان ریست با مقدار اولیه عرضه شده توسط کارخانه برای خانواده ۱۷۶x/175x مقداردهی می شود ( به توضیح TENMS در بالا مراجعه کنید )؛ زمانی که این بیت صفر باشد نشان دهنده در دسترس یودن کلاک مرجع خارجی است و ۱ بودن آن نشان دهنده عدم وجود یک مرجع مجزا است. ( من هر چی کشتم خودمو در عمل نتونستم اینو تست کنم - حالا یا میکرو من قلابی بوده، یا باگ میکرو هستش یا سوتی من که بعید میدونم )

 
مثالهایی از محاسبات System Tick Timer

مثالهایی از محاسبات System Tick Timer

مثال های زیر برا بحث انتخاب مقدار TOP شمارنده واحد System Tick Timer هستش که در فرکانس های مختلف و منابع کلاک مختلف مثال ها زده شده است؛ مثال های زیر همگی برا تولید وقفه در هر ۱۰ms هستش.
 
مثال ۱) این مثال برا حالتی هستش که از کلاک CPU استفاده میکنیم و فرکانس میکرو ۱۰۰MHz هستش.

  1. STCTRL = 7 ( برید این رجیستر رو ببینید، بیت هاشو ببینید، متوجه میشید که ۷ از کجا اومده )
  2. STRELOAD = (100MHz*10ms) - 1 = 1,000,000 - 1 = 999,999

 
مثال ۲) در این مثال هم منبع کلاک CPU هستش و فرکانس میکرو ۸۰MHz هستش.

  1. STCTRL = 7
  2. STRELOAD = (80MHz*10ms) - 1 = 800,000 - 1 = 799,999

 
مثال ۳) در این مثال، منبع کلاک CPU رو اسیلاتور داخلی ( IRC ) تنظیم شده، که ۴MHz هستش.

  1. STCTRL = 7
  2. STRELOAD = (4MHz*10ms) - 1 = 40,000 - 1 = 39,999

 
مثال ۴) در این مثال منبع کلاس رو پایه STCLK تنظیم شده، که ما هم فرکانس ۳۲٫۷۶۸KHz به این پایه اعمال کردیم.

  1. STCTRL = 3
  2. STRELOAD = (32.768KHz*10ms) - 1 = 327.68 - 1 = 327

 
توجه : در این مثال همونطور که میبینید مقداری که به رجیستر STRELOAD دادیم رو رند کردیم لذا مقداری خطا خواهد داشت و "دقیقا" در فواصل زمانی مد نظر ما وقفه رخ نمیده. ( یکم خب خطا داره به طبع )
 

سوال 1 : حداکثر زمانی که این واحد میتونه شمارش کنه چقدره؟
جواب 1 : متن زیرو بببین ( فرض کردم فرکانس میکرو 100 میگ هستش ) :

100MHz * x(us) < 24bit ( 16,777,215 )  ---->

x(us) < 16,777,215 / 100Hz  ---->

x(us) < 167,772.15  ---->

در نتیجه حدود 167,772 میکرو ثانیه ( حدود 167 میلی ثانیه ) میتونیم تولید کنیم به کمک این واحد.
 
سوال 2 : این واحد مقیم فرکانسی نداره؟
جواب 2 : تا جایی که یادمه و بررسی کردم نه.

 
 
ممنون از شما که تو این مطلب همراه من بودید، من تمام تلاشمو کردم برا کامل شدن این مطلب، امیدوارم میفید باشه براتون، دیگه وقتی کسایی که بلدن یاد نمیدن، مایی که بلد نیستیم مجبوریم بریم یاد بگیریم و یاد بدیم، ای لعنت خدا بر کسایی که چیزی بلدن ولی به اشتراک عموم نمیزارن؛ مطلب پروژه های این مطلب رو فردا پسفردا میزارم تو سایت.
فعلا یا علی.
 
تحلیل سیاسی به سبک الکترونیک ^_^
امام خامنه ای
کیه که گوش کنه، الان همه دنبال سهام عدالت هستن، نمیدونن که به همین بهونه ۸ ماه کشور رو به آشوب کشیدن حالا که نزدیک انتخابات داره میشه، دارن خودشون ازش استفاده میکنن!!! ای خدااا عجب دنیایی هستش، برید فیلم صحبت وزیر مسکن دولت آقای روحانی ( عباس آخوندی، نماینده وقت موسوی ) با امام خامنه ای در سال ۸۸ رو مشاهده کنید، داستان دستتون میاد!؛ لینک فیلم رو در زیر میزارم ببینید : اعتراف نماینده موسوی در دیدار با رهبر انقلاب
میگه که ما میدونیم که صندوق ها رو شونصد بارم بشموریم آمار رای ها تغییر نمیکنه، ما به قبل انتخابات اعتراض داریم که شورای نگهبان قبل انتخلابات خوب عمل نکرده و تنها چیزی که از اون موقع من یادمه و اینا بهونه میکردن همین سهام عدالت بود که میگفتن رای ملتو با این سهام عدالت خریدن یه جورایی - این یه جور تقلب میشه، که بهونشون کاملا معلومه، اگه راست میگفتن پس چرا شرکت کردن، اگه راست میگن دنبال انقلاب رنگی/مخملی ( مثل بلایی که سر گرجستان ابردن ) نبودن پس چرا قبل از اعلام نتایج موسوی کفت برنده قطعی با آرای بسیار زیاد منم، بعد که دروغش معلوم شد، آشوب به راه انداخت خوشو و دارو دسته اش!؟! حالا هم روحانی داره از این سهام عادت که داریم نزدیک انتخابات میشیم، داره سهام عدالت رو ازش استفاده میکنه  laugh عجب دنیایی هستش bad
گروه پرسش و پاسخ الکترونیکی در سروش
مهدی دمیرچیلو
ارسال دیدگاه
7

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

4) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    aminem

    سلام
    من میخام با میکروی lpc1768 یک سری داده رو با پروتکل tcp/ip به کامپیوتر بفرستم. این پروتکل همون ethenet میکرو هست؟
    اگر ممکنه یک سایتی یا مطلبی معرفی کنین ، ممنون میشم.

  2. Avatar

    مهمان

    مهدی

    ضمن تشکر فراوان لطفا ادامه بدید

  3. Avatar

    مهمان

    سعید

    سلام – سیستم تیک مقسم فرکانسی نداره ؟؟
    حداکثر زمانی که میشه باهاش ایجاد کرد چقدره ؟؟ و اینکه وقتی وقفه بوجود بیاد شمارنده متوقف میشه یا دو باره از مقداری که بهش دادیم شروع میکنه به شمردن !!!؟
    سپاس

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      جوابو به ته مطلب در قسمت “مثالهایی از محاسبات System Tick Timer” اضافه کردم.

  4. Avatar

    مهمان

    امیر

    بچه ها جون خوتون نظر بدین …
    حمایت کنید…
    به خدا خرجی نداره هااااا…
    همه با هم یالاااا….. shout

  5. Avatar

    مهمان

    امیر

    دمت گرم خوبه
    ادامه بدین
    چرا واحد DMA رو قرار نمیدین؟؟
    عالی میشه
    موفق باشین good

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      شما نفر اولی هستید که نظر میدید – لذا با توجه به اسطقبال! بسیار زیاد – فعلا درگیر چیزای دیگه هستم تا ۱۷۶۸ – وقتم خالی بشه میام سراغش