ضمن تشکر خواهشمندم با نظرات و پیشنهادات خود ودر صورتی که مایل باشید مقالات خود در هرچه پر بار شدن مطالب یاری فرمایید shapour608@gmail.com
میکروکنترلرهای ARM دارای هسته های مختلفی هست که در نسل های مختلف ارایه شده از
جمله ی این هسته ها
ARM7 - ARM9 - ARM11...
خصوصیات سری LPC17xx(Cortex-M3) :
رابط های سریال:
ابتدا به بررسی رجیستر های قسمت System Control سری LPC17xx می پردازیم درابتدا کل رجیستر های این بخش بصورت فهرست و سپس به بررسی
اونها میپردازیم
تعیین منبع ریست : RSID
تعیین منبع کلاک CLKSRCSEL :
رجیستر وضعیت و کنترل سیستم : SCS
_______
این قسمت از رجیستر ها در بخش System control مربوط به قسمت PLL0 هست
رجیستر کنترل PLL0 :ا PLL0CON
رجیستر وضعیت PLL0:ا PLL0STAT
رجیستر تایید مقدار ها : : PLL0FEED
________
این قسمت از رجیستر ها مربوط به تنظیم کردن کلاک CPU و
ادوات جانبی هست
رجیستر تنظیم کلاک CPU : اCCLKCFG
رجیستر تنظیم کلاک USB :ا USBCLKCFG
رجیستر سایر ادوات جانبی (ADC,Timer,DAC...): اPCLKSEL0 & PCLKSEL1
_______
این قسمت مربوط به رجیستر های کنترل توان هست:
رجیستر کنترل توان اصلی PCON :
رجیستر کنترل توان ادوات جانبیPCONP :
رجیستر کنترل حالت کم مصرف (هم نیاز رجیتسر های
بالا ) : SCR
_______
رجیستر خود راه انداز مجدد (Self Reset) :ا AIRCR
_______
رجیستر جهت اننقال کلاک داخلی به خارج از تراشه : CLKOUTCFG
*علامت " ا " به خاطر بهم نریخت فونت گذاشته شده.
رجیستر ها به صورت 32 بیتی هستند
حالت کلی نوشتن رجیستر ها در قسمت System Control در برنامه به شکل زیر هستند
= 0xXXXXXXXX;رجیستر-> LPC_SC
هر X نماد 4 بیت هست .
0x به معنی نوشتن اعـداد در مبنای هگز هست.
SC =System Control
تعیین منبع ریست:
نوع نوشتن در برنامه:
LPC_SC->RSID=0xXXXXXXXX;
توصیف بیت های رجیستر تعیین کننده ی منبع ریست :
Bit 0 قطع و وصل شدن ولتاژ تغذیه به ریست شدن تراشه
منجر می شود.تراشه تا زمانی که ولتاژ تغذیه و اسیلاتور پایدار نشود،در این وضعیت
باقی بماند
Bit 1 این پایه دارای ورودی اشمیت تریگر می باشد. با
فعال شدن این پایه و رها شدن آن، تراشه تا پایدار شدن تغذیه و اسیللاتو همچنان در
حالت ریست باقی میماند و پس از شمارش تعداد مشخصی پالس های کلاک، از این وضعیت
خارج می شود.
Bit 2در صورتی که تایمر Watchdog فعال شده باشد،با شمارش تعداد پالس مشخصی، میکرو
ریست می شود.
Bit 3 اگر تغییرات ولتاژ تغذیه از حد خاصی بیشتر شود،
میکرو ریست خواهد شد،(حالتی که توسط مبتدیان اتفاق می افتد، به کار بردن قطعاتی
مانند رله و مونور و استفاده از منبع تغذیه و روش راه اندازی نا مناسب میباشد ؛ که
با روشن شدن رله،ولتاژ تغذیه افت کرده و باعث ریست شدن میکرو می شود)
Bit 4 ta 31 این بیت ها به صورت رزور شده هستند و استفاده
نمیشوند.
تعیین منبع کلاک:
نوع نوشتن در برنامه:
LPC_SC->CLKSRCSEL=0xXXXXXXXX;
انتخاب منبع کلاک برای PLL0
توصیف بیت ها:
00 نوسان ساز داخلی ) پیش
فرض): فرکانس این منبع 4Mhz می باشد. پس از ریست شدن سیستم، میکرو از این منبع استفاده می
نماید. به این ترتیب این امکان فراهم تا هنگام راه اندازی میکرو، تراشه بدون نیاز به نوسان ساز
خارجی به کار خود ادامه دهد. همچنین این امکان فراهم می شود که برنامه ی Bootloader با این منبع کار خود را ادامه دهد.
به دلیل دقت پایین فرکانس این منبع کلاک نمی توان
از آن به منظور راه اندازی واحد های USB و CAN استفاده نمود.
01 نوسان ساز اصلی : این بخش با استفاده از کریستال خارجی با فرکانس 1Mhz تا 24Mhz کار می کند و با استفاده از PLL داخلی فرکانس آن چند برابر افزایش می یابد.
10نوسان ساز RTC : در این حالت، تراشه از کریستال خارجی 32.768 Khz
استفاده می کند و کلاک خروجی آن برای راه اندازی
بلوک RTC مورد استفاده قرار می
گیرد.
11این حالت به صورت رزرو شده است و کاربرد ندارد
Bit 2 : 31 این بیت ها رزرو شده هستند و کاربرد ندارند.
بعد
از تعیین منبع کلاک توسط رجیستر CLKSRCSEL جهت استفاده از نوسان ساز
اصلی تراشه، لازم است تا بیت های رجیستر SCS طبق توضیحات زیر تنظیم شوند.
رجیستر وضعیت و کنترل سیستم :
نوع نوشتن در برنامه:
LPC_SC->scs=0xXXXXXXXX;
توصیف بیت های رجیستر وضعیت و کنترل سیستم:
Bit 0 : 3 این
بیت ها به صورت رزرو شده هستند و استفاده نمیشوند
Bit
4 انتخاب
محدوده ی نوسان ساز خارجی
= 0 در
صورت استفاده از رنج فرکانسی(کریستال) 1Mhz تا
20Mhz ،مقدار این بیت صفر در نظر گرفته می شود.
= 1 در
صورت استفاده از رنج فرکانسی (کریستال) 15Mhz تا
24Mhz ،مقدار این بیت یک در نظر گرفته می شود.
Bit 5 فعال
سازی نوسان ساز اصلی( کریستال خارجی )
= 0غیر
فعال ساختن نوسان ساز خارجی
= 1فعال
سازی نوسان ساز خارجی
) Bit 6
فقط خواندنی) تعیین وضعیت
نوسان ساز خارجی
0 = صفر بودن این بیت نشان دهنده
ی آماده نبودن نوسان
ساز اصلی برای استفاده به عنوان منبع کلاک می باشد.
= 1نوسان
ساز اصلی برای استفاده به عنوان منبع کلاک آماده است.
= Bit 7
: 31 این بیت ها رزرو شده هستند و
استفاده نمی شوند.
رجیستر های مربوط به بلوک PLL0
قبل
از شروع توضیحاتی درباره ی بلوکPLL0 میگم تا هیچ ابهامی وجود
نداشته باشه :
کار
اصلی PLL0 ضرب
و تقسیم فرکانس منبع نوسان کننده ی متصل به تراشه می یاشد
مشخصات
این واحد:
1 فرکانس ورودی آن از 32k
الی
50Mhz
می
باشد.
2 در
بخش ورودی این واحد یک ضرب کننده وجود دارد که فرکانس ورودی را در عددی بین 6 تا
512 ضرب میکند.(M)
3 در
این مرحله فرکانس خروجی مرحله قبل به عددی بین 1 تا 32 تقسیم میشود(این فرکانس
باید در محدوده ی 275 تا 550Mhz باشد.(N)
4 رابطه
ی فرکانس ورودی و خروجی از فرمول زیر پیروی می کند systemCLk=(2*F osc * (M+1))/(N+1)i
رجیستر
کنترل PLL0 :
نوع
نوشتن در برنامه:
LPC_SC->PLL0CON=0xXXXXXXXX;
فقط
دو بیت از این رجیستر32بیتی برای کنترل بلوک PLL0 مورد استفاده قرار میگیرد.
اولین
بیت برای فعال سازی PLL0 و
قفل شدن روی فرکانس مورد نظر استفاده می شود.
دومین
بیت برای اتصال خروجی PLL0 به
عنوان منبع کلاک بلوک های داخلی میکرو به کار میرود
بیت
های 2 تا 31 رزرو شده میباشند
رجیستر
تنظیمات PLL0 :
این
رجیستر 32بیتی نگهدارنده ی ضرایب ضرب و تقسیم PLL0 می باشد. این ضرایب باید به گونه ای تنظیم گردند که فرکانس
خروجی PLL عددی
صحیح باشد
نوع
نوشتن در برنامه:
LPC_SC->PLL0CON=0xXXXXXXXX
توصیف بیت های رجیستر تنظیماتPLL0 :
Bit 0 : 14 = ضریب ضرب کننده که در واحد PLL0 که عددی بین 6
تا 512 می باشد.پس از کسریک واحد از این ضریب مقدار آن ذخیره می شود.
Bit 15 = این بیت به صورت رزرو شده می باشد
Bit 16 : 23 = ضریب تقسیم کننده در واحد PLL0 که عددی بین 1 تا 32 در ان قرار می
گیرد. نتیجه ی این ضرب و تقسیم باید به گونه ای باشد که فرکانس خروجی عددی صحیح
باشد.پس لز کسر یک واحد از این ضریب مقدار آن ذخیره می شود.
Bit 24 : 31 = این بیت ها به صورت رزرو شده هستند.
رجیستر وضعیت PLL0 :
این رجیستر
ضرایب و حالت هایی را که بربلوک PLL0 تاثیر میگذارند
را به اطلاع میرساند.
(این رجیستر به
صورت خواندنی می باشد)
نوع نوشتن در برنامه :
a=LPC_SC->PLL0STAT
PLL0 توصیف بیت های رجیستر وضعیت :
Bit 0 : 14 نمایش ضریب
ضرب کننده که در واحد PLL0 یک واحد کمتر از مقدار واقعی
آن می باشد.
Bit 15 این
بیت به صورت رزرو شده می باشد
Bit 16 : 23 نمایش ضریب
تقسیم کننده در واحد PLL0 یک واحد کمتر از مقدار واقعی
آن می باشد.
Bit 24 نگامی که این بیت یک باشد بدین معناست که PLL0 فعال
می باشد. پس از خاموشی PLL0 این بیت به صورت خودکار صفر می شود.
Bit 25 هنگامی که
این بیت و بیت صفرم از رجیسترکنترل یک باشد فرکانس خروجی PLL0 به
عنوان منبع کلاک واحد های دیگر مورد استفاده قرار می گیرد. پس از خاموشی PLL0 این
بیت به صورت خودکار صفر می شود.
Bit 26 اگر
این بیت یک باشد PLL0 روی
فرکانس مورد نظر قفل شده است.
Bit 27 :31 این بیت ها به صورت رزرو شده هستند
رجیستر PLL0FEED :
این
رجیستر فقط 8 بیت اول آن مورد استفاده قرار می گیرد.پس از اعمال هر تغییری در
رجیستر های
PLL0CON و PLL0CFG ابتدا باید عدد 0xAAو پس از آن عدد 0x55 را در این رجیستر نوشت.
LPC_SC->PLL0FEED=0xXXXXXXXX;
رجیستر های مربوط به تنظیم
کلاکCPU
و
ادوات جانبی
کلاک
های داخلی میکرو به سه گروه اصلی زیر تقسیم می شوند :
=> CPU Clock(Cclk) i
=> USB CLK
=>Peripheral CLK(Pclk) i
Cclk :
نوع
نوشتن در برنامه:
LPC_SC->CCLKCFG=0xXXXXXXXX;
از
این کلاک برای راه انداری هسته ی میکروکنترلر و ادوات متصل به باس AHB مانند کنترل کننده
Ethernet و
بلوک DMA استفاده می گردد. برای
این منظور کلاک
خروجی PLL0 ، بر
عددی که در بیت های 7:0 از رجیستر ( CPU
CLK CONFIG) ا CCLKCFG قرار دارد تقسیم می شود. (طبق
رابطه ی زیر
(Cclk=PLL0clk / (CCLKSEL+1)
مقدار این بخش باید عددی فرد
در بازه ی 1 تا 255 باشد.
توصیف بیت های رجیستر وضعیت
bit 0:7 انتخاب ضریب تقسیم فرکانس
خروجی PLL برای
تهیه کلاک CPU
( این 8 بیت برای مشخص کردن عدی بین 1 تا 255 می باشد
(
عدد0=
فرکانس خروجی PLL را
بر 1 تقسیم کرده و در اختیار CPU قرار
میدهد.
عدد1=
فرکانس خروجی PLL را
بر 2 تقسیم کرده و در اختیار CPU قرار
میدهد.
عدد2=
فرکانس خروجی PLL را
بر 3 تقسیم کرده و در اختیار CPU قرار
میدهد.
.
عدد 255 = فرکانس خروجی PLL را بر 256 تقسیم کرده و در اختیار CPU قرار میدهد.
8:31 Bit این بیت ها به صورت رزرو
شده هستند.
نکته
: حداکثر
فرکانس مجاز پردازنده برای میکروکنترلر های سری LPC17xx برابر 100 Mhz
و
برای
LPC1769 برابر
120Mhz میباشد.
USB CLK :
نوع
نوشتن در برنامه:
LPC_SC->USBCLKCFG=0xXXXXXXXX
یک
بخش از میکروکنترلر که باید کلاک متصل به آن ، فرکانس 48Mhz داشته
باشد، بلوک USB
میباشد.برای
ایجاد یک فرکانس پایدار که بخش های دیگر نیز محدودیت ایجاد نکند از یک تقسیم کننده
ی فرکانس مستقل و قابل برنامه ریزی برای
این بخش استفاده شده است که ضریب تقسیم آن توسط 4 بیت کم ارزش از رجیستر USBCLKCFG تعیین می شود.
با
استفاده از این مقسم فرکانس میتوان هر فرکانسی که مضربی از 48Mhz باشد،
تقسیم نمود.
رابطه
ی مورد استفاده برای تهیه ی این فرکنس در زیر مشاهده میگردد:
USBclk=PLL0clk / (USBSEL+1) i
توصیف بیت های رجیستر وضعیت
Bit
0:3 انتخاب ضریب تقسیم برای تهیه کلاک
بلوک USB از
خروجی PLL0 توسط
4بیت از رجیستر ذکر شده صورت می گیرد. فرکانس خروجی PLL0 باید مضربی از 48 باشد.
5 Bit
با انتخاب این عدد، فرکانس خروجی PLL0 بر
6 تقسیم می شود. فرکانس خروجی PLL0 در این حالت باید مساوی 288Mhz باشد.
Bit 7 با انتخاب این عدد،
فرکانس خروجی PLL0 بر
8 تقسیم می شود. فرکانس خروجی PLL0 در این حالت باید مساوی 384Mhz باشد.
Bit 9 با انتخاب این عدد،
فرکانس خروجی PLL0 بر10
تقسیم می شود. فرکانس خروجی PLL0 در این حالت باید مساوی 480Mhz باشد.
Bit 4:31 این بیت ها به صورت رزرو
شده هستند.
نکته: هنگامی که می خواهید از بلوک USB استفاده
نمایید، نباید به هیچ عنوان نوسان ساز RC داخلی را به عنوان منبع کلاک
بکار ببرید.
Pclk :
نوع نوشتن در برنامه:
LPC_SC->PCLKSEL0=0xXXXXXXXX;
LPC_SC->PCLKSEL1=0xXXXXXXXX;
این
کلاک برای راه اندازی بلوک های که به باس APB متصل می باشند استفاده می شود.
پورت سریال، تایمر، پورت های
ورودی/خروجی،ADC،DAC و
... برخی از این ادوات هستند.
به
منظور کنترل فرکانس متصل به هر یک از این ادوات، دو رجیستر 32بیتی در نظر گرفته
شده است. با توجه به این که برای کنترل فرکانس هر بلوک 2 بیت اختصاص یافته است، می
توان کلاک متصل به حداکثر 32 بلوک را کنترل نمود. نام این دو رجیستر
PCLKSEL0 و PCLKSEL1 می باشد.
نحوه
ی اختصاص بیت های این رجیستر ها به بلوکهای میکروکنترلر و تعیین فرکانس آنها در
زیر قابل مشاهده است:
00: Pclk=CPUclk/4
01: Pclk=CPUclk
10: Pclk=CPUclk/2
11: Pclk=CPUclk/8
هنـگام انتـخاب این گـزینه برای بلـوک های CAN1 ,CAN2 وا CAN Filtering این رابطه صحیح مـیباشد Pclk=CPUclk/6
ساختار رجیستر های PCLKSEL0 و
PCLKSEL1 جهت تعیین فرکانس بلوک های
جانبی :
PCLKSEL0
0:1
Bitتعیین کلاک بلوک
Quadrate Encoder Interface (QEI)i
2:3 Bit تعیین کلاک بلوک GPIO
Interrupts
4:5 Bit تعیین کلاک بلوک Pin
connect block(PCB)i
6:7 Bit تعیین کلاک بلوک I2C1
8:9 Bit غیر فعال (NA)
10:11
Bit تعیین کلاک بلوک SSP0
12:13
Bit تعیین کلاک بلوک TIMER2
14:15
Bit تعیین کلاک بلوک TIMER3
16:17
Bit تعیین کلاک بلوک UART2
18:19
Bit تعیین کلاک بلوک UART3
20:21
Bit تعیین کلاک بلوک I2C2
22:23
Bit تعیین کلاک بلوک I2S
24:25
Bit این
بیت ها رزرو شده هستند
26:27 Bit تعیین کلاک بلوک
Repetitive Interrupt Timer(RIT)i
28:29 Bit تعیین کلاک بلوک System
Control (SYSCON or SC)i
30:31 Bit تعیین کلاک بلوکMotor
Control PWM (MC)i
PCLKSEL1
0:1
Bit =تعیین کلاک بلوکWatch
dog timer(WDT)i
2:3
Bit =تعیین کلاک بلوکTIMER0
4:5
Bit =تعیین کلاک بلوکTIMER1
6:7
Bit =تعیین کلاک بلوک UART0
8:9
Bit =تعیین کلاک بلوک UART1
10:11
Bit =غیر فعال (NA)
12:13
Bit =تعیین کلاک بلوک PWM1
14:15
Bit =تعیین کلاک بلوک I2C0
16:17
Bit =تعیین کلاک بلوک SPI
18:19
Bit =غیر فعال (NA)
20:21
Bit =تعیین کلاک بلوک SSP1
22:23
Bit =تعیین کلاک بلوک DAC
24:25
Bit =تعیین کلاک بلوک ADC
26:27
Bit =تعیین کلاک بلوک CAN1
28:29
Bit =تعیین کلاک بلوک CAN2
30:31
Bit =تعیین کلاک بلوک
Acceptance CAN Filtering(ACF)i
مراحل
تنظیم PLL0:
کلاک
های داخلی میکرو به س0ه گروه اصلی زیر تقسیم می شوند :
· PLL0 را با قرار دادن کد صفر در رجیستر PLL0CON و مقدار دهی PLL0FEED غیر فعال و جدا نمایید.
· منتظر بمانید تا نوسان ساز پایدار شود. این کار با بررسی بیت 6 از رجیستر SCS امکان پذیر است.
· منبع کلاک متصل به PLL0 را با مقدار دهی رجیستر CLKRCSEL انتخاب نمایید.
·
ضرایب ضرب (M) و تقسیم (N) کننده را توسط رجیستر PLL0CFG تعیین کنید. البته این ضرایب
پس از مقدار دهی رجیستر
PLL0FEED تاثیر
گذار خواهد بود.
*با
قرار دادن کد یک درPLL0CON,PLL0 را فعال کرده اید اما همچنان
از بلوک های دیگر جدا میباشد. این دستور پس از مقدار دهی PLL0FEED انجام میشود.
*ضریب
تقسیم کننده ی مربوط به کلاکِ CPU را
مقدار دهی کنید.
#نکته:ضرایب
مربوط به تقسیم کننده ی کلاک CPU و
دیگر بخش ها را فقط باید قبل از اتصال PLL0 به
بلوک های دیگر تغییر داد.
*تا
قفل شدن PLL0 روی
فرکانس مورد نظر منتظر بمانید.
*پس
از قفل شدن PLL0 ,
رجیستر PLL0CON را با کد دو OR کرده و آن را به بلوک های دیگر متصل کنید.
>>مثال:
با توجه به مطالب بالا، فرکانس کلاک CPU را
برای 88MHZ
، کلاک USB را 48 MHZ ، کلاک بلوک ارتباط سریال را 12 MHZ و کلاک GPIO را
روی 44MHZ
تنظیم
کنید. فرض کنید فرکانس
کریستال
متصل به میکرو 18MHZ
باشد.
#include<LPC17xx.h>
...
main(){
...
LPC_SC->SCS=0x30;
LPC_SC->PLL0CON=0;
LPC_SC->PLL0FEED=0xaa;
LPC_SC->PLL0FEED=0x55;
while(!(LPC_SC->SCS & 0x40));
LPC_SC->CLCSRCSEL=1;
LPC_SC->CFG=0x13;
LPC_SC->PLL0FEED=0xaa;
LPC_SC->PLL0FEED=0x55;
LPC_SC->PLL0CON=1;
LPC_SC->PLL0FEED=0xaa;
LPC_SC->PLL0FEED=0x55;
LPC_SC->CCLKCFG=4;
LPC_SC->USBCLKCFG=0x09;
LPC_SC->PCLKSEL0=0x03c0;
LPC_SC->PCLKSEL1=0x00000008;
while(LPC_SC->PLL0STAT & 0x04000000);
LPC_SC->PLL0CON |=2;
LPC_SC->PLL0FEED=0xaa;
LPC_SC->PLL0FEED=0x55;
...
while(1){
...
}
}
با سلام
مطلب مفیدی بود
با تشکر
سلام دوست گرامی ممنون از این که مطلب منو نشر دادید ولی خوشحال میشدیم هماهنگی میفرمودید. موئید باشید
سلام ممنون از مطلبتون اگه می شه دستورات فعال کردن کلاک CAN و USB رو بزارید
ممنون استفاده بردیم!
بسیار بسیار عالی امیدوارم ادامه بدین . واقعا استفاده می کنیم از مطالبتون