آموزش کار با UART در LPC1768

به نام خدا و با سلام خدمت هموطنان گرامی!

بدون مقدمه میخوام برم سر اصل مطلب

تنظیم USART0 در میکروکنترلر LPC1768 :

  1. نخست کلاک UART0,2 رو از طریق رجیستر PCLKSEL انتخاب میکنیم!
  2. سپس طول داده رو از طریق رجیستر (LCR (Line Control Rgister تعیین مکنیم! همچنین بیت DLAB رو در همین رجیستر ست میکنیم تا بتونیم DLL و DLM رو تعیین کنیم!
  3. سپس DLL و DLM رو تنظیم میکنیم و دوباره بیت DLAB رو ریست (صفر) میکنیم!
  4. بعد رجیستر FIFO رو فعال و اونو از RX و TX ریست میکنیم!
  5. سپس از طریق PINSEL پین های (۴:۵)  و (۶:۷) رو برای UART0 به صورت ۰۱ ست میکنیم!
  6. کار تنظیمات تمام شد! حال میتوانید کاراکتر های خود را ارسال و دریافت کنید
  7. پین های مربوط به UART در میکرو  به این صورت است

usart 0 : p0.2=tx & p0.3=rx
usart 1 : p0.15=tx & p0.16=rx
usart 2 : p0.10=tx & p0.11=rx
usart 3 : p4.28=tx & p4.29=rx

خوب حالا کد های ارسال و دریافت و رجیستر های مورد نیاز رو بررسی میکنیم!

رجیستر (RBR (Receiver Bufer Register

همونطور که از اسمش پیداست! دریافت کننده بایت از فرستنده هست! یعنی وقتی فرستنده یه چیزی رو میفرسته توی این بیت قرار میگیره!

رجیستر (THR (Transmit Holding Register

بازم همونطور که از اسمش پیداست این رجیستر برای نگه داری بایت ارسالی می باشد! که ما چیزی رو که میخواهیم بفرستیم توی این بیت میزاریم!

رجیستر (TER (Trasmit Enable Rgister

بازم مثل همیشه این بیت همونطور که از اسمش پیداست فعال کننده ارسال است! یعنی برای اینکه بایتی که در THR قرار گرفته ارسال بشه این بیت باید یک باشه!

رجیستر (FCR (FIFO Control Rgister

در زیر به تشریح بیت های مورد استفاده پرداخته ایم

بیت ۰: فعال و غیرفعال سازی رجیستر FIFO

بیت۱: اگر ست شود تمام رجیستر های RXFIFO رو ریست میکند!

بیت ۲: اگر ست شود تمام رجیستر های TXFIFO رو ریست میکند!

بیت ۷:۶ : تعداد بیت های دریافتی که باعث فعال شدن وقفه یا درخواست DMA میشود را مشخص میکند!

رجیستر (LCR (Line Control Rgister

این رجیستر برای کنترل خط می باشد! که در زیر به بیت های آن پرداخته ایم!

بیت ۰:۱ : مشخص کننده طول داده

۵ بیت  = ۰۰

۶بیت =   ۰۱

۷ بیت =  ۱۰

۸ بیت = ۱۱

یعنی برای انتخاب طول داده هشت بیت باید بیت های ۰ و ۱ این رجیستر ۱ شوند!

بیت ۲: مشخص کننده تعداد بیت stop! که اگر ۰ باشد ۱ بیت stop و اگر ۱ باشد ۲ بیت stop داریم

بیت ۳: مشخش کننده تولید یا عدم تولید بیت پاریتی – صفر نشانگر عدم تولید و یک نشانگر تولید بیت پاریتی

بیت ۴:۵ : مربوط به تعداد بیت پاریتی!

بیت ۷: دسترسی یا عدم دسترسی به رجیستر های مقسم DLM , DLL این بیت همون بیت DLAB هست!

رجیستر (LSR (Line Status Rgister

همونطور که از اسمش پیداست وضعیت خط رو به ما میده!

بیت های مهم اون رو در زیر میتونید ببینید!

بیت ۰ : هنگامی که فرستنده داده ای را فرستاده و داده در RBR قرار گرفته ولی هنوز خوانده نشده این بیت ۱ می شود!

بیت ۵: هنگامی که رجیستر THR که مربوط به ارسال داده است خالی شود این بیت ۱ می شود!

خوب همه مراحل بالا رو میتونید توی کد زیر ببینید! (کلاک CPU روی ۹۶MHZ تنظیم کنید و PLL0 رو روی ۳۸۴MHZ تنظیم کنید)

لینک منبع

برای فعال کردن وقفه فقط دو خط زیر رو به تابع main اضافه کنید

 

و یه تابع هم با نام  UART0_IRQHandler درست کنید و کد خودتون رو برای وقفه اونجا بزارید!

 

 

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

فیلم نحوه عملکرد وقفه یوزات صفر در کد بالا

بدست آوردن مقدار DLL و DLM برای بدست آوردن Baud rate:

خوب من اینو اضافه میکنم چونکه خودم هم دنبالش بودم 🙂

ببینید کلا DLL برای تقسیم هست! ما فعلا کارش نداریم! چون فعلا ما ضرب میکنیم! شما میتونید خودتون هم اگه نیاز شد استفاده کنید!

برای بدست آوردن مقدار DLL باید از فرمول زیر استفاده کنیم!

در فرمول بالا Baud rate همون مقداری که ما میخوایم (در مثال بالا ۱۱۵۲۰۰) ، خود ۱۶ هم ثابت هست. PCLK هم مقدار کلاک UART هست! که توی مثال بالا (۲۴ مگاهرتز هست)

کلا کلاک وسایل جانبی به صورت CpuClock/4 هست! البته اون ۴ رو خودمون باید از طریق رجیستر PCLKSEL0 تغییر بدیم (به طور پیشفرض ۴ هست) و چون کلاک CPU ما ۹۶ مگاهرتز هست و اونو تقسیم بر ۴ کنیم عدد ۲۴ مگاهرتز بدست میاد!

دانلود سورس keil

 منبع

موفق باشید

mehdi sehati

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

مطالب مرتبط

Subscribe
Notify of
guest

0 نظرات
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x