DAP(Debug Access Port) interface

Dependents:   USBMSD_LPC_HelloWorld lpcterm2 Simple-CMSIS-DAP 11u35_usbLocalFilesystem

Committer:
va009039
Date:
Sat Sep 14 11:21:12 2013 +0000
Revision:
0:76588be01e71
first commit

Who changed what in which revision?

UserRevisionLine numberNew 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 };