2014-04-15 8 views
7

एसटीएम 32 एफ 2 पर 115200 बॉड पर चल रहे दो यूएसएआरटी का उपयोग करके, एक रेडियो मॉड्यूल के साथ संवाद करने के लिए और पीसी से सीरियल के लिए एक। घड़ी की गति 120 मेगाहट्र्ज है।दो यूएसएआर इंटरप्ट्स के साथ त्रुटियों को ओवररन करें

यूएसएआरटीएस से डेटा प्राप्त करने के साथ-साथ एक यूएसएआरटी या दूसरे पर त्रुटियों को खत्म कर दिया जा सकता है। लिफाफे की गणना के कुछ त्वरित पीछे करना, दोनों को संसाधित करने के लिए पर्याप्त समय होना चाहिए, क्योंकि इंटरप्ट्स बाइट को गोलाकार बफर में कॉपी करते हैं।

दोनों सिद्धांतों और माप से बाधा को बाइट को धक्का देने के लिए बाधा कोड को 2-4μS के क्रम में चलाने के लिए 115200 बाउड पर चलाया जाना चाहिए, हमारे पास प्रत्येक चार को संसाधित करने के लिए लगभग 70us है।

हम एक या अन्य यूएसएआरटी पर मौलिक ओआरई क्यों देख रहे हैं?

अपडेट - अतिरिक्त जानकारी:

  1. हमारे कोड में कोई अन्य ISRs इस समय सक्रिय हो रहे हैं।
  2. हम प्रत्येक 10 एमएस को आग लगाने के लिए कॉन्स्टिक इंटरप्ट के साथ कील आरटीएक्स चला रहे हैं।
  3. हम इस समय किसी भी बाधा को अक्षम नहीं कर रहे हैं।
  4. इस पुस्तक (डिजाइनर की गाइड कॉर्टेक्स-एम प्रोसेसर परिवार के लिए) अंतरायन विलंबता 12cycles के आसपास है (वास्तव में घातक नहीं)

सब से ऊपर 70us को देखते हुए अनुसार समय के साथ 10 में से कम से कम एक कारक है हम इंटरप्ट को साफ़ करने के लिए लेते हैं - इसलिए मुझे यकीन नहीं है कि यह समझाने में इतना आसान है। क्या मुझे यह निष्कर्ष निकालना चाहिए कि मुझे कुछ और कारक दिखाना चाहिए जो मैं देख रहा हूं?

MDK-एआरएम संस्करण 4.70

systick बाधा RTOS द्वारा किया जाता है ऐसा नहीं समय यह अन्य ISRs बाइट प्रति चलाने के लिए 2-3μS ले सकता है।

+1

आपने किसी के लिए यह कहने के लिए पर्याप्त जानकारी प्रदान नहीं की है कि आप, विशेष रूप से, ओवररन्स क्यों प्राप्त कर रहे हैं। स्पष्ट उम्मीदवार: कहीं और बाधाओं को अक्षम करना? उच्च प्राथमिकता हस्तक्षेप हैंडलर बहुत धीमी है? अपने कोड में बग? पता लगाने के लिए पर्याप्त जानकारी नहीं है। – janm

+0

आईएसआर विलंबता उस चिप पर बहुत घातक है, यूएआरटी के पास फीफो बफर नहीं है। आपकी सैद्धांतिक गणना पहले से ही दो के कारक से बंद है। उच्च प्राथमिकता वाले इंटरप्ट्स जोड़ें जिनके आईएसआर बहुत अधिक समय लेते हैं या कोड में अक्षम होने में बाधा डालते हैं जिन्हें आप नहीं जानते हैं और एक ओवररन को समझाना आसान हो जाता है। –

+0

टिप्पणियों के लिए धन्यवाद मैंने प्रश्न में कुछ और जानकारी जोड़ दी है, मुझे यकीन नहीं है कि मैं कौन सी अन्य जानकारी प्रदान कर सकता हूं। –

उत्तर

1

मैं कुछ महीने पहले कॉर्टेक्स एम 4 (एसएएम 4 एस) पर एक जैसी समस्या में भाग गया था। मेरे पास एक ऐसा कार्य है जिसे टाइमर इंटरप्ट के आधार पर 100 हर्ट्ज पर बुलाया जाता है।

इस बीच में मैंने एक यूएआरटी को चार रिसेप्शन पर बाधित करने के लिए कॉन्फ़िगर किया था। यूएआरटी पर अपेक्षित डेटा 64 बाइट लंबे पैकेट थे और प्रत्येक चार कारण विलंबता में बाधा डालने जैसे कि मेरा 100 हर्ट्ज अपडेट फ़ंक्शन लगभग 20 हर्ट्ज पर चल रहा था। इस विशेष 120 मेगाहट्र्ज प्रोसेसर पर 100 हर्ट्ज अपेक्षाकृत धीमा है लेकिन हर चार पर बाधा उत्पन्न करने से भारी देरी हो रही है।

मैंने पीडीसी (पेरिफेरल डीएमए नियंत्रक) का उपयोग करने के लिए यूएआरटी को कॉन्फ़िगर करने का निर्णय लिया और मेरी समस्याएं तुरंत गायब हो गईं।

डीएमए यूएआरटी को प्रोसेसर में बाधा डालने तक स्मृति में डेटा स्टोर करने की अनुमति देता है जब तक कि बफर पूरी तरह से ओवरहेड को पूरा नहीं कर लेता है।

मेरे मामले में, मैंने पीडीसी को यूएआरटी डेटा को बफर (बाइट सरणी) में स्टोर करने के लिए कहा और लंबाई निर्दिष्ट की। जब पीएआरसी के माध्यम से यूएआरटी ने बफर भर दिया तो पीडीसी ने एक बाधा जारी की।

पीडीसी ISR में:

  1. पीडीसी नई खाली बफर
  2. पुनः प्रारंभ UART पीडीसी RINGBUFFER में (ताकि हम ISR में अन्य चीजें करते हैं, जबकि डेटा एकत्र कर सकते हैं)
  3. memcpy पूर्ण बफर
  4. बाहर निकलें दें आईएसआर

जैसा कि ऊपर स्वाइन की सिफारिश की गई है, डीएमए लागू करें और आपको जीवन पसंद आएगा।

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