نوشته اصلی توسط
mzarkoob
سلام
خوب مهندس رم خارجی که داره برد 1788 کویر !
درسته داره SDram جداگونه داره ولی نمیدونم چرا وقتی حتی اونو هم initialize میکنم بازم میکرو هنگ میکنه!
ببینین! من اول یه سری متغیر معرفی می کنم به برنامه:
uint8_t indic[10];
uint32_t adc_value;
uint32_t sig1[2000];
uint16_t i=0;
که اینجا برای مثال تعداد درایه های آرایه ام رو 2000 فرض کردم. در صورتی که در اصل و واقعیت 15000 باید باشه! اونم دوتا آرایه! بگذریم... بعدش میام تنظیمات مربوط به پورت سریالمو انجام میدم:
UART_CFG_Type UARTConfigStruct;
UART_FIFO_CFG_Type UARTFIFOConfigStruct;
بعد در واقع SDram رو initialize میکنم:
SDRAM_32M_16BIT_Init();
بعد در ادامه تنظیمات مربوط به سریالمو انجام میدم و پورتهای ADC رو مشخص میکنم و تنظیم میکنم که برای داده گیری آماده بشم، که دیگه اینجا نمی نویسم.
بعد از تنظیمات ADC و سریال، توی یک حلقه ی while شروع میکنم به داده گیری یا data gathering که از ورودی ADC میخونم و میریزم توی متغیری به اسم adc_value و بعد در خط بعد توی درایه ی i-اُم از آرایه ی sig1 که در ابتدا معرفیش کردم ذخیره میکنمش:
i<2000while(1)
{
// Start conversion
ADC_ChannelCmd (LPC_ADC , ADC_CHANNEL_1, ENABLE);
ADC_StartCmd(LPC_ADC,ADC_START_NOW);
//ADC_BurstCmd (LPC_ADC , 1);
//Wait conversion complete
while (!(ADC_ChannelGetStatus(LPC_ADC, ADC_CHANNEL_1, ADC_DATA_DONE)));
adc_value = ADC_ChannelGetData(LPC_ADC , 1);
sig1[i]=adc_value;
i++;
بعد توسط توابع پورت سریال مقدار قرائت شده رو روی پورت سریال میفرستم. و بعد حلقه تموم میشه
}
و اینجا حلقه ی while تموم میشه! به ظاهر بعد از 2000 بار اجرا شدن باید حلقه استاپ کنه و نتایج دو هزار بار هم روی خروجی سریال نمایش داده بشه! ولی میکرو توی همون خطوط اول هنگ میکنه! یعنی خطی که اس دی رم رو داریم میشناسونیمش! این عکس رو توی لینک زیر ببینین، توی حالت دیباگ گرفتم:
>>>>>>>>>>>>>>>>>>>>>>>فایل پیوست 9432 <<<<<<<<<<<<<<<<<<<<<<<<<<<
جالب اینجاست که وقتی تعداد درایه های آرایه ی sig1 رو کم میکنم و میشه مثلا 200 تا یا کمتر .. همین کد اجرا میشه و هیچ ایرادی هم نداره! ممنون میشم کمکم کنین خیلی دیگه سر این داستان گیر کردم!