typedef void (*FNC)(); //function ptr
-
/***********************************************************************
* global variables
***********************************************************************/
-
+volatile uint32_t cnt;
usb_device_t usb_device;
int chipnr,bd;
int i,size,m=0;
+ cnt=0;
+
CANMSG("Starting USBCAN module firmware...\n");
-
// volatile int i=0;
bootloader_run=0;
sys_err();
}
-// !!! DEBUG - first version, only transmitting CAN messages withnout usage of queue system from LinCAN
-
- // CAN
- CAN_init(1000000);
- // CAN end
+// !!! DEBUG - transmitting and receiving CAN messages with usage of queue system from LinCAN - first version!
-/*
//***********************************************************************
// * CAN device initialization - device side (adapted from LinCAN setup.c)
// DEBUG
//can_init(); // only for successful compiling (defined in can_lpcbusemu.c)
-
-
DEBUGMSG("Initiating CAN device initialization\n");
}
memset(candev->hwspecops, 0, sizeof(struct hwspecops_t));
+
+
// DEBUG
//ul_usb1_register(candev->hwspecops); // only for successful compiling (defined in ul_usb1.c)
+ // register for another board
+ can_lmc1_register(candev->hwspecops);
+
bd=baudrate[0];
CANMSG("HW data could not be initialized\n");
sys_err();
}
+
// Alocate and initialize the chip structures
for (chipnr=0; chipnr < candev->nr_all_chips; chipnr++) {
// if(chipnr<irqnum)
sys_err();
}
}
+
+
+
for (chipnr=0; chipnr < candev->nr_all_chips; chipnr++) {
struct canchip_t *chip=candev->chip[chipnr];
int objnr;
if(m>=0) m++;
}
}
+
+
if (candev->hwspecops->request_io(candev))
sys_err();
candev->flags|=CANDEV_IO_RESERVED;
+
+
if (candev->hwspecops->reset(candev))
sys_err();
+
+
for(chipnr=0; chipnr<candev->nr_all_chips; chipnr++) {
if((chip=candev->chip[chipnr])==NULL)
continue;
// * CAN device initialization - client side (adapted from LinCAN open.c)
// ***********************************************************************
+
chip=candev->chip[0];
obj=chip->msgobj[0];
atomic_inc(&obj->obj_used);
} // End of chip configuration
+
canuser = (struct canuser_t *)malloc(sizeof(struct canuser_t));
if(canuser == NULL) sys_err();
canuser->flags=0;
canque_edge_decref(canuser->rx_edge0);
canque_edge_decref(edge);
-*/
+
/***********************************************************************
* USB Init
// if (!(IO0PIN&P0_SJA1000_INT_PIN)) //INT PIN is inverted
// chip->chipspecops->irq_handler(0,chip);
+// if (CAN1SR & CAN_SR_RBS)
+// chip->chipspecops->irq_handler(0,chip);
+
+
if (usb_device.ep_events & MASK_EP1RX) { //EP1RX - data waiting to receive
- // DEBUG - unused queue system (yet)
- //if (canque_get_inslot(qends, &qedge, &slot, 0)>=0){ //Free slot obtained
+ if (canque_get_inslot(qends, &qedge, &slot, 0)>=0){ //Free slot obtained
size=usb_udev_read_endpoint(&eps[0],ep1_rx_buff,16);
if (size==16){
/* Automatic selection of extended format if ID>2047 */
if (canmsg.id & ~0x7ffl & MSG_ID_MASK ) canmsg.flags |= MSG_EXT;
/* has been dependent on "extended" option */
-
- // DEBUG - unused queue system (yet)
- //slot->msg=canmsg;
- //canque_put_inslot(qends, qedge, slot);
- CAN_send(&canmsg);
+
+ slot->msg=canmsg;
+ canque_put_inslot(qends, qedge, slot);
+ //CAN_send(&canmsg);
}
-
- // DEBUG - unused queue system (yet)
- //else
- // canque_abort_inslot(qends,qedge,slot);
+ else
+ canque_abort_inslot(qends,qedge,slot);
+
timer_rx_off=50; //rosviceni diody pri prijmu
CLR_OUT_PIN(LED_PORT,LED2_BIT);
usb_device.ep_events &= ~MASK_EP1RX;
- // DEBUG
- //}
-
+
+ }
+
/* if (size==2){
uint8_t val;
}*/
}
- // DEBUG - only transmitting CAN messages, no reading (yet)
- /*
+
if(usb_device.ep_events & MASK_EP1TX){ //EP1TX - data transmitted
if(canque_test_outslot(qends, &qedge, &slot)>=0){
DEBUGMSG("CAN message ready to send over usb\n");
}
usb_udev_write_endpoint(&eps[1],ep1_tx_buff,16);
+ //printf("ID: %d\n", msgid);
+
canque_free_outslot(qends, qedge, slot);
timer_tx_off=50; //rozsviceni diod pri vysilani
CLR_OUT_PIN(LED_PORT,LED1_BIT);
usb_device.ep_events &= ~MASK_EP1TX;
+
}
+
}
- */
+
//if (usb_can_send && )