PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : بهترین مرجع at91sam ها



vasa
11-02-2010, 19:34
دوستان عزیز این موضوع رو می خوام از رو تجربه یه هفته ای کار با آرم بگم
بهترین مرجع برای یادگیری آرمهای اتمل دیتا شیتشون است.نه تنها بسیار روان و جامع و کامل گفته و غیر ممکنه کسی چیزی ازش نفهمه که توی قسمت معرفی رجیستراش کولاک کرده تا اونجایی که من تمام صفحات معرفی رجیستراشو جدا کردم و به صورت یه جزوه در آوردم که همیشه در دسترسم باشه.
یه نکته دیگه در رابطه با PORT ها خدمت دوستانی که مجله تخصصی آرم رو می نویسن :
باید خدمتشون عرض کنم توی بحث Port ها هم خودشون و هم ملت رو خیلی پیچوندن چون واسه کار با Port ها اصلا احتیجی به اون توابع بلند بالا نیست درست مثل AVR کافیه به چند تا رجیستر مقدار بدید مثلا :
AT91C_PIOB_PER=0xFFFFFFFF* فعال کردن بیتهای مورد نظر PortB
*AT91C_PIOB_OER=0xFFFFFFFF پیکربندی بیتهای مورد نظر PortB به صورت خروجی
AT91C_PIOB_SODR=0xFFFFFFFF* یک کردن بیت مورد نظر
AT91C_PIOB_CODR=0xFFFFFFFF*صفر کردن بیت مورد نظر

به همین سادگی و تمام این رجیسترها تو همون کتابخونه AT91SAM7X256.H موجوده یعنی احتیاج به حفظ کردن هیچی نیست
نظر شما چیه؟:D

sallysat
15-02-2010, 18:15
دوستان عزیز این موضوع رو می خوام از رو تجربه یه هفته ای کار با آرم بگم
بهترین مرجع برای یادگیری آرمهای اتمل دیتا شیتشون است.نه تنها بسیار روان و جامع و کامل گفته و غیر ممکنه کسی چیزی ازش نفهمه که توی قسمت معرفی رجیستراش کولاک کرده تا اونجایی که من تمام صفحات معرفی رجیستراشو جدا کردم و به صورت یه جزوه در آوردم که همیشه در دسترسم باشه.
یه نکته دیگه در رابطه با PORT ها خدمت دوستانی که مجله تخصصی آرم رو می نویسن :
باید خدمتشون عرض کنم توی بحث Port ها هم خودشون و هم ملت رو خیلی پیچوندن چون واسه کار با Port ها اصلا احتیجی به اون توابع بلند بالا نیست درست مثل AVR کافیه به چند تا رجیستر مقدار بدید مثلا :
AT91C_PIOB_PER=0xFFFFFFFF* فعال کردن بیتهای مورد نظر PortB
*AT91C_PIOB_OER=0xFFFFFFFF پیکربندی بیتهای مورد نظر PortB به صورت خروجی
AT91C_PIOB_SODR=0xFFFFFFFF* یک کردن بیت مورد نظر
AT91C_PIOB_CODR=0xFFFFFFFF*صفر کردن بیت مورد نظر

به همین سادگی و تمام این رجیسترها تو همون کتابخونه AT91SAM7X256.H موجوده یعنی احتیاج به حفظ کردن هیچی نیست
نظر شما چیه؟:D

سلام .......
بله درست متوجه شدید ولی اون توابعی که دوستان معرفی کردند هم دقیقا همینه که!
اون هدر فایل lib_AT91SAM7X256.h رو اگه باز کنید میبینید من براتون 3 تا تابعشو میزارم.
دقت کنید که توابع inline هستند و هیچ سربار اضافی به برنامه تحمیل نمیکنند.




//*----------------------------------------------------------------------------
//* \fn AT91F_PIO_CfgOutput
//* \brief Enable PIO in output mode
//*----------------------------------------------------------------------------
__inline void AT91F_PIO_CfgOutput(
AT91PS_PIO pPio, // \arg pointer to a PIO controller
unsigned int pioEnable) // \arg PIO to be enabled
{
pPio->PIO_PER = pioEnable; // Set in PIO mode
pPio->PIO_OER = pioEnable; // Configure in Output
}



و





//*----------------------------------------------------------------------------
//* \fn AT91F_PIO_SetOutput
//* \brief Set to 1 output PIO
//*----------------------------------------------------------------------------
__inline void AT91F_PIO_SetOutput(
AT91PS_PIO pPio, // \arg pointer to a PIO controller
unsigned int flag) // \arg output to be set
{
pPio->PIO_SODR = flag;
}

//*----------------------------------------------------------------------------
//* \fn AT91F_PIO_ClearOutput
//* \brief Set to 0 output PIO
//*----------------------------------------------------------------------------
__inline void AT91F_PIO_ClearOutput(
AT91PS_PIO pPio, // \arg pointer to a PIO controller
unsigned int flag) // \arg output to be cleared
{
pPio->PIO_CODR = flag;
}



خوب حالا چه فرقی داشت؟؟؟؟
فقط برای ورژن جدید KEIL و همچنین کامپایلر GNU ا (ARM-GCC) و IAR باید این هدر فایلو بزارید چون در مسیر استاندارد هدر فایلها وجود نداره.

vasa
15-02-2010, 19:43
خوب همه حرفه منم همینه هیچ فرقی نداره جز اینکه باید اسم چند تا تابع گردن کلفت رو حفظ کرد و همچنین مقداری وقت از میکرو رو تلف کرد (به خاطر دو بار تغییر pc) و تازه کسی که آشنایی با آرم نداره و میخواد شروع کنه شاید با دیدن همین تابعهای گردن کلفت ترس برش داره بیخیال آرم شه
میگن گره ای رو که میشه با دست بازش کرد با دندون باز نمیکنن اگه به فلسفه تعریف تابع تو برنامه نویسی مراجعه کنید میبینید واسه همچین کاری هیچ لزومی به تعریف تابع نیست
بازم ممنون که این بحث رو باز کردید

Division
15-02-2010, 20:28
با سلام
به نظر من اگه شما فقط از امكانات اوليه arm ها استفاده كنين نظرتون عوض ميشه و رو ميارين به زبان ها ي سطح بالايي مثل C يا ...
آنچنان لابه لاي دستورات طولاني اسمبلي گير مي كنيد كه ميكرو ARM رو به صورت غول بي شاخ دم تصور مي كنيد :wink:

vasa
15-02-2010, 23:49
با سلام
به نظر من اگه شما فقط از امكانات اوليه arm ها استفاده كنين نظرتون عوض ميشه و رو ميارين به زبان ها ي سطح بالايي مثل C يا ...
آنچنان لابه لاي دستورات طولاني اسمبلي گير مي كنيد كه ميكرو ARM رو به صورت غول بي شاخ دم تصور مي كنيد :wink:

سلام دوست عزیز
اولا خدمتتون عرض کنم C زبان سطح بالا نیست و میانی هست. ثانیا مگه کدی که من نوشتم اسمبلی هست؟؟؟!!!ii998)
تمام حرف من تو این تاپیک اینه که الکی تابع تعریف نکنیم که خودمون درگیر حفظ کردن اسامی اینطور توابع کنیم.
آخه حقیقتا مسخره ست که واسه مقدار دادن به یه رجیستر بیاییم تابع تعریف کنیم
با آرزوی موفقیت برای شما:D

farzadsw
16-02-2010, 02:44
اگه هدر رو کامل نگاه کرده باشید میبینید که توابع پیچیده تری هم وجود داره .
مزیت دیگه استفاده از این هدر اینه که همه توابعش یه فرمت خاص دارن بنابراین حفظ کردنشون از حفظ کردن رجیستر ها ساده تره
از همه اینها مهم تر اینه که برنامه شما خوانا میشه . مثلا اگه افراد دیگه یا خود شما بخواید 1 ماه دیگه برنامتون رو ببینید راحت میفهمید که برنامه داره چی کار میکنه .
مثلا خودتون مقایسه کنید که کدومشون خوانا تره:


AT91F_PIO_SetOutput (AT91C_BASE_PIOA, P0)
و


pPio->PIO_SODR = 0x0001;

sallysat
16-02-2010, 04:27
مقداری وقت از میکرو رو تلف کرد (به خاطر دو بار تغییر pc)
بازم ممنون که این بحث رو باز کردید
'سلام ......
گفتم که توابع این هدر فایل تماما inline هستند (یعنی دقیقا مثل یه ماکرو عمل میکنه) و توسط خود Atmel برای راحتی کار طراحی شدند.
اگه باور نمیکنی دو برنامه یکی با استفاده از اون هدر فایل و یکی دیگه بدون استفاده از اون بنویس و خروجی اسمبلی تولید کن و مقایسه کن یا حتی میتونی حجم فایل هگز خروجی رو مقایسه کنی :wink:

Division
07-03-2010, 00:10
سلام دوست عزیز
اولا خدمتتون عرض کنم c زبان سطح بالا نیست و میانی هست. ثانیا مگه کدی که من نوشتم اسمبلی هست؟؟؟!!!ii998)
تمام حرف من تو این تاپیک اینه که الکی تابع تعریف نکنیم که خودمون درگیر حفظ کردن اسامی اینطور توابع کنیم.
آخه حقیقتا مسخره ست که واسه مقدار دادن به یه رجیستر بیاییم تابع تعریف کنیم
با آرزوی موفقیت برای شما:d



دوست عزيز شما اگه برنامه اي رو بنويسيد كه مثلاً 2000 خط باشه اون موقع متوجه ميشيد كه چرا تابع رو تو زبان c به كار مي برن....
اينم بگم منظور من اين نبود كه زبان قدرتمندي مثل اسمبلي ارزش كمي داره ، بلكه منظور من اين بود كه ميشه از تلفيق زبان هايي مثل اسمبلي و c برنامه هاي حرفه اي نوشت .

در ضمن از بابت اينكه فرمودين زبان c زبان سطح مياني هست ممنون......8O

و ديگه اينكه با نظر شما موافقم، تعريف يك تابع براي يك رجيستر يه جورايي معني نداره.

vasa
07-03-2010, 18:08
خدا خیر دنیا و آخرت رو نصیبت کنه just arm جون بالاخره یکی تو این تاپیک با من هم عقیده شد والله همه حرف منم همینه که آخه واسه مقدار دادن به یه رجیستر تابع تعریف کردن خیلی مسخرست هم اینکه روح اون بابایی که ایده تابع رو داد تو قبر می لرزه:mrgreen:
ولی فعلا من به یه مشکلی برخوردم که به هیچ صراطی مستقیم نیست اونم بحث اینتراپته
یکی دو جای دیگه گفتم ولی هیچ کی جواب نداد اونم اینکه آرم واسه اینتراپتاش بردارهای از پیش تعریف شده نداره چطوری باید آدرس بهینه رو پیدا کرد؟؟؟:cry:

Division
11-03-2010, 01:18
خدا خیر دنیا و آخرت رو نصیبت کنه just arm جون بالاخره یکی تو این تاپیک با من هم عقیده شد والله همه حرف منم همینه که آخه واسه مقدار دادن به یه رجیستر تابع تعریف کردن خیلی مسخرست هم اینکه روح اون بابایی که ایده تابع رو داد تو قبر می لرزه:mrgreen:
ولی فعلا من به یه مشکلی برخوردم که به هیچ صراطی مستقیم نیست اونم بحث اینتراپته
یکی دو جای دیگه گفتم ولی هیچ کی جواب نداد اونم اینکه آرم واسه اینتراپتاش بردارهای از پیش تعریف شده نداره چطوری باید آدرس بهینه رو پیدا کرد؟؟؟:cry:



اول اينكه با اين دعايي كه شما برا بنده فرمودين حتما يه چيزي مون ميشه :lol::lol:
اما درباره سوال دوست خوبم vasa بايد بگم كه اولاً من با سري at91sam زياد كار نكردم و با با سري lpc2300/2300 بيشتر كار كردم و وقفه توي اين سري به اين صورته كه يه رجيستر 32 بيتي به نام Interrupt Select Register اختصاص پيدا كرده به وقفه هاي نوع FIQ و IRQ . با استفاده از رجيستر Interrupt Select Register ميشه براحتي هر وقفه اي رو كه دلت خواست فعال يا غير فعالش كني حتي با رجيستر هاي VICVectPriority0 الي VICVectPriority31 ميشه اولويت وقوع و پاسخ به وقفه ها رو تعيين كرد .
در ضمن بردارهاي وقفه در اين سري از رجيستر VICVectAddr0 الي VICVectAddr31 قابل برنامه ريزي مي باشند .

من بلوك دياگرام مدلي كه باش كردم رو برات ميزارمش اميدوار مي شويم كه به درد بخورد :0013:
اگه خواستي سورس كدش رو هم برات آماده مي كنم و كافي اشاره كني ... :wink::wink:

vasa
17-03-2010, 15:57
صحبتات در مورد at91sam هم کاملا درسته just arm جون جز اینکه اسم رجیستراش فرق فوکولید. حالا این وسط مشکل من دقیقا با همین بردارهای وقفه ایه که از پیش تعریف نشده است و باید برنامه ریزی بشه. . . من از کجا باید بفهمم برنامه اصلی تا چه آدرسی رفته و واسه اینتراپت باید از کجای حافظه شروع کنم و یا برنامه هر اینتراپت تا چه آدرسی ادامه پیدا می کنه؟؟؟ حالا واسه یه برنامه کوچولو کار سادست اما مشکل زمانی پیش میاد که برنامه بزرگ میشه:cry::cry::cry: راستی یه سوال دیگه هم داشتم : واسه عنوان روتین اینتراپتا چی باید بنویسم؟
خیلی چاکریم just arm جون:0013: