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