۲۴-شهریور-۱۳۸۹, ۰۳:۴۶:۵۷
سلام
چند وقت بود که دنبال راه اندازی twi یا همان i2c با arm بودم.
برای شروع مجله ی pmm رو خوندم ولی انگار به دلیل برخی از مشکلات ، هدر فایل ها در ویرایش دوم ضمیمه خواهند شد.
پس برای شروع مجبور بودم که از اول اول یاد بگیرم.
بعد از خواندن دیتاشیت و بعضی از قسمت های نا مفهوم(البته برای من :)) ، تصمیم گرفتم که روی برنامه ای که خود اتمل برای راه اندازی twi در کامپایلر iar نوشته بود ، کار کنم.
اما انگار کدها حتی یک بار هم تست نشده بودند. کد هایی که برای راه اندازی حافظه های سری at24cxxxx نوشته شده بودند.
مشکلات اصلی:
1- mck در تابع AT91F_SetTwiClock تعریف نشده بود.(البته شاید در هدر خاصی define شده بود که من نداشتم.) (در مورد mck میتونید به مجله ی pmm شماره ی 4 مراجعه کنید.)
2-آدرس 7-بیتی(بدون r/w ) باید 16 بار به چپ شیفت می شدند.(طبق رجیستر TWI_MMR)
همان طور که از مورد آخر آشکار است، در هنگام قرار دادن آدرس در رجیستر MMR ، بیت R/W آدرس را حذف کرده سپس عملیات را ادامه میدهیم، چون بیت R/W به طور جداگانه در قسمت MREAD رجیستر MMR قرار خواهد گرفت.
در مورد مشکل اول، با قرار دادن مقدار کلاک مستر (mck) مشکل حل میشود.
(توجه کنید که طبق دیتاشیت، ckdiv یک مقدار 3 بیتی و CLDIV ,CHDIV مقادیر 8 بیتی هستند. پس مراقب حداکثر مقادیری که در این قسمت ها قرار میگیرند، باشید.)
مشکل دوم هم که با توجه به دیتاشیت بسیار واضح بود اما با این که کدها از طرف شرکت سازنده ارائه شده بود...
با برطرف کردن این دو مشکل، و با قرار دادن دو عدد مقاومت pull up در مسیر های کلاک و دیتا، 24c64 با موفقیت! راه اندازی شد.
----------------------------------------------------------------------------
البته توجه کنید که سایز آدرس داخلی را من همیشه معادل 2 در نظر گرفتم، اگر آدرس داخلی شما بزرگتر از 2 باشد(تا 3) تغییرات لازم را در فراخوانی تابع AT91F_TWI_ReadSingleIadr یا AT91F_TWI_WriteSingleIadr اعمال کنید.
----------------
و قبل از شروع به استفاده از باس، باید تابع AT91F_TWI_Open رو فراخوانی کنید.(فرکانس کاری 100 کیلو یا 400 کیلو هرتز)
---------------
مشکلی بود در همین تاپیک مطرح کنید تا با هم فکری هم درستش کنیم.
---------------
موفق باشید.
[attachment=5545]
چند وقت بود که دنبال راه اندازی twi یا همان i2c با arm بودم.
برای شروع مجله ی pmm رو خوندم ولی انگار به دلیل برخی از مشکلات ، هدر فایل ها در ویرایش دوم ضمیمه خواهند شد.
پس برای شروع مجبور بودم که از اول اول یاد بگیرم.
بعد از خواندن دیتاشیت و بعضی از قسمت های نا مفهوم(البته برای من :)) ، تصمیم گرفتم که روی برنامه ای که خود اتمل برای راه اندازی twi در کامپایلر iar نوشته بود ، کار کنم.
اما انگار کدها حتی یک بار هم تست نشده بودند. کد هایی که برای راه اندازی حافظه های سری at24cxxxx نوشته شده بودند.
مشکلات اصلی:
1- mck در تابع AT91F_SetTwiClock تعریف نشده بود.(البته شاید در هدر خاصی define شده بود که من نداشتم.) (در مورد mck میتونید به مجله ی pmm شماره ی 4 مراجعه کنید.)
2-آدرس 7-بیتی(بدون r/w ) باید 16 بار به چپ شیفت می شدند.(طبق رجیستر TWI_MMR)
همان طور که از مورد آخر آشکار است، در هنگام قرار دادن آدرس در رجیستر MMR ، بیت R/W آدرس را حذف کرده سپس عملیات را ادامه میدهیم، چون بیت R/W به طور جداگانه در قسمت MREAD رجیستر MMR قرار خواهد گرفت.
در مورد مشکل اول، با قرار دادن مقدار کلاک مستر (mck) مشکل حل میشود.
(توجه کنید که طبق دیتاشیت، ckdiv یک مقدار 3 بیتی و CLDIV ,CHDIV مقادیر 8 بیتی هستند. پس مراقب حداکثر مقادیری که در این قسمت ها قرار میگیرند، باشید.)
مشکل دوم هم که با توجه به دیتاشیت بسیار واضح بود اما با این که کدها از طرف شرکت سازنده ارائه شده بود...
با برطرف کردن این دو مشکل، و با قرار دادن دو عدد مقاومت pull up در مسیر های کلاک و دیتا، 24c64 با موفقیت! راه اندازی شد.
----------------------------------------------------------------------------
البته توجه کنید که سایز آدرس داخلی را من همیشه معادل 2 در نظر گرفتم، اگر آدرس داخلی شما بزرگتر از 2 باشد(تا 3) تغییرات لازم را در فراخوانی تابع AT91F_TWI_ReadSingleIadr یا AT91F_TWI_WriteSingleIadr اعمال کنید.
----------------
و قبل از شروع به استفاده از باس، باید تابع AT91F_TWI_Open رو فراخوانی کنید.(فرکانس کاری 100 کیلو یا 400 کیلو هرتز)
---------------
مشکلی بود در همین تاپیک مطرح کنید تا با هم فکری هم درستش کنیم.
---------------
موفق باشید.
[attachment=5545]