X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/6b854a1ee07ddd8638beebf0076c866df50881eb..f9522530e37184c3dcfb818a35f55ec3f177406f:/embedded/app/usbcan/ul_usb1.c diff --git a/embedded/app/usbcan/ul_usb1.c b/embedded/app/usbcan/ul_usb1.c index 0b3e388..84e1632 100644 --- a/embedded/app/usbcan/ul_usb1.c +++ b/embedded/app/usbcan/ul_usb1.c @@ -186,7 +186,7 @@ int ul_usb1_init_hw_data(struct candevice_t *candev) candev->nr_82527_chips=NR_82527; candev->nr_sja1000_chips=NR_SJA1000; candev->nr_all_chips=NR_82527+NR_SJA1000; - //candev->flags |= CANDEV_PROGRAMMABLE_IRQ; + candev->flags |= CANDEV_PROGRAMMABLE_IRQ*0; return 0; } @@ -240,6 +240,9 @@ int ul_usb1_init_chip_data(struct candevice_t *candev, int chipnr) candev->chip[chipnr]->sja_ocr_reg = sjaOCR_MODE_NORMAL | sjaOCR_TX0_LH; + candev->chip[chipnr]->chip_data=(void *)malloc(sizeof(struct ul_usb1_chip_data)); + if (candev->chip[chipnr]->chip_data==NULL) + return -ENOMEM; return 0; } @@ -295,16 +298,42 @@ int ul_usb1_program_irq(struct candevice_t *candev) * Return Value: The function does not return a value * File: src/ul_usb1.c */ -void ul_usb1_write_register(struct candevice_t *candev,unsigned data, unsigned long address) +void ul_usb1_write_register(unsigned data, unsigned long address) { - struct usb_ul_usb1 *dev; - int retval; - int bytes_transferred; - unsigned char buffer[2]; - buffer[0]=((unsigned char)address & ~CAN_OP_MASK)+CAN_OP_WRITE; - buffer[1]=(unsigned char)data; + IO1DIR|=0x00FF0000; // Port as output to send data + IO1CLR=0x00FF0000; // Clear all data on port + // Init + SET_OUT_PIN(IO0,P0_SJA1000_RD_PIN); // Stays high on write + SET_OUT_PIN(IO0,P0_SJA1000_WR_PIN); // Stays high on address write + SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN); // Sets output buffers to third state + for (slowdown=0;slowdownsysdevptr.anydev; +// struct usb_ul_usb1 *dev; +// int retval; +// int bytes_transferred; +// unsigned char buffer[2]; +// buffer[0]=((unsigned char)address & ~CAN_OP_MASK)+CAN_OP_WRITE; +// buffer[1]=(unsigned char)data; +// +// dev = (struct usb_ul_usb1 *)candev->sysdevptr.anydev; // mutex_lock(&dev->io_mutex); // if (!dev) { /* disconnect() was called */ @@ -340,16 +369,43 @@ exit: * Return Value: The function returns the value stored in @address * File: src/ul_usb1.c */ -unsigned ul_usb1_read_register(struct candevice_t *candev,unsigned long address) +unsigned ul_usb1_read_register(unsigned long address) { - struct usb_ul_usb1 *dev; - int retval; - int bytes_transferred; - unsigned char buffer[2]; - buffer[0]=((unsigned char)address & ~CAN_OP_MASK)+CAN_OP_READ; - buffer[1]=0x00; - - dev = (struct usb_ul_usb1 *)candev->sysdevptr.anydev; + unsigned data; + IO1DIR|=0x00FF0000; // Port as output to set address + IO1CLR=0x00FF0000; // Clear all data + // Init + SET_OUT_PIN(IO0,P0_SJA1000_WR_PIN); // Stays high on read + SET_OUT_PIN(IO0,P0_SJA1000_RD_PIN); // Stays high while entering address + SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN); + for (slowdown=0;slowdownsysdevptr.anydev; // mutex_lock(&dev->io_mutex); // if (!dev) { /* disconnect() was called */