نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
أَللّهُمَّ ارْزُقْنی شَفاعَةَ الْحُسَیْنِ یَومَ الْوُرُودِ
مهدی دمیرچیلو

آموزش آرم میکروکنترلر lpc1768 جلسه 4 uart قسمت1

314

به نام خدا : خب ان شاء الله تو این مطلب از سری مطالب آموزش آرم، میخوام به آموزش ارتباط سریال UART در LPC176x/5x بپردازم، بعد از توضیح ریجسترها میرم سراغ پروژه، این قدر بدم میاد از توضیح دادن ریجسترها، ولی خب چاره چیه – میدونم شما هم از خوندنش اضیت میشید احتمالا من که پدرم درمیاد سر نوشتن توضیح این ریجسترها، البته به امید انجام یه پروژه در عمل میارزه که این ریجسترها رو بخونیم کاربردشون رو ^_^، از این مطلب شروع هم میکنیم به نوشتن کتابخونه، تا هر دفه مجبور نباشیم از رجیستر ها استفاده کنیم، یه سری تابع و در نهایت یه کتابخونه برا کار با UART مینویسیم؛ در ضمن هر مطلب حداکثر 2 هزار واژه میشه، اگه بیشتر از این شد بقیه مطلب میره برا جلسات بعدی؛ این سری مطلب uart احتمالا خیلی طولانی بشه : یه 2-3 جلسه آموزش رجیسترهای UART0,2,3 و بعدش یه مطلب پروژه(1-2 جلسه) و بعد آموزش رجیستر های UART1 ( که بین 1 تا 2 جلسه میتونه طول بکشه) و بعد یه مطلب پروژه، در مجموع میشه حداقل 5 جلسه و حداکثر حدود 8-9 جلسه ( اگه بخوام ماست مالی نکنم و همه چیزها رو توضیح بدم و پروژه هم تست کنم باهاش – که برنامم اینه که کامل کامل کامل توضیح بدم و پروژه ببندم برا هر مبحث تا دیگه بی نیاز بشید از هر منبع دیگه ای )
آموزش آرم میکروکنترلر lpc1768 جلسه 4 uart قسمت1

آموزش آرم میکروکنترلر lpc1768 جلسه 4 uart قسمت1

تشکر : در این جا، جا داره تشکر کنم از آقای “محمدرضا سربندی فراهانی” که در تهیه این مطلب منو کمک کردن ( رسول خدا (ص) می‌فرمایند : کسی که از بنده خدا تشکر نکنه از خدا تشکر نکرده. )
توجه : در مطلب زیر نکات خیلی مهم رنگشون قرمزه، صورتی ها اونایی هستن که من شک دارم یا نمیدونم و… ( این موارد رو اگه میدونید یا انگلیسیتون خوبه کمک کنید تا این مطلب کامل بشه ) رنگ سبز هم عناوین و نکات این مطلب هستن.
توجه خیلی مهم : در تمام این مطلب چون داریم آموزش UART0, UART2, UART3 رو میدیم لذا بای خلاصه میگیم UARTn و برا ریجستر ها هم به همن طور هستش، لذا در تمامی این مطلب n = 0/2/3 هستش؛ در مطالب جلسات آینده میریم سراغ UART1 که تو مطلبش ذکر میکنم که این مطلب، برای UART1 هستش.

عناوین سری مطالب uart ( که احتمالا 2-3 جلسه طول میکشه ) :

  1. تنظیمات اولیه UART
  2. مشخصات UART میکرو کنترلر LPC176x/5x
  3. پایه های UART میکروکنترلر lpc176x/5x
  4. نحوه ارتباط دو دستگاه از طریق UART با همدیگر
  5. آموزش ریجستر های UART میکروکنترلر lpc176x/5x
  6. توضیح 10-12 تا ریجستر موجود!!!
  7. معماری UARTn
  8. مطالب مرتبط
  9. خلاصه مطلب ( یعنی این چند تا مطلب رو بخونید به عشق رسیدن این این قسمت و قسمت پروژه ها ^_^ )

 

تنظیمات اولیه UART

امکان جانبی UART0/2/3 به وسیله رجیسترهای زیر پیکربندی میشه.
1) Power : برا فعال کردن برق این امکان جانبی میکرو باید در ریجستر PCONP بیت های PCUART0/2/3 رو یک کنیم.

2) Peripheral clock : برا تنظیم کلاک UART باید در ریجستر PCLKSEL0، بیایم PCLK_UART0 رو انتخاب کنیم، در ریجستر PCLKSEL1 بیایم PCLK_UART2/3 رو انتخاب کنیم.

3) Baud rate : در ریجستر U0/2/3LCR تنظیم کنیم DLAB =1، اینکار فعال میکنه دسترسی به ریجستر DLL و DLM برای تنظیم نرخ انتقال داده(Baud rate)؛ همچنین در صورت نیاز، تنظیم کنیم نرخ داده fractional رو در ریجستر fractional divider

4)  UART FIFO : استفاده کنید از بیت (FIFO enable (bit 0 در ریجستر U0/2/3FCR برا فعال کردن FIFO

5) Pins : به کمک ریجسترهای PINSEL تنظیم کنید نقش پایه ها رو بر روی UART
توجه : در پایه دریافت اطلاعات UART، نباید مقاومت pull-down داخلی فعال شود.

6) Interrupts : برای فعال کردن وقفه UART، تنظیم کنید بیت DLAB = 0 در ریجستر U0/2/3LCR،

Interrupts are enabled in the NVIC using the appropriate Interrupt Set Enable register.

7) DMA : توابع فرستنده و گیرنده UART0/2/3 میتونن کار کنن با کنترلر (General Purpose DMA controller (GPDMA ( خب DMA یه امکان جانبی میکروکنترلر هستش که میتونه وظیفه دریافت و ارسال رو بر عده بگیره و باری از دوش CPU برداره ^_^ )

مشخصات UART میکرو کنترلر LPC176x/5x

  1. تعداد بیت های دیتا : 5,6,7 و 8 بیت
  2. تولید Parity و بررسی : odd, even mark, space با هیچکدام
  3. 1 یا 2 بیت stop
  4. وجود یه حافظه فیفو 16 بایتی برای دریافت و ارسال اطلاعات.
  5. پشتیبانی از ویژگی Auto baud
  6. پشتیبانی از DMA برا ارسال و دریافت ( چی هستش حالا : یه واحد جداگانه در میکرکنترلر هستش که پردازش ارسال و دریافت رو از دوش cpu بر میداره -البته تو بحث UART- )
  7. مد IrDA جهت پشتیبانی از ارتباط مادون قرمز
  8. پشتیبانی از fractional rate divider برای تولید Baud Rate یی با خطای کمتر.
  9. تولید و تشخیص Break ( حالا چی هستش و … در ادامه متوجه میشید، فعلا همینو بگم که یه جور اعلام توقف/از سر گیری ارسال اطلاعات به گیرنده هستش )
  10. وجود 4 ارتباط سریال UART ( که ترتیب قرار گیریشون در پایه های میکروکنترلر در عکس زیر نمایان هستش )

ارتباط سریال UART
Multiprocessor addressing mode.
• Support for software flow control ( این مورد رو بعدا سر وقت توضیح میدم و یه پروژه توپ هم براش تهیه میکنم )

 

پایه های UART میکروکنترلر lpc176x/5x

پایه های UART میکروکنترلر lpc176x/5x
برای هر کدوم از UART های 0و2و3، دو تا پایه با نام های RXD و TXD داریم که عدد ته این نام ها بیانگر اینه که از کدوم UART استفاده میکنیم.
RXD : گیرنده اطلاعات
TXD : فرستنده اطلاعات

نحوه ارتباط دو دستگاه از طریق UART با همدیگر

خب این مورد رو هم توضیح بدم، چون تعداد افراد زیادی رو دیدم که سر این مورد اتصالات رو اشتباه وصل کردن و به قول معروف! سوتی دادن تو این قسمت :
همون طور که میبینید، پایه TX مربوط به UART1 به پایه RX مربوط به UART2 وصل هستش، چرا؟
خب مگه TX پایه ای نیست که دیتا ارسال میکنه؟ و مگه RX پایه ای نیست که دیتا دریافت میکنه؟
خب آیا درسته بیایم TX1 رو به TX2 و RX1 رو به RX2 وصل کنیم؟ یعنی فرستنده 1 رو به فرستنده 2 وصل کنیم(گیرنده 1 رو به گیرنده 2 وصل کنیم) الان این یعنی چی؟ اگه گفتی؟ خب خودم میگم : یعنی این که سوتی ^_^، فرستنده رو به فرستنده(گیرنده رو به گیرنده) وصل کنی، خب دیتا چطوری میخواد آخه رد و بدل بشه جان من o_O یعنی الان هر دو پایه متصل به هم دارن دیتا ارسال میکنن (هر دو پایه متصل به هم دارن دیتا دریافت میکنن) خب این که نمیشه که کاکو؛ باید فرستنده رو به گیرنده وصل کرد، یکی دیتا میده و یکی میگیره، همون داستان نری به مادگی هستش، مثلا پیچ رو داخل پیچ و مهره رو داخل مهره که نمیکنن که، پیچ رو میکنن داخل مهره (مثالم تو حلقم ^_^) تو UART هم داستان همینه، گیرنده باید به فرستنده وصل باشه ( خب با این داستان پیچ و مهره دیگه فک نکنم اتصالات رو فراموش کنید ^_^ )؛ لذا نحوه اتصالات صحیح به صورت زیر هستش ( که دقیقا مثل شکل زیر هستش اتصالاتی که در زیر نوشتم ) :

برای اتصال دو UART به همدیگه باید TX1 رو به RX2 و TX2 رو به RX1 باید وصل کنیم.

توجه : GND هر دو مدار(دستگاه) باید به همدیگه وصل باشد.
نحوه ارتباط دو دستگاه از طریق UART با همدیگر

آموزش ریجستر های UART میکروکنترلر lpc176x/5x

هر UART دارای تعدادی ریجستر هستش که در جدول زیر مشاهده میکنید :
توضیح ریجستر های UART میکروکنترلر lpc176x/5x
(RBR (DLAB =0 : رجییستر بافر دریافت، شامل دیتای بعدی دریافت شده که میتونیم مقدارش رو بخونیم. ( برا این کار مقدار بیت DLAB از ریجستر LCR باید 0 باشد؛ این ریجستر RO -فقط خوندنی- هستش )
(THR (DLAB =0 : رجیستر ارسال دیتا، دیتای بعدی که میخواین ارسال بشه باید در این رجیستر نوشته بشه. ( برا این کار مقدار بیت DLAB از ریجستر LCR باید 0 باشد؛ این ریجستر WO -فقط نوشتنی- هستش )
(DLL (DLAB =1 و (DLM (DLAB =1 : بایت کم ارزش و بایت پرارزش لچ مقسوم علیه؛ این دو ریجستر با هم برا تولید Baud Rate از fractional rate divider کاربرد دارن. ( برا این کار مقدار بیت DLAB از ریجستر LCR باید 1 باشد؛ این ریجستر R/W -هم قابل نوشتن و هم خواندن- هستش )
(IER (DLAB =0 : رجیستر فعال کردن وقفه؛ شامل یه بیت فعال ساز وقفه منحصر به فرد برای 7 ویژگی UART ( یعنی 7 تا ویژگی UART هستش که میتونیم براش وقفه تعریف کنیم و برا هر کدوم هم یه تابع وقفه دارم؛ برا این کار مقدار بیت DLAB از ریجستر LCR باید 0 باشد؛ این ریجستر R/W -هم قابل نوشتن و هم خواندن- هستش )
IIR : رجیستر ID وقفه؛ برا شناسایی وقفه های معلق به کار میره.
FCR : رجیستر کنترل FIFO؛ کنترل نحوه استفاده و مد UART FIFO
LCR : رجیستر خط کنترل؛ شامل بیت هایی برای کنترل فرمت دیتای UARTn و break generation ( در ادامه مطلب متوجه کاربرد این مورد میشید. )
LSR : رجیستر خط وقعیت؛ شامل پرچم های اطلاع رسانی دریافت و ارسال، شامل خط خطاها
SCR : رجیستر Scratch Pad، شامل 8 بیت حافظه ذخیره سازی موقت سخت افزاری ( حکمت وجود این حافظه چیه؟ حافظه Flash که میکرو کم نداره، یعنی گیر این 8 بیت بودیم؟ – کسی فهمید به ما هم بگه که نیت سازنده از این کار چی بوده، در ضمن این رجیستر در مطلب توضیح داده نخواهد شد چون هیچ کاربردی نداره )
ACR : رجیستر کنترل Auto baud؛ شامل بیت هایی برای کنترل این ویژگی
ICR : رجیستر کنترل IrDA؛ فعال کردن و پیکربندی مد IrDA
FDR : رجیستر Fractional Divider؛ باعث کاهش خطای Baud Rate میشه.
TER : رجیستر فعال کردن ارسال؛ غیر فعال کردن فرستنده UART برای استفاده با software flow control (البته این رجیستر رو غیر فعال کننده ارسال بنامیم بهتره به نظرم – حالا در ادامه و درقسمت مربوطه به علت حرفم پی میبرید)

تعداد مطالب : 367 تا
جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
ارسال دیدگاه
3
نظرات این مطلب بسته شده است.
  1. mohammad

    مهمان

    mohammad

    سلام مهندس ایا یاگیری یه خانواده از میکرو کنترلرها مانند avr چقدر میتونه در یادگیری یه خانواده دیگر از میکرو ها مانند nxp تاثیر داشته باشه
    برای کسی که تازه وارده بهتر نیست ابتدا بره avr یاد بگیره بعد بیاد nxp یاد بگیره
    شما خودتون که ابتدا avr رو یاد گرفتین وبعد رفتین سراغ خانواده nxp از پردازنده arm چه پیشنهادی میدین مستقیم بریم سراغ arm (چه خانوادهای از پردازنده arm صنعتی تر هست ، کدوم یکی رو پیشنهاد میدین ) ایا هنوزم در پروژه هاتون از avr استفاده میکنین
    امکانات جانبی میکروکنترلرهای arm و avr مانند تایمر کانتر و ارتباط سریال چقدر با هم فرق میکنن
    من خودم میخواستم ابتدا برم سراغ avr و مثلا بعد از یادگیری سری مگا ۳۲ برم با یه سری از خانواده arm متل lpc1768کار کنم
    توی انجمن eca هم در مورد انتخاب میکرو برای یادگیری سرچ کردم rtfm ولی بیشتر گیچ شدم چون هرکسی یه تاری برای خودش میزنه
    یکی میگفت که avr دیگه قدیمی شده وفقط وقت تلف کردنه یکی دیگه ‘گفته بود که avr برای بیشتر پروژه ها کار راه اندزه و برای پروژه های صنعتی باید رفت سراغ arm ودیگری گفته بود که arm دارای فرکانس خیلی بالاترو در مقابل نویز مقاوم تره و…………… wacko

    مشاهده پاسخ ها (1)
    • مهدی دمرچیلو

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

      مهدی دمرچیلو

      سلام
      من باشم از همون اول میام با آرم کار میکنم – ولی خب بعضیا میگن اول با Avr کار کنیم که ساده تره و بعد بریم آرم که من مخالفم ولی چون avr مشکلی برات رخ بده – راحت تر به جواب میرسی – چون تعداد افرادی که کار میکنن و بلدن زیادن – آموزشاش زیاده – و…. ولی آرم این طور نیست – تعداد افرادی که کار میکنن کمه – آموزشاش به اندازه avr نیست – میزان پروژه های موجود و…
      این که چه مدل آرمی رو انتخاب کنی من حرفی نمیزنم – خودت تحقیق کن – ولی تحقیق کن! و نه این که فلانی توصیه کرد و … چون هر کسی اون چیزی که باهاش کار میکنه رو میگه خوبه !

  2. زهرا

    مهمان

    زهرا

    سلام مثل همیشه عاااااالی توضیح دادین