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

Committer:
bieleluk
Date:
Mon May 06 00:01:17 2019 +0000
Revision:
0:e36b454cc2e6
Child:
3:3d7837ae4a37

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bieleluk 0:e36b454cc2e6 1 #include "Debug.h"
bieleluk 0:e36b454cc2e6 2
bieleluk 0:e36b454cc2e6 3 // create object of class Debug_register
bieleluk 0:e36b454cc2e6 4 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 5 Debug_register_print::Debug_register_print(PinName tx_pin, PinName rx_pin, int baudrate) : pc(tx_pin,rx_pin, baudrate) {
bieleluk 0:e36b454cc2e6 6 init();
bieleluk 0:e36b454cc2e6 7 }
bieleluk 0:e36b454cc2e6 8
bieleluk 0:e36b454cc2e6 9 // init function
bieleluk 0:e36b454cc2e6 10 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 11 void Debug_register_print::init() {
bieleluk 0:e36b454cc2e6 12 pc.printf("\ec");
bieleluk 0:e36b454cc2e6 13 wait_ms(50);
bieleluk 0:e36b454cc2e6 14 breakpoint_count=0;
bieleluk 0:e36b454cc2e6 15 count_format = 2; //binary
bieleluk 0:e36b454cc2e6 16 line_format = 2; //binary
bieleluk 0:e36b454cc2e6 17 address_format = 1; //hexa
bieleluk 0:e36b454cc2e6 18 register_format = 1; //hexa
bieleluk 0:e36b454cc2e6 19
bieleluk 0:e36b454cc2e6 20 }
bieleluk 0:e36b454cc2e6 21
bieleluk 0:e36b454cc2e6 22
bieleluk 0:e36b454cc2e6 23
bieleluk 0:e36b454cc2e6 24
bieleluk 0:e36b454cc2e6 25 // perform one breakpoint and print one register
bieleluk 0:e36b454cc2e6 26 //------------------------------------------------------------------------------------------------------------------
bieleluk 0:e36b454cc2e6 27 void Debug_register_print::breakpoint(int line_number, uint32_t address, uint32_t offset){
bieleluk 0:e36b454cc2e6 28
bieleluk 0:e36b454cc2e6 29
bieleluk 0:e36b454cc2e6 30 breakpoint_count++;
bieleluk 0:e36b454cc2e6 31
bieleluk 0:e36b454cc2e6 32 if( count_format == 1){
bieleluk 0:e36b454cc2e6 33 pc.printf("Break no. 0x%3x ",breakpoint_count);
bieleluk 0:e36b454cc2e6 34 }else if( count_format == 2){
bieleluk 0:e36b454cc2e6 35 pc.printf("Break no. %3d ",breakpoint_count);
bieleluk 0:e36b454cc2e6 36 }
bieleluk 0:e36b454cc2e6 37
bieleluk 0:e36b454cc2e6 38 if( line_format == 1){
bieleluk 0:e36b454cc2e6 39 pc.printf("Line no. 0x%3x ",line_number);
bieleluk 0:e36b454cc2e6 40 }else if( line_format == 2){
bieleluk 0:e36b454cc2e6 41 pc.printf("Line no. %3d ",line_number);
bieleluk 0:e36b454cc2e6 42 }
bieleluk 0:e36b454cc2e6 43
bieleluk 0:e36b454cc2e6 44 if( address_format == 1){
bieleluk 0:e36b454cc2e6 45 pc.printf("Address 0x%8x ", address + offset);
bieleluk 0:e36b454cc2e6 46 }else if( address_format == 2){
bieleluk 0:e36b454cc2e6 47 pc.printf("Address %10u ", address + offset);
bieleluk 0:e36b454cc2e6 48 }
bieleluk 0:e36b454cc2e6 49
bieleluk 0:e36b454cc2e6 50 uint32_t reg = read_word(address, offset);
bieleluk 0:e36b454cc2e6 51
bieleluk 0:e36b454cc2e6 52 if( register_format == 1){
bieleluk 0:e36b454cc2e6 53 pc.printf("Value 0x%8x ", reg);
bieleluk 0:e36b454cc2e6 54 }else if( register_format == 2){
bieleluk 0:e36b454cc2e6 55 pc.printf("Value %10u ", reg);
bieleluk 0:e36b454cc2e6 56 }else if( register_format == 3){
bieleluk 0:e36b454cc2e6 57 pc.printf("Value ");
bieleluk 0:e36b454cc2e6 58 for (int i = 0; i < 32; i++){
bieleluk 0:e36b454cc2e6 59 if (i%4 == 0) pc.printf(" ");
bieleluk 0:e36b454cc2e6 60 pc.printf("%d",reg >> (31 - i));
bieleluk 0:e36b454cc2e6 61 reg -= ((reg >> (31 - i)) << (31 - i));
bieleluk 0:e36b454cc2e6 62 }
bieleluk 0:e36b454cc2e6 63 }
bieleluk 0:e36b454cc2e6 64 pc.printf("\n\r");
bieleluk 0:e36b454cc2e6 65
bieleluk 0:e36b454cc2e6 66
bieleluk 0:e36b454cc2e6 67
bieleluk 0:e36b454cc2e6 68 }
bieleluk 0:e36b454cc2e6 69
bieleluk 0:e36b454cc2e6 70 void Debug_register_print::format(int break_number, int line, int address, int value){
bieleluk 0:e36b454cc2e6 71
bieleluk 0:e36b454cc2e6 72 count_format = break_number; //binay
bieleluk 0:e36b454cc2e6 73 line_format = line; //binary
bieleluk 0:e36b454cc2e6 74 address_format = address; //hexa
bieleluk 0:e36b454cc2e6 75 register_format = value; //hexa
bieleluk 0:e36b454cc2e6 76
bieleluk 0:e36b454cc2e6 77 }