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

آموزش آرم میکروکنترلر lpc1768 جلسه ۸ timer counter ق۲

به نام خدا : ادامه مطلب جلسه قبل ( آموزش آرم میکروکنترلر lpc1768 جلسه ۷ timer counter ق۱ )
آموزش آرم میکروکنترلر lpc1768 جلسه 8 timer counter ق2

آموزش آرم میکروکنترلر lpc1768 جلسه ۸ timer counter ق۲


 


 

(Prescale register (T[0:3]PR

رجیستر ۳۲ بیتی Prescale مشخص میکنه مقدار حداکثر شمارنده Prescale رو ( چیزی که من تست کردم و فهمیدم در حالت عادی مقدار این رجیستر ۰ هستش – و این یعنی در حالت عادی هر یه واحد افزایش “شمارنده تایمر یا همون TC” برابر مقدار کلاک تایمر هستش – سریع ترین شمارش TC به ازای PR=0 به دست میاد. )
همون طور که قبلا گفتم، به کمک این رجیستر میتونیم زمان هر کلاک شمارنده تایمر (TnTC) رو تعیین کنیم.
حالا در مطلب پروژه های تایمر LPC1768، یه پروژه در این باره بزارم قشنگ متوجه میشید؛ ته این مطلب هم خلاصه کل مطلب رو هم دوباره میگم ( یعنی اگه نفهمیدید خیالتون راحت – به قول شعار ارتش در زمان قدیم (تو جک ها) : خر بده آدم بگیر ^_^؛ این جا هم همینطوره، کسی بدون اطلاعات بیاد، باید با اطلاعات بره!!!(اون جمله رو برا شوخی گفتم، کسی نارحت نشه یه وقت)؛ جان داش اگه جایی از مطلب رو نفهمیدید یا من بد گفتم و…. حتما بگید تا تصحیح کنم، من که مطلب برا عمه خدا بیامرزم نمیزارم که، برا شما میزارم، اگه قرار باشه کسی از مطالب چیزی نفهمه یا این قدر من بد توضیح داده باشم که ملت اذیت بشن که نمیشه – وای خدا رمان نوشتم، بریم سراغ ادامه مطلب ^_^ )
 

(Prescale Counter register (T[0:3]PC

مقدار شمارنده ۳۲ بیتی Prescale در هر PCLK افزایش پیدا میکنه؛ وقتی این شمارنده به مقدار ذخیره شده در رجیستر Prescale register (که مخففش میشه PR) میرسه، شمارنده تایمر (که مخففش میشه TC) یه واحد زیاد میشه و PC مقدارش ۰ میشه در PCLK بعدی.
توجه : وقتی مقدار PR=0 هستش، TC در هر کلاک PCLK زیاد میشه مقدارش و وقتی PR=1، مقدار TC در هر دو کلاک PCLK مقدارش زیاد میشه و ….
 

(Match Control Register (T[0:3]MCR

رجیستر کنترل “برابری(Match)” مورد استفاده قرار میگیره برای کنترل “برابری” و این که در صورت برابر شدن MRn با TnTC چه اتفاقی(اتفاقهایی) باید بیوفته.

what operations are performed when one of the Match Registers matches the Timer Counter.

Match Control Register
بیت ۰ ( MR0I – Interrupt on MR0 ) : 
۱ : یه وقفه رخ میده وقتی که مقدار MR0 با TC برابر بشه.
۰ : غیر فعال کردن این وقفه.
بیت ۱ ( MR0R – Reset on MR0 ) : 
۱ : مقدار TC ریست میشه اگه با MR0 برابر بشه.
۰ : غیر فعال کردن این ویژگی
بیت ۲ ( MR0S – Stop on MR0 ) : 
۱ : در هنگام برابری MCR0 و TC داریم : TC و PC متوقف میشوند و مقدار [TCR[0 صفر میشه.
۰ : غیر فعال کردن این ویژگی
 
بیت ۳ ( MR1I – Interrupt on MR1 ) : 
۱ : یه وقفه رخ میده وقتی که مقدار MR1 با TC برابر بشه.
۰ : غیر فعال کردن این وقفه.
بیت ۴ ( MR1R – Reset on MR1 ) : 
۱ : مقدار TC ریست میشه اگه با MR1 برابر بشه.
۰ : غیر فعال کردن این ویژگی
بیت ۵ ( MR1S – Stop on MR1 ) : 
۱ : در هنگام برابری MCR1 و TC داریم : TC و PC متوقف میشوند و مقدار [TCR[0 صفر میشه.
۰ : غیر فعال کردن این ویژگی
 
بیت ۶ ( MR2I – Interrupt on MR2 ) : 
۱ : یه وقفه رخ میده وقتی که مقدار MR2 با TC برابر بشه.
۰ : غیر فعال کردن این وقفه.
بیت ۷ ( MR2R – Reset on MR2 ) : 
۱ : مقدار TC ریست میشه اگه با MR2 برابر بشه.
۰ : غیر فعال کردن این ویژگی
بیت ۸ ( MR2S – Stop on MR2 ) : 
۱ : در هنگام برابری MCR2 و TC داریم : TC و PC متوقف میشوند و مقدار [TCR[0 صفر میشه.
۰ : غیر فعال کردن این ویژگی
 
بیت ۹ ( MR3I – Interrupt on MR3 ) : 
۱ : یه وقفه رخ میده وقتی که مقدار MR3 با TC برابر بشه.
۰ : غیر فعال کردن این وقفه.
بیت ۱۰ ( MR3R – Reset on MR3 ) : 
۱ : مقدار TC ریست میشه اگه با MR3 برابر بشه.
۰ : غیر فعال کردن این ویژگی
بیت ۱۱ ( MR3S – Stop on MR3 ) : 
۱ : در هنگام برابری MCR3 و TC داریم : TC و PC متوقف میشوند و مقدار [TCR[0 صفر میشه.
۰ : غیر فعال کردن این ویژگی
 
بیت ۱۲ تا ۳۱ : رزرو شده.
 

([Match Registers (MR[0:3

مقدار رجیستر “برابری”(Match) دائما با مقدار شمارنده تایمر مقایسه میشه؛ وقتی مقدار این دو با هم برابر بشه، اعمالی میتونن به صورت خودکار اجرا بشن ( کدوم اعمال؟ در توضیحات رجیستر Match Control Register، این اعمال رو مشاهده میکنی )؛ این برای این اعمال، امکان رخ دادن وقفه هم وجود داره، Reset کردن Timer Counter یا متوقف کردن timer؛ این اعمال به وسیله رجیستر TnMCR کنترل میشوند.
لپ کلوم : میتونیم رجیستر MRn رو مقدار دهی کنید تا وقتی شمارنده تایمر(TnTC) به این مقدار رسید یه اتفاقی بیوفته که این که چه اتفاقی باید بیوفته در رجیستر TnMCR تعیین میشه.
 

(Capture Control Register (T[0:3]CCR

رجیستر کنترل کپچر، فعال/غیر فعال بودن و نوع لبه حساس و رخ دادن و یا عدم رخ دادن وقفه رو تعیین میکنه.
تنظیم(فعال) کردن بیت مربوط به هر دو سطح rising و falling به صورت همزمان پیکربندی درستی هستش؛ وقفه برا هر دو لبه رخ میدهد.

In the description below, “n” represents the Timer number, 0 or 1.

توجه : اگه مد “شمارنده” انتخاب شده بود برای ورودی CAPn در TnCTCT، سه بیت رجیستر TnCCR باید بر روی مقدار ۰۰۰ تنظیم شود( اگه از CAP0 استفاده کردید که باید ۳ بیت اول رجیستر فوق و اگه از CAP1 آستفاده کردید باید سه بیت دوم رجیستر فوق رو ۰ کنید ).
Capture Control Register
نحوه مقدار دهی : نحوه مقدار دهی تمام بیت ها یکسانه،لذا یه بار مینویسمش تا از تکرار جلوگیری بشه.
۱ : فعال کردن این ویژگی.
۰ : غیر فعال کردن این ویژگی.
 
بیت ۰ ( CAP0RE ) : کپچر روی CAPn.0 بر روی لبه rising تنظیم میشود؛ در صورت اعمال موج rising به این پایه، مقدار TnTC درون CR0 ذخیره میشود.
 
بیت ۱ ( CAP0FE ) : کپچر روی CAPn.0 بر روی لبه falling تنظیم میشود؛ در صورت اعمال موج falling به این پایه، مقدار TnTC درون CR0 ذخیره میشود.
بیت ۲ ( CAP0I ) : رخ دادن وقفه پایه CAPn.0، در صورت اعمال لبه(لبه های) انتخاب شده به پایه فوق.
 
بیت ۳ ( CAP1RE ) : کپچر روی CAPn.1 بر روی لبه rising تنظیم میشود؛ در صورت اعمال موج rising به این پایه، مقدار TnTC درون CR1 ذخیره میشود.
بیت ۴ ( CAP1FE ) : کپچر روی CAPn.1 بر روی لبه falling تنظیم میشود؛ در صورت اعمال موج falling به این پایه، مقدار TnTC درون CR1 ذخیره میشود.
بیت ۵ ( CAP1I ) : رخ دادن وقفه پایه CAPn.1، در صورت اعمال لبه(لبه های) انتخاب شده به پایه فوق.
 
بیت ۶ تا ۳۲ : رزرو شده.
 
 

([Capture Registers (CR[0:1

وقتی لبه مد نظر روی پایه کپچر مد نظر رخ میده، مقدار TC در CR کپی میشه ( دلیلش هم جالبه – اگه یادم بود تو قسمت پروژه ها بهتون میگم، با یه پروژه عملی توضیح بدم بهتره به نظرم )
 

(External Match Register (T[0:3]EMR

در میکروکنترلر پایه هایی خروجی داریم که میتونیم طوری تنظیم که در صورت برابر شدن TC با MR، خروجی وضعیتش تغییر کنه؛ انواع این وضعیت ها به صورت مقابل هستش : set شدن پایه (۱شدن)؛ clear شدن پایه (۰شدن)؛ toggle شدن پایه (معکوس شدن – اگه ۰ باشه میشه ۱ و اگه ۱ باشه میشه ۰؛ برا led روشن خاموش شدن مناسبه ^_^)؛ و حالت بدون هیچ تغییر؛ نام این پایه ها به صورت مقابل هستش : MATn.m که n شماره تایمر هستش(۰تا۳) و m شماره “برابری” هستش.

The External Match Register provides both control and status of the external match pins.

In the descriptions below, “n” represents the Timer number, 0 or 1, and “m” represent a Match number,0 through 3

Match events for Match 0 and Match 1 in each timer can cause a DMA request, see Section 21.6.12.

External Match Register
External Match Control
بیت ۰ ( EM0 ) : خروجی “برابری ۰”؛ وقت TC با MR0 برابر شود، این پایه میتواند ۳ وضعیت داشته باشد که بستگی به بیتهای EMC0 از همین رجیستر دارد؛ MATn.0
 
بیت ۱ ( EM1 ) : خروجی “برابری ۱”؛ وقت TC با MR1 برابر شود، این پایه میتواند ۳ وضعیت داشته باشد که بستگی به بیتهای EMC1 از همین رجیستر دارد؛ MATn.1
 
بیت ۲ ( EM2 ) : خروجی “برابری ۲”؛ وقت TC با MR2 برابر شود، این پایه میتواند ۳ وضعیت داشته باشد که بستگی به بیتهای EMC2 از همین رجیستر دارد؛ MATn.2
 
بیت ۳ ( EM3 ) : خروجی “برابری ۳”؛ وقت TC با MR3 برابر شود، این پایه میتواند ۳ وضعیت داشته باشد که بستگی به بیتهای EMC3 از همین رجیستر دارد؛ MATn.3
 
بیت ۴و۵ ( EMC0 ) : کنترل حالت پایه خروجی مربوطه به “برابری ۰”
 
بیت ۶و۷ ( EMC1 ) : کنترل حالت پایه خروجی مربوطه به “برابری ۱”
 
بیت ۸و۹ ( EMC2 ) : کنترل حالت پایه خروجی مربوطه به “برابری ۲”
 
بیت ۱۰و۱۱ ( EMC3 ) : کنترل حالت پایه خروجی مربوطه به “برابری ۳”
 
توجه : نحوه مقدار دهی بیتهای [EMC[0:3 به صورت زیر هستش :
۰۰ : هیچ کاری انجام نمیشه روی پایه فوق.
۰۱ : Clear
۱۰ : Set
۱۱ : Toggle
 

(Count Control Register (T[0:3]CTCR

این رجیستر برا انتخاب مد تایمر(Timer) و شمارنده(Counter) مورد استفاده قرار میگیرد، و در مد شمارنده، انتخاب پایه و edge مد نظر برای شمارش.
وقتی که مد شمارنده انتخاب شد،ورودی CAP ( انتخاب میشه به وسیله بیت های [CTCR[2:3 ) نمونه برداری میکنه در هر rising edge کلاک PCLK ( کلاک چیه این؟ کلاک تایمر یا همون کلاک واحد جانبی )
بعد از مقایسه دو نمونه متوالی گرفته شده از ورودی CAP، یکی از ۴ رویداد زیر میتونه رخ داده باشه :

  1. rising edge
  2. falling edge
  3. either of edges
  4. no changes

تنها وقتی که رخداد شناخته شده ای رخ بدهد و مطابق باشه با رخداد انتخاب شده به وسیله بیت های [CTCR[0:1، در این حالت مقدار رجیستر Timer Counter افزایش پیدا خواهد کرد.
 
به طور موثر پردازش و محاسبهبه Clock وابسته هستش و این کلاک برای Counter مقدار محدودی داره.
از اونجایی که محاسبه دو rising edges متوالی از PCLK clock مورد استفاده قرار میگیره برا شناسایی تنها یه edge از ورودی انتخاب شده CAP، مقدار فرکانس CAP رودی نمیتواند بیشتر از ۱/۴ مقدار PCLK clock باشد.
در نتیجه : مد زمان سطح منطقی ۰ , ۱ پالسمون که داریم به ورودی CAP میدیم نباید از مقدار PCLK/2 کمتر باشد.
 
Count Control Register
 
بیت ۰ و ۱ ( Counter/Timer Mode ) : این قسمت تعیین میکنه که کدام rising PCLK edges میتواند افزایش دهد (Timer’s Prescale Counter (PC رو، یا پاک کنه PC رو و افزایش بده (Timer Counter (TC
۰۰ : Timer Mode : مقدار TC افزایش پیدا میکنه وقتی که شمارنده Prescale برابر رجیستر Prescale بشه؛ شمارنده Prescale مقدارش افزایش پیدا میکنه در هر  rising PCLK edge
۰۱ : Counter Mode : مقدار TC افزایش پیدا میکنه در rising edges روی ورودی CAP ( که این وردی به وسیله بیت های [CTCR[2:3 انتخاب شده )
۱۰ : Counter Mode : مقدار TC افزایش پیدا میکنه در falling edges روی ورودی CAP ( که این وردی به وسیله بیت های [CTCR[2:3 انتخاب شده )
۱۱ : Counter Mode : مقدار TC افزایش پیدا میکنه در هر دو edge روی ورودی CAP ( که این وردی به وسیله بیت های [CTCR[2:3 انتخاب شده )
 
بیت ۲ و ۳ ( Count Input Select ) : وقتی که بیت های ۰و۱ همین رجیستر بر روی مقدار ۰۰ تنظیم نشده باشن، این دو بیت، پایه CAP رو انتخاب میکنن.
۰۰ : CAPn.0 برای TIMERn
۰۱ : CAPn.1 برای TIMERn
۱۰ : رزرو شده.
۱۱ : رزرو شده.
توجه : اگه مد “شمارنده” انتخاب شده بود برای ورودی CAPn در TnCTCT، سه بیت رجیستر TnCCR باید بر روی مقدار ۰۰۰ تنظیم شود( اگه از CAP0 استفاده کردید که باید ۳ بیت اول رجیستر فوق و اگه از CAP1 آستفاده کردید باید سه بیت دوم رجیستر فوق رو ۰ کنید ).
 
بیت ۴ تا ۳۱ : رزرو شده.
 

عملیات DMA

DMA requests are generated by a match of the Timer Counter (TC) register value to either Match Register 0 (MR0) or Match Register 1 (MR1). This is not connected to the operation of the Match outputs controlled by the EMR register. Each match sets a DMA request flag, which is connected to the DMA controller. In order to have an effect, the GPDMA must be configured and the relevant timer DMA request selected as a DMA source via the DMAREQSEL register, see Section 31.5.15.

When a timer is initially set up to generate a DMA request, the request may already be asserted before a match condition occurs. An initial DMA request may be avoided by having software write a one to the interrupt flag location, as if clearing a timer interrupt. See Section 21.6.1. A DMA request will be cleared automatically when it is acted upon by the GPDMA controller.

Remark: Because timer DMA requests are generated whenever the timer value is equal to the related Match Register value, DMA requests are always generated when the timer is running, unless the Match Register value is higher than the upper count limit of the timer. It is important not to select and enable timer DMA requests in the GPDMA block unless the timer is correctly configured to generate valid DMA requests.

 

مثالی از نحوه کار تایمر میکرو کنترلر LPC176x/5x

شکل ۱۱۵ یه تایمر رو نشون میده که پیکربندی شده بر روی “ریست شدن شمارنده و تولید وقفه در هنگام رخ دادن برابری”، prescaler=2 و match register=6؛ وقتی برابری رخ داد ( مقدار Timer/Counter در شکل زیر که همون TC خودمون هستش، وقتی این مقدار به مقدار تعیین شده توسط رجیستر MR که اینجا ما ۶ تعیینش کردیم میرسه و این دو با هم برابر میشن؛ در کلاک بعد از برابر شدن این دو، وقفه رخ میده؛ و در کلاک بعدی، شمارنده تایمر ریست میشه که در شکل با نام Timer Counter Reset مشخص شده است. )
شکل ۱۱۶ یه تایمر رو نشون میده که پیکربندی شده بر روی “متوقف شدن شمارنده و تولید وقفه در هنگام رخ دادن برابری”، prescaler=2 و match register=6؛ در کلاک بعد از برابر شدن این دو(MR با TC)، وقفه رخ میده؛ و در کلاک بعدی، بیت فعال ساز تایمر در رجیستر TCR مقدارش ۰ میشه و تایمر غیر فعال میشه و لذا دیگه PC دیگه شمارش نمیکنه و دیگه مقدار TC افزایش پیدا نمیکنه؛ در همین کلاک شمارنده تایمر ریست میشه که در شکل با نام Timer Counter Reset مشخص شده است. )
مثالی از نحوه کار تایمر میکرو کنترلر LPC176x/5x
 

بلوک دیاگرام معماری تایمر/کانتر ۰ و ۱

سوال : یعنی بلوک دیاگرام های تایمر ۲و۳ با تایمر ۰و۱ فرق داره؟
Timer block diagram
 

مطلب جلسه بعد : احتمالا مبحث ADC فصل ۲۹ ام دیتاشیت رو بگم؛ هر چی خدا خواست، فرقی هم نداره، اول آخر باید کل مباحث رو بگم ولی خب اول کار اون مباحث جالب و مورد نیاز رو بگم بهتره به نظرم.
مطلب مرتبط : LPC1768 Timers
پروژه های این مطلب ( آموزش پروژه محور آرم ) : آموزش پروژه محور آرم lpc1768 مبحث تایمر کانتر
هزینه مطلب : اگه مطلب مفید بود براتون لطفا هزینه اش رو بپردازید، دعا برا اصلاح ( و در صورت عدم امکان مرگ) اون افرادی که دارن امام و راهش رو تحریف میکنن؛ دعا برا سلامتی امام خامنه ای و علمای اسلام (و نه عالم نماهای انگلیسی)
مشکلی چیزی در مطلب بود و یا چیزی رو نگفتم و جا انداختم بگید.
بیش از این مزاحم نمیشم، فعلا یا علی.

گروه پرسش و پاسخ الکترونیکی در سروش
مهدی دمیرچیلو گوگل میفرماید : إِنَّ اللّه مَعَ السارِچین ( خداوند با سرچ کنندگان است )
ارسال دیدگاه
4

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

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

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

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

  1. Avatar

    مهمان

    محمد

    سلام ببخشید این بخش از کد زیر میشه توضیح بدید (2<<18)
    چجوری p3.25 رو به mat0.0 با کد (2<PINSEL7 = (2< MAT0.0

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

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

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

      سلام
      درباره عملگر شیفت در زبان C مطالعه کنید.

  2. Avatar

    مهمان

    رضا

    سلام خسته نباشید بسیار عالی heart

  3. Avatar

    مهمان

    محمدرضا

    خدایت در این راه قوت دهاد …
    خیر ببینی !
    میدونم که خیلی وقت میزارید روی هر کدوم ازین مطالب انشالله موفق باشید.