اطلاعیه

Collapse
No announcement yet.

USART

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #46
    پاسخ : USART

    مشکل من از کد نویسیم بود
    ربطی به میکرو نداشت

    دیدگاه


      #47
      پاسخ : پاسخ : USART

      نوشته اصلی توسط علی ایمانی فر
      بله درسته
      این دستور کاملا مثله scanf هست منتهی space و tab رو به عنوان انتهای رشته نمیشناسه در واقع من این تابع رو برای sim900 نوشتم چون خیلی جاها توی پاسخهای ارسالیش space داره و scanf پاسخ رو نصفه در یافت میکنه و باید دوباره یا بیشتر ازش استفاده کنیم
      من یه برنامه برای قسمت وقفه پورت USART نوشته بودم میگردم پیداش میکنم براتون میزارم :job:
      دستتون درد نکنه،من منتظرم :biggrin:

      دیدگاه


        #48
        پاسخ : پاسخ : USART

        نوشته اصلی توسط gizmo89
        دستتون درد نکنه،من منتظرم :biggrin:
        اینم از کدی که من نوشتم

        کد:
        void US0_irq_handler(void) __irq 
        {
        	AT91F_US_DisableIt(AT91C_BASE_US0,0x0000FFFF);
        	getstr(buf);	//Reading data from USART
        	
        	// Do any thing else
        		
        	
        	AT91F_US_ResetRx(AT91C_BASE_US0);
        	AT91F_US_EnableIt(AT91C_BASE_US0,0x00000001);
        	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
        	//* get Usart status register
        	
        }
        
        
        int main(void)
        {
        //init_serial();
        USART(18432000,9600,9600);
        usart0_init();
        
        // USART Interrupt
        AT91F_US_ResetRx(AT91C_BASE_US0);
        AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_US0,5,AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE,US0_irq_handler);
        AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_US0);
        AT91F_US_EnableIt(AT91C_BASE_US0,0x00000001);	
        
        
        
        while(1)
        {
        }
        
        }
        هر وقت داده ای بیاد روی پورت سریال وارد روتین وقفه میشه و شما باید اول وقفه رو غیر فعال کنی (که من اول روتین وقفه کردم) بعد داده ها رو بخونی (با getstr خوندم)
        در طول برنامه هر جا نیازی به وقفه نداشتی میتونی با کد زیر غیر فعالش کنی
        کد:
        AT91F_US_DisableIt(AT91C_BASE_US0,0x0000FFFF);
        و هر جا مجددا میخاستی فعالش کنی از این کد استفاده کن
        کد:
        AT91F_US_ResetRx(AT91C_BASE_US0);
        AT91F_US_EnableIt(AT91C_BASE_US0,0x00000001);
        ایشالا که به کارت بیاد :job:
        زندگی یعنی امید و حرکت
        کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
        سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
        برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
        به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

        دیدگاه


          #49
          پاسخ : USART

          درباره طریقه ساخت بافرش هم میشه یه توضیحی بدین.من اینور و اونور خوندم مثل اینکه باید بافر حلقوی تعریف کرد.

          دیدگاه


            #50
            پاسخ : USART

            نوشته اصلی توسط gizmo89
            درباره طریقه ساخت بافرش هم میشه یه توضیحی بدین.من اینور و اونور خوندم مثل اینکه باید بافر حلقوی تعریف کرد.
            اگه منظورت بافری هست که اطلاعات درونش ذخیره بشه و از بین نره باید بگم که من تاحالا استفاده نکردم :sad: و همیشه جوری برنامه نوشتم که تا دیتا اومده سریع خوندمش.
            شرمنده :sad:
            زندگی یعنی امید و حرکت
            کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
            سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
            برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
            به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

            دیدگاه


              #51
              پاسخ : پاسخ : USART

              نوشته اصلی توسط علی ایمانی فر
              اگه منظورت بافری هست که اطلاعات درونش ذخیره بشه و از بین نره باید بگم که من تاحالا استفاده نکردم :sad: و همیشه جوری برنامه نوشتم که تا دیتا اومده سریع خوندمش.
              شرمنده :sad:
              خواهش میکنم.شما تا همین جا هم بی دریغ کمک کردید.ممنون

              دیدگاه


                #52
                پاسخ : USART

                با کدی که من نوشتم می تونی بافرش کنی

                دیدگاه


                  #53
                  پاسخ : USART

                  بافر حلقوی رو خودم از تو جزوه ساختمان داده م که زیر خروارها آوار بود پیدا کردم.اینطوری تعریف میشه.
                  کد:
                  unsigned char buffer[16] ;
                  int front=0,rear=0;
                  void buffer_in(unsigned char x)
                  {
                    
                    if(front == (rear+1)%16)
                    {
                     rear = front;
                    
                    }
                    else
                    {
                     buffer[rear] = x;
                     rear = (rear+1)%16;
                    }
                  }
                  امتحانش هم کردم.کاراکتر ها رو دونه دونه وارد حلقه میکنه و وقتی داشت سرریز میشد،می ره روی قدیمی ترین کاراکتر می نویسه.
                  در آخر توی بافر یه آرایه از کاراکتر ها داریم.گمان کنم باید یه متد برای وارد کردن رشته بنویسم که از این متد buf_in برای تشکیل رشته استفاده کنه.

                  دیدگاه


                    #54
                    پاسخ : USART

                    خوبه دیگه
                    شما روال وقفه رو فعال میکنی تا داده ای روی Rx پورت سریال بیاد وارد وقفه میشه و میتونی بخونی داده رو و بریزیش توی بافر حلقویت
                    زندگی یعنی امید و حرکت
                    کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                    سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                    برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                    به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                    دیدگاه


                      #55
                      پاسخ : USART

                      سلام،
                      برای دریافت داده از پورت سریال تو وقفه هم باید رجیستر وضیت رو خوند؟
                      سوال دیگه م هم همینه که تو پست سوالی در خصوص usart مطرح کرده بودم:
                      شرمنده که بنده باز هم میون بحث وارد میشم و مبحث جدیدی مطرح میکنم.
                      آقای ایمانی فر شما نمونه برنامه c دارین که توش رشته ای که از طریق usart توسط میکرو دریافت میشه، در داخل میکرو به عنوان یک command که پارامتر های عددی هم داره پردازش بشه ؟ می خوام کاربر بتونه با میکرو ارتباط برقرار کنه. یا راهنمایی میتونین در این زمینه بهم بکنین.
                      ضمنا صندوق پیامتون هم پر شده ها

                      دیدگاه

                      لطفا صبر کنید...