//#include "./can/ul_usb1.h"
-//#include "./can/setup.h"
+#include "./can/setup.h"
#include "./usb/usb_defs.h"
#include "./usb/usb_vend.h"
-// DEBUG CAN
-#include "can/lpc17xx_can.h"
-// DEBUG CAN - end
+extern int can_lmc1_register(struct hwspecops_t *hwspecops);
+extern int ul_usb1_register(struct hwspecops_t *hwspecops);
#define MASK_EP1RX 0x01
#define MASK_EP1TX 0x02
* global variables
***********************************************************************/
-
usb_device_t usb_device;
usb_ep_t eps[NUM_ENDPOINTS];
}
}
-/***********************************************************************
- * Microsecond delay routine
- ***********************************************************************/
-/*
-void udelay(long time)
-{
- volatile long ticks=(time * CCLK) / 2000000;
- do{
- ticks--;
- } while(ticks>0);
-}
-*/
-
/***********************************************************************
* Routine for visible LED blinking (on USB transmission)
***********************************************************************/
int i,size,m=0;
CANMSG("Starting USBCAN module firmware...\n");
-
// volatile int i=0;
bootloader_run=0;
sys_err();
}
-// !!! DEBUG - first version, only transmitting CAN messages with usage of queue system from LinCAN
-
- //***********************************************************************
+ // ***********************************************************************
// * 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");
baudrate[0]=1000;
- // DEBUG
- //ul_usb1_register(candev->hwspecops); // only for successful compiling (defined in ul_usb1.c)
- // register for another board
+#ifdef CONFIG_OC_LINCAN_CARD_ul_usb1
+ ul_usb1_register(candev->hwspecops);
+#endif
+#ifdef CONFIG_OC_LINCAN_CARD_can_lmc1
can_lmc1_register(candev->hwspecops);
-
-
+#endif
bd=baudrate[0];
if (candev->hwspecops->init_hw_data(candev)){
}
- if (candev->hwspecops->request_io(candev))
+ if (candev->hwspecops->request_io(candev)) {
+ CANMSG("Error to request IO\n");
sys_err();
+ }
candev->flags|=CANDEV_IO_RESERVED;
- if (candev->hwspecops->reset(candev))
+ if (candev->hwspecops->reset(candev)) {
+ CANMSG("Error to reset chip\n");
sys_err();
+ }
for(chipnr=0; chipnr<candev->nr_all_chips; chipnr++) {
chip->flags |= CHIP_ATTACHED;
-// Interrupts from chip are served in main cycle
-// if(can_chip_setup_irq(chip)<0) {
-// CANMSG("Error to setup chip IRQ\n");
-// sys_err();
-// }
+ // used with lpc17xx:
+ if(can_chip_setup_irq(chip)<0) {
+ CANMSG("Error to setup chip IRQ\n");
+ sys_err();
+ }
+
}
if (candev->flags & CANDEV_PROGRAMMABLE_IRQ)
usb_check_events(&usb_device);
usb_control_response(&usb_device);
-// DEBUG
-// if (!(IO0PIN&P0_SJA1000_INT_PIN)) //INT PIN is inverted
-// chip->chipspecops->irq_handler(0,chip);
+#ifdef CONFIG_OC_LINCAN_CARD_ul_usb1
+ /* polled IRQ mode for ul_usb1 board*/
+ if (!(IO0PIN&P0_SJA1000_INT_PIN)) /* INT PIN is inverted */
+ chip->chipspecops->irq_handler(0,chip);
+#endif
if (usb_device.ep_events & MASK_EP1RX) { //EP1RX - data waiting to receive
slot->msg=canmsg;
canque_put_inslot(qends, qedge, slot);
- //CAN_send(&canmsg);
+
}
else
canque_abort_inslot(qends,qedge,slot);
}*/
}
- // 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");
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 && )