من یک ماه پیش در یکی از تاپیک ها در مورد اینتراپت یوزارت و یک باگی توی اون برخورد کرده بودم یک پست برای شما گذاشتم که شما اصلاً به اون جواب ندادین!!
سلام
متاسفانه ، من چیزی ندیدم ....
که با تعداد زیادی ایمیل با اتمل مکاتبه کردم و لی هنوووز مشکل پا برجاست
متاسفانه اونا به ایرانی جماعت جواب نمیدن ، من زیاد بهشون ایمیل زدم ( من توی اترنت (مقدار یک سلف که توی نقشه ی ارائه شده از طرف خودشون مشکل داشت ) و وجود 31 پایه بر روی پورت 32 بیتی مشکل داشتم ) .
در ضمن ..من فکر میکنم به جای اینکه هدف شما چاپ مجله باشه و خودتون سعی در راه اندازی همه ی قسمت ها داشته باشین...
با جمع کردن اطلاعاتی که خیلی ها قبلاً در موردش کار کردن خیلی سریع تر بتونید مجلتون رو چاپ کنین....من حدود دو ماه کامل وقتم رو روی این مشکل در اینتراپت گذاشتم....خیلی برام مفید بود ولی متاسفانه هنوز نتونستم مشکل رو حل کنم.
دو تا مشکل وجود داره :
1- اطلاعاتی کاملی وجود نداره
2- با قانون کپی رایت و ... پدر ادم رو سر 5 خط در میارن و ابروی ادم رو میبرن
فقط من روی مجله کار نمی کنم ، من و تعداد ی از دوستان ، مطالب رو اماده میکنیم و توی مجله میاریم ، ممکنه بعضی از مطالب ناقص یا حتی اشتباه باشه که انشااله در کتاب رایگانی که منتشر میشه تصحیحی خواهد شد .
در هر صورت امیدوارم شما بتونین این مشکل و مشکل ها رو حل کنید یا حل کرده باشید!
نمیدونم مشکل حل شده باشه یا نه ...
در کل توی ارم منابع وقفه مثل avr یا pic یا .... نیست ،
همون طور که میدونید توی avr دو تا ریسجتر TX Complete Interrupt Enable و RX Complete Interrupt Enable باعث تولید شدن وقفه ی دریافت یا ارسال داده میشود .
در کل ما اول وقفه ی سراسری رو فعال میکردیم ، بعد مشخص میشد که میخوام از وقفه ی ارسال یا دریافت استفاده کنیم .
و در نهایت بیت USART Data Register Empty Interrupt Enable رو یک میکردیم تا وقفه راه اندازی بشه .
با یک شدن این رجسیتر ها به cpu فرمان داده میشد که در دوره های زمانی خاص بافر ارسال و دریافت رو چک کنه ، اگه بافر ارسال (UDRE) خالی میشد ، وقفه ی ارسال تولید میگشت .
در این حالت cpu برنامه ی در دست اجرار رو رها میکرد و به زیر برنامه ی وقفه میرفت . برای دریافت هم نظیر همین اتفاق رخ میداد .
اما توی ارم اینجوری نیست و cpu دخالتی در وقفه نداره و کنترل و تولید وقفه به بخشی به نام Advanced Interrupt
Controller یا aci سپرده شده .
aci دارای سه تا ورودی وقفه ی خارجی هست و وقفه ی رخ داده روی سایر بخش ها رو از طریق باس APB کنترل میکنه .
اگه وقفه ای رخ بده ، cpu رو باخبر میکنه و ....
توی صفحه ی 306 دیتا شیت هم ، در مورد وقفه ی usart نوشته :
30.5.3 Interrupt
The USART interrupt line is connected on one of the internal sources of the Advanced Interrupt
Controller. Using the USART interrupt requires the AIC to be programmed first. Note that it is not
recommended to use the USART interrupt line in edge sensitive mode.
برای استفاده از وقفه شما ، ابتدا باید واحد aci رو راه اندازی کنید .
اگه توی دیتا شیت به دنبال ریسجتر های کنترل وقفه در usart بگردید ، متوجه میشید که اصلا ریسجتری برای کنترل وقفه وجود نداره ( در حالی که توی بخش های مثل spi یا ssc یا ... علاوه بر کنترل وقفه میشه اون رو فعال یا غیر فعال کرد )
در واقع شما باید در این بخش وضعیت ریسجتر های US_CSR و US_CR رو چک کنید ، تا اگه وضعیت کانال تغییر کرد یا کاراکتری به اون وارد شد ، متوجه بشید و....
اگه به پکیجی که خود اتمل داده به قسمت اینتراپت یوزارت مراجعه کنین، میبینین که توی اونجا مبحث تایمر رو با مبحث اینتراپت ترکیب کرده و یجور هایی اینتراچت رو پیچونده!!!
بحث Interrupt Generation Using the AT91 Timer/Counter یک بحث کاملا مجزا هست و به عنوان یکی از قابلیت های ارم های اتمل به شمار میره و فکر نکنم از این بخش برای پیچوندن وقفه ی usart استفاده شده باشه .
در کل اون سورس برای نمایش این قابلیت هست نه وقفه ی usart ( برای همین بخش چند تا app note ارائه شده که میتونید از سایت اتمل دانلودش کنید )
! و جالب تر از اون با همه ی اون تفاسیر باز هم اینتراپتش مشکل داره..من برنامه ی حود اتمل رو روی میکرو ریختم و دیدم که مثلاً توی قسمت اینتراپت یوزارت وقتی با سرعت زیاد اینتراپت پشت سر هم اتفاق میافته میکرو درست عمل نمیکنه و این یک باگ خیلی بزرگیه!!!
اون بسته برای برد های اتمل ارائه شده ، توی اون کلی هدر و فایل اضافه وجود داره و شما باید طبق همون توضیحات موجود نرم افزار keil رو برای کامپایل سورس ها پیکبرندی کنید .
در کل این یک باگ نیست ، من خودم توی خیلی از بخش ها مشکل داشتم اما بعد از مطالعه ی سورس های مختلف تونستم مشکل رو حل کنم و ... به عنوان نمونه در هنگام راه اندازی تایمر واچ داگ ، میکرو مدام ریست میشد . من این مشکل رو توی انجمن at91 و keil و... مطرح کردم و هیچ کس به من جواب نداد .
بعد از کلی تحقیق و ... با استفاده از نسخه ی 3.24 نرم افزار keil مشکل حل شد ( مشکل از کامپایلر بود )
بهتر سورس ها و مواردی رو که کار کردید بزارید تا من و سایر دوستان ببینیم و............
در ضمن..من بعد از این که این مشکل برام حل شد میخوام در مورد پروتکل ethernet کار کنم و اون رو به صورت کامل راه بندازم...خوشحال میشم در این مورد با شما همکاری بکنم ....
عالیه ، من خودم یه مقدار اطلاعات در مورد شبکه + رجیستر ها و توابع مربوط به اترنت در keil رو در ارودم
یه pcb هم برای اتصال PHY طراحی کردم که متاسفانه مقدار یکی از قطعات اون اشکال داره .
مطالبی موجود توی شماره ی 8 منتشر میشه و مات مطالب رو با هم تکمیل خواهیم کرد .