NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3165 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 14 از 14

موضوع: مشکل تایمر با usb cdc

  1. #1
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    12
    تشکر شده 2 بار در 2 پست

    پیش فرض مشکل تایمر با usb 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


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

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    سلام
    در برنامه rl احتمالا داره از تایمر استفاده می کنه . برای همین به این شکل شما دیگه نمی تونید از آن استفاده کنید

  4. تشکرها از این نوشته :


  5. #3
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    12
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    سلام
    در برنامه rl احتمالا داره از تایمر استفاده می کنه . برای همین به این شکل شما دیگه نمی تونید از آن استفاده کنید
    یعنی نمیشه همزمان هم تایمر استفاده کرد هم usb ؟
    باید چیکار کنم؟؟؟

  6. #4
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    مگه برید در تنظیماتش و ببینید میشه به جای استفاده از تایمر از چیز دیگه ای مثل تیک سیستم استفاده کنه

  7. تشکرها از این نوشته :


  8. #5
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    12
    تشکر شده 2 بار در 2 پست

    پیش فرض

    آقا من بدجوری توش رفتم ، هنوز تو آمپاسم ، ممکنه دقیق تر کمک کنین، من نتونستم فعلا و بد جوری لنگ اینم.

  9. #6
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    تست کردید هر 4 تا تایمر کار نمی کنه؟
    چند تا تایمر نیاز دارید؟
    از تایمر چه استفاده ای می کنید؟ می تونید اگر کار ساده ای دارید از سیستم تیک یا تایمرrit استفاده کنید

  10. تشکرها از این نوشته :


  11. #7
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    12
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    تست کردید هر 4 تا تایمر کار نمی کنه؟
    چند تا تایمر نیاز دارید؟
    از تایمر چه استفاده ای می کنید؟ می تونید اگر کار ساده ای دارید از سیستم تیک یا تایمرrit استفاده کنید
    با هر 4 تا امتحان کردم ، مشکل داره، حتی اگر یک دستور نه کل مراحل تایمر ، یک دستور مثل LPC_TIM0->IR = 0xff به برنامه اضافه کنم این مشکل پیش میاد.

    یه تایمر فقط نیاز دارم اما مشکل اینجاست که تایمرم باید هر 1 میکرو ثانیه یک پینو تایگل کنه و چند تا کاره دیگه که داخل اینتراپت انجام میشه، rit زیر میلی ثانیه جواب نمیده .

  12. #8

  13. تشکرها از این نوشته :


  14. #9
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    12
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    مطمئنید این تاگل شدن و چند تا کار دیگه در کمتر از 1 میکرو ثانیه انجام میشه !؟
    تا 1.2 میکرو ثانیه تونستم تایگل کنم که برای ادامه کار به ارتباط با usb نیاز داشتم و این مشکل مانع ادامه کارم شد.

  15. #10
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    چطور میگید :
    rit زیر میلی ثانیه جواب نمیده .
    چه فرقی می کنه!؟ مثل تایمر که یک رجیستر مقایسه داره اینم یک رجیستر
    RICOMPVAL داره . شمارنده RICOUNTER هم تا رسید بهش وقفه میده. کلاکشم میشه 1/4 و 1/2 و 1 گذاشت

  16. تشکرها از این نوشته :


  17. #11
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    12
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    چطور میگید :
    rit زیر میلی ثانیه جواب نمیده .
    چه فرقی می کنه!؟ مثل تایمر که یک رجیستر مقایسه داره اینم یک رجیستر
    ricompval داره . شمارنده ricounter هم تا رسید بهش وقفه میده. کلاکشم میشه 1/4 و 1/2 و 1 گذاشت
    من اشتباه کردم جواب میده ، الان دارم تست میکنم ببینم با usb مشکل پیدا میکنه یا نه.


    -----
    تست کردم با RIT کار کرد... ممنون از کمکت کلی کارم راه افتاد.
    ویرایش توسط khosmar2 : 26-08-2015 در ساعت 19:24

  18. #12
    کاربر علاقه مند
    تاریخ عضویت
    Aug 2015
    نوشته ها
    85
    تشکر
    7
    تشکر شده 4 بار در 3 پست

    پیش فرض

    دوست عزیز میشه این مدار مبدل سریال به usb رو برامون بزاری با فایل سورسش ازت ممنون میشم اگه براری.

    Sent from my D6502 using Tapatalk

  19. #13
    عضو جدید
    تاریخ عضویت
    Apr 2013
    نوشته ها
    11
    تشکر
    12
    تشکر شده 2 بار در 2 پست

    پیش فرض

    مداری نداره من از هدر برد LPC1768 دارم استفاده میکنم .
    شماتیک و اطلاعاتش اینجاست: LPC1768 Cortex-M3 Header Board

  20. #14
    کاربر علاقه مند
    تاریخ عضویت
    Aug 2015
    نوشته ها
    85
    تشکر
    7
    تشکر شده 4 بار در 3 پست

    پیش فرض

    چرا انقدر قیمتش بالاس؟

    Sent from my D6502 using Tapatalk

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

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