NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4515 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 15 از 15

موضوع: بررسی وقفه پورت سریال lpc2378

  1. #1
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض بررسی وقفه پورت سریال lpc2378


    این تایپیک را می زنم تا وقفه پورت سریال را بررسی کنیم. هم جاش خالیه هم کاربردیه. رجیسترهاش یه کم زیاده و گاهی وقتها آدم قاطیشون میکنه! مثل وقفه تایمر ساده فکر نکنم باشه. در آموزش های آقای تروشه پورت سریال بدون اینتراپت بررسی شده. اگر میکرو بخواهد دیتایی را دریافت کند به دستور scanf گیر می کند و این قدر منتظر می شود که تا بالاخره یه چیزی بیاد! خوب این جالب نیست که میکرو گیر کنه تا یه چیزی دریافت کنه.
    صفحه 415 تا 418 دیتاشیت lpc2378 رجیسترهای وقفه را شرح داده است. از روی سیمولینک کیل که رجیسترها را نشان میده بهتر میشه فهمید چی به چیه که ضمیمه کردم.
    از دوستانی که قبلا این قسمت را کار کردند، نظری ندارند؟
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Interrupt Uart0.JPG
مشاهده: 117
حجم: 56.1 کیلو بایت  

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    مدیر انجمن Aghaeifar آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    علی آقائی فر
    نوشته ها
    751
    تشکر
    552
    تشکر شده 975 بار در 440 پست

    پیش فرض

    همونطور که در دیتاشیت می بینیم 5 تا منبع تولید وقفه برای پورت سریال هست
    1- هنگام اتمام ارسال
    2- هنگام اتمام دریافت
    3- تایم اوت برای اتوباودریت
    4- پایان اتوباودریت
    5- و یکی هم وقفه ی مربوط به وضعیت خط Rx که من مفهومش را متوجه نشدم. ظاهرا مربوط به حالتی است که اگر در بیت توازن خطا رخ دهد یا داده ها over run شوند و یا در فریم دریافت داده خطایی باشد وقفه درخواست گردد.

    در رابطه با scanf هم که عرض می کنید اینطور نیست، اگر به جای while از یک if استفاده کنیم دیگه اینقدر منتظر نمی ماند بلکه یه لحظه چک می کند اگر داده ای نبود به کارش ادامه می دهد با توجه به اینکه 16 بایت FIFO داریم اگر داده های زیادی از طریق پورت دریافت نشود و اینکه برنامه طولانی نباشد مشکل خاصی رخ نمی دهد.
    ما در انتظار رویت خورشیدیم ...

    اللهم عجل لولیک الفرج

  5. کاربران : 3 تشکر کرده اند از شما Aghaeifar برای ارسال این پست سودمند:


  6. #3
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali.aghayifar نمایش پست ها
    همونطور که در دیتاشیت می بینیم 5 تا منبع تولید وقفه برای پورت سریال هست
    1- هنگام اتمام ارسال
    2- هنگام اتمام دریافت
    3- تایم اوت برای اتوباودریت
    4- پایان اتوباودریت
    5- و یکی هم وقفه ی مربوط به وضعیت خط Rx که من مفهومش را متوجه نشدم. ظاهرا مربوط به حالتی است که اگر در بیت توازن خطا رخ دهد یا داده ها over run شوند و یا در فریم دریافت داده خطایی باشد وقفه درخواست گردد.
    رجیستر U0IER : با استفاده از این رجیستر 5 گزینه را می توان فعال کرد. در شکل قسمت Interrupt Enable مشخص می باشد:

    1- RBR Interrupt Enable : بیت صفرم – با قرار گرفتن اولین خانه بافرFIFO در رجیستر RBR ، این وقفه فعال می شود.
    2- THRE Interrupt Enable : بیت یکم - وقتی داده ای کامل ارسال شد و رجیستر ارسال خالی شد با یک شدن بیت THREاین وقفه فعال می شود.
    3- RX Line Status Interrupt Enable : بیت دوم
    4- ABEOIntEn : بیت هشتم – فعال ساز وقفه پایان اتوباودریت.
    5- ABTOIntEn : بیت نهم - فعال ساز وقفه تایم اوت برای اتوباودریت.
    خوب با این اوصاف اگه بخواهیم تا چیزی اومد وقفه فعال بشه و بره در زیر روال، باید RBR IE را فعال کنیم، یعنی : U0IER = 0x01 .
    حالا ما این را تست می کنیم تا بعد بریم سراغ رجیستر U0IIR که تنظیم و تعیین نوع اینتراپت است.
    اساتید اگه تجربهاشون را در اختیار قرار دهند بحث کامل تره میشه
    ویرایش توسط mzarkoob : 15-12-2011 در ساعت 21:17

  7. کاربران : 2 تشکر کرده اند از شما mzarkoob برای ارسال این پست سودمند:


  8. #4
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    خوب یه کم دیر شد. من اومدم همه کارو با هم بکنم نشد. برای همین قدم قدم برم بهتره!
    وقفه دریافت را فعال می کنیم:
    کد:
    U0IER= 0x01   // enable RBR IE

    در حین اجرای برنامه، کاراکتری را ارسال می کنیم. برنامه به زیر روال وقفه می رود . خوب من این را تست کردم جواب میده! برای اینکه مطمئن باشیم، در زیر روال وقفه
    led1 روی برد را تنظیم می کنیم که تا یک چیزی فرستادیم و رفت در وقفه، روشن بشه. خوب اگه برنامه را دیباگ کنیم می بینیم که هیچ گاه از زیر روال وقفه بیرون نمی یاد چرا که در انتهای زیر روال باید وقفه ای که اومده را غیرفعال کنیم. این کار به راحتی با کلیک روی اینجا حاصل می شود:

    با این کار بیت RDB هم که نشانه دریافت دیتایی است، غیر فعال می شود. ولی خوب این کارو چجوری میشه با رجیستر انجام داد؟
    این جاست که یه کم گیر کردم. چیزی که باعث این موضوع شده اینه که با دیباگ این دستور:
    کد:
      U0FCR=0x07;// enable RX fifo and TX fifo
    به جای اینکه مقدار این رجیستر 0x07 بشه، میشه 0xC1 ! همین طور در قسمت Interrupt ID ، دو رجیسترU0IIR و U0FCRدر یک جا نشان داده شده است. وقتی وقفه بیاد مقدار این دو رجیستر میشه 0xC4 . حالا اگه بعد وقفه این رجیستر را بکنیم مثل قبل یعنی 0xC1، فلاک وقفه RDB میشه None ولی Rx Trigger میشه Level 3(14) ! خلاصه ما موندیم چطوری بعد اومدن وقفه، فلاگش را غیر فعال کنیم.
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Interrupt ID.JPG
مشاهده: 95
حجم: 9.2 کیلو بایت  
    ویرایش توسط mzarkoob : 16-12-2011 در ساعت 20:13

  9. کاربران : 2 تشکر کرده اند از شما mzarkoob برای ارسال این پست سودمند:


  10. #5
    مدیر انجمن M.ABDOLLAHI آواتار ها
    تاریخ عضویت
    Dec 2008
    نام
    مهدی عبدالهی
    نوشته ها
    976
    تشکر
    1,567
    تشکر شده 2,677 بار در 667 پست

    پیش فرض

    سلام من قبلا وقفه دریافت رو کار کردم انشاا... برنامه اش را میگذارم
    و هر كس از ياد [خداى‏] رحمان دل بگرداند، بر او شيطانى مى‏گماريم تا براى وى دمسازى باشد. (36)و مسلّماً آنها ايشان را از راه باز مى‏دارند و [آنها] مى‏پندارند كه راه يافتگانند. (37)تا آن گاه كه او [با دمسازش‏] به حضور ما آيد، [خطاب به شيطان‏] گويد: «اى كاش ميان من و تو، فاصله خاور و باختر بود، كه چه بد دمسازى هستى!» (38)(سوره زخرف)بگو: «پليد و پاك يكسان نيستند، هر چند كثرت پليد [ها] تو را به شگفت آوَرَد. پس اى خردمندان، از خدا پروا كنيد، باشد كه رستگار شويد.» (100)(سوره مائده(

  11. کاربران : 3 تشکر کرده اند از شما M.ABDOLLAHI برای ارسال این پست سودمند:


  12. #6
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط M.ABDOLLAHI نمایش پست ها
    سلام من قبلا وقفه دریافت رو کار کردم انشاا... برنامه اش را میگذارم
    آقا دست شما درد نکنه. اتفاقا قبلا دیدم در یک تایپیک گفتید که راش انداختید. می خواستم بهتون پیغام بدم که خودتون پیش قدم شدید. و اما در مورد مشکل گفته شده:
    فکر کنم میشه این جوری این قضیه را سمبل کرد! دوباره در زیر روال وقفه قبل از خروج دستور:
    کد:
    U0FCR=0x07;
    را می گذاریم. ولی اینجوری وقتی فقط یک کاراکتر کیبرد را فشار دهیم وقفه فعال می شود. ما می خواهیم تا یک مجموعه کاراکتر ارسال شد این وقفه فعال شود.

  13. کاربران : 2 تشکر کرده اند از شما mzarkoob برای ارسال این پست سودمند:


  14. #7
    مدیر انجمن M.ABDOLLAHI آواتار ها
    تاریخ عضویت
    Dec 2008
    نام
    مهدی عبدالهی
    نوشته ها
    976
    تشکر
    1,567
    تشکر شده 2,677 بار در 667 پست

    پیش فرض

    خواهش میکنم عزیزم نگاه کن اول این کتابخونه ها رو دانلود کن برای خیلی از تجهیزات LPC2378 برای دانلود برید به این پست pwm on LPC2378 - ایـــــــــران میـــــــکرو ™
    بعد اینکه این هم یک مثال برای وقفه دریافت وقتی دیتا دریافت میشه LED حالتش برعکس میشه.
    این هم لینک دانلود:
    http://microelectronic.persiangig.co.../UART%20IRQ.7z
    و هر كس از ياد [خداى‏] رحمان دل بگرداند، بر او شيطانى مى‏گماريم تا براى وى دمسازى باشد. (36)و مسلّماً آنها ايشان را از راه باز مى‏دارند و [آنها] مى‏پندارند كه راه يافتگانند. (37)تا آن گاه كه او [با دمسازش‏] به حضور ما آيد، [خطاب به شيطان‏] گويد: «اى كاش ميان من و تو، فاصله خاور و باختر بود، كه چه بد دمسازى هستى!» (38)(سوره زخرف)بگو: «پليد و پاك يكسان نيستند، هر چند كثرت پليد [ها] تو را به شگفت آوَرَد. پس اى خردمندان، از خدا پروا كنيد، باشد كه رستگار شويد.» (100)(سوره مائده(

  15. کاربران : 3 تشکر کرده اند از شما M.ABDOLLAHI برای ارسال این پست سودمند:


  16. #8
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط M.ABDOLLAHI نمایش پست ها
    این هم یک مثال برای وقفه دریافت وقتی دیتا دریافت میشه LED حالتش برعکس میشه.
    این هم لینک دانلود:
    http://microelectronic.persiangig.co.../UART%20IRQ.7z
    من این برنامه را دیباگ کردم. همان طور که سوال کرده بودم دنبال این بودم که وقتی یک وقفه می آید چطوری یعنی با چه رجیستری فلاگ وقفه را درستش کنیم. در این برنامه بعد اجرای این دستور:
    کد:
    a=getchar0 ();
    اوضاع به حالت عادی قبل آمدن وقفه برمیگرده. یعنی اینطوری:

    البته توقع من این بود که با یک تنظیم رجیستر این اتفاق بافتد و توقع نداشتم با خواندن یک کاراکتر خود به خود این اتفاق بیافتد! در اینجا این دستور:
    کد:
    U0IIR=1;
    هیچ نقشی انگار ندارد و زاید است!
    همان طور که در پست قبلی ذکر شد انگار این دستور:
    کد:
     U0FCR=0x07;
    در زیر روال وقفه هم دقیقا همین کار را انجام می دهد. در هر صورت هم برنامه من هم برنامه ای که قرار دادید یک کار را انجام می دهد ولی با یک تفاوت جزئی. الان چیزی که دنبالش هستم این است که با زدن یک کاراکتر از صفحه کلید وارد روتین وقفه نشود(این کار با تنظیم RX Trigger قابل انجام است) بلکه وقتی جمله ای را ارسال کردیم وقفه انجام شود. مثلا در سی شارپ با دستور:
    کد:
    serialPort1.WriteLine(textBox1.Text);
    ارسالی انجام می دهیم. این ارسال می تواند کمی طولانی باشد.
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Interrupt Reset.JPG
مشاهده: 90
حجم: 12.1 کیلو بایت  

  17. کاربران : 2 تشکر کرده اند از شما mzarkoob برای ارسال این پست سودمند:


  18. #9
    مدیر انجمن M.ABDOLLAHI آواتار ها
    تاریخ عضویت
    Dec 2008
    نام
    مهدی عبدالهی
    نوشته ها
    976
    تشکر
    1,567
    تشکر شده 2,677 بار در 667 پست

    پیش فرض

    سلام صبح همگی بخیر البته حالا اون قسمتی که بهد از دریافت چند بایت توی روتین وقفه میره رو من هر چی تست کردم نشد البته به یک نتایج نیمه کاره ای رسیدم ولیکن نشد که نشد... چون بافر دریافت در اصل توی هنگام وقفه دریافت تا 14 تا هم میتونه صبر کنه بعد یکجا اطلاعات رو بده خلاصه این یکی رو من نتونستم ببین طوری میتونیم کاریش کنیم.
    و هر كس از ياد [خداى‏] رحمان دل بگرداند، بر او شيطانى مى‏گماريم تا براى وى دمسازى باشد. (36)و مسلّماً آنها ايشان را از راه باز مى‏دارند و [آنها] مى‏پندارند كه راه يافتگانند. (37)تا آن گاه كه او [با دمسازش‏] به حضور ما آيد، [خطاب به شيطان‏] گويد: «اى كاش ميان من و تو، فاصله خاور و باختر بود، كه چه بد دمسازى هستى!» (38)(سوره زخرف)بگو: «پليد و پاك يكسان نيستند، هر چند كثرت پليد [ها] تو را به شگفت آوَرَد. پس اى خردمندان، از خدا پروا كنيد، باشد كه رستگار شويد.» (100)(سوره مائده(

  19. تشکرها از این نوشته :


  20. #10
    مدیر انجمن M.ABDOLLAHI آواتار ها
    تاریخ عضویت
    Dec 2008
    نام
    مهدی عبدالهی
    نوشته ها
    976
    تشکر
    1,567
    تشکر شده 2,677 بار در 667 پست

    پیش فرض

    سلام صبح همگی بخیر البته حالا اون قسمتی که بعد از دریافت چند بایت توی روتین وقفه میره رو من هر چی تست کردم نشد البته به یک نتایج نیمه کاره ای رسیدم ولیکن نشد که نشد... چون بافر دریافت در اصل توی هنگام وقفه دریافت تا 14 تا هم میتونه صبر کنه بعد یکجا اطلاعات رو بده خلاصه این یکی رو من نتونستم ببین طوری میتونیم کاریش کنیم.
    و هر كس از ياد [خداى‏] رحمان دل بگرداند، بر او شيطانى مى‏گماريم تا براى وى دمسازى باشد. (36)و مسلّماً آنها ايشان را از راه باز مى‏دارند و [آنها] مى‏پندارند كه راه يافتگانند. (37)تا آن گاه كه او [با دمسازش‏] به حضور ما آيد، [خطاب به شيطان‏] گويد: «اى كاش ميان من و تو، فاصله خاور و باختر بود، كه چه بد دمسازى هستى!» (38)(سوره زخرف)بگو: «پليد و پاك يكسان نيستند، هر چند كثرت پليد [ها] تو را به شگفت آوَرَد. پس اى خردمندان، از خدا پروا كنيد، باشد كه رستگار شويد.» (100)(سوره مائده(

  21. #11
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط M.ABDOLLAHI نمایش پست ها
    اون قسمتی که بعد از دریافت چند بایت توی روتین وقفه میره رو من هر چی تست کردم نشد البته به یک نتایج نیمه کاره ای رسیدم ولیکن نشد که نشد...
    با تنظیم این رجستر:
    کد:
    U0FCR=0x47;
    بعد از اومدن 4 کاراکتر باید بره در روتین وقفه. در سیمولینک کیل که درست کار می کرد. ولی نمی دونم در برد چرا اولین کاراکتر را که می زدی میرفت در زیر روال و led1 را روشن می کرد!

  22. تشکرها از این نوشته :


  23. #12
    مدیر انجمن M.ABDOLLAHI آواتار ها
    تاریخ عضویت
    Dec 2008
    نام
    مهدی عبدالهی
    نوشته ها
    976
    تشکر
    1,567
    تشکر شده 2,677 بار در 667 پست

    پیش فرض

    خوب همینه دیگه من کلی وقت گذاشتم امتحان کردم نشد نمیدونم چرا اینطوری اگر به lpc1768 این مشکل رو نداشته باشه...
    و هر كس از ياد [خداى‏] رحمان دل بگرداند، بر او شيطانى مى‏گماريم تا براى وى دمسازى باشد. (36)و مسلّماً آنها ايشان را از راه باز مى‏دارند و [آنها] مى‏پندارند كه راه يافتگانند. (37)تا آن گاه كه او [با دمسازش‏] به حضور ما آيد، [خطاب به شيطان‏] گويد: «اى كاش ميان من و تو، فاصله خاور و باختر بود، كه چه بد دمسازى هستى!» (38)(سوره زخرف)بگو: «پليد و پاك يكسان نيستند، هر چند كثرت پليد [ها] تو را به شگفت آوَرَد. پس اى خردمندان، از خدا پروا كنيد، باشد كه رستگار شويد.» (100)(سوره مائده(

  24. تشکرها از این نوشته :


  25. #13
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط M.ABDOLLAHI نمایش پست ها
    خوب همینه دیگه من کلی وقت گذاشتم امتحان کردم نشد نمیدونم چرا اینطوری اگر به lpc1768 این مشکل رو نداشته باشه...
    بعضی وقتها ناجور جواب میده. رو اعصاب آدم راه میرهدلم می خواد ولی بیخیال...
    فعلا می خوام همون یه کاراکتر ناقابلی که در وقفه اومد ،با:
    کد:
    code=getchar();
    ازش استفاده کنم و بر اساس اون کاری انجام بدم. در یک برنامه جواب نیمه کاره میده در یکی دیگه نه. ولی بدون وقفه مشکلی نیست.
    ویرایش توسط mzarkoob : 17-12-2011 در ساعت 12:38

  26. تشکرها از این نوشته :


  27. #14
    مدیر انجمن M.ABDOLLAHI آواتار ها
    تاریخ عضویت
    Dec 2008
    نام
    مهدی عبدالهی
    نوشته ها
    976
    تشکر
    1,567
    تشکر شده 2,677 بار در 667 پست

    پیش فرض

    وقفه دریافت بایت تکی برای من قشنگ جواب میده هیچ مشکلیهم نداره تو یک مدار استفاده کردم با avr رابطه دادم...
    و هر كس از ياد [خداى‏] رحمان دل بگرداند، بر او شيطانى مى‏گماريم تا براى وى دمسازى باشد. (36)و مسلّماً آنها ايشان را از راه باز مى‏دارند و [آنها] مى‏پندارند كه راه يافتگانند. (37)تا آن گاه كه او [با دمسازش‏] به حضور ما آيد، [خطاب به شيطان‏] گويد: «اى كاش ميان من و تو، فاصله خاور و باختر بود، كه چه بد دمسازى هستى!» (38)(سوره زخرف)بگو: «پليد و پاك يكسان نيستند، هر چند كثرت پليد [ها] تو را به شگفت آوَرَد. پس اى خردمندان، از خدا پروا كنيد، باشد كه رستگار شويد.» (100)(سوره مائده(

  28. #15
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط m.abdollahi نمایش پست ها
    وقفه دریافت بایت تکی برای من قشنگ جواب میده هیچ مشکلیهم نداره تو یک مدار استفاده کردم با avr رابطه دادم...
    سلام
    من هم این را جواب گرفتم. مشکلی نداشت. یه ایراد داشت که از تنظیمات بود. حالا دارم روی دریافت یک متن دلخواه کار می کنم. ببینم چی میشه.

  29. تشکرها از این نوشته :


موضوعات مشابه

  1. ارتباط میکرو lpc2378 و کامپیوتر با پورت سریال به usb
    توسط mzarkoob در انجمن مباحث کلی ARM
    پاسخ: 19
    آخرين نوشته: 28-10-2011, 18:31
  2. پروگرامر lpc2378 بوسیله پورت سریال (کمک)
    توسط microprocesor_2002 در انجمن LPC series (NXP)
    پاسخ: 2
    آخرين نوشته: 11-04-2011, 17:50
  3. تست پورت سریال lpc2378
    توسط t.o.e در انجمن LPC series (NXP)
    پاسخ: 6
    آخرين نوشته: 26-03-2011, 02:26
  4. برنامه تست پورت سریال lpc2378
    توسط t.o.e در انجمن LPC series (NXP)
    پاسخ: 5
    آخرين نوشته: 19-03-2011, 01:44

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •