اطلاعیه

Collapse
No announcement yet.

مشکل با IAR

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

    #16
    پاسخ : مشکل با IAR

    نوشته اصلی توسط aliila
    با سلام
    ایام به کام .
    نحوه سوال پرسیدن شما اشکال داره .
    شما همینجوری یک مشکلاتی میگی و یک حدس هایی میزنی و یک پیشنهاد هایی مدیدی البته همگی رو هوا .
    القصه . سریع ترین راه اینه که پروژه ای رو که شما باهاش مشکل داری پ کنی و بپرسی کسی میتونه ببینه مشکل این چیه ؟ یا مثلا چرا فلان خطا رو میده ؟ یا مثلا فلان تابع چرا تو فراخوانی تو در تو درست عمل نمیکنه ؟
    ممنون از پاسخ شما ..
    مشکلم رو بیان کردم کدهارو هم اضافه میکنم... :redface:

    main.c :
    کد:
    #include "ioat91sam7s64.h"
    
    //#include "delay.h" 
    int delay(unsigned int ms);
    #include "handleLCD.h"
    void main()
    {
    
     
     AT91C_BASE_CKGR->CKGR_MOR = (0x8<<8)|(0x1<<0);
      while(!(AT91C_BASE_PMC->PMC_SR & (0x1)));
    
    // AT91C_BASE_WDTC->WDTC_WDMR = 0x3FFF3258;
    // while(!(AT91C_BASE_WDTC->WDTC_WDMR & (0x3FFF312C)));
      AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
     AT91C_BASE_AIC->AIC_IDCR = 0xffffffff;
      
    
    
     AT91C_BASE_PMC->PMC_MCKR = 0x1;
      while(!(AT91C_BASE_PMC->PMC_SR & (0x8)));
      
     AT91C_BASE_PMC->PMC_SCER = 0x1;
      while(!(AT91C_BASE_PMC->PMC_SCSR & (0x1)));
      
     AT91C_BASE_PMC->PMC_PCER = (1<<2);
      while(!(AT91C_BASE_PMC->PMC_PCSR & (0x4)));
      
      handleLCD(); 
      lcdInit(); 
     // lcdInit();
      lcdClear();
     ///////////////////////////////
    ///////////////////////////////
     
      
      
       lcdGoToXY(2,1);
      while(1){
       // AT91C_BASE_WDTC->WDTC_WDCR = (0xA5000001);
       
      lcdWriteText("Ashkan");
    
      
      }
     
    }
    
    
    
    
    int delay(unsigned int ms){
     
     unsigned long int i,j;
     
     
     while(ms)
     {
     for (i=0;i<100;i++)
      for(j=0;j<25;j++);
     ms--;
     } 
      
      return 0; 
    }
    handleLCD.h :

    کد:
    /*
    edited by ashkan anousheh
    */
    #include "string.h"
    
    #ifndef handleLCD_h
    #define handleLCD_h
    
    #define _E 1
    #define _Rs 2
    #define _Rw 7
    #define _D4 3
    #define _D5 4
    #define _D6 5
    #define _D7 6
    
      int handleLCD();
      int lcdGoToXY(char x, char y);
      int lcdGoToAddr(char addr);
      int lcdInit();
      int lcdClear();
      int lcdWriteText(char *text);
      int clr_screen();
      int shift_screen(int s,int x);
      int sendCommand(char opCode);
      int sendCommand4Bit(char opCode);
    
    
    
    #endif
    
      
    
    int handleLCD()
    {
     AT91C_BASE_PMC->PMC_PCER = (1<<2);
     AT91C_BASE_PIOA->PIO_PER = (1<<_E)|(1<<_Rs)|(1<<_Rw)|(1<<_D4)|(1<<_D5)|(1<<_D6)|(1<<_D7);
     AT91C_BASE_PIOA->PIO_OER = (1<<_E)|(1<<_Rs)|(1<<_Rw)|(1<<_D4)|(1<<_D5)|(1<<_D6)|(1<<_D7);
     AT91C_BASE_PIOA->PIO_PPUDR = (1<<_E)|(1<<_Rs)|(1<<_Rw)|(1<<_D4)|(1<<_D5)|(1<<_D6)|(1<<_D7);
     AT91C_BASE_PIOA->PIO_OWER = (1<<_E)|(1<<_Rs)|(1<<_Rw)|(1<<_D4)|(1<<_D5)|(1<<_D6)|(1<<_D7);
     
    return 0;
    }
    
    int lcdGoToXY(char x, char y)
    {
     char addr=0;
     switch(x)
     {
       case 0: addr = 0x00; break; //Starting address of 1st line
       case 1: addr = 0x40; break; //Starting address of 2nd line
       case 2: addr = 0x14; break; //Starting address of 3rd line
       case 3: addr = 0x54; break; //Starting address of 4th line
       default: ; 
     }
     
     addr +=y;
     
     lcdGoToAddr(addr);
    return 0;
    }
    
    int lcdGoToAddr(char addr)
    {
      char cmd = 0x80 | addr;
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rs);
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rw);
      sendCommand4Bit(cmd);
    return 0;
    }
    
    int lcdInit()
    {
     //Set all the control pins to logic Zero
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rs);
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rw);
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_E);
     
     return 0;
     //Do the wake up call
     delay(40);
     sendCommand(0x30);
     delay(40);
     sendCommand(0x30);
     delay(40);
     sendCommand(0x30); 
     delay(40);
     sendCommand(0x20); //Let's make it 4 bit mode
     delay(40);
     //That's it LCD is initialized in 4 bit mode.
     
     
     sendCommand4Bit(0x28); //N = 1 (2 line display) F = 0 (5x8 characters)
     sendCommand4Bit(0x08); //Display on/off control D=0,C=0, B=0 
     sendCommand4Bit(0x01); //Clear Display
     sendCommand4Bit(0x06); //Entry mode set - I/D = 1 (increment cursor) & S = 0 (no shift) 
     sendCommand4Bit(0x0C); //Display on/off control. D = 1, C and B = 0. (Cursor and blink, last two bits) 
    
    }
    
    int lcdClear()
    {
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rs);
    
      sendCommand4Bit(0x01);
    return 0;
    }
    
     int lcdWriteText(char *text)
     {
        //char strTxt[] = *text;
        //int x = strlen(strTxt);
     	for(;*text<strlen(text);)
     	{
         	
    
            AT91C_BASE_PIOA->PIO_ODSR = (1<<_Rs);
     		sendCommand4Bit(*text++);
     	}
    return 0;
     }
    
    int lcdBusy()
    {
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rs);
    AT91C_BASE_PIOA->PIO_ODR = (1<<_D7);
    
     AT91C_BASE_PIOA->PIO_ODSR = (1<<_Rw);
     
     int busyFlag = 1;
     while(busyFlag == 1)
     {
      //The data should be read while Enable pin is HIGH
      AT91C_BASE_PIOA->PIO_ODSR = (1<<_E); 
          busyFlag = (AT91C_BASE_PIOA->PIO_PDSR & (0x40));
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_E);        
      
      //Clock out the lower part of data, since we are interested in only the 
      //upper part. more precissaley D7 pin.
      AT91C_BASE_PIOA->PIO_ODSR = (1<<_E);         
      AT91C_BASE_PIOA->PIO_ODSR = (0<<_E);         
     }
    AT91C_BASE_PIOA->PIO_OER = (1<<_D7);
     AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rw); 
    return 0;
    }
    
    int sendCommand(char opCode)
    { 
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x10)<<_D4);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x20)<<_D5);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x40)<<_D6);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x80)<<_D7); 
     // lcdBusy();
    delay(20);
    return 0;
    }
    
    int sendCommand4Bit(char opCode)
    {
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x10)<<_D4);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x20)<<_D5);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x40)<<_D6);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x80)<<_D7); 
    
     AT91C_BASE_PIOA->PIO_ODSR = (1<<_E);
    delay(1);
     AT91C_BASE_PIOA->PIO_ODSR = (0<<_E);
     
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x01)<<_D4);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x02)<<_D5);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x04)<<_D6);
       AT91C_BASE_PIOA->PIO_ODSR = ((opCode & 0x08)<<_D7);
    
     AT91C_BASE_PIOA->PIO_ODSR = (1<<_E);
    delay(1);
     AT91C_BASE_PIOA->PIO_ODSR = (0<<_E);
    delay(20);
    return 0;
    
    }
    
    int clr_screen()
    
    {
    lcdBusy();
     
       AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rs);
       AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rw);
       sendCommand4Bit(0x01);
     
    return 0;
    }
    
    int shift_screen(int s,int x)
    {
    
    lcdBusy();
       AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rs);
       AT91C_BASE_PIOA->PIO_ODSR = (0<<_Rw);
       if (s==0)
       {
        for(;x>0;x--)
        {
       sendCommand4Bit(0x18);
        }
       }
        if(s==1)
        {
         for(;x>0;x--)
        {
       sendCommand4Bit(0x1c);
        } 
        
        }
    return 0;
    }

    دیدگاه


      #17
      پاسخ : مشکل با IAR

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

      دیدگاه


        #18
        پاسخ : مشکل با IAR

        سلام دوستان.
        وقت همگی بخیر.
        من برنامه ی IAR رو از توی سی دی کتاب نص برداشتم ونصب کردم.حالا برنامه که می نویسم و COMPILE که میکنم این ارور ها رو میده.میشه یکی کمکم کنه؟؟
        main.cpp
        Fatal Error[Cp001]: Copy protection check, No valid license found for this product [20]
        Error while running C/C++ Compiler

        Done. 1 error(s), 0 warning(s)

        دیدگاه


          #19
          پاسخ : مشکل با IAR

          نوشته اصلی توسط neka2020
          سلام دوستان.
          وقت همگی بخیر.
          من برنامه ی IAR رو از توی سی دی کتاب نص برداشتم ونصب کردم.حالا برنامه که می نویسم و COMPILE که میکنم این ارور ها رو میده.میشه یکی کمکم کنه؟؟
          main.cpp
          Fatal Error[Cp001]: Copy protection check, No valid license found for this product [20]
          Error while running C/C++ Compiler

          Done. 1 error(s), 0 warning(s)
          خوب مشخصا که . میگه لایسنس نداری.

          http://downloadly.ir/software/engineering-specialized/iar-embedded-workbench-for-arm/
          تنها موردی که همه آدما یقین دارن خدا در حقش زیاد لطف کرده
          داشتن عقله زیادتر از دیگر آدم ها است

          دیدگاه


            #20
            پاسخ : مشکل با IAR

            سلام دوستان من تازه وارد دانشگاه برا ی رشته الکترونیک شدم.
            چند تا سوال از تون داشتم. برد دیسکاوری STM32F429I رو در مثال های ارایه شده IAR کدام یکی از انواع برد در عکس باید انتخاب بشه؟

            IAR-STM32F407ZG-SK
            IAR-STM32F429II-ACA
            IAR-STM32F429II-EXP
            IAR-STM32F429II-SK
            Options word programming
            STM32CubeF4 Embedded Software
            CMSIS and STM32F4xx stdperiph lib 1.2.0RC2
            سوال دوم کسی لینک آموزش برای برد دیسکاوری STM32F429I برای IAR سراغ داره؟

            با تشکر.

            دیدگاه

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