ايران ويج

نسخه‌ی کامل: شروعی دوباره برای میکروهای arm
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6
سلام
از اونجا که تو دنیای مجازی منبع کافی برای میکروهای 32بیتی arm وجود نداره،من و هادی تصمیم گرفتیم که یک شروع تخصصی تر برای یادگیری میکروهای پرکاربرد arm راه بندازیم.
ما قرار بود کار رو از میکروهای سری arm9 که از سیستم عامل پشتیبانی می کنن،شروع کنیم ولی از اوجا که منبع محدود بود و هزینه بردها بالا،تصمیم گرفتیم با arm7 که هزینه بردش پایینتره و نسبتا منبع بیشتری داره شروع کنیم تا بعد به سری های بالاتر ارتقا بدیم.
برای این کار ما از هدربرد آموزشی برای میکروی at91sam7x256 و محیط کامپایلر keil استفاده کردیم.

برای شروع کار می تونید برد و از لینک زیر و سایت کویر الکترونیک تهیه کنید؛
برد آموزشی at91sam7x256

همچنین کامپایلر keil رو می تونید از لینک زیر دانلود کنید
کامپایلر keil uvision4

دوستان تو این تاپیک هر مشکلی داشتن می تونن بیان کنن و مدیران و سایر اعضایی که قبلا تجربه کار با این میکروها رو دارند ما رو از کمک هاشون بی نصیب نکننRolleyes
یه توضیح در مورد برد آموزشی بدم؛
این برد بدون نیاز به پروگرامر و بصورت نرم افزاری و توسط نرم افزار sam-ba پروگرام میشه.
به این صورت که برنامه تون و به زبان c در محیط keil می نویسید و بعد توسط sam ba و به حافظه flash میکرو میریزید.
همچنین این برد قابلیت ارتقا داره و می تونید کانال های i2c ، jtag و eternet و سایر ماژول های کاربردی مثل lcd و کارت حافظه sd روش بندازید و به آسونی باهاش کار کنید.

نرم افزار sam ba رو هم باید تهیه کنید که من لینک مناسبی واسش پیدا نکردم اگه دوستان پیدا کنن لینک بدن.
ضمنا اینم بگم که اگه برد و گرفتید همه نرم افزارهای مورد نیاز و توش داره و دانلود نکنیدWink

یادم رفت بگم نرم افزار h-jtag رو هم به لیست برنامه های مورد نیاز اضافه کنید.
به طور کلی ما ابتدا تو محیط keil برنامه مون و به زبان c می نویسیم و بعد کد هگز و ایجاد می کنیم.
بعد توسط برنامه h-jtag کد هگز اون وبه باینری تبدیل می کنیم.
و نهایتا توسط sam-ba سورس باینری رو داخل میکرومون میریزیم.

تا الان ما؛
یه برد آموزشی برای at91sam7x256
کامپایلر keil
نرم افزار تبدیل کد هگز به باینری h-jtag
و نرم افزار sam-ba برای ریختن سورس باینری داخل میکرو
نیاز داریم.
سلام به همه دوستان
بلاخره بعد از تلاش از صبح تا حالا تونستم اولین برنامم رو با keil برای arm بنویسم
قبل از هرچیزی دو فایل موجود در فایل lib (فایل پیوست) را در مسیر
C:\Keil\ARM\INC\Atmel\SAM7X
کپی کنید
خوب حالا بریم سراغ برنامه
کد:
#include <AT91SAM7X256.H>
#include <lib_AT91SAM7X256.h>
با این دو خط کتابخانه های مورد نیاز برای آی سی را تعریف کردیم
کد:
#include <delay.h>
کتابخانه ی تاخیر را تعریف کردیم
کد:
int main (void) {
شروع برنامه
کد:
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
پایه ی b.19 را خروجی تعریف کردیم
کد:
while(1){
شروع حلقه ی اصلی
کد:
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
پایه ی b.19 رو صفر کردیم
کد:
delay_s(1);
یک تاخیر (زمانش دقیق نیست)
کد:
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB19);
پایه ی b.19 را یک کردیم
کد:
delay_s(1);
یک تاخیر
کد:
}
}
پایان حلقه و برنامه
حالا کلید f7 را بزنید فایل هگز ساخته میشه و باید با نرم افزار H-JTAG V0.9.0 به باینری تبدیل می کنیم و فایل باینری را با پروگرامر sam-ba رو آی سی میریزم
حالا آی سی را ریست می کنیم و می بینید که ال ای دی سبز روی برد چشمک می زنه
(برنامه طبق گفته ی آقا مرتضی ویرایش شد)
مشكل خاصي ندارهه ، اما براي پيكربندي I/O ها بهترهه اونها رو قبل از شروع حلقه پيكربندي كنيد.
مورد ديگه اينكه بنظرم از اين كتابخانه و توابع استفاده نكنيد.
در سطح ريجستر كد بزنيد ، بهتر متوجه مي شيد چي به چيه و ماندگاريش بيشترهه ...

موفق باشيد.
نقل قول: مورد ديگه اينكه بنظرم از اين كتابخانه و توابع استفاده نكنيد.
در سطح ريجستر كد بزنيد ، بهتر متوجه مي شيد چي به چيه و ماندگاريش بيشترهه ...
ممنون مرتضی جون ولی زیاد متوجه نشدم
میشه بیشتر توضیح بدی؟
بدون استفاده از کتابخانه چطور میشه کد زد؟
ممنون
یه سوال آقا مرتضی رجیستر ها همه توی دیتاشیت هستن اگر نیستن یه مرجع براشون دارین بهم معرفی کنید
توي ديتاشيت هستن. كتاب هم بگيريد موجود هست. تو خود سايت Keil هم يه سري manual گذاشته فكر كنم!
مثال زير رو ببينيد. كد چشمك زن هست.
اين كد در سطح ريجستر هست ، اونموقع با IAR كار مي كردم و براي تنظيمات PLL و WD و RST و ... چون wizard نداشت بايد در خط هاي برناه وضعيت رو مشخص مي كردي ، اون چند خط اول رو مي بينيد كوپ نكنيد!
اين كد رو مستقيم در Keil هم مي تونيد استفاده كنيد ، اون خط هاي اولش رو هم كه مربوط به تنظيمات PLL و ... مي شه مي تونيد حذف كنيد ، چون خود Keil يه Wizard دارهه كه به صورت پيشفرض مقدار دهي شدن...
يه سري كد و ... ابتدايي رو در لينك زير هست ( مربوط به يكي از تاپيك هاي قبل هست ) مي تونيد ببينيد و تو همين تاپيك ازشون استفاده كنيد ، توضيحاتي كه اونجا دادم ، ممكنه كاملا درست نباشه ، چون اونموقع تازهه شروع كردهه بودم!
صفحه ي 4 به بعد رو ببينيد :
http://www.iranled.com/forum/thread-22883-page-5.html

کد php:
#include <Atmel/ioat91sam7x256.h>
void delay(void);
void main ()
{
  
//AT91C_BASE_WDTC->WDTC_WDMR=AT91C_WDTC_WDDIS;
  //AT91C_BASE_RSTC->RSTC_RMR=0XA5000001;
  
AT91C_BASE_CKGR->CKGR_MOR=0XF01;
  
AT91C_BASE_CKGR->CKGR_PLLR=0X2903FFC;  
  
AT91C_BASE_PMC->PMC_MCKR=0X3;
  
AT91C_BASE_PMC->PMC_SCER=0X1;    
  
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOA);
  
AT91C_BASE_PIOA->PIO_PER=(1<<0);
  
AT91C_BASE_PIOA->PIO_OER=(1<<0);
  while(
1)
  {
    
AT91C_BASE_PIOA->PIO_CODR=(1<<0);
    
delay();
    
AT91C_BASE_PIOA->PIO_SODR=(1<<0);
    
delay();
  }
}
//---------------------------
  
void delay (void)
  {
    
unsigned int i,j;
    for(
i=0;i<2000000;i++)
      for(
j=0;j<1000000;j++);
  }
//--------------------------- 

موفق باشيد.
با این خط چکار کردین
کد:
AT91C_BASE_PIOA->PIO_CODR=(1<<0);
با این خط چکار کردین
کد:
AT91C_BASE_PIOA->PIO_SODR=(1<<0);
فکر کنم پایه ای رو با یکی صفر کردین و با یکی یک خوب حالا پایه کجا تعیین شده
کد php:
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOA); 
به واحد PMC مي گي كلاك PIOA رو وصل كن.
کد php:
AT91C_BASE_PIOA->PIO_PER=(1<<0); 
پايه ي A.0 رو به صورت I/O تعريف مي كني.
کد php:
AT91C_BASE_PIOA->PIO_OER=(1<<0); 
پايه ي A.0 رو به صورت output پيكربندي مي كني.

2 تايي هم كه خودتون گفتيد درست هست ، يكي set مي كنه و ديگري clear
(راه اندازی فلاشر 8 بیتی با at91sam7x256)

سلام
امروز تونستم یه فلاشر 8بیتی با میکرو arm راه بندازم
برنامه و کارهایی رو که کردم و به همراه یه فیلم کوتاه از عملکرد فلاشر گذاشتم استفاده کنید.

توضیح برنامه؛
کد:
#include <AT91SAM7X256.H>
تعریف میکروی مورد نظر
کد:
#include <lib_AT91SAM7X256.h>
فراخوانی فایل هدر یا کتابخانه
کد:
#include <delay.h>
دستور تاخیر برنامه
کد:
int main (void) {
while(1){
شروع و اجرای دستور حلقه
کد:
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,0xff);
پین های 0 تا 7 از پورت b بعنوان خروجی تعریف شدن
برای درک مطلب؛
پین هایی روکه میخواهید خروجی تعریف بشن باید 1 کنید و مابقی رو صفرالان من میخوام پین های 0 تا 7 رو خروجی کنم، پس باید 8 تا 1 بجای پین 0تا7 بذارم(11111111)
الان کافیه که (11111111) رو به مبنای هگزا ببرم که می تونید برای این کار از ماشین حساب سیستم استفاده کنید.
که در واقع حاصل میشه ff در مبنای هگزا در نتیجه در برنامه0xff میذاریم.
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, 0xaa);
پین های 0-2-4-6 و روشن می کنیم(101010 رو به مبنای هگزا می بریم)
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, 0xaa);
پین های 0-2-4-6 و خاموش می کنیم
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, 0x55);
پین های 1-3-5-7 و روشن می کنیم(01010101 رو به مبنای هگزا می بریم)
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, 0x55);
پین های 1-3-5-7 و خاموش می کنیم
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای و نهایت پایان برنامه و شروع دوباره حلقه

برای راه اندازی سخت افزار هم طبق دیتاشیت پایه های 0تا7 از پورت b رو با یه مقاومت 330 اهم به led می دیم و از زمین هدربرد به پایه های منفی led وصل می کنیم.

الان کافیه که فایل باینری برنامه رو توسط samba-prog داخل میکرو بریزیم (باید داخل samba-prog تیک none رو بذارید)
و بعد حافظه میکرو رو توسط شستی ریست کنیم تا فلاشر اجرا بشه.

خوش باشید

[attachment=8662]
چطوری می تونم کلید از توی برنامه بخونم با کتابخونه قبلی
اینه نوشتم ولی جواب نداد
کد:
#include <AT91SAM7X256.H>
#include <lib_AT91SAM7X256.h>
int main(void){
AT91F_PIO_GetInput(AT91C_BASE_PIOA) , AT91C_PIO_PA27;
AT91F_PIO_CfgPullup(AT91C_BASE_PIOA, AT91C_PIO_PA27);
AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91C_PIO_PB19);
while(1){
if ( AT91F_PIO_GetInput( AT91C_BASE_PIOA) & AT91C_PIO_PA27 == 0) {
AT91F_PIO_SetOutput ( AT91C_BASE_PIOB, AT91C_PIO_PB19);}
else{AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, AT91C_PIO_PB19);}
}
}
فکر کنم مشکل از تعریف کلید باشه چون اصلا ال ای دی روشن نمیشه
صفحه‌ها: 1 2 3 4 5 6