سؤال

ومنصة - ARM9

ولدي جهاز طرف ثالث متصلة عبر I2C لARM9. مشكلتي هي I2C القراءة / الكتابة يزداد في تطور. ويبدو جزم خط IRQ ولكن لم DE أكد، عند وجود بيانات للقراءة. فشل قراءة كجهاز طرف ثالث NACKs الحزمة العنوان. حتى يفشل أي الكتابة لاحقا.

وأنا أتساءل عما اذا كان التعامل مع بلدي المقاطعة في طيب. في ISR أن الخدمات IRQ، I تعطيل المقاطعات، إلغاء تسجيل معالج المقاطعة ثم يشير إلى المهمة للذهاب قراءة من الحافلة I2C. وأخيرا، أود إعادة تمكين المقاطعات.

عند الخدمات المهمة إشارة سجلت أعلاه، I محاولة لقراءة البيانات من الناقل I2C لكن هذا فشل. وأخيرا، وأنا دائما إعادة تسجيل ISR بعد محاولة من أي وقت مضى قراءة. ليس هناك تعطيل المقاطعة / تمكين الذي يحدث أثناء التعامل مع إشارة القراءة.

وسؤالي هو هل أحتاج إلى تعطيل المقاطعات عند القراءة / الكتابة إلى الحافلة I2C؟

ولغة البرمجة الاختيار هو ج باستخدام اللياقة RTOS.

هل كانت مفيدة؟

المحلول

ووالشيء المهم هو ما إذا كان لديك RTOS / النظام جاهز لدعم الاستثناءات المتداخلة. ما لم يكن هناك سبب وجيه لذلك، الأمور أبسط إذا كنت تجنب استثناءات متداخلة وتعطيل كافة المقاطعات عند دخول أحد ISR وإعادة تمكين-عند الخروج.

إذا كنت تريد السماح أخرى ذات أولوية أعلى المقاطعات تحدث بينما كنت تخدم المقاطعة I2C، ثم تعطيل فقط المقاطعة I2C. أنه من غير المألوف بدلا إلغاء تسجيل معالج المقاطعة عندما ندخل ISR. وهذا قد يؤدي إلى سلوك غير متوقع، عندما لا يكون هناك معالج المسجلين، يتم تمكين المقاطعة نفسها وحدوث المقاطعة. وذلك بدلا من إلغاء تسجيل معالج وبسيطة تعطيل المقاطعة I2C (ربما كنت تفعل ذلك، ولكن كما أراه، تسجيل معالج وتمكين مقاطعة هما شيئان مختلفان).

واستراتيجية جيدة لحل المشكلة الخاصة بك وسوف يكون لمحاولة التواصل مع الجهاز دون انقطاع. محاولة لقراءة / كتابة منه بطريقة المسلسل، لا يهم إذا كتل كل شيء - هو مجرد اختبار. هذا هو أسهل بكثير لتصحيح وبعد كنت ناجحا يمكنك الانتقال إلى الإصدار المقاطعات.

نصائح أخرى

لا بد من الاعتراف أو مسح

ومعظم المقاطعات. أذكر لكم تمكين / تعطيل، تسجيل / إلغاء تسجيل ومعالجة المقاطعة. فقط تأكد من أن المقاطعة يتم الاعتراف و / أو مسح / إعادة تعيين. في كثير من الأحيان وهذا ينطوي على كتابة رقم المقاطعة أو قليلا مرة أخرى إلى السجل انتظار المقاطعة. دليل للتحقق من ARM معين أو دليل RTOS الخاص بك.

وإذا كنت في حاجة إلى تمكين / تعطيل المقاطعات للمنصة التي تستهدفها تعتمد على الأجهزة التنفيذ / RTOS المحددة الخاصة بك. للأسف، كل ARM متحكم بائع (STMicro، فريسكالي، أوكي، الخ) لديه القدرة على تنفيذ الأجهزة I2C بشكل مختلف، ويمكن لها متطلبات مختلفة في كيفية مسح IRQ.

وكنت عليك العثور على نسخة من ورقة البيانات الأجهزة (و / أو نشر أجهزة معينة لجزء من عدد هنا حتى نتمكن من مساعدة أكثر من صب وثائق بائع، معك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top