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;
}
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;
}
* 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;slowdown<SJA1000_SCLK;slowdown++);
+ //SET_OUT_PIN(IO0,P0_SJA1000_ALE_PIN); // Start command
+
+ // Set memory address
+ IO1SET=__val2mfld(0x00FF0000,address&0xFF); // Shift data to SJA pins and output them
+ for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+ //CLR_OUT_PIN(IO0,P0_SJA1000_ALE_PIN); // Makes address active
+ CLR_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
+ for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+
+ // Setting data
+ CLR_OUT_PIN(IO0,P0_SJA1000_WR_PIN);
+
+ IO1CLR=0x00FF0000;
+ IO1SET=__val2mfld(0x00FF0000,data&0xFF);
+ for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+ SET_OUT_PIN(IO0,P0_SJA1000_WR_PIN); // Data should be accepted by now
+ SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
+ for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
- dev = (struct usb_ul_usb1 *)candev->sysdevptr.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 */
* 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;slowdown<SJA1000_SCLK;slowdown++);
+ //SET_OUT_PIN(IO0,P0_SJA1000_ALE_PIN);
+
+ // Request memory address
+ IO1SET=__val2mfld(0x00FF0000,address&0xFF);
+ for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+ //CLR_OUT_PIN(IO0,P0_SJA1000_ALE_PIN);
+ CLR_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
+
+ // Get data
+
+ IO1DIR&=~0x00FF0000; // Sets port as input
+ CLR_OUT_PIN(IO0,P0_SJA1000_RD_PIN);
+ for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+ data=__mfld2val(0x00FF0000,IO1PIN);
+ SET_OUT_PIN(IO0,P0_SJA1000_RD_PIN);
+ SET_OUT_PIN(IO0,P0_SJA1000_CS_PIN);
+ for (slowdown=0;slowdown<SJA1000_SCLK;slowdown++);
+ return data;
+
+// 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;
// mutex_lock(&dev->io_mutex);
// if (!dev) { /* disconnect() was called */