اطلاعیه

Collapse
No announcement yet.

مشکل با وقفه دریافت ارتباط سریال

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

    #16
    پاسخ : مشکل با وقفه دریافت ارتباط سریال

    دوستان عزیز این برنامه به طور کامل جواب داد و تست شد:
    دریافت اطلاعات توسط اینتراپت انجام میشود
    ارسال اطلاعات در حین اجرای برنامه انجام میشود

    کد:
    #include <meisam_sam7s64io.h>
    #include <meisam_delay.h>	  // chon dar lcd.c be tore dasti "meisam_delay.h" ra include karde am inja naabyed benevisim
    #include <meisam_micro_init.h>
    #include <lcd.h>
    #include <lcd.c>
    #include <stdio.h>
    
    int ttt=0;
    
    
    
    void meisam_usart_receive_interrupt (void) __irq
    {
    	int jj;
    	char c[16];	 
    	ttt=*AT91C_US1_RHR&0x1FF;	 // received charachter
    	PA2_ON;
    
    /////////////// MOHEM:  nabayad dar tabee vaghfe az tavabee delay dar estefade kard/
    ///////////////  neveshtane 3 khate zir eshkal ijad mikonad ////////////////////////
    	//lcd_gotoxy(0,0);																//
    	//sprintf(c,"meisam : %4d",jj);	  												//
    	//lcd_putsf(c);																	//
    //////////////////////////////////////////////////////////////////////////////////////
    
    
    	*AT91C_AIC_ICCR = 0xFFFFFFFF;(1 << AT91C_ID_US1); /* Interrupt Ack*/
    	*AT91C_AIC_EOICR = 0; /* End of Interrupt*/
    }
    
    
    
    
    
    
    
    
    int main()
    {
    char c[16];
    disable_watchdog();
    enable_external_reset();
    oscilators_init(1);	//0=32k internal  1=48M crystal(18432M)
    
    
    *AT91C_PMC_PCER=(1<<AT91C_ID_PIOA);	//enable I/O clock
    *AT91C_PMC_PCER=(1<<AT91C_ID_US1);	// enable USART1 clock
    
    *AT91C_PIOA_PDR=(1<<21|1<<22);		//  enable peripheral for PA22,PA21
    *AT91C_PIOA_MDER=(1<<21|1<<22);		//	 enable multi drive for PA22,PA21
    *AT91C_PIOA_ASR=(1<<21|1<<22);		//	 select mode A
    
    *AT91C_US1_CR=0xC;	//reset receiver & transmitter
    *AT91C_US1_MR=0x8D0;// 8 bit    no_parity    1 stopbit	 normal mode   MCK/8
    *AT91C_US1_BRGR=0x9C; //BAUD RATE = 2400 
    *AT91C_US1_CR=0x50;	 //enable send and receive
    
    
    AT91C_AIC_SVR[AT91C_ID_US1] = (unsigned long) meisam_usart_receive_interrupt;
    AT91C_AIC_SMR[AT91C_ID_US1] =0x62;		//AT91C_ID_PIOA=2	96=>proirity=0 falling edge sensitive
    *AT91C_AIC_ICCR =(1<<AT91C_ID_US1);
    *AT91C_US1_IER=0x1;
    *AT91C_AIC_IECR=(1<<AT91C_ID_US1);
    
    PA2_OUT;
    
    lcd_pininit(7,9,10,11,12,26,25,24,13,14); //(PA13->4lcd PA24->6lcd PA25->7lcd PA26->8lcd PA12->9lcd PA11->10lcd PA10->11lcd PA9->12lcd PA8->13lcd PA7->14lcd)
    lcd_init();
    lcd_clear();
    
    
    while(1)
    	{
    		delay(48000,1000);
    		if(PA2==1) PA2_OFF;
    		else PA2_ON;
    		lcd_gotoxy(0,0);
    		sprintf(c,"char:%4d   ",ttt);	 
    		lcd_putsf(c);
    		if(PIN23==0) 
    		{
    			while(*AT91C_US1_CSR&2!=2);	 // wait till usart gets ready for send
    			*AT91C_US1_THR=73;			 //	 send charachtere 73
    			lcd_gotoxy(0,0);	  
    			lcd_putsf("73 SENT!!");
    			delay(48000,2000);
    		}
    	}
    }

    دیدگاه


      #17
      پاسخ : مشکل با وقفه دریافت ارتباط سریال

      نوشته اصلی توسط حامد AT91
      4- توسط رجیستر AIC_ICCR وقفه مربوط به USART با توجه به PID آن USART را پاک نمایید.
      سلام
      ببخشید قضییه این بند چیه که باید اول واحد usart AIC رو غیر فعال کرد بعد دوباره فعالش کنیم

      دیدگاه

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