برای اینکه بخوام از قابلیت های جانبی میکروی at91 مثل I2C استفاده کنم باید قسمت PMC مربوط به این واحد رو فعال کنم، می خواستم بدونم مراحل فعال سازی PMC واسه ی I2C چطوریه.
برای اینکه بخوام از قابلیت های جانبی میکروی at91 مثل I2C استفاده کنم باید قسمت PMC مربوط به این واحد رو فعال کنم، می خواستم بدونم مراحل فعال سازی PMC واسه ی I2C چطوریه.
با سلام
شما لطفا لينك زير رو يه نگاه بندازيد. پست شماره 6# . در مورد نحوه راه اندازي I2C توضيح كاملي قرار داده شده.
http://www.iranmicro.ir/forum/showth...8445#post28445
________________________
برنامه نويسي، الكترونيك(PE)
________________________
تو لینکی که قرار دادین پروتکلi2c رو به صورت نرم افزاری پیاده کرده و از سخت افزار i2c میکرو استفاده ای نشده.
ولی سوال من در مورد راه اندازی خود سخت افزار i2c میکرو هستش.
برنامه ی نوشته شده تو لینک بالا رو هم امتحان کردم ولی جواب نگرفتم ازش .
مرسی
برای چه موردی میخواید ازش استفاده کنید ؟
برنامه لینک بالا رو خودم نوشتم و جواب هم گرفتم
در مورد راه اندازی درگاه خود میکرو متاصفانه جواب نگرفتم هنوز وقت هم زیاد ندارم که زود به پایانش برسونم ولی اگر سوالی دارید بفرمایید در خدمتم من رجیستر ها رو مطالعه کردم و تقریبا میدونم چی یه چی هست
می خوام سنسور فاصله یاب srf02 رو با i2c میکرو راه اندازی کنم، برنامه ای که شما نوشته بودین رو هم امتحان کردم ولی جواب نگرفتم![]()
دستوری که تو هدر lib_AT91SAM7X256.h واسه ی فعال کردن PMC واسه ی I2C هستش دستور زیره
AT91F_TWI_CfgPMC();
آیا تنظیمات دیگه ای هم واسه ی فعال سازی این بخش باید نوشته بشه؟
روند کار به این صورت هست
اول کلاک قسمت TWI رو وصل میکنی با مقدار دهی کردن رجیستر PMC
دوم کلاک قسمت PIO مربوطه رو هم با مقدار دهی PMC وصل میکنی
سوم رجیستر کنترلی رو مقدار دهی میکنی که مستر باشه و کلاک رو انتخاب میکنی
چهارم آدرس اسلیو رو تو رجیستر ارسال می نویسی و مقدار بایتی که باید فرستاده بشه چون بر خلاف AVR این میکرو آدرس و بایت رو با هم میگیره یعنی هم آدرس اسلیو رو میخواد و هم اونم بدون بیت R\W ، مثلا آدرس آیسی حافظه سری 24 مقدار 0xA0 هست ولی وقتی میخوای برای آدرس در این آی سی ازش استفاده کنی آدرشو باید به صورت 0x50 بدی که آیسی جواب بده .
به مثال برات می فرستم ببین:
کد:AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_TWI);// POWER ON TWI UNIT TWI_Configure_PIO_MAKS(TWI_PIO,TWI_PIO_MASK); // PIO INIT UNIT TWI_ConfigureMaster(AT91C_BASE_TWI,100000,48000000); AT91C_BASE_TWI->TWI_MMR = 0; AT91C_BASE_TWI->TWI_MMR = (2 << 8) | AT91C_TWI_MREAD | (0x50<< 16); // Set internal address bytes AT91C_BASE_TWI->TWI_IADR = 0; // Send START condition AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START; for(W=0;W<3;W++){ while(!((AT91C_BASE_TWI->TWI_SR&AT91C_TWI_RXRDY)==0)); buf[W]=AT91C_BASE_TWI->TWI_RHR; } TWI_Stop(AT91C_BASE_TWI);
خیلی ممنون
یه سوال دیگه ای که دارم اینه که کار Internal Device Address Register Size چیه؟