لا يمكن الكتابة إلى سجل SC1DRL على لوحة 68HC12-ما الذي أفتقده؟

StackOverflow https://stackoverflow.com/questions/4139999

  •  30-09-2019
  •  | 
  •  

سؤال

أحاول الكتابة لاستخدام الواجهة التسلسلية المتعددة على 68HC12 ولكني لا أستطيع أن أتحدث. أعتقد أنني عزلت المشكلة لعدم القدرة على الكتابة إلى سجل SC1DRL (سجل بيانات SCI منخفض).

ما يلي من بلدي الخيال العلمي:

else if (HWRegPtr->SCI.sc1sr1.bit.tdre) {
    /* Transmit the next byte in TX_Buffer. */
    if (TX_Buffer.in != TX_Buffer.out || TX_Buffer.full) {
        HWRegPtr->SCI.sc1drl.byte = TX_Buffer.buffer[TX_Buffer.out];
        TX_Buffer.out++;
        if (TX_Buffer.out >= SCI_Buffer_Size) {
            TX_Buffer.out = 0;
        }
        TX_Buffer.full = 0;
    }
    /* Disable the transmit interrupt if the buffer is empty. */
    if (TX_Buffer.in == TX_Buffer.out && !TX_Buffer.full) {
        Disable_SCI_TX();
    }
} 

TX_BUFFER.BUFFER لديه الشيء الصحيح في Index TX_BUFFER.OUT عندما تتم كتابة محتوياته إلى HWREGPTR-> SCI.SC1DRL.BYTE ، لكن تصحيح الأخطاء الخاص بي لا يظهر تغييرًا ، ولا يتم نقل أي بيانات عبر الواجهة التسلسلية.

أي شخص يعرف ما أفتقده؟

تعديل:

يتم تعريف Hwregptr على النحو التالي:

extern HARDWARE_REGISTER *HWRegPtr;

Hardware_register هي بنية عملاقة مع جميع السجلات الموجودة فيه ، وهي متقلبة.

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

المحلول

من المحتمل أن يكون SC1DRL سجلًا للكتابة فقط (تحقق من مستندات التسجيل الرسمية للتأكد-Google لا تضع PDF المناسب بالنسبة لي). هذا يعني أنه لا يمكنك قراءته مرة أخرى (حتى مع وجود مصحح أخطاء في الهدف) للتحقق من التعليمات البرمجية الخاصة بك.

كيف يتم تعريف HWREGPTR؟ هل لديها volatile في الأماكن المناسبة لضمان أن المترجم يعامل كل كتابة من خلال هذا المؤشر كشيء يجب أن يحدث على الفور؟

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