PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل عجیب با وقفه سریال



zoz_zozm
01-09-2013, 00:42
درود
من یه برنامه نوشتم که با وقفه سریال کار میکنه، وقتی این برنامه رو دیباگ میکنم درست جواب میده ولی وقتی اجراش میکنم میره یه جای برنامه گیر میکنه. کسی از دوستان میدونه مشکل از چیه؟cry::

وقتی هم وقفه سریال رو فعال میکنم بعد چند لحظه وارد سرویس روتین وقفه میشه (فلگش هم ست میشه) با اینکه هیچ وقفه ای نیومده:(

processor
01-09-2013, 01:22
من یه برنامه نوشتم که با وقفه سریال کار میکنه، وقتی این برنامه رو دیباگ میکنم درست جواب میده ولی وقتی اجراش میکنم میره یه جای برنامه گیر میکنه. کسی از دوستان میدونه مشکل از چیه؟cry::

وقتی هم وقفه سریال رو فعال میکنم بعد چند لحظه وارد سرویس روتین وقفه میشه (فلگش هم ست میشه) با اینکه هیچ وقفه ای نیومده:(

سلام
اول سخت افزارتون رو بدون استفاده از وقفه تست کنید برای اطمینان از وجود نداشتن نویز و مشکل مداری
اگه امکانش هست مدارتون رو با دیباگر هم تست کنین
و بازم حل نشد برنامه رو قرار بدین

zoz_zozm
01-09-2013, 01:31
بدون وقفه درست کار میکنه.وقتی دیباگ میکنم درست کار میکنه ولی وقتی برنامه ران میشه نمیدونم کجا گیر میکنه.
مرسی از پاسختون.

zoz_zozm
01-09-2013, 01:37
برنامه چیزی حدود 1000 خطه و گیج کننده س این قسمتی از اونه که وقتی تایمر وقفه میده وقفه سریال فعال میشه و داخل برنامه جاهایی که لازم نیست اونو غیر فعال میکنم.

void TIMER0_IRQHandler (void){
//Lcd_Cmd(_LCD_TURN_OFF);
Lcd_Blt_Off;//lcd back ligh off
LockOrUnlock=0;// locked state
LPC_TIM0->IR = (1UL<<0); /* Clear MAT0.0 interrupt flag */
LPC_TIM0->IR = (1UL<<1); /* Clear MAT0.1 interrupt flag */
LPC_TIM0->IR = (1UL<<2); /* Clear MAT0.2 interrupt flag */
LPC_TIM0->IR = (1UL<<3); /* Clear MAT0.3 interrupt flag */
LPC_TIM0->IR = (1UL<<4); /* Clear CAP0.0 interrupt flag */
LPC_TIM0->IR = (1UL<<5); /* Clear CAP0.1 interrupt flag */
LPC_UART0->IER = 0x01; // Enables the Receive Data Available interrupt
//return;
}

roohlla
01-09-2013, 12:05
قبل از این که وقفه رو فعال کنید با دستور NVIC وقفه کلیش باید غیر فعال باشه . سپس رجیستر وقفه رو فعال کن و فلگ اون وقفه ای رو که فعال کردی صفر کن . سپس با دستور NVIC_ClearPending تعویق وقفه ی سریال رو پاک کن و سپس با EnableIRQ وقفه رو فعال سازی نهایی کن .

mzarkoob
01-09-2013, 12:24
سلام
بر اساس اصول اولیه ( که البته در فیلم آموزشی هم گفته شده) نباید موردی باشه در برنامه نویسی
من خودم دریافت از سریالم را در کاری با وقفه سریال انجام دادم و از c# هم به میکرو ارسال می کنم به خوبی دریافت ارسال را انجام می دهد حالا دیگه نمی دانم کجای برنامتون را درست تنظیم نکردید که با این موارد عجیبه مواجه شدید شایدم ایراد از نویز محیط باشه!

zoz_zozm
01-09-2013, 14:41
فکر نکنم از نویز باشه آخه هر بار که تکرار می کنم نتیجه همونه و بدون وقفه سریال به خوبی کار می کنه.
موارد آقا روح الله رو هم تست می کنم نتیجه رو می گم.
با تشکر از عزیزانی که وقت گذاشتن.

zoz_zozm
02-09-2013, 00:15
تو دیباگ ها متوجه شدم وقتی وقفه تایمر صفر میاد فلگ وقفه سریال هم فعال میشه. وقتی دیباگ میکنم تو استپ بعدی وقفه سریال پاک میشه ولی وقتی اجرا میکنم اون فلگ پاک نمیشه و باعث میشه بره تو سرویس روتین وقفه سریال و اطلاعات رو بخونه که هیچی نیست و داخل اون تابع گیر میکنه(داخل حلقه while).
دوستان تا به حال با این مورد برخورد داشتن؟

mzarkoob
02-09-2013, 01:33
وقفه تایمر چه ربطی به وقفه سریال داره !؟

zoz_zozm
02-09-2013, 01:49
وقفه تایمر چه ربطی به وقفه سریال داره !؟
خودمم از این متعجبم!!! هر وقت تایمر وقفه میده واحد سریال هم وقفه میده!!!

mzarkoob
02-09-2013, 01:52
حتما یه تنظیمی کردید که این اتفاق می افتد. در صورت امکان برنامه بذارید بررسی شود

modj.ir
02-09-2013, 20:29
حزفی که می زنم مسخره است، اما لطفا برای تست یک مقاومت پول آپ به پایه های سریال وصل کنین.قفط یک تست هست

zoz_zozm
02-09-2013, 22:14
خود پایه ها پول آپ داخلی هستند، بازم لازمه؟

roohlla
03-09-2013, 09:42
این اتفاق به این خاطره که وقفه ی سریال در وقفه ی تایمر داره فعال میشه و اگر وقفه ای بخواد فعال بشه باید قبل از این که توسط دستور nvic فعال بشن تمام فلگ هاش و همچنین حالت pending اون غیر فعال بشه.
حالا من یه سوال دارم . تامر هر چقدر یک بار وقفه میده ؟
در ضمن شما باید طبق روش که گفتم وقفه ی تایمر رو در روتین دریافت سریال غیر فعال کنید و در نهایت روتین هم فلگ و pending وقفه ی تایمر رو صفر کرده و از روتین خارج بشید. در حالت کلی در وقفه های تایمر محور استفاده از توابع و کار های وقت گیری مثل استفاده از پورت سریال و یا ارتباط با ال سی دی پیشنهاد نمیشه. میدونید چرا ؟ به این خاطر که مثلا چاپ یک کاراکتر روی lcd یک میلی ثانیه طول میکشه ! خوب حالا خودتون حسابش کنید چی پیش میاد !:unh:

zoz_zozm
03-09-2013, 15:33
حدودا 2 ثانیه طول میکشه.
پردازنده منتظر دریافت عدد از کیپد میمونه و وقتی که تایمر وقفه داد، وقفه سریال فعال میشه(و تایمر غیر فعال). واگر کاربر عددی را وارد کرد مقدار تایمر ریست میشه. این کار واسه خاموش کردن السیدی و بک لایت اون استفاده میشه که اگر 2 ثانیه(حدودا) گذشت و کاربر عددی وارد نکرد جریان مصرفی رو کم کنم. و موقعی که السیدی خاموش شد(وقفه تایمر اومد) می خوام وقفه سریال فعال بشه (مُد ریموت).
کد رو دارم کوچیک میکنم که اینجا قرار بدم تا دوستان کمک کنن.:brk:
با تشکر:gop:

salamlora1
03-09-2013, 17:25
با سلام کسی از این جوون مردا nvic رو iar راه انداخته اگه راه انداخته میتونه راهنمایی کنه