00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
#include <config.h>
00032
00033
#include <stdio.h>
00034
#include <stdlib.h>
00035
00036
#include "avrerror.h"
00037
#include "avrmalloc.h"
00038
#include "avrclass.h"
00039
#include "utils.h"
00040
#include "callback.h"
00041
#include "op_names.h"
00042
00043
#include "storage.h"
00044
#include "flash.h"
00045
00046
#include "vdevs.h"
00047
#include "memory.h"
00048
#include "stack.h"
00049
#include "register.h"
00050
#include "sram.h"
00051
#include "usb.h"
00052
00053
#include "intvects.h"
00054
00055
void usb_port_wr (
char *name, uint8_t val);
00056 uint8_t usb_port_rd (
char *name);
00057
00058
00059
00060
00061
00062
00063
00064
static uint8_t usb_intr_read (VDevice *dev,
int addr);
00065
static void usb_intr_write (VDevice *dev,
int addr, uint8_t val);
00066
static void usb_intr_reset (VDevice *dev);
00067
static char *usb_intr_reg_name (VDevice *dev,
int addr);
00068
00069
00070
00071 USBInter_T *
00072 usb_intr_new (uint8_t func_mask)
00073 {
00074 USBInter_T *usb;
00075
00076 usb =
avr_new (USBInter_T, 1);
00077
usb_intr_construct (usb, func_mask);
00078
class_overload_destroy ((AvrClass *)usb,
usb_intr_destroy);
00079
00080
return usb;
00081 }
00082
00083
00084
00085
void
00086 usb_intr_construct (USBInter_T *usb, uint8_t func_mask)
00087 {
00088
char *name =
"USBIntr";
00089
00090
if (usb == NULL)
00091
avr_error (
"passed null ptr");
00092
00093
vdev_construct ((VDevice *)usb, name, USB_INTR_BASE, USB_INTR_SIZE,
00094 usb_intr_read, usb_intr_write, usb_intr_reset,
00095 usb_intr_reg_name);
00096
00097 usb->func_mask = func_mask;
00098
00099 usb_intr_reset ((VDevice *)usb);
00100 }
00101
00102
00103
00104
void
00105 usb_intr_destroy (
void *usb)
00106 {
00107
if (usb == NULL)
00108
return;
00109
00110
vdev_destroy (usb);
00111 }
00112
00113
static uint8_t
00114 usb_intr_read (VDevice *dev,
int addr)
00115 {
00116 USBInter_T *usb = (USBInter_T *)dev;
00117
00118
switch (addr -
vdev_get_base (dev))
00119 {
00120
case USB_INTR_ENABLE_ADDR:
00121
return (usb->uier);
00122
case USB_INTR_MASK_ADDR:
00123
return (usb->uimsk);
00124
case USB_INTR_STATUS_ADDR:
00125
return (usb->uisr =
00126 usb_port_rd (usb_intr_reg_name ((VDevice *)usb, addr)));
00127
case USB_INTR_SPRSIE_ADDR:
00128
return (usb->sprsie);
00129
00130
case USB_INTR_SPRSR_ADDR:
00131
return (usb->sprsr =
00132 usb_port_rd (usb_intr_reg_name ((VDevice *)usb, addr)));
00133
case USB_GLB_STATE_ADDR:
00134
return (usb->glb_state);
00135
case USB_FRM_NUM_L_ADDR:
00136
return (usb->frm_num_l);
00137
case USB_FRM_NUM_H_ADDR:
00138
return (usb->frm_num_h);
00139
case USB_INTR_SPRSMSK_ADDR:
00140
return (usb->sprsmsk);
00141
case USB_INTR_ACK_ADDR:
00142
case USB_INTR_UNUSED_ADDR:
00143
default:
00144
avr_error (
"Bad address: 0x%04x", addr);
00145 }
00146
return 0;
00147 }
00148
00149
static void
00150 usb_intr_write (VDevice *dev,
int addr, uint8_t val)
00151 {
00152 USBInter_T *usb = (USBInter_T *)dev;
00153
00154
switch (addr -
vdev_get_base (dev))
00155 {
00156
case USB_INTR_ENABLE_ADDR:
00157 (usb->uier = val);
00158
break;
00159
case USB_INTR_MASK_ADDR:
00160 (usb->uimsk = val);
00161
break;
00162
case USB_INTR_SPRSMSK_ADDR:
00163 (usb->sprsmsk = val);
00164
break;
00165
case USB_INTR_SPRSIE_ADDR:
00166 (usb->sprsie = val);
00167
break;
00168
case USB_INTR_ACK_ADDR:
00169 (usb->uiar = val);
00170
break;
00171
case USB_GLB_STATE_ADDR:
00172 (usb->glb_state = val);
00173
break;
00174
case USB_FRM_NUM_L_ADDR:
00175 (usb->frm_num_l = val);
00176
break;
00177
case USB_FRM_NUM_H_ADDR:
00178 (usb->frm_num_h = val);
00179
break;
00180
case USB_INTR_STATUS_ADDR:
00181
case USB_INTR_SPRSR_ADDR:
00182
case USB_INTR_UNUSED_ADDR:
00183
default:
00184
avr_error (
"Bad address: 0x%04x", addr);
00185 }
00186 }
00187
00188
static void
00189 usb_intr_reset (VDevice *dev)
00190 {
00191 USBInter_T *usb = (USBInter_T *)dev;
00192
00193 usb->sprsr = 0;
00194 usb->uisr = 0;
00195 }
00196
00197
static char *
00198 usb_intr_reg_name (VDevice *dev,
int addr)
00199 {
00200
switch (addr -
vdev_get_base (dev))
00201 {
00202
case USB_INTR_ENABLE_ADDR:
00203
return (
"UIER");
00204
case USB_INTR_MASK_ADDR:
00205
return (
"UIMSK");
00206
case USB_INTR_STATUS_ADDR:
00207
return (
"UISR");
00208
case USB_INTR_SPRSIE_ADDR:
00209
return (
"SPRSIE");
00210
case USB_INTR_SPRSR_ADDR:
00211
return (
"SPRSR");
00212
case USB_GLB_STATE_ADDR:
00213
return (
"GLB_STATE");
00214
case USB_FRM_NUM_L_ADDR:
00215
return (
"FRM_NUM_L");
00216
case USB_FRM_NUM_H_ADDR:
00217
return (
"FRM_NUM_H");
00218
case USB_INTR_SPRSMSK_ADDR:
00219
return (
"SPRSMSK");
00220
case USB_INTR_ACK_ADDR:
00221
return (
"UIAR");
00222
case USB_INTR_UNUSED_ADDR:
00223
return (
"UNUSED");
00224
default:
00225
avr_error (
"Bad address: 0x%04x", addr);
00226 }
00227
return NULL;
00228 }
00229
00230
00231
00232
00233
00234
00235
00236
static uint8_t usb_read (VDevice *dev,
int addr);
00237
static void usb_write (VDevice *dev,
int addr, uint8_t val);
00238
static void usb_reset (VDevice *dev);
00239
static char *usb_reg_name (VDevice *dev,
int addr);
00240
00241
00242
00243 USB_T *
00244 usb_new (
void)
00245 {
00246 USB_T *usb;
00247
00248 usb =
avr_new (USB_T, 1);
00249
usb_construct (usb);
00250
class_overload_destroy ((AvrClass *)usb,
usb_destroy);
00251
00252
return usb;
00253 }
00254
00255
00256
00257
void
00258 usb_construct (USB_T *usb)
00259 {
00260
char *name =
"USB";
00261
00262
if (usb == NULL)
00263
avr_error (
"passed null ptr");
00264
00265
vdev_construct ((VDevice *)usb, name, USB_BASE, USB_SIZE, usb_read,
00266 usb_write, usb_reset, usb_reg_name);
00267
00268 usb_reset ((VDevice *)usb);
00269 }
00270
00271
00272
00273
void
00274 usb_destroy (
void *usb)
00275 {
00276
if (usb == NULL)
00277
return;
00278
00279
vdev_destroy (usb);
00280 }
00281
00282
static uint8_t
00283 usb_read (VDevice *dev,
int addr)
00284 {
00285 USB_T *usb = (USB_T *)dev;
00286
00287
switch (addr -
vdev_get_base (dev))
00288 {
00289
case USB_UOVCER_ADDR:
00290
return usb->uovcer;
00291
case USB_HADDR_ADDR:
00292
return usb->haddr;
00293
case USB_FADDR_ADDR:
00294
return usb->faddr;
00295
case USB_HSTR_ADDR:
00296
return usb->hstr;
00297
case USB_HPCON_ADDR:
00298
return usb->hpcon;
00299
case USB_ICSR_ADDR:
00300
return usb->icsr;
00301
case USB_FENDP5_CNTR_ADDR:
00302
return usb->fendp5_cntr;
00303
case USB_FENDP4_CNTR_ADDR:
00304
return usb->fendp4_cntr;
00305
case USB_FENDP3_CNTR_ADDR:
00306
return usb->fendp3_cntr;
00307
case USB_FENDP2_CNTR_ADDR:
00308
return usb->fendp2_cntr;
00309
case USB_FENDP1_CNTR_ADDR:
00310
return usb->fendp1_cntr;
00311
case USB_FENDP0_CNTR_ADDR:
00312
return usb->fendp0_cntr;
00313
case USB_HENDP1_CNTR_ADDR:
00314
return usb->hendp1_cntr;
00315
case USB_HENDP0_CNTR_ADDR:
00316
return usb->hendp0_cntr;
00317
case USB_FCSR5_ADDR:
00318
return usb->fcsr5 =
00319 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00320
case USB_FCSR4_ADDR:
00321
return usb->fcsr4 =
00322 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00323
case USB_FCSR3_ADDR:
00324
return usb->fcsr3 =
00325 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00326
case USB_FCSR2_ADDR:
00327
return usb->fcsr2 =
00328 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00329
case USB_FCSR1_ADDR:
00330
return usb->fcsr1 =
00331 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00332
case USB_FCSR0_ADDR:
00333 usb->fcsr0 = usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00334
if (usb->fcsr0 & RX_SETUP)
00335 usb->fbyte_cnt0 = 10;
00336
return usb->fcsr0;
00337
case USB_HCSR0_ADDR:
00338 usb->hcsr0 = usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00339
if (usb->hcsr0 & RX_SETUP)
00340 usb->hbyte_cnt0 = 10;
00341
return usb->hcsr0;
00342
case USB_FCAR5_ADDR:
00343
return usb->fcar5;
00344
case USB_FCAR4_ADDR:
00345
return usb->fcar4;
00346
case USB_FCAR3_ADDR:
00347
return usb->fcar3;
00348
case USB_FCAR2_ADDR:
00349
return usb->fcar2;
00350
case USB_FCAR1_ADDR:
00351
return usb->fcar1;
00352
case USB_FCAR0_ADDR:
00353
return usb->fcar0;
00354
case USB_HCAR0_ADDR:
00355
return usb->hcar0;
00356
case USB_HPSTAT1_ADDR:
00357
return usb->hpstat1;
00358
case USB_HPSTAT2_ADDR:
00359
return usb->hpstat2;
00360
case USB_HPSTAT3_ADDR:
00361
return usb->hpstat3;
00362
case USB_HPSTAT4_ADDR:
00363
return usb->hpstat4;
00364
case USB_HPSTAT5_ADDR:
00365
return usb->hpstat5;
00366
case USB_HPSTAT6_ADDR:
00367
return usb->hpstat6;
00368
case USB_HPSTAT7_ADDR:
00369
return usb->hpstat7;
00370
case USB_HPSTAT8_ADDR:
00371
return usb->hpstat8;
00372
case USB_PSTATE1_ADDR:
00373
return usb->pstate1;
00374
case USB_PSTATE2_ADDR:
00375
return usb->pstate2;
00376
case USB_PSTATE3_ADDR:
00377
return usb->pstate3;
00378
case USB_PSTATE4_ADDR:
00379
return usb->pstate4;
00380
case USB_PSTATE5_ADDR:
00381
return usb->pstate5;
00382
case USB_PSTATE6_ADDR:
00383
return usb->pstate6;
00384
case USB_PSTATE7_ADDR:
00385
return usb->pstate7;
00386
case USB_PSTATE8_ADDR:
00387
return usb->pstate8;
00388
case USB_HPSCR1_ADDR:
00389
return usb->hpscr1;
00390
case USB_HPSCR2_ADDR:
00391
return usb->hpscr2;
00392
case USB_HPSCR3_ADDR:
00393
return usb->hpscr3;
00394
case USB_HPSCR4_ADDR:
00395
return usb->hpscr4;
00396
case USB_HPSCR5_ADDR:
00397
return usb->hpscr5;
00398
case USB_HPSCR6_ADDR:
00399
return usb->hpscr6;
00400
case USB_HPSCR7_ADDR:
00401
return usb->hpscr7;
00402
case USB_HPSCR8_ADDR:
00403
return usb->hpscr8;
00404
case USB_FBYTE_CNT5_ADDR:
00405
return usb->fbyte_cnt5;
00406
case USB_FBYTE_CNT4_ADDR:
00407
return usb->fbyte_cnt4;
00408
case USB_FBYTE_CNT3_ADDR:
00409
return usb->fbyte_cnt3;
00410
case USB_FBYTE_CNT2_ADDR:
00411
return usb->fbyte_cnt2;
00412
case USB_FBYTE_CNT1_ADDR:
00413
return usb->fbyte_cnt1;
00414
case USB_FBYTE_CNT0_ADDR:
00415
return usb->fbyte_cnt0;
00416
case USB_HBYTE_CNT0_ADDR:
00417
return usb->hbyte_cnt0;
00418
case USB_FDR5_ADDR:
00419
return usb->fdr5 =
00420 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00421
case USB_FDR4_ADDR:
00422
return usb->fdr4 =
00423 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00424
case USB_FDR3_ADDR:
00425
return usb->fdr3 =
00426 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00427
case USB_FDR2_ADDR:
00428
return usb->fdr2 =
00429 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00430
case USB_FDR1_ADDR:
00431
return usb->fdr1 =
00432 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00433
case USB_FDR0_ADDR:
00434
return usb->fdr0 =
00435 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00436
case USB_HDR0_ADDR:
00437
return usb->hdr0 =
00438 usb_port_rd (usb_reg_name ((VDevice *)usb, addr));
00439
default:
00440
avr_error (
"Bad address: 0x%04x", addr);
00441 }
00442
return 0;
00443 }
00444
00445
static void
00446 usb_write (VDevice *dev,
int addr, uint8_t val)
00447 {
00448 USB_T *usb = (USB_T *)dev;
00449
00450
switch (addr -
vdev_get_base (dev))
00451 {
00452
case USB_UOVCER_ADDR:
00453 (usb->uovcer = val);
00454
break;
00455
case USB_HADDR_ADDR:
00456 (usb->haddr = val);
00457
break;
00458
case USB_FADDR_ADDR:
00459 (usb->faddr = val);
00460
break;
00461
case USB_HSTR_ADDR:
00462 (usb->hstr = val);
00463
break;
00464
case USB_HPCON_ADDR:
00465 (usb->hpcon = val);
00466
break;
00467
case USB_FENDP5_CNTR_ADDR:
00468 usb->fendp5_cntr = val;
00469
break;
00470
case USB_FENDP4_CNTR_ADDR:
00471 usb->fendp4_cntr = val;
00472
break;
00473
case USB_FENDP3_CNTR_ADDR:
00474 usb->fendp3_cntr = val;
00475
break;
00476
case USB_FENDP2_CNTR_ADDR:
00477 usb->fendp2_cntr = val;
00478
break;
00479
case USB_FENDP1_CNTR_ADDR:
00480 usb->fendp1_cntr = val;
00481
break;
00482
case USB_FENDP0_CNTR_ADDR:
00483 usb->fendp0_cntr = val;
00484
break;
00485
case USB_HENDP1_CNTR_ADDR:
00486 usb->hendp1_cntr = val;
00487
break;
00488
case USB_HENDP0_CNTR_ADDR:
00489 usb->hendp0_cntr = val;
00490
break;
00491
case USB_FCAR5_ADDR:
00492 usb->fcar5 = val;
00493 usb->fcsr5 &= ~val;
00494 (usb->fbyte_cnt5) = 0;
00495
break;
00496
case USB_FCAR4_ADDR:
00497 usb->fcar4 = val;
00498 usb->fcsr4 &= ~val;
00499 (usb->fbyte_cnt4) = 0;
00500
break;
00501
case USB_FCAR3_ADDR:
00502 usb->fcar3 = val;
00503 usb->fcsr3 &= ~val;
00504 (usb->fbyte_cnt3) = 0;
00505
break;
00506
case USB_FCAR2_ADDR:
00507 usb->fcar2 = val;
00508 usb->fcsr2 &= ~val;
00509 (usb->fbyte_cnt2) = 0;
00510
break;
00511
case USB_FCAR1_ADDR:
00512 usb->fcar1 = val;
00513 usb->fcsr1 &= ~val;
00514 (usb->fbyte_cnt1) = 0;
00515
break;
00516
case USB_FCAR0_ADDR:
00517 usb->fcar0 = val;
00518 usb->fcsr0 &= ~val;
00519 (usb->fbyte_cnt0) = 0;
00520
break;
00521
case USB_HCAR0_ADDR:
00522 usb->hcar0 = val;
00523 usb->hcsr0 &= ~val;
00524 (usb->hbyte_cnt0) = 0;
00525
break;
00526
case USB_FDR5_ADDR:
00527 usb->fdr5 = val;
00528 (usb->fbyte_cnt5)++;
00529 usb_port_wr (usb_reg_name ((VDevice *)usb, addr), val);
00530
break;
00531
case USB_FDR4_ADDR:
00532 usb->fdr4 = val;
00533 (usb->fbyte_cnt4)++;
00534 usb_port_wr (usb_reg_name ((VDevice *)usb, addr), val);
00535
break;
00536
case USB_FDR3_ADDR:
00537 usb->fdr3 = val;
00538 (usb->fbyte_cnt3)++;
00539 usb_port_wr (usb_reg_name ((VDevice *)usb, addr), val);
00540
break;
00541
case USB_FDR2_ADDR:
00542 usb->fdr2 = val;
00543 (usb->fbyte_cnt2)++;
00544 usb_port_wr (usb_reg_name ((VDevice *)usb, addr), val);
00545
break;
00546
case USB_FDR1_ADDR:
00547 usb->fdr1 = val;
00548 (usb->fbyte_cnt1)++;
00549 usb_port_wr (usb_reg_name ((VDevice *)usb, addr), val);
00550
break;
00551
case USB_FDR0_ADDR:
00552 usb->fdr0 = val;
00553 (usb->fbyte_cnt0)++;
00554 usb_port_wr (usb_reg_name ((VDevice *)usb, addr), val);
00555
break;
00556
case USB_HDR0_ADDR:
00557 usb->hdr0 = val;
00558 (usb->hbyte_cnt0)++;
00559 usb_port_wr (usb_reg_name ((VDevice *)usb, addr), val);
00560
break;
00561
default:
00562
avr_error (
"Bad address: 0x%04x", addr);
00563 }
00564 }
00565
00566
static void
00567 usb_reset (VDevice *dev)
00568 {
00569 USB_T *usb = (USB_T *)dev;
00570
00571 usb->haddr = 0;
00572 usb->faddr = 0;
00573
00574 usb->hstr = 0;
00575 usb->hpcon = 0;
00576
00577 usb->uovcer = 0;
00578 }
00579
00580
static char *
00581 usb_reg_name (VDevice *dev,
int addr)
00582 {
00583
switch (addr -
vdev_get_base (dev))
00584 {
00585
case USB_FCAR5_ADDR:
00586
return "FCAR5";
00587
case USB_FCAR4_ADDR:
00588
return "FCAR4";
00589
case USB_FCAR3_ADDR:
00590
return "FCAR3";
00591
case USB_FCAR2_ADDR:
00592
return "FCAR2";
00593
case USB_FCAR1_ADDR:
00594
return "FCAR1";
00595
case USB_FCAR0_ADDR:
00596
return "FCAR0";
00597
case USB_HCAR0_ADDR:
00598
return "HCAR0";
00599
case USB_PSTATE1_ADDR:
00600
return "PSTATE1";
00601
case USB_PSTATE2_ADDR:
00602
return "PSTATE2";
00603
case USB_PSTATE3_ADDR:
00604
return "PSTATE3";
00605
case USB_PSTATE4_ADDR:
00606
return "PSTATE4";
00607
case USB_PSTATE5_ADDR:
00608
return "PSTATE5";
00609
case USB_PSTATE6_ADDR:
00610
return "PSTATE6";
00611
case USB_PSTATE7_ADDR:
00612
return "PSTATE7";
00613
case USB_PSTATE8_ADDR:
00614
return "PSTATE8";
00615
case USB_HPSCR1_ADDR:
00616
return "HPSCR1";
00617
case USB_HPSCR2_ADDR:
00618
return "HPSCR2";
00619
case USB_HPSCR3_ADDR:
00620
return "HPSCR3";
00621
case USB_HPSCR4_ADDR:
00622
return "HPSCR4";
00623
case USB_HPSCR5_ADDR:
00624
return "HPSCR5";
00625
case USB_HPSCR6_ADDR:
00626
return "HPSCR6";
00627
case USB_HPSCR7_ADDR:
00628
return "HPSCR7";
00629
case USB_HPSCR8_ADDR:
00630
return "HPSCR8";
00631
case USB_HPSTAT1_ADDR:
00632
return "HPSTAT1";
00633
case USB_HPSTAT2_ADDR:
00634
return "HPSTAT2";
00635
case USB_HPSTAT3_ADDR:
00636
return "HPSTAT3";
00637
case USB_HPSTAT4_ADDR:
00638
return "HPSTAT4";
00639
case USB_HPSTAT5_ADDR:
00640
return "HPSTAT5";
00641
case USB_HPSTAT6_ADDR:
00642
return "HPSTAT6";
00643
case USB_HPSTAT7_ADDR:
00644
return "HPSTAT7";
00645
case USB_HPSTAT8_ADDR:
00646
return "HPSTAT8";
00647
case USB_HPCON_ADDR:
00648
return "HPCON";
00649
case USB_HSTR_ADDR:
00650
return "HSTR";
00651
case USB_FBYTE_CNT5_ADDR:
00652
return "FBYTE_CNT5";
00653
case USB_FBYTE_CNT4_ADDR:
00654
return "FBYTE_CNT4";
00655
case USB_FBYTE_CNT3_ADDR:
00656
return "FBYTE_CNT3";
00657
case USB_FBYTE_CNT2_ADDR:
00658
return "FBYTE_CNT2";
00659
case USB_FBYTE_CNT1_ADDR:
00660
return "FBYTE_CNT1";
00661
case USB_FBYTE_CNT0_ADDR:
00662
return "FBYTE_CNT0";
00663
case USB_HBYTE_CNT0_ADDR:
00664
return "HBYTE_CNT0";
00665
case USB_FDR5_ADDR:
00666
return "FDR5";
00667
case USB_FDR4_ADDR:
00668
return "FDR4";
00669
case USB_FDR3_ADDR:
00670
return "FDR3";
00671
case USB_FDR2_ADDR:
00672
return "FDR2";
00673
case USB_FDR1_ADDR:
00674
return "FDR1";
00675
case USB_FDR0_ADDR:
00676
return "FDR0";
00677
case USB_HDR0_ADDR:
00678
return "HDR0";
00679
case USB_FCSR5_ADDR:
00680
return "FCSR5";
00681
case USB_FCSR4_ADDR:
00682
return "FCSR4";
00683
case USB_FCSR3_ADDR:
00684
return "FCSR3";
00685
case USB_FCSR2_ADDR:
00686
return "FCSR2";
00687
case USB_FCSR1_ADDR:
00688
return "FCSR1";
00689
case USB_FCSR0_ADDR:
00690
return "FCSR0";
00691
case USB_HCSR0_ADDR:
00692
return "HCSR0";
00693
case USB_FENDP5_CNTR_ADDR:
00694
return "FENDP5_CNTR";
00695
case USB_FENDP4_CNTR_ADDR:
00696
return "FENDP4_CNTR";
00697
case USB_FENDP3_CNTR_ADDR:
00698
return "FENDP3_CNTR";
00699
case USB_FENDP2_CNTR_ADDR:
00700
return "FENDP2_CNTR";
00701
case USB_FENDP1_CNTR_ADDR:
00702
return "FENDP1_CNTR";
00703
case USB_FENDP0_CNTR_ADDR:
00704
return "FENDP0_CNTR";
00705
case USB_HENDP1_CNTR_ADDR:
00706
return "HENDP1_CNTR";
00707
case USB_HENDP0_CNTR_ADDR:
00708
return "HENDP0_CNTR";
00709
case USB_FADDR_ADDR:
00710
return "FADDR";
00711
case USB_HADDR_ADDR:
00712
return "HADDR";
00713
case USB_ICSR_ADDR:
00714
return "ICSR";
00715
case USB_UOVCER_ADDR:
00716
return "UOVCER";
00717
default:
00718
avr_error (
"Bad address: 0x%04x", addr);
00719 }
00720
return NULL;
00721 }
00722
00723 uint8_t
00724 usb_port_rd (
char *name)
00725 {
00726
int data;
00727
char line[80];
00728
00729
while (1)
00730 {
00731 fprintf (stderr,
"\nEnter a byte of hex data to read into %s: ",
00732 name);
00733
00734
00735
if (fgets (line,
sizeof (line), stdin) == NULL)
00736
continue;
00737
00738
00739
if (sscanf (line,
"%x\n", &data) != 1)
00740
continue;
00741
00742
break;
00743 }
00744
return (uint8_t) (data & 0xff);
00745 }
00746
00747
void
00748 usb_port_wr (
char *name, uint8_t val)
00749 {
00750 fprintf (stderr,
"wrote 0x%02x to %s\n", val, name);
00751 }