سلام به همه دوستان گل و گلاب !
آقا یه روز از وقت من سوخت نمی دونمن به خاطر حماقت کایل بود یا من - البته هنوز نفهمیدم، امیدوارم با کمک شما بفهمم !
مشکل از اینجا شروع شد که من میخواستم یه برنامه خیلی ساده چشمک زن بسازم {برای طراحی کتابخونه تاخیر } صفر و یک کردن پورت حل شد و مشکلی نداشت ولی نمیدونم چرا میکرو توی کلاک دلخواه کار نمی کنه به مستندات زیر دقت کنید:
تنظیمات استارت آپ میکرو:
این تنظیمات یعنی این که کلاک رو از خروجی pll بگیر و بر دو تقسیمش کن !
کلاک PLL هم میشه میزان اکسترنال کلاک (که فعال هست) ضربدر 26 (MUL+1) تقسیم بر 5 که خالصش میشه mainclock = 48 مگاهرتز! تا اینجا همه چیز به ظاهر درسته !
از اونجایی که آرم یه ماشین RICS هست یعنی هر کلاک اجرای یک فرمان هست پس برای ایجاد تاخیر یک میکرو ثانیه ای باید یه حلقه درست کنیم که 48 تا پالس سیستم رو مصرف کنه اون موقه میشه mainclk/48 که میشه یک میکرو ثانیه و اگر این 48 رو در 1000 ضرب کنیم میشه یک میلی ثانیه و اگر باز در 200 ضرب میشه میشه 200 میلی ثانیه که نتیجه برابر 9600000 هست یعنی اگه خوش بینانه ببینیم قضیه رو یه حلقه اگر این مقدار رو شمارش کنه نتیجش میشه 200 میلی ثانیه تاخیر !
خوب در نتیجه من این کد رو نوشتم:
کد:
#include <AT91SAM7X256.h>
#include "lib_AT91SAM7X256.h"
#include "pio.h"
void delay_200ms(){
unsigned long i;
for(i=0;i<9600000;i++);
}
int main(void)
{
// PORTB Direct < input or output >
*AT91C_PIOB_OER = PB19;
// Active Pullup PORTB Pins
*AT91C_PIOB_PPUER = PB19;
// Set Output PORTB Pins
*AT91C_PIOB_SODR = PB19;
while(1)
{
RST_PORTB = PB19;
delay_200ms();
SET_PORTB = PB19;
delay_200ms();
}
}
بعد از پروگرام کردن میکرو نتیجه این شد که ال ای دی که روی پورت 19 نصی کردم مدام خاموش شده و دیگه روشن نشد!
وقتی مقدار حلقه فور رو به 1000 تغییر دادم و دوباره پروگرام کردم نتیجه شد چشمک زدن پورت با سرعت تقریبا 150 میلی ثانیه !
این یعنی این که کلاک سی پی یو اصلا 48 مگ نیست و در حدود کمتر از یک مگاهرتز است
گفتم شاید فایل استارت آپ مشکل داشته باشه - رفتم سرغ دیتا شیت و رجیستر های PLL , PMC رو در اوردم و مقدار ها رو دستی توی مسیر برنامه دادم بهش
کد:
AT91C_BASE_CKGR->CKGR_MOR=0xF01;
AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
AT91C_BASE_PMC->PMC_MCKR=0x3;
AT91C_BASE_PMC->PMC_SCER=0x1;
ولی اینم فایده ای نداشت !
نمیدونم دیگه مشکل از کجا میتونه باشه حالا نظر شما چیه ؟ مشکل کجاست و چطور حلش کنم - حتی کار به جایی رسید که کایل رو پاک کردم و دوباره نصب کردم بازم اتفاقی نیفتاد که نیفتاد!