USB host library, support isochronous,bulk,interrupt and control.

Dependents:   BaseUsbHost_example BaseJpegDecode_example SimpleJpegDecode_example

Import programBaseUsbHost_example

BaseUsbHost example program

Committer:
va009039
Date:
Tue Dec 04 13:29:41 2012 +0000
Revision:
0:b7d6879637a8
Child:
4:d931d24c2f81
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:b7d6879637a8 1 // BaseUseHostDebug.cpp 2012/12/4
va009039 0:b7d6879637a8 2 #include "mbed.h"
va009039 0:b7d6879637a8 3 #include "rtos.h"
va009039 0:b7d6879637a8 4 #include "BaseUsbHost.h"
va009039 0:b7d6879637a8 5 #include "BaseUsbHostDebug.h"
va009039 0:b7d6879637a8 6
va009039 0:b7d6879637a8 7 #define OHCI_REG_READ(REG) (LPC_USB->##REG)
va009039 0:b7d6879637a8 8 #define OHCI_REG_WRITE(REG,B) LPC_USB->##REG = (B)
va009039 0:b7d6879637a8 9 #define OHCI_REG_OR(REG,B) LPC_USB->##REG |= (B)
va009039 0:b7d6879637a8 10 #define OHCI_REG_AND(REG,B) LPC_USB->##REG &= (B)
va009039 0:b7d6879637a8 11
va009039 0:b7d6879637a8 12 void print_td(FILE* stream, HCTD* td)
va009039 0:b7d6879637a8 13 {
va009039 0:b7d6879637a8 14 if (td == NULL) {
va009039 0:b7d6879637a8 15 fprintf(stream, "TD %p:\n", td);
va009039 0:b7d6879637a8 16 return;
va009039 0:b7d6879637a8 17 }
va009039 0:b7d6879637a8 18 uint32_t* p = reinterpret_cast<uint32_t*>(td);
va009039 0:b7d6879637a8 19 fprintf(stream, "TD %p: %08X %08X %08X %08X", p, p[0], p[1], p[2], p[3]);
va009039 0:b7d6879637a8 20 fprintf(stream, " ep=%p", td->ep);
va009039 0:b7d6879637a8 21 for(int i = 0; i < 8; i++) {
va009039 0:b7d6879637a8 22 fprintf(stream, " %02X", td->buf[i]);
va009039 0:b7d6879637a8 23 }
va009039 0:b7d6879637a8 24 fprintf(stream, "\n");
va009039 0:b7d6879637a8 25 uint8_t* bp = reinterpret_cast<uint8_t*>(p[1]);
va009039 0:b7d6879637a8 26 uint8_t* be = reinterpret_cast<uint8_t*>(p[3]);
va009039 0:b7d6879637a8 27 if (bp) {
va009039 0:b7d6879637a8 28 fprintf(stream, "BF %p:", bp);
va009039 0:b7d6879637a8 29 while(bp <= be) {
va009039 0:b7d6879637a8 30 fprintf(stream, " %02X", *bp);
va009039 0:b7d6879637a8 31 bp++;
va009039 0:b7d6879637a8 32 }
va009039 0:b7d6879637a8 33 fprintf(stream, "\n");
va009039 0:b7d6879637a8 34 }
va009039 0:b7d6879637a8 35 }
va009039 0:b7d6879637a8 36
va009039 0:b7d6879637a8 37 void print_ed(FILE* stream, HCED* ed)
va009039 0:b7d6879637a8 38 {
va009039 0:b7d6879637a8 39 uint32_t* p = reinterpret_cast<uint32_t*>(ed);
va009039 0:b7d6879637a8 40 while(p) {
va009039 0:b7d6879637a8 41 fprintf(stream, "ED %p: %08X %08X %08X %08X\n", p, p[0], p[1], p[2], p[3]);
va009039 0:b7d6879637a8 42 HCTD* td = reinterpret_cast<HCTD*>(p[2] & ~3);
va009039 0:b7d6879637a8 43 HCTD* tdtail = reinterpret_cast<HCTD*>(p[1]);
va009039 0:b7d6879637a8 44 while(td != NULL && td != tdtail) {
va009039 0:b7d6879637a8 45 print_td(stream, td);
va009039 0:b7d6879637a8 46 td = reinterpret_cast<HCTD*>(td->Next);
va009039 0:b7d6879637a8 47 }
va009039 0:b7d6879637a8 48 p = reinterpret_cast<uint32_t*>(p[3]);
va009039 0:b7d6879637a8 49 }
va009039 0:b7d6879637a8 50 }
va009039 0:b7d6879637a8 51
va009039 0:b7d6879637a8 52 void print_itd(FILE* stream, HCITD* itd)
va009039 0:b7d6879637a8 53 {
va009039 0:b7d6879637a8 54 if (itd == NULL) {
va009039 0:b7d6879637a8 55 fprintf(stream, "ITD %p:\n", itd);
va009039 0:b7d6879637a8 56 return;
va009039 0:b7d6879637a8 57 }
va009039 0:b7d6879637a8 58 uint32_t* p = reinterpret_cast<uint32_t*>(itd);
va009039 0:b7d6879637a8 59 fprintf(stream, "ITD %p: %08X %08X %08X %08X", p, p[0], p[1], p[2], p[3]);
va009039 0:b7d6879637a8 60 fprintf(stream, " ep=%p\n", itd->ep);
va009039 0:b7d6879637a8 61 uint16_t* offset = reinterpret_cast<uint16_t*>(p+4);
va009039 0:b7d6879637a8 62 fprintf(stream, "ITD %p: %04X %04X %04X %04X %04X %04X %04X %04X\n", offset,
va009039 0:b7d6879637a8 63 offset[0], offset[1], offset[2], offset[3], offset[4], offset[5], offset[6], offset[7]);
va009039 0:b7d6879637a8 64 }
va009039 0:b7d6879637a8 65
va009039 0:b7d6879637a8 66 void print_ied(FILE* stream, HCED* ed)
va009039 0:b7d6879637a8 67 {
va009039 0:b7d6879637a8 68 uint32_t* p = reinterpret_cast<uint32_t*>(ed);
va009039 0:b7d6879637a8 69 while(p) {
va009039 0:b7d6879637a8 70 fprintf(stream, "ED %p: %08X %08X %08X %08X\n", p, p[0], p[1], p[2], p[3]);
va009039 0:b7d6879637a8 71 HCITD* itd = reinterpret_cast<HCITD*>(p[2] & ~3);
va009039 0:b7d6879637a8 72 HCITD* itdtail = reinterpret_cast<HCITD*>(p[1]);
va009039 0:b7d6879637a8 73 while(itd != NULL && itd != itdtail) {
va009039 0:b7d6879637a8 74 print_itd(stream, itd);
va009039 0:b7d6879637a8 75 itd = reinterpret_cast<HCITD*>(itd->Next);
va009039 0:b7d6879637a8 76 }
va009039 0:b7d6879637a8 77 p = reinterpret_cast<uint32_t*>(p[3]);
va009039 0:b7d6879637a8 78 }
va009039 0:b7d6879637a8 79 }
va009039 0:b7d6879637a8 80
va009039 0:b7d6879637a8 81 void print_bytes(FILE* stream, char* s, uint8_t* buf, int len)
va009039 0:b7d6879637a8 82 {
va009039 0:b7d6879637a8 83 fprintf(stream, "%s %d:", s, len);
va009039 0:b7d6879637a8 84 for(int i = 0; i < len; i++) {
va009039 0:b7d6879637a8 85 fprintf(stream, " %02X", buf[i]);
va009039 0:b7d6879637a8 86 }
va009039 0:b7d6879637a8 87 fprintf(stream, "\n");
va009039 0:b7d6879637a8 88 }
va009039 0:b7d6879637a8 89
va009039 0:b7d6879637a8 90 void print_hex(FILE* stream, uint8_t* p, int len)
va009039 0:b7d6879637a8 91 {
va009039 0:b7d6879637a8 92 for(int i = 0; i < len; i++) {
va009039 0:b7d6879637a8 93 if (i%16 == 0) {
va009039 0:b7d6879637a8 94 fprintf(stream, "%p:", p);
va009039 0:b7d6879637a8 95 }
va009039 0:b7d6879637a8 96 fprintf(stream, " %02X", *p);
va009039 0:b7d6879637a8 97 p++;
va009039 0:b7d6879637a8 98 if (i%16 == 15) {
va009039 0:b7d6879637a8 99 fprintf(stream, "\n");
va009039 0:b7d6879637a8 100 }
va009039 0:b7d6879637a8 101 }
va009039 0:b7d6879637a8 102 fprintf(stream, "\n");
va009039 0:b7d6879637a8 103 }
va009039 0:b7d6879637a8 104