USB host library, support isochronous,bulk,interrupt and control.
Dependents: BaseUsbHost_example BaseJpegDecode_example SimpleJpegDecode_example
Import programBaseUsbHost_example
BaseUsbHost example program
BaseUsbHostDebug.cpp@0:b7d6879637a8, 2012-12-04 (annotated)
- 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?
User | Revision | Line number | New 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 |