سلام
قسمت ارتباط USB برنامه بدونه مشکل کار میکنه ، اما وقتی رجیستر های تنظیم تایمر به برنامه اضافه میکنم Hyperterminal دیگه نمیتوه port دستگاه باز کنه!
مشکل از کجاست؟ لطفا کمک کنین.
اگر مثلا این خط اضافه کنم دیگه پرت نمیشناسه:
قسمت ارتباط 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
دیدگاه