Debugging tool for mbed enabled microcontrollers, especially for NUCLEO-F303RE and STM32F042F6P6.

Committer:
bieleluk
Date:
Mon May 06 00:32:53 2019 +0000
Revision:
2:478ba8b83e3f
Parent:
1:dbb9fcc20d07
Child:
3:3d7837ae4a37

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bieleluk 0:e36b454cc2e6 1 #pragma once
bieleluk 0:e36b454cc2e6 2
bieleluk 0:e36b454cc2e6 3 // include files
bieleluk 0:e36b454cc2e6 4 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 5 #include "mbed.h"
bieleluk 0:e36b454cc2e6 6
bieleluk 0:e36b454cc2e6 7 // macros
bieleluk 0:e36b454cc2e6 8 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 9 #define name(var) #var
bieleluk 0:e36b454cc2e6 10
bieleluk 0:e36b454cc2e6 11
bieleluk 0:e36b454cc2e6 12 // assembly functions
bieleluk 0:e36b454cc2e6 13 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 14 extern "C" int check_1_bit(uint32_t gpiox, uint32_t offset, uint32_t pin);
bieleluk 0:e36b454cc2e6 15 extern "C" int check_2_bit(uint32_t gpiox, uint32_t offset, uint32_t pin);
bieleluk 0:e36b454cc2e6 16 extern "C" int check_alternative_mode(uint32_t gpiox, uint32_t offset, uint32_t pin);
bieleluk 0:e36b454cc2e6 17 extern "C" int read_word(uint32_t address, uint32_t offset);
bieleluk 0:e36b454cc2e6 18
bieleluk 0:e36b454cc2e6 19 // structs
bieleluk 0:e36b454cc2e6 20 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 21 typedef struct Pin {
bieleluk 0:e36b454cc2e6 22 char port;
bieleluk 0:e36b454cc2e6 23 int number;
bieleluk 0:e36b454cc2e6 24 } pin_t;
bieleluk 0:e36b454cc2e6 25
bieleluk 0:e36b454cc2e6 26
bieleluk 0:e36b454cc2e6 27 /** Debug_serial class.
bieleluk 0:e36b454cc2e6 28 * Class for stepping programme and printing actual position of the running programme with optional print of one variable (int, float, char or char*).
bieleluk 0:e36b454cc2e6 29 * Functions printf, putc and getc are also defined in the class.
bieleluk 0:e36b454cc2e6 30 *
bieleluk 0:e36b454cc2e6 31 * Example program:
bieleluk 0:e36b454cc2e6 32 * @code
bieleluk 0:e36b454cc2e6 33 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 34 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 35 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 0:e36b454cc2e6 36 * // Date of publication: 15. Apr 2019
bieleluk 0:e36b454cc2e6 37 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 38 * #include "Debug.h"
bieleluk 0:e36b454cc2e6 39 * AnalogIn analog(PA_5);
bieleluk 0:e36b454cc2e6 40 * PwmOut pwm(PA_6);
bieleluk 0:e36b454cc2e6 41 * DigitalOut out(PA_4);
bieleluk 0:e36b454cc2e6 42 * Debug_serial pc(PA_2, PA_3, 115200); //
bieleluk 0:e36b454cc2e6 43 *
bieleluk 0:e36b454cc2e6 44 * int main(){
bieleluk 0:e36b454cc2e6 45 * int var = 0;
bieleluk 0:e36b454cc2e6 46 * char character;
bieleluk 0:e36b454cc2e6 47 * out = 1;
bieleluk 0:e36b454cc2e6 48 * float pi = 3.14159265359;
bieleluk 0:e36b454cc2e6 49 * pc.breakpoint(__LINE__,name(pi),pi);
bieleluk 0:e36b454cc2e6 50 * char* arr = "this is string";
bieleluk 0:e36b454cc2e6 51 * pc.breakpoint(__LINE__,name(arr),arr);
bieleluk 0:e36b454cc2e6 52 * pwm = 0.5;
bieleluk 0:e36b454cc2e6 53 * pwm.period(1);
bieleluk 0:e36b454cc2e6 54 * while(1){
bieleluk 0:e36b454cc2e6 55 * pc.breakpoint(__LINE__,name(var),var);
bieleluk 0:e36b454cc2e6 56 * pc.printf("insert character\n\r");
bieleluk 2:478ba8b83e3f 57 * while (!pc.readable()){}
bieleluk 0:e36b454cc2e6 58 * character = pc.getc();
bieleluk 0:e36b454cc2e6 59 * pc.printf("you have inserted %c\n\r",character);
bieleluk 0:e36b454cc2e6 60 * var++;
bieleluk 1:dbb9fcc20d07 61 * pc.breakpoint(__LINE__, 0x48000000);
bieleluk 0:e36b454cc2e6 62 * wait(1);
bieleluk 0:e36b454cc2e6 63 * }
bieleluk 0:e36b454cc2e6 64 * }
bieleluk 0:e36b454cc2e6 65 * @endcode
bieleluk 0:e36b454cc2e6 66 */
bieleluk 0:e36b454cc2e6 67 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 68 class Debug_serial {
bieleluk 0:e36b454cc2e6 69 public:
bieleluk 0:e36b454cc2e6 70
bieleluk 0:e36b454cc2e6 71 /** Create object of class Debug_serial
bieleluk 0:e36b454cc2e6 72 * @param tx_pin TX pin of serial port of the board
bieleluk 0:e36b454cc2e6 73 * @param rx_pin RX pin of serial port of the board
bieleluk 0:e36b454cc2e6 74 * @param baudrate desired baudrate value of debug serial port
bieleluk 0:e36b454cc2e6 75 */
bieleluk 0:e36b454cc2e6 76 Debug_serial(PinName tx_pin, PinName rx_pin, int baudrate = 115200);
bieleluk 0:e36b454cc2e6 77
bieleluk 0:e36b454cc2e6 78 /** Perform one breakpoint without printing variable
bieleluk 0:e36b454cc2e6 79 * @param line_number line number of the breakpoint
bieleluk 0:e36b454cc2e6 80 */
bieleluk 0:e36b454cc2e6 81 void breakpoint(int line_number = -1);
bieleluk 0:e36b454cc2e6 82
bieleluk 0:e36b454cc2e6 83 /** Perform one breakpoint and print variable of type int
bieleluk 0:e36b454cc2e6 84 * @param line_number Line number of the breakpoint
bieleluk 0:e36b454cc2e6 85 * @param name name of printed variable(max length is 19)
bieleluk 0:e36b454cc2e6 86 * @param variable
bieleluk 0:e36b454cc2e6 87 */
bieleluk 0:e36b454cc2e6 88 void breakpoint(int line_number, char name[20], int variable);
bieleluk 0:e36b454cc2e6 89
bieleluk 0:e36b454cc2e6 90 /** Perform one breakpoint and print variable of type char
bieleluk 0:e36b454cc2e6 91 * @param line_number Line number of the breakpoint
bieleluk 0:e36b454cc2e6 92 * @param name name of printed variable(max length is 19)
bieleluk 0:e36b454cc2e6 93 * @param variable
bieleluk 0:e36b454cc2e6 94 */
bieleluk 0:e36b454cc2e6 95 void breakpoint(int line_number, char name[20], char variable);
bieleluk 0:e36b454cc2e6 96
bieleluk 0:e36b454cc2e6 97 /** Perform one breakpoint and print variable of type string
bieleluk 0:e36b454cc2e6 98 * @param line_number Line number of the breakpoint
bieleluk 0:e36b454cc2e6 99 * @param name name of printed variable(max length is 19)
bieleluk 0:e36b454cc2e6 100 * @param variable
bieleluk 0:e36b454cc2e6 101 */
bieleluk 0:e36b454cc2e6 102 void breakpoint(int line_number, char name[20], char * variable);
bieleluk 0:e36b454cc2e6 103
bieleluk 0:e36b454cc2e6 104 /** Perform one breakpoint and print variable of type float
bieleluk 0:e36b454cc2e6 105 * @param line_number Line number of the breakpoint
bieleluk 0:e36b454cc2e6 106 * @param name name of printed variable(max length is 19)
bieleluk 0:e36b454cc2e6 107 * @param variable
bieleluk 0:e36b454cc2e6 108 */
bieleluk 0:e36b454cc2e6 109 void breakpoint(int line_number, char name[20], float variable);
bieleluk 0:e36b454cc2e6 110
bieleluk 1:dbb9fcc20d07 111 /** Perform one breakpoint and print one register value
bieleluk 1:dbb9fcc20d07 112 * @param line_number Line number of the breakpoint
bieleluk 1:dbb9fcc20d07 113 * @param address
bieleluk 1:dbb9fcc20d07 114 * @param offset
bieleluk 1:dbb9fcc20d07 115 */
bieleluk 1:dbb9fcc20d07 116 void breakpoint(int line_number, uint32_t address, uint32_t offset = 0);
bieleluk 1:dbb9fcc20d07 117
bieleluk 0:e36b454cc2e6 118 /** Print formatted string to debug serial port
bieleluk 0:e36b454cc2e6 119 * @param string
bieleluk 0:e36b454cc2e6 120 * @param format (optional)
bieleluk 0:e36b454cc2e6 121 * @returns total number of printed characters or negative value if an output error or an encoding error
bieleluk 0:e36b454cc2e6 122 */
bieleluk 0:e36b454cc2e6 123 int printf(const char* format, ...);
bieleluk 0:e36b454cc2e6 124
bieleluk 0:e36b454cc2e6 125 /** Print one character to debug serial port
bieleluk 0:e36b454cc2e6 126 * @param character
bieleluk 0:e36b454cc2e6 127 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 128 */
bieleluk 0:e36b454cc2e6 129 int putc(int character);
bieleluk 0:e36b454cc2e6 130
bieleluk 0:e36b454cc2e6 131 /** Read one character from debug serial port
bieleluk 0:e36b454cc2e6 132 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 133 */
bieleluk 0:e36b454cc2e6 134 int getc();
bieleluk 2:478ba8b83e3f 135
bieleluk 2:478ba8b83e3f 136 bool readable();
bieleluk 2:478ba8b83e3f 137 bool writable();
bieleluk 2:478ba8b83e3f 138
bieleluk 0:e36b454cc2e6 139 private:
bieleluk 0:e36b454cc2e6 140 int break_line[3]; //store number of lines of three previous breakpoints
bieleluk 0:e36b454cc2e6 141 char var[3][50]; //store variables of three previous breakpoints
bieleluk 0:e36b454cc2e6 142
bieleluk 0:e36b454cc2e6 143 protected:
bieleluk 0:e36b454cc2e6 144 // objects:
bieleluk 0:e36b454cc2e6 145 Serial pc; //debug serial device
bieleluk 0:e36b454cc2e6 146 // variables:
bieleluk 0:e36b454cc2e6 147 int breakpoint_count; //stores number of the current breakpoint
bieleluk 0:e36b454cc2e6 148 // functions
bieleluk 0:e36b454cc2e6 149 // initialization function
bieleluk 0:e36b454cc2e6 150 void init();
bieleluk 0:e36b454cc2e6 151 // print 3 last breakpoints
bieleluk 0:e36b454cc2e6 152 void print_3_breaks(int line_number);
bieleluk 0:e36b454cc2e6 153 // print one breakpoint
bieleluk 0:e36b454cc2e6 154 void print_one_break(int n);
bieleluk 0:e36b454cc2e6 155 // clear screen from m line up to n line
bieleluk 0:e36b454cc2e6 156 void clear_from_n_up_to_m(int m, int n);
bieleluk 0:e36b454cc2e6 157 };
bieleluk 0:e36b454cc2e6 158
bieleluk 0:e36b454cc2e6 159
bieleluk 0:e36b454cc2e6 160
bieleluk 0:e36b454cc2e6 161
bieleluk 0:e36b454cc2e6 162 /** Debug_led class.
bieleluk 0:e36b454cc2e6 163 * Class for stepping the program with debug LED and button, that is connected to GND(default) or VCC.
bieleluk 0:e36b454cc2e6 164 *
bieleluk 0:e36b454cc2e6 165 * Example program:
bieleluk 0:e36b454cc2e6 166 * @code
bieleluk 0:e36b454cc2e6 167 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 168 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 169 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 0:e36b454cc2e6 170 * // Date of publication: 15. Apr 2019
bieleluk 0:e36b454cc2e6 171 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 172 * #include "Debug.h"
bieleluk 0:e36b454cc2e6 173 * AnalogIn analog(PA_3);
bieleluk 0:e36b454cc2e6 174 * PwmOut pwm(PA_4);
bieleluk 0:e36b454cc2e6 175 * DigitalOut out(PA_2);
bieleluk 0:e36b454cc2e6 176 * Debug_led deb(PA_5, PA_6, "BUTTON_VDD"); //debug led on PA5, debug button connected to VDD on PA6
bieleluk 0:e36b454cc2e6 177 * int main(){
bieleluk 0:e36b454cc2e6 178 *
bieleluk 0:e36b454cc2e6 179 * out = 1;
bieleluk 0:e36b454cc2e6 180 * deb.breakpoint(1);
bieleluk 0:e36b454cc2e6 181 * pwm = 0.5;
bieleluk 0:e36b454cc2e6 182 * pwm.period(1);
bieleluk 0:e36b454cc2e6 183 * deb.breakpoint(2);
bieleluk 0:e36b454cc2e6 184 *
bieleluk 0:e36b454cc2e6 185 * while(1){
bieleluk 0:e36b454cc2e6 186 * deb.breakpoint();
bieleluk 0:e36b454cc2e6 187 * pwm = pwm + 0.1;
bieleluk 0:e36b454cc2e6 188 * wait(2);
bieleluk 0:e36b454cc2e6 189 * }
bieleluk 0:e36b454cc2e6 190 * }
bieleluk 0:e36b454cc2e6 191 * @endcode
bieleluk 0:e36b454cc2e6 192 */
bieleluk 0:e36b454cc2e6 193 // class Debug_led
bieleluk 0:e36b454cc2e6 194 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 195 class Debug_led {
bieleluk 0:e36b454cc2e6 196 public:
bieleluk 0:e36b454cc2e6 197
bieleluk 0:e36b454cc2e6 198 /** Create object of class Debug_led
bieleluk 0:e36b454cc2e6 199 * @param led_pin pin of of debug led
bieleluk 0:e36b454cc2e6 200 * @param button_pin pin of of debug button
bieleluk 0:e36b454cc2e6 201 * @param mode mode of button connection("BUTTON_GND", "BUTTON_VCC", "BUTTON_VDD")
bieleluk 0:e36b454cc2e6 202 */
bieleluk 0:e36b454cc2e6 203 Debug_led(PinName led_pin, PinName button_pin, char mode[11] = "BUTTON_GND");
bieleluk 0:e36b454cc2e6 204
bieleluk 0:e36b454cc2e6 205 /** Perform one breakpoint
bieleluk 0:e36b454cc2e6 206 * @param number number of flashes of LED during the breakpoint(optional)
bieleluk 0:e36b454cc2e6 207 */
bieleluk 0:e36b454cc2e6 208 void breakpoint(int number = -1);
bieleluk 0:e36b454cc2e6 209
bieleluk 0:e36b454cc2e6 210 private:
bieleluk 0:e36b454cc2e6 211 // objects
bieleluk 0:e36b454cc2e6 212 DigitalOut led; //debug led
bieleluk 0:e36b454cc2e6 213 InterruptIn button; //debug button
bieleluk 0:e36b454cc2e6 214 // variables
bieleluk 0:e36b454cc2e6 215 int button_mode; //mode of button 1->pullupt, 0->pulldown
bieleluk 0:e36b454cc2e6 216 volatile bool end_breakpoint;
bieleluk 0:e36b454cc2e6 217 int number_of_breakpoints;
bieleluk 0:e36b454cc2e6 218
bieleluk 0:e36b454cc2e6 219 /** Initialization */
bieleluk 0:e36b454cc2e6 220 void init(char mode[11]);
bieleluk 0:e36b454cc2e6 221
bieleluk 0:e36b454cc2e6 222 /** Blinks the debug led n-times with blink period wait_time_ms */
bieleluk 0:e36b454cc2e6 223 void flash_n_times(int wait_time_ms, int n);
bieleluk 0:e36b454cc2e6 224
bieleluk 0:e36b454cc2e6 225 /** end the break after the button is pushed */
bieleluk 0:e36b454cc2e6 226 void end_break();
bieleluk 0:e36b454cc2e6 227
bieleluk 0:e36b454cc2e6 228
bieleluk 0:e36b454cc2e6 229 };
bieleluk 0:e36b454cc2e6 230
bieleluk 0:e36b454cc2e6 231
bieleluk 0:e36b454cc2e6 232 /** Debug_register class.
bieleluk 0:e36b454cc2e6 233 *
bieleluk 0:e36b454cc2e6 234 * Example program:
bieleluk 0:e36b454cc2e6 235 * @code
bieleluk 0:e36b454cc2e6 236 * //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 237 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 238 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 239 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 0:e36b454cc2e6 240 * // Date of publication: 15. Apr 2019
bieleluk 0:e36b454cc2e6 241 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 242 * #include "Debug.h"
bieleluk 0:e36b454cc2e6 243 * AnalogIn analog(PA_5);
bieleluk 0:e36b454cc2e6 244 * PwmOut pwm(PA_6);
bieleluk 0:e36b454cc2e6 245 * DigitalOut out(PA_4);
bieleluk 0:e36b454cc2e6 246 * Debug_register pc(PA_2, PA_3, 115200);
bieleluk 0:e36b454cc2e6 247 *
bieleluk 0:e36b454cc2e6 248 * int main(){
bieleluk 0:e36b454cc2e6 249 * pc.breakpoint(__LINE__,0x48000000);
bieleluk 0:e36b454cc2e6 250 * DigitalOut out2 (PA_0);
bieleluk 0:e36b454cc2e6 251 * pc.breakpoint(__LINE__,0x48000000);
bieleluk 0:e36b454cc2e6 252 * AnalogIn analog2 (PA_1);
bieleluk 0:e36b454cc2e6 253 * pc.breakpoint(__LINE__,0x48000000);
bieleluk 0:e36b454cc2e6 254 *
bieleluk 0:e36b454cc2e6 255 * while(1){
bieleluk 0:e36b454cc2e6 256 * if(pc.readable()){
bieleluk 0:e36b454cc2e6 257 * pc.putc(pc.getc());
bieleluk 0:e36b454cc2e6 258 * }
bieleluk 0:e36b454cc2e6 259 * wait(0.1);
bieleluk 0:e36b454cc2e6 260 * }
bieleluk 0:e36b454cc2e6 261 * }
bieleluk 0:e36b454cc2e6 262 * @endcode
bieleluk 0:e36b454cc2e6 263 */
bieleluk 0:e36b454cc2e6 264 class Debug_register {
bieleluk 0:e36b454cc2e6 265 public:
bieleluk 0:e36b454cc2e6 266
bieleluk 0:e36b454cc2e6 267 /** Create object of class Debug_serial
bieleluk 0:e36b454cc2e6 268 * @param tx_pin TX pin of serial port of the board
bieleluk 0:e36b454cc2e6 269 * @param rx_pin RX pin of serial port of the board
bieleluk 0:e36b454cc2e6 270 * @param baudrate desired baudrate value of debug serial port
bieleluk 0:e36b454cc2e6 271 */
bieleluk 0:e36b454cc2e6 272 Debug_register(PinName tx_pin, PinName rx_pin, int baudrate = 115200);
bieleluk 0:e36b454cc2e6 273
bieleluk 0:e36b454cc2e6 274 /** Perform one breakpoint and print one register
bieleluk 0:e36b454cc2e6 275 * @param line_number line number of the breakpoint
bieleluk 0:e36b454cc2e6 276 * @param address
bieleluk 0:e36b454cc2e6 277 * @param offset
bieleluk 0:e36b454cc2e6 278 */
bieleluk 0:e36b454cc2e6 279 void breakpoint(int line_number = -1, uint32_t address = 0, uint32_t offset = 0);
bieleluk 0:e36b454cc2e6 280
bieleluk 0:e36b454cc2e6 281
bieleluk 0:e36b454cc2e6 282
bieleluk 0:e36b454cc2e6 283 /** Print formatted string to debug serial port
bieleluk 0:e36b454cc2e6 284 * @param string
bieleluk 0:e36b454cc2e6 285 * @param format (optional)
bieleluk 0:e36b454cc2e6 286 * @returns total number of printed characters or negative value if an output error or an encoding error
bieleluk 0:e36b454cc2e6 287 */
bieleluk 0:e36b454cc2e6 288 int printf(const char* format, ...);
bieleluk 0:e36b454cc2e6 289
bieleluk 0:e36b454cc2e6 290 /** Print one character to debug serial port
bieleluk 0:e36b454cc2e6 291 * @param character
bieleluk 0:e36b454cc2e6 292 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 293 */
bieleluk 0:e36b454cc2e6 294 int putc(int character);
bieleluk 0:e36b454cc2e6 295
bieleluk 0:e36b454cc2e6 296 /** Read one character from debug serial port
bieleluk 0:e36b454cc2e6 297 * @returns character written as an unsigned char cast to an int
bieleluk 0:e36b454cc2e6 298 */
bieleluk 0:e36b454cc2e6 299 int getc();
bieleluk 0:e36b454cc2e6 300
bieleluk 0:e36b454cc2e6 301 bool readable();
bieleluk 2:478ba8b83e3f 302 bool writable();
bieleluk 0:e36b454cc2e6 303
bieleluk 0:e36b454cc2e6 304 protected:
bieleluk 0:e36b454cc2e6 305 // objects:
bieleluk 0:e36b454cc2e6 306 Serial pc; //debug serial device
bieleluk 0:e36b454cc2e6 307 // variables:
bieleluk 0:e36b454cc2e6 308 int breakpoint_count; //stores number of the current breakpoint
bieleluk 0:e36b454cc2e6 309 // functions
bieleluk 0:e36b454cc2e6 310 // initialization function
bieleluk 0:e36b454cc2e6 311 void init();
bieleluk 0:e36b454cc2e6 312 // clear screen from m line up to n line
bieleluk 0:e36b454cc2e6 313 void clear_from_n_up_to_m(int m, int n);
bieleluk 0:e36b454cc2e6 314 };
bieleluk 0:e36b454cc2e6 315 /** Debug_register_print class.
bieleluk 0:e36b454cc2e6 316 *
bieleluk 0:e36b454cc2e6 317 * Example program:
bieleluk 0:e36b454cc2e6 318 * @code
bieleluk 0:e36b454cc2e6 319 * //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 320 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 321 * // Author: Lukas Bielesch
bieleluk 0:e36b454cc2e6 322 * // Department of Measurement, Czech technical university in Prague, Czech Republic
bieleluk 0:e36b454cc2e6 323 * // Date of publication: 15. Apr 2019
bieleluk 0:e36b454cc2e6 324 * // ----------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 325 * #include "Debug.h"
bieleluk 0:e36b454cc2e6 326 * AnalogIn analog(PA_5);
bieleluk 0:e36b454cc2e6 327 * PwmOut pwm(PA_6);
bieleluk 0:e36b454cc2e6 328 * DigitalOut out(PA_4);
bieleluk 0:e36b454cc2e6 329 * Debug_register_print pc(PA_2, PA_3, 115200);
bieleluk 0:e36b454cc2e6 330 *
bieleluk 0:e36b454cc2e6 331 * int main(){
bieleluk 0:e36b454cc2e6 332 * pc.format(2,2,1,3);//breakpoint count,line number, address, value
bieleluk 0:e36b454cc2e6 333 * pc.breakpoint(__LINE__,0x48000000);
bieleluk 0:e36b454cc2e6 334 * DigitalOut out2 (PA_0);
bieleluk 0:e36b454cc2e6 335 * pc.breakpoint(__LINE__,0x48000000);
bieleluk 0:e36b454cc2e6 336 * AnalogIn analog2 (PA_1);
bieleluk 0:e36b454cc2e6 337 * pc.breakpoint(__LINE__,0x48000000);
bieleluk 0:e36b454cc2e6 338 *
bieleluk 0:e36b454cc2e6 339 * while(1){
bieleluk 0:e36b454cc2e6 340 * wait(1);
bieleluk 0:e36b454cc2e6 341 * }
bieleluk 0:e36b454cc2e6 342 * }
bieleluk 0:e36b454cc2e6 343 * @endcode
bieleluk 0:e36b454cc2e6 344 */
bieleluk 0:e36b454cc2e6 345 class Debug_register_print {
bieleluk 0:e36b454cc2e6 346 public:
bieleluk 0:e36b454cc2e6 347
bieleluk 0:e36b454cc2e6 348 /** Create object of class Debug_serial
bieleluk 0:e36b454cc2e6 349 * @param tx_pin TX pin of serial port of the board
bieleluk 0:e36b454cc2e6 350 * @param rx_pin RX pin of serial port of the board
bieleluk 0:e36b454cc2e6 351 * @param baudrate desired baudrate value of debug serial port
bieleluk 0:e36b454cc2e6 352 */
bieleluk 0:e36b454cc2e6 353 Debug_register_print(PinName tx_pin, PinName rx_pin, int baudrate = 115200);
bieleluk 0:e36b454cc2e6 354
bieleluk 0:e36b454cc2e6 355
bieleluk 0:e36b454cc2e6 356 void format(int break_number = 2, int line = 2, int address = 1, int value = 1);
bieleluk 0:e36b454cc2e6 357
bieleluk 0:e36b454cc2e6 358 /** Perform one breakpoint and print one register
bieleluk 0:e36b454cc2e6 359 * @param line_number line number of the breakpoint
bieleluk 0:e36b454cc2e6 360 * @param address
bieleluk 0:e36b454cc2e6 361 * @param offset
bieleluk 0:e36b454cc2e6 362 */
bieleluk 0:e36b454cc2e6 363 void breakpoint(int line_number = -1, uint32_t address = 0, uint32_t offset = 0);
bieleluk 0:e36b454cc2e6 364
bieleluk 0:e36b454cc2e6 365
bieleluk 0:e36b454cc2e6 366 protected:
bieleluk 0:e36b454cc2e6 367 // objects:
bieleluk 0:e36b454cc2e6 368 Serial pc; //debug serial device
bieleluk 0:e36b454cc2e6 369 // variables:
bieleluk 0:e36b454cc2e6 370 int breakpoint_count; //stores number of the current breakpoint
bieleluk 0:e36b454cc2e6 371 int count_format;
bieleluk 0:e36b454cc2e6 372 int line_format;
bieleluk 0:e36b454cc2e6 373 int address_format;
bieleluk 0:e36b454cc2e6 374 int register_format;
bieleluk 0:e36b454cc2e6 375 // functions
bieleluk 0:e36b454cc2e6 376 // initialization function
bieleluk 0:e36b454cc2e6 377 void init();
bieleluk 0:e36b454cc2e6 378
bieleluk 0:e36b454cc2e6 379 };