اطلاعیه

Collapse
No announcement yet.

مشکل کد UART0

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

    مشکل کد UART0

    سلام.دوستان به نظرتون مشکل کد زیر چیه؟تو شبیه سازی خط TX اولش مقدار 1 رو میگیره و سریع 0 میشه.والبته داده ای هم ارسال نمیشه.ممنون

    کد:
    #include <lpc17xx.h>
    
    char getch(){
    	return (LPC_UART0->RBR & 0x000000FF);
    }
    void putch(char _ch){
    	LPC_UART0->THR=_ch;
    }
    
    int main(){
    	SystemInit();
    	LPC_GPIO0->FIODIR |=4;					//output P0.2
    	LPC_PINCON->PINSEL0=0x00000010;	//select Tx pin
    	LPC_PINCON->PINMODE0 |=0x20;		//No pull-up or pull-down on P0.2
    	LPC_SC->PCLKSEL0 |=0x00000040;	//select clock of UART0 (PCLK)
    	
    	LPC_SC->PCONP |=0x00000008;			//turn on UART0
    
    	LPC_UART0->LCR=0x83;						//8-bit data,no parity,1 stop bit
    	LPC_UART0->DLL=0x25;						//Baudrate
    	LPC_UART0->DLM=0;								//Baudrate
    	LPC_UART0->FDR=0x9A;						//Baudrate
    	LPC_UART0->TER=0x80;						//enable Tx
    	LPC_UART0->FCR=0x07;						//FIFO enable
    	LPC_UART0->LCR=0x03;
    	
    	putch('s');
    	while(1){
    		
    	}
    }

    #2
    پاسخ : مشکل کد UART0

    با سلام

    از توابع CMSIS استفاده کنید که خیلی راحت تر و کاربردیه و سمپل هم زیاد داره .

    موفق باشید.

    دیدگاه


      #3
      پاسخ : مشکل کد UART0

      این کتابخونه های آماده درسته خیلی کاربردی هستن اما با روحیه ی من سازگار نیستن متاسفانه. ترجیح میدم از پایه یاد بگیرم.ممنون

      دیدگاه


        #4
        پاسخ : مشکل کد UART0

        نوشته اصلی توسط vishy71
        سلام.دوستان به نظرتون مشکل کد زیر چیه؟تو شبیه سازی خط TX اولش مقدار 1 رو میگیره و سریع 0 میشه.والبته داده ای هم ارسال نمیشه.ممنون

        کد:
        #include <lpc17xx.h>
        
        char getch(){
        	return (LPC_UART0->RBR & 0x000000FF);
        }
        void putch(char _ch){
        	LPC_UART0->THR=_ch;
        }
        
        int main(){
        	SystemInit();
        	LPC_GPIO0->FIODIR |=4;					//output P0.2
        	LPC_PINCON->PINSEL0=0x00000010;	//select Tx pin
        	LPC_PINCON->PINMODE0 |=0x20;		//No pull-up or pull-down on P0.2
        	LPC_SC->PCLKSEL0 |=0x00000040;	//select clock of UART0 (PCLK)
        	
        	LPC_SC->PCONP |=0x00000008;			//turn on UART0
        
        	LPC_UART0->LCR=0x83;						//8-bit data,no parity,1 stop bit
        	LPC_UART0->DLL=0x25;						//Baudrate
        	LPC_UART0->DLM=0;								//Baudrate
        	LPC_UART0->FDR=0x9A;						//Baudrate
        	LPC_UART0->TER=0x80;						//enable Tx
        	LPC_UART0->FCR=0x07;						//FIFO enable
        	LPC_UART0->LCR=0x03;
        	
        	putch('s');
        	while(1){
        		
        	}
        }
        توی AVR وقفه باعث میشه دریافت با مشکل روبرو بشه. اونجا قبل از getch وقفه رو از کار میندازن و بعدش دوباره فعال میکنن.
        ARM نمی دونم چجوریه ..
        If the wind will not serve, take to the oars

        دیدگاه


          #5
          پاسخ : مشکل کد UART0

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

          در آخر اینم بگم که تو PIC و ARM هم همینطوره. باید بعدش پرچم رو پاک کرد.

          دیدگاه

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