ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 17
  1. #1
    2013/03/07
    13
    0

    مشکل USB VCOM"CDC" با تایمر

    سلام
    قسمت ارتباط USB برنامه بدونه مشکل کار میکنه ، اما وقتی رجیستر های تنظیم تایمر به برنامه اضافه میکنم Hyperterminal دیگه نمیتوه port دستگاه باز کنه!
    مشکل از کجاست؟ لطفا کمک کنین.

    کد:
    //Besm Allah
    #include "LPC17xx.h"
    #include "lpc17xx_gpio.h"
    #include "cmsis_os.h"
    #include "rl_usb.h"
    #include "Driver_USART.h"
    
    extern ARM_DRIVER_USART Driver_USART1;
    
    #define BUF_SZ 128
    // UART -> USB
    uint8_t uart2usb_buf[BUF_SZ];
    volatile uint32_t uart2usb_in;
    volatile uint32_t uart2usb_out;
    // USB -> UART
    uint8_t usb2uart_buf[BUF_SZ];
    volatile bool uart_send_busy;
         bool bridge_ready = false;
    volatile bool uart_setup[2] = {false, false};
    
    void USART1_Callback (uint32_t event) {
    
     if ( event & ARM_USART_EVENT_SEND_COMPLETE) {
      uart_send_busy = false;
     }
     if ( event & ARM_USART_EVENT_RECEIVE_COMPLETE) {
      uart2usb_in += BUF_SZ;
      Driver_USART1.Receive(uart2usb_buf, BUF_SZ);
     }
    }
    
    //FunctionalState LEDStatus = ENABLE;
    
    
    void microinit(void);
    void Khamoosh(void);
    void Pulse(void);
    void EINT3_IRQHandler(void);
    void TIMER0_IRQHandler(void);
    void sRead(void);
    void sWrite(uint32_t wrcnt);
    void nemidunamUSB(void);
    
    
    void MicroInit(void){
    
    		USBD_Initialize  (0);        // USB Device 0 Initialization
    		USBD_Connect    (0);        // USB Device 0 Connect
    
    		//Wait until first USB Device is configured
    		while (USBD_Configured (0) == 0);
    
    		//GPIO_SetDir(2,(1<<0),1); //Dal
    		//GPIO_SetDir(2,(1<<1),1);	//Be
    		//GPIO_SetDir(2,(1<<2),1);	//He
    		//GPIO_SetDir(2,(1<<3),1);	//Jim
    
    		//GPIO_IntCmd(0,1<<3,1);	//Inthalsw rising edge init
    		//GPIO_IntCmd(0,1<<3,0);	//Inthalsw falling edge init
    		//NVIC_EnableIRQ(EINT3_IRQn);//enable Inthalsw 
      
    		//LPC_TIM0->TCR = 0x02;    // reset timer 
    		//LPC_TIM0->PR = 100;    
      //LPC_TIM0->MR0 = 240000;
      //LPC_TIM0->IR = 0xff;    // reset interrrupt
      //LPC_TIM0->MCR = 0x03; 
    		//NVIC_EnableIRQ(TIMER0_IRQn);
    		//LPC_TIM0->TCR = 0x01;    // start timer	
    	
    }
    void EINT3_IRQHandler(void)//Inthalsw
    {
    	if(GPIO_GetIntStatus(0, 3, 0)||GPIO_GetIntStatus(0, 3, 1))
    	{	
    /*	
    	if(LEDStatus){
    	LEDStatus = 0;
    	GPIO_ClearValue(2,(1<<1));//reset Be
    	}
    	else
    	{	
    	LEDStatus = 1;
    	GPIO_SetValue(2,(1<<1));//Set Be
     }	
    */	
          Freq = Frq;
          Frq = 0;
          Khamoosh();
          if(Shoro)
    							Takh = Ztakh;
    
    						GPIO_ClearInt(0,(1<<3));
    	}
    }
    void TIMER0_IRQHandler(void)
    {
      LPC_TIM0->IR = 0x01;    // reset all interrrupts 
    
         Pulser--;
         if(Pulser == 0)
    					 Khamoosh();
    
         Takh--;
         if(Takh == 0)
    					 Pulse();
    
         Frq++;
    }
    void nemidunamUSB(void){
    	 if (USBD_Configured (0)) {
       if (uart_setup[0]) {
        bridge_ready  = true;
        uart_setup[0] = false;
        uart_send_busy = false;
        uart2usb_in  = 0;
        uart2usb_out  = 0;
        Driver_USART1.Receive(uart2usb_buf, BUF_SZ);
    			}
    		}
    }			
    void sRead(void){
    	if (bridge_ready) {
    		if ((rdcnt = USBD_CDC_ACM_DataAvailable(0)) > 0) {
    			USBD_CDC_ACM_ReadData(0, eimbuf, rdcnt);
    		}
    	}
    }	
    void sWrite(uint32_t wrcnt){
    	USBD_CDC_ACM_WriteData (0,(const uint8_t*)&eimbuf,wrcnt);
    }
    void Pulse(void){
    	Pulser = Zpulse;
    	Halprob = GPIO_ReadValue(1);
    	Halprob = Halprob & 1;
    	Halprob = Halprob >> 0;
    	if(Halprob == 0){
    	GPIO_SetValue(2,(1<<0));//set Dal
    	GPIO_SetValue(2,(1<<3));//set Jim
    	GPIO_ClearValue(2,(1<<1));//reset Be
    	GPIO_ClearValue(2,(1<<2));//reset He
    	}
    	else
    	{	
    	GPIO_SetValue(2,(1<<1));//Set Be
    	GPIO_SetValue(2,(1<<2));//Set He
    	GPIO_ClearValue(2,(1<<0));//Reset Dal
    	GPIO_ClearValue(2,(1<<3));//Reset Jim
    }	
    }	
    void Khamoosh(void){
    	GPIO_ClearValue(2,(1<<0));//Dal
    	GPIO_ClearValue(2,(1<<1));//Be
    	GPIO_ClearValue(2,(1<<2));//He
    	GPIO_ClearValue(2,(1<<3));//Jim
    }	
    int main(void)
    {
    		MicroInit();
    		Khamoosh();
    		while(1){
    			nemidunamUSB();
    			sRead();
    			sWrite(rdcnt);
    			Pulse();
    		}
    	
     // return 0;
    }
    اگر مثلا این خط اضافه کنم دیگه پرت نمیشناسه:
    کد:
     LPC_TIM0->IR = 0xff;    // reset interrrupt
  2. #2
    2010/06/05
    237
    18

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    سلام،
    دوتا چیز رو تست کنید :
    1
    دستور زیر رو در بعد از فعال سازی وقفه تایمر اضافه کنید:
    کد:
    NVIC_SetPriority(TIMER0_IRQn,9);
    2
    زمان روی دادن وقفه تایمر رو کمتر و بیشتر کنید!
    هر انسانی که احساس بی نیازی کند سرکش و طغیان گر می شود...
  3. #3
    2013/03/07
    13
    0

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    نقل قول نوشته اصلی توسط حمید لطفعلی زاده
    سلام،
    دوتا چیز رو تست کنید :
    1
    دستور زیر رو در بعد از فعال سازی وقفه تایمر اضافه کنید:
    کد:
    NVIC_SetPriority(TIMER0_IRQn,9);
    2
    زمان روی دادن وقفه تایمر رو کمتر و بیشتر کنید!
    تست کردم، حتی برای اینتراپت USB هم این دستور قرار دادم اما درست نشده :(
    بدجوری تو آمپاس گذاشتتم...
  4. #4
    2013/03/07
    13
    0

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    اینم فایل پروژه با keil نوشتم و روی هدر برد lpc1768 کار میکنه. کمک کنین ممنون میشم.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  5. #5
    2013/03/07
    13
    0

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    کسی با تایمر و USB همزمان با هم کار کرده کمک کنه؟
  6. #6
    2011/05/02
    22
    1

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    شما برنامه رو debug کنید ببینید برنامه کجا گیر می کنه و گیرش از کجا شروع می شه، بعد خبرش رو بدید.
    در نظر داشته باشید که اون اولویت ها برای وقوع وقفه هم همینطوری عشقی نباید بدید ، اولویت های USB باید بالاترین باشن و بعدی هم کمتر ، الویت برابر به 2 تا irq_handler مجزا نباید بدید.
    It is what it is

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  7. #7
    2010/06/05
    237
    18

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    دیباگ که دوستمون گفتن کار درستیه انجام بدین،
    چیزه دیگه ای هم که می تونید تست کنید اینه که از یک تایمر دیگه استفاده کنید ببینید باز هم همین مشکل پا برجاست!
    هر انسانی که احساس بی نیازی کند سرکش و طغیان گر می شود...
  8. #8
    2013/03/07
    13
    0

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    2 تا بیشتر اینتراپت ندارم ، به تایمر اولویت پایین دادم همین مشکل بازم بود، کلا قبل از اینا حتی اگر یک دستور نه کل مراحل تایمر ، یک دستور مثل LPC_TIM0->IR = 0xff به برنامه اضافه کنم این مشکل پیش میاد.
    برای دیباگ سخت افزاری هنوز امکانات ندارم و برای این پروژه هم خیلی عجله دارم :(
    با تایمرهای دیگه هم امتحان کردم همین مشکل هست .
  9. #9
    2011/05/02
    22
    1

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    بدون دیباگر واقعا نمی شه توابع مربوط به هسته میکرو رو ایجاد و توسعه داد.
    دیباگر رو حتما تهیه کنید.

    بالای تابع main این رو بنویسید.

    [code=c]
    void HardFault_Handler(void)
    {
    LPC_GPIO2->FIOSET = 1<<0;
    while(1);
    }

    int main()
    {
    .
    .
    .
    LPC_GPIO2->FIODIR = 1<<0;
    .
    .
    .
    while(1)
    {
    .
    .
    .
    }
    }
    [/code]

    با این کد می تونی چک کنی که خطای hard fault رخ داده یا نه !
    اگر این خطا رخ بده پایه ی 0 از پورت 2 high می شه که اگر led بهش متصل باشه روشن می شه و اینجوری می تونی بفهمی خطای hard fault رخ داده یا نه ...

    از اونجایی که دیباگر نداری ، بعد از این با led باید خطوط برنامه ات رو چک کنی ... ، کار سختیه ، اما شدنیه ...

    موفق باشی.
    It is what it is

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  10. #10
    2012/10/06
    تهران خيابان دکتر شريعتي
    48
    2

    پاسخ : مشکل USB VCOM"CDC" با تایمر

    سلام،
    1- اولویت وقفه تایمر رو از پیش فرض تغییر ندهید !
    2- در زمان شروع کار با usb وقفه رو غیر فعال کنید !
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 17

موضوعات مشابه

  1. ساخت "KV"کیلو ولت متر برای مدارات "های ولتاژ" +تصویر
    توسط seeto در انجمن ترانسفورماتورها و ماشين هاي الکتريکي
    پاسخ: 17
    آخرين نوشته: 2019/01/29, 21:13
  2. تفاوت یا تعریف "switching frequency" و "response time" چیست ؟
    توسط majidshahrouzi در انجمن الكترونيك صنعتی
    پاسخ: 5
    آخرين نوشته: 2015/02/01, 09:53
  3. پاسخ: 4
    آخرين نوشته: 2015/01/28, 10:41
  4. پاسخ: 3
    آخرين نوشته: 2014/08/15, 20:21
  5. پاسخ: 4
    آخرين نوشته: 2013/07/10, 11:15

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •