سلام
قسمت ارتباط 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





دیدگاه