DAP(Debug Access Port) interface
Dependents: USBMSD_LPC_HelloWorld lpcterm2 Simple-CMSIS-DAP 11u35_usbLocalFilesystem
Diff: TransferCore.h
- Revision:
- 0:76588be01e71
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TransferCore.h Sat Sep 14 11:21:12 2013 +0000 @@ -0,0 +1,66 @@ +// TransferCore.h 2013/9/14 +#pragma once +#include "SWD.h" + +// DAP Transfer Request +#define DAP_TRANSFER_MATCH_VALUE (1<<4) +#define DAP_TRANSFER_MATCH_MASK (1<<5) + +// DAP Transfer Response +#define DAP_TRANSFER_MISMATCH (1<<4) + +template<typename T> +T LD(uint8_t* buf) { + T data = 0; + for(int i = sizeof(T)-1; i >= 0; i--) { + data <<= 8; + data |= buf[i]; + } + return data; +} + +template<typename T> +void ST(uint8_t* buf, T data) { + for(int i = 0; i < sizeof(T); i++) { + buf[i] = data>>(8*i); + } +} + +class transData { +public: + void init(uint8_t* base, int pos); + void append(uint32_t data); + uint8_t* data(); + int length(); + + template<typename T> + T get() { + T data = LD<T>(_base+_pos); + _pos += sizeof(T); + return data; + } +protected: + uint8_t* _base; + int _pos; +}; + +class TransferCore { +public: + int Transfer(SWD* swd, uint8_t* request, uint8_t* response); + int TransferBlock(SWD* swd, uint8_t* request, uint8_t* response); + uint16_t match_retry; // Number of retries if read value does not match + uint32_t match_mask; // Match Mask +private: + uint8_t read(uint8_t cmd); + uint8_t write(uint8_t cmd); + uint8_t read_block(uint8_t cmd, int count); + uint8_t write_block(uint8_t cmd, int count); + + bool post_read; + bool check_write; + transData reqData; + transData resData; + int response_count; +protected: + SWD* _swd; +};