/* endpoint configuration */
xdata at 0xe604 volatile u8 FIFORESET;
xdata at 0xe60b volatile u8 REVCTL;
+xdata at 0xe610 volatile u8 EP1OUTCFG;
+xdata at 0xe611 volatile u8 EP1INCFG;
xdata at 0xe612 volatile u8 EP2CFG;
xdata at 0xe613 volatile u8 EP4CFG;
xdata at 0xe614 volatile u8 EP6CFG;
xdata at 0xe624 volatile u8 EP6AUTOINLENH;
xdata at 0xe625 volatile u8 EP6AUTOINLENL;
+/* endpoint control/status */
+xdata at 0xe6a1 volatile u8 EP1OUTCS;
+xdata at 0xe6a2 volatile u8 EP1INCS;
+xdata at 0xe68d volatile u16 EP1OUTBC;
+xdata at 0xe68f volatile u16 EP1INBC;
+
+#define STALL 0x01
+#define BUSY 0x02
+
+/* access to endpoint buffers */
+xdata at 0xe780 volatile u8 EP1OUTBUF[64];
+xdata at 0xe7c0 volatile u8 EP1INBUF[64];
+
/* special funtion registers */
sfr at 0xb5 OED;
sfr at 0xb0 IOD;
}
+void jtag_init() {
+
+ /* pin 5 of port d disables tdi -> tdo forward */
+ OED|=(1<<5);
+ IOD|=(1<<5);
+
+ /* jtag pins:
+ * tdi - pin 0 (input)
+ * tdo - pin 2 (output)
+ * tms - pin 3 (output)
+ * tck - pin 4 (output)
+ */
+ OED|=((1<<2)|(1<<3)|(1<<4));
+ OED&=~(1<<0);
+
+}
+
void cpu_init() {
/* cpu initialization: (0x10)
* default (valid, bulk) fits!
*/
+ /* arm ep1out, clear ep1out and ep1in stall bit */
+ EP1OUTBC=1;
+ EP1OUTCS&=~STALL;
+ EP1INCS&=~STALL;
+
}
void fx2_init() {
void main() {
+ u8 buf;
+
/* initialize the fx2 */
fx2_init();
- /* do the job ... */
+ /* jtag by polling ep1 */
while(1) {
-
+ if(!(EP1OUTCS&BUSY)) {
+ buf=EP1OUTBUF[0];
+ buf&=0x1c;
+ IOD|=buf;
+ EP1OUTBC=1;
+ }
+ if(!(EP1INCS&BUSY)) {
+ buf=IOD&0x01?1:0;
+ EP1INBUF[0]=buf;
+ EP1INBC=1;
+ }
}
}