سؤال

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

لقد حاولت تتبع لتعطيل/تمكين إرسال:

if(false == clearToSend()) {
  USART_TxdInterruptLevel_Set(data->usart, USART_TXCINTLVL_OFF_gc);
  while(false == clearToSend()) {}
  USART_TxdInterruptLevel_Set(data->usart, USART_TXCINTLVL_LO_gc);
}

للأسف يبدو أن تعطيل إرسال بشكل دائم.أي أفكار ؟

مع أطيب التحيات فريدريك

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

المحلول

بمجرد إرسال BITTING BIT إلى السلك ، يتعين عليك إرسال بقية البتات بما في ذلك بت التوقف وإلا فسوف تفسد البيانات. لا يمكن التوقف عن إرسال البيانات على الفور عندما يتم إلغاء تنشيط CTS ، وهي ممارسة شائعة للسماح ببعض الإضافية بايت قبل إيقاف الإرسال.

لا تحتوي سلسلة XMEGA على أي USART FIFO عميق ، فقط سجل تحويل الإرسال وسجل الإرسال ، لذلك إذا توقف الكود الخاص بك عن الكتابة إلى USART بمجرد إلغاء تنشيط CTS ، فيجب أن تكون على ما يرام.

نصائح أخرى

كان عندي نفس المشكلة الموضحة ، وإن atxmega128a1.أنا نفذت هذا فقط USART الارسال عن طريق استخدام DMA نقل ورصد RTS دبوس من حلقة رئيسية.أنا أعرف أن لدي 32 بايت اليسار في FIFO من USART<->واجهة USB عندما RTS دبوس يؤكد.

عندما دبوس يؤكد تغيير DMA الزناد المصدر (DMA.CH0.TRIGSRC) من DMA_CH_TRIGSRC_USARTC0_DRE_gc إلى DMA_CH_TRIGSRC_OFF_gc.هذه الطريقة DMA لم يعد تشغيل و توقف الإرسال.عندما RTS دبوس يحصل انخفاض مرة أخرى تغيير الزناد المصدر إلى DMA_CH_TRIGSRC_USARTC0_DRE_gc.

يتطلب هذا الأسلوب شملهم الاستطلاع رصد RTS خط استخدام DMA USART التحويلات.أنا باستخدام هذا مع فتدي FT232H التوالي في 2MHz baudrate.

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