KizarmProbe.
 Vše Třídy Soubory Funkce Proměnné Výčty Hodnoty výčtu Definice maker Skupiny Stránky
adiv5apdp.h
Zobrazit dokumentaci tohoto souboru.
1 #ifndef ADIV5DP_H
2 #define ADIV5DP_H
3 #include <stdint.h>
4 
9 /* ADIv5 DP Register addresses */
10 #define ADIV5_DP_IDCODE 0x0
11 #define ADIV5_DP_ABORT 0x0
12 #define ADIV5_DP_CTRLSTAT 0x4
13 #define ADIV5_DP_SELECT 0x8
14 #define ADIV5_DP_RDBUFF 0xC
15 
16 /* AP Abort Register (ABORT) */
17 /* Bits 31:5 - Reserved */
18 #define ADIV5_DP_ABORT_ORUNERRCLR (1 << 4)
19 #define ADIV5_DP_ABORT_WDERRCLR (1 << 3)
20 #define ADIV5_DP_ABORT_STKERRCLR (1 << 2)
21 #define ADIV5_DP_ABORT_STKCMPCLR (1 << 1)
22 /* Bits 5:1 - SW-DP only, reserved in JTAG-DP */
23 #define ADIV5_DP_ABORT_DAPABORT (1 << 0)
24 
25 /* Control/Status Register (CTRLSTAT) */
26 #define ADIV5_DP_CTRLSTAT_CSYSPWRUPACK (1u << 31)
27 #define ADIV5_DP_CTRLSTAT_CSYSPWRUPREQ (1u << 30)
28 #define ADIV5_DP_CTRLSTAT_CDBGPWRUPACK (1u << 29)
29 #define ADIV5_DP_CTRLSTAT_CDBGPWRUPREQ (1u << 28)
30 #define ADIV5_DP_CTRLSTAT_CDBGRSTACK (1u << 27)
31 #define ADIV5_DP_CTRLSTAT_CDBGRSTREQ (1u << 26)
32 /* Bits 25:24 - Reserved */
33 /* Bits 23:12 - TRNCNT */
34 #define ADIV5_DP_CTRLSTAT_TRNCNT
35 /* Bits 11:8 - MASKLANE */
36 #define ADIV5_DP_CTRLSTAT_MASKLANE
37 /* Bits 7:6 - Reserved in JTAG-DP */
38 #define ADIV5_DP_CTRLSTAT_WDATAERR (1u << 7)
39 #define ADIV5_DP_CTRLSTAT_READOK (1u << 6)
40 #define ADIV5_DP_CTRLSTAT_STICKYERR (1u << 5)
41 #define ADIV5_DP_CTRLSTAT_STICKYCMP (1u << 4)
42 #define ADIV5_DP_CTRLSTAT_TRNMODE_MASK (3u << 2)
43 #define ADIV5_DP_CTRLSTAT_STICKYORUN (1u << 1)
44 #define ADIV5_DP_CTRLSTAT_ORUNDETECT (1u << 0)
45 
46 
47 /* ADIv5 MEM-AP Registers */
48 #define ADIV5_AP_CSW 0x00
49 #define ADIV5_AP_TAR 0x04
50 /* 0x08 - Reserved */
51 #define ADIV5_AP_DRW 0x0C
52 #define ADIV5_AP_DB(x) (0x10 + (4*(x)))
53 /* 0x20:0xF0 - Reserved */
54 #define ADIV5_AP_CFG 0xF4
55 #define ADIV5_AP_BASE 0xF8
56 #define ADIV5_AP_IDR 0xFC
57 
58 /* AP Control and Status Word (CSW) */
59 #define ADIV5_AP_CSW_DBGSWENABLE (1u << 31)
60 /* Bits 30:24 - Prot, Implementation defined, for Cortex-M3: */
61 #define ADIV5_AP_CSW_MASTERTYPE_DEBUG (1u << 29)
62 #define ADIV5_AP_CSW_HPROT1 (1u << 25)
63 #define ADIV5_AP_CSW_SPIDEN (1u << 23)
64 /* Bits 22:12 - Reserved */
65 /* Bits 11:8 - Mode, must be zero */
66 #define ADIV5_AP_CSW_TRINPROG (1u << 7)
67 #define ADIV5_AP_CSW_DEVICEEN (1u << 6)
68 #define ADIV5_AP_CSW_ADDRINC_NONE (0u << 4)
69 #define ADIV5_AP_CSW_ADDRINC_SINGLE (1u << 4)
70 #define ADIV5_AP_CSW_ADDRINC_PACKED (2u << 4)
71 #define ADIV5_AP_CSW_ADDRINC_MASK (3u << 4)
72 /* Bit 3 - Reserved */
73 #define ADIV5_AP_CSW_SIZE_BYTE (0u << 0)
74 #define ADIV5_AP_CSW_SIZE_HALFWORD (1u << 0)
75 #define ADIV5_AP_CSW_SIZE_WORD (2u << 0)
76 #define ADIV5_AP_CSW_SIZE_MASK (7u << 0)
77 
78 /* Constants to make RnW and APnDP parameters more clear in code */
79 #define ADIV5_LOW_WRITE 0
80 #define ADIV5_LOW_READ 1
81 #define ADIV5_LOW_DP 0
82 #define ADIV5_LOW_AP 1
83 
84 // Forward declare
85 class ADIv5AP;
86 class GdbServer;
87 
94 class ADIv5DP {
95 
96  public:
98  ADIv5DP ();
100  void dp_init (void);
101  /*
102  * Původně tyhle reference asi sloužily pro více targetů.
103  * Protože zde bude ADIv5APDP součástí targetu, je to asi zbytečné.
104  * */
105  //void adiv5_dp_ref (void);
106  //void adiv5_dp_unref (void);
107 
114  void dp_write (uint8_t addr, uint32_t value);
116  uint32_t dp_read (uint8_t addr);
118  uint32_t error (void);
128  uint32_t low_access (uint8_t APnDP, uint8_t RnW,
129  uint8_t addr, uint32_t value);
131  void dp_write_ap (uint8_t addr, uint32_t value);
133  uint32_t dp_read_ap (uint8_t addr);
134 
135  private: // data necháme veřejná, není to čisté, ale jednodušší.
136  public:
141  //int refcnt;
143  uint32_t idcode;
145  uint32_t allow_timeout;
147  union {
148  void * unused;
149  uint8_t fault;
150  };
151 
152 };
154 class ADIv5AP {
155  public:
157  ADIv5AP ();
159  uint32_t ap_mem_read (uint32_t addr);
161  void ap_mem_write (uint32_t addr, uint32_t value);
163  uint16_t ap_mem_read_halfword (uint32_t addr);
165  void ap_mem_write_halfword (uint32_t addr, uint16_t value);
167  void ap_write (uint8_t addr, uint32_t value);
169  uint32_t ap_read (uint8_t addr);
170 
171  private: // data necháme veřejná, není to čisté, ale jednodušší.
172  public:
175  uint32_t apsel;
176 
177  uint32_t idr;
178  uint32_t cfg;
179  uint32_t base;
180  uint32_t csw;
181 };
187 class ADIv5APDP {
188  public:
190  ADIv5APDP ();
191 
194 };
195 
196 #endif // ADIV5APDP_H
uint32_t ap_mem_read(uint32_t addr)
čtení AP paměti.
Data Point Tohle je celé poněkud divně strukturované. Moc nechápu, jak by to mělo být správně...
Definition: adiv5apdp.h:94
ADIv5AP * ap
Zároveň je potřeba i Access Point.
Definition: adiv5apdp.h:140
ADIv5DP()
Konstruktor.
uint32_t base
???
Definition: adiv5apdp.h:179
ADIv5DP * dp
Zase je zde potřeba přístup na DP.
Definition: adiv5apdp.h:174
uint8_t APnDP
< Init / IO
Definition: swdp.h:160
APDP zapouzdření Asi to mělo být trochu jinak, ale takhle jednoduše to bude také dobře. Tato struktura bude součástí targetu.
Definition: adiv5apdp.h:187
ADIv5AP()
Konstruktor.
ADIv5DP dp
Data Point.
Definition: adiv5apdp.h:193
uint32_t error(void)
Zjištění chybového stavu.
uint32_t ap_read(uint8_t addr)
Čtení AP.
uint8_t RnW
Read / Write.
Definition: swdp.h:162
uint32_t low_access(uint8_t APnDP, uint8_t RnW, uint8_t addr, uint32_t value)
Obal na nízkoúrovňový přístup pro Swdp.
void ap_mem_write(uint32_t addr, uint32_t value)
zápis AP paměti
uint32_t apsel
???
Definition: adiv5apdp.h:175
uint32_t cfg
???
Definition: adiv5apdp.h:178
uint32_t allow_timeout
Zřejmě k ničemu.
Definition: adiv5apdp.h:145
uint32_t dp_read_ap(uint8_t addr)
Čerti vědí
void ap_write(uint8_t addr, uint32_t value)
Zápis AP.
void ap_mem_write_halfword(uint32_t addr, uint16_t value)
zápis AP paměti (16 bit)
uint16_t ap_mem_read_halfword(uint32_t addr)
čtení AP paměti (16 bit)
ADIv5APDP()
Konstruktor.
ADIv5AP ap
Access point.
Definition: adiv5apdp.h:192
void dp_init(void)
Základní inicializace.
uint32_t idcode
Core ID.
Definition: adiv5apdp.h:143
GdbServer * gdb
GdbServer potřebujeme pro přístup k některým funkcím.
Definition: adiv5apdp.h:138
void dp_write_ap(uint8_t addr, uint32_t value)
Čerti vědí
Vlastní obsluha gdb paketů. Nejpodstatnější část celého programu. Vše se děje v přerušení od USB...
Definition: gdbserver.h:28
Access Point.
Definition: adiv5apdp.h:154
void dp_write(uint8_t addr, uint32_t value)
Zápis do Data Pointu.
uint32_t dp_read(uint8_t addr)
Stejně tak čtení
uint32_t idr
???
Definition: adiv5apdp.h:177
uint32_t csw
???
Definition: adiv5apdp.h:180