DAP(Debug Access Port) interface
Dependents: USBMSD_LPC_HelloWorld lpcterm2 Simple-CMSIS-DAP 11u35_usbLocalFilesystem
TransferCore.h@0:76588be01e71, 2013-09-14 (annotated)
- Committer:
- va009039
- Date:
- Sat Sep 14 11:21:12 2013 +0000
- Revision:
- 0:76588be01e71
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:76588be01e71 | 1 | // TransferCore.h 2013/9/14 |
va009039 | 0:76588be01e71 | 2 | #pragma once |
va009039 | 0:76588be01e71 | 3 | #include "SWD.h" |
va009039 | 0:76588be01e71 | 4 | |
va009039 | 0:76588be01e71 | 5 | // DAP Transfer Request |
va009039 | 0:76588be01e71 | 6 | #define DAP_TRANSFER_MATCH_VALUE (1<<4) |
va009039 | 0:76588be01e71 | 7 | #define DAP_TRANSFER_MATCH_MASK (1<<5) |
va009039 | 0:76588be01e71 | 8 | |
va009039 | 0:76588be01e71 | 9 | // DAP Transfer Response |
va009039 | 0:76588be01e71 | 10 | #define DAP_TRANSFER_MISMATCH (1<<4) |
va009039 | 0:76588be01e71 | 11 | |
va009039 | 0:76588be01e71 | 12 | template<typename T> |
va009039 | 0:76588be01e71 | 13 | T LD(uint8_t* buf) { |
va009039 | 0:76588be01e71 | 14 | T data = 0; |
va009039 | 0:76588be01e71 | 15 | for(int i = sizeof(T)-1; i >= 0; i--) { |
va009039 | 0:76588be01e71 | 16 | data <<= 8; |
va009039 | 0:76588be01e71 | 17 | data |= buf[i]; |
va009039 | 0:76588be01e71 | 18 | } |
va009039 | 0:76588be01e71 | 19 | return data; |
va009039 | 0:76588be01e71 | 20 | } |
va009039 | 0:76588be01e71 | 21 | |
va009039 | 0:76588be01e71 | 22 | template<typename T> |
va009039 | 0:76588be01e71 | 23 | void ST(uint8_t* buf, T data) { |
va009039 | 0:76588be01e71 | 24 | for(int i = 0; i < sizeof(T); i++) { |
va009039 | 0:76588be01e71 | 25 | buf[i] = data>>(8*i); |
va009039 | 0:76588be01e71 | 26 | } |
va009039 | 0:76588be01e71 | 27 | } |
va009039 | 0:76588be01e71 | 28 | |
va009039 | 0:76588be01e71 | 29 | class transData { |
va009039 | 0:76588be01e71 | 30 | public: |
va009039 | 0:76588be01e71 | 31 | void init(uint8_t* base, int pos); |
va009039 | 0:76588be01e71 | 32 | void append(uint32_t data); |
va009039 | 0:76588be01e71 | 33 | uint8_t* data(); |
va009039 | 0:76588be01e71 | 34 | int length(); |
va009039 | 0:76588be01e71 | 35 | |
va009039 | 0:76588be01e71 | 36 | template<typename T> |
va009039 | 0:76588be01e71 | 37 | T get() { |
va009039 | 0:76588be01e71 | 38 | T data = LD<T>(_base+_pos); |
va009039 | 0:76588be01e71 | 39 | _pos += sizeof(T); |
va009039 | 0:76588be01e71 | 40 | return data; |
va009039 | 0:76588be01e71 | 41 | } |
va009039 | 0:76588be01e71 | 42 | protected: |
va009039 | 0:76588be01e71 | 43 | uint8_t* _base; |
va009039 | 0:76588be01e71 | 44 | int _pos; |
va009039 | 0:76588be01e71 | 45 | }; |
va009039 | 0:76588be01e71 | 46 | |
va009039 | 0:76588be01e71 | 47 | class TransferCore { |
va009039 | 0:76588be01e71 | 48 | public: |
va009039 | 0:76588be01e71 | 49 | int Transfer(SWD* swd, uint8_t* request, uint8_t* response); |
va009039 | 0:76588be01e71 | 50 | int TransferBlock(SWD* swd, uint8_t* request, uint8_t* response); |
va009039 | 0:76588be01e71 | 51 | uint16_t match_retry; // Number of retries if read value does not match |
va009039 | 0:76588be01e71 | 52 | uint32_t match_mask; // Match Mask |
va009039 | 0:76588be01e71 | 53 | private: |
va009039 | 0:76588be01e71 | 54 | uint8_t read(uint8_t cmd); |
va009039 | 0:76588be01e71 | 55 | uint8_t write(uint8_t cmd); |
va009039 | 0:76588be01e71 | 56 | uint8_t read_block(uint8_t cmd, int count); |
va009039 | 0:76588be01e71 | 57 | uint8_t write_block(uint8_t cmd, int count); |
va009039 | 0:76588be01e71 | 58 | |
va009039 | 0:76588be01e71 | 59 | bool post_read; |
va009039 | 0:76588be01e71 | 60 | bool check_write; |
va009039 | 0:76588be01e71 | 61 | transData reqData; |
va009039 | 0:76588be01e71 | 62 | transData resData; |
va009039 | 0:76588be01e71 | 63 | int response_count; |
va009039 | 0:76588be01e71 | 64 | protected: |
va009039 | 0:76588be01e71 | 65 | SWD* _swd; |
va009039 | 0:76588be01e71 | 66 | }; |