+ 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;