2015-06-10 10 views
5

बनाते समय परिधीय त्रुटि को संभालना मैं आरएक्स और टेक्सास दोनों के लिए डीएमए का उपयोग करके यूएआरटी परिधीय के साथ संवाद करने की कोशिश कर रहा हूं। मैं एचएएल लाइब्रेरी का उपयोग कर रहा हूं जो एसटी (एसटीसीयूबीएमएक्स के साथ जेनरेट) द्वारा आपूर्ति की जाती है।एसटीएम 32 एफ 4 डीएमए ट्रांसफर (आरएक्स)

मैं 1.5 एमबीओड के साथ एक यूएआरटी चैनल को संभालने वाला हूं - इसलिए किसी भी डेटा को खोने के लिए, मैंने डीएमए को प्रत्यक्ष मोड में सर्कुलर बफर के साथ कॉन्फ़िगर किया है, और डेटा की देखभाल करने के लिए आधे स्थानान्तरण इंटरप्ट को संभाला है , और आने वाले अधिक डेटा के लिए डीएमए ऑनलाइन रखें।

समस्या यह है कि कभी-कभी मैं यूएआरटी के स्टेटस रजिस्टर में देख सकता हूं कि फ़्रेम त्रुटि बिट चालू है, और कभी-कभी ओवररन त्रुटि ध्वज भी चालू होता है।

मैं खोए बाइट्स (संरचित पैकेट पर सीआरसी का उपयोग करके) को संभाल सकता हूं, लेकिन समस्या यह है कि परिधीय डेटा प्राप्त करना बंद कर देता है - लेकिन डीएमए त्रुटि नहीं उठाता है, या स्थानांतरण को रोकता है।

तो यदि मैं डेटा प्राप्त करने का प्रयास करता हूं, और ध्वज सिस्टम पर लटकता है।

मैंने देखा कि एचएएल एक __weak फ़ंक्शन प्रदान करता है जो UART_Error को संभालना चाहिए, लेकिन इसे कभी नहीं कहा जाता है - और एचएएल हैंडल में स्थिति सामान्य बनी हुई है। रजिस्टर पर केवल एक नज़र बता सकता है कि कोई समस्या है।

मुझे इस तरह की त्रुटियों को कैसे पहचान/संभालना चाहिए?

धन्यवाद

उत्तर

2

मैं, प्रदर्शन कारणों से एचएएल का प्रयोग नहीं करते क्योंकि यह बहुत अनाड़ी है और - imo भी है कि सही ठहराने के लिए बहुत अमूर्त प्रदान नहीं करता है। हार्डवेयर को सीधे संभालना ज्यादा जटिल नहीं है; और भी उतना ही आपको समझना होगा कि क्या चल रहा है। और जैसा कि आप पहले से ही पता चला है, एचएएल केवल एक निश्चित दृष्टिकोण का समर्थन करता है; एक बार जब आप अपने खुद के निशान का पालन करते हैं, तो आप खो जाते हैं।

आपको स्पष्ट रूप से समान समस्याएं हैं जैसे अतिप्रवाह-ध्वज सेट है। ऐसी त्रुटि के बाद, सामान्य रूप से त्रुटि के बाद आपको रिसीवर को ट्रांसमीटर बाइटस्ट्रीम के साथ फिर से सिंक करना होगा। उसमें एक पैकेट के भीतर होने वाले प्रतीक या रेखा-स्थिति का उपयोग करके आउट-ऑफ-बैंड सिग्नलिंग की आवश्यकता होगी। फ़्रेमिंग त्रुटियां एक अच्छा संकेतक हैं जो प्रतीक (स्टार्ट-बिट) की शुरुआत में सिंक करने में समस्याएं हैं।

यदि रेखा साफ है (ईएमसी समस्या नहीं है), तो कोई फ़्रेमिंग त्रुटियां या डेटा भ्रष्टाचार नहीं होना चाहिए (जब तक कि समय पैरामीटर मेल नहीं खाते)।

यदि एक साधारण पिंग-पोंग का उपयोग करना है, तो टाइमआउट पर्याप्त हो सकता है। हालांकि, था उचित समाधान प्रोटोकॉल पर निर्भर करता है। एक अच्छा प्रोटोकॉल डिज़ाइन खाते में ट्रांसमिशन त्रुटियों और ओवरफ्लो लेता है।

ध्यान दें कि आपको सूचित होने के लिए डीएमए स्थानान्तरण के अलावा प्राप्त-त्रुटि इंटरप्ट सक्षम करना होगा। हालांकि, यदि आप टाइमआउट (और एक पिंग-पोंग प्रोटोकॉल) का उपयोग करते हैं, तो आप झंडे को मिटा सकते हैं, क्योंकि डेटा स्पष्ट रूप से समय-समय पर नहीं आया था। यदि वास्तव में त्रुटि-इंटरप्ट का उपयोग करना भी दौड़-परिस्थितियों से अवगत हो।

संबंधित मुद्दे