Add dcc debug write and fix mcu part number
This commit is contained in:
parent
b1a4be5661
commit
b7d241746c
66
.clang-format
Normal file
66
.clang-format
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# Generated from CLion C/C++ Code Style settings
|
||||||
|
BasedOnStyle: LLVM
|
||||||
|
AccessModifierOffset: -2
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveAssignments: None
|
||||||
|
AlignOperands: Align
|
||||||
|
AllowAllArgumentsOnNextLine: false
|
||||||
|
AllowAllConstructorInitializersOnNextLine: false
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
|
AllowShortBlocksOnASingleLine: Always
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: Always
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: Never
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterUnion: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: false
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
ColumnLimit: 0
|
||||||
|
CompactNamespaces: false
|
||||||
|
ContinuationIndentWidth: 8
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentWidth: 2
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
|
MaxEmptyLinesToKeep: 2
|
||||||
|
NamespaceIndentation: All
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PointerAlignment: Right
|
||||||
|
ReflowComments: false
|
||||||
|
SpaceAfterCStyleCast: true
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: false
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 0
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInContainerLiterals: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: ForContinuationAndIndentation
|
8
.editorconfig
Normal file
8
.editorconfig
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# top-most EditorConfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,8 @@
|
|||||||
bin/
|
bin/
|
||||||
*.elf
|
*.elf
|
||||||
*.bin
|
*.bin
|
||||||
|
*.map
|
||||||
|
*.lss
|
||||||
|
*.list
|
||||||
generated.*.ld
|
generated.*.ld
|
||||||
.idea
|
.idea
|
||||||
|
11
Makefile
11
Makefile
@ -5,12 +5,17 @@ BUILD_DIR = bin
|
|||||||
|
|
||||||
#SHARED_DIR = ../my-common-code
|
#SHARED_DIR = ../my-common-code
|
||||||
CFILES = main.c
|
CFILES = main.c
|
||||||
#CFILES += api.c
|
|
||||||
#AFILES += api-asm.S
|
#AFILES += api-asm.S
|
||||||
|
|
||||||
# TODO - you will need to edit these two lines!
|
# TODO - you will need to edit these two lines!
|
||||||
DEVICE=stm32f103rcbt6
|
DEVICE=STM32F103C8T6
|
||||||
OOCD_FILE = board/stm32f4discovery.cfg
|
OOCD_FILE=openocd.cfg
|
||||||
|
|
||||||
|
# Send debug messages via OpenOCD DCC support
|
||||||
|
CFILES += dcc_stdio.c
|
||||||
|
VPATH += libdcc
|
||||||
|
INCLUDES += $(patsubst %,-I%, . libdcc)
|
||||||
|
|
||||||
|
|
||||||
# You shouldn't have to edit anything below here.
|
# You shouldn't have to edit anything below here.
|
||||||
#VPATH += $(SHARED_DIR)
|
#VPATH += $(SHARED_DIR)
|
||||||
|
18
libdcc/README
Normal file
18
libdcc/README
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
This code is an example of using the openocd debug message system.
|
||||||
|
|
||||||
|
Before the message output is seen in the debug window, the functionality
|
||||||
|
will need enabling:
|
||||||
|
|
||||||
|
From the gdb prompt:
|
||||||
|
monitor target_request debugmsgs enable
|
||||||
|
monitor trace point 1
|
||||||
|
|
||||||
|
From the Telnet prompt:
|
||||||
|
target_request debugmsgs enable
|
||||||
|
trace point 1
|
||||||
|
|
||||||
|
To see how many times the trace point was hit:
|
||||||
|
(monitor) trace point 1
|
||||||
|
|
||||||
|
Spen
|
||||||
|
spen@spen-soft.co.uk
|
155
libdcc/dcc_stdio.c
Normal file
155
libdcc/dcc_stdio.c
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2008 by Dominic Rath *
|
||||||
|
* Dominic.Rath@gmx.de *
|
||||||
|
* Copyright (C) 2008 by Spencer Oliver *
|
||||||
|
* spen@spen-soft.co.uk *
|
||||||
|
* Copyright (C) 2008 by Frederik Kriewtz *
|
||||||
|
* frederik@kriewitz.eu *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "dcc_stdio.h"
|
||||||
|
|
||||||
|
#define TARGET_REQ_TRACEMSG 0x00
|
||||||
|
#define TARGET_REQ_DEBUGMSG_ASCII 0x01
|
||||||
|
#define TARGET_REQ_DEBUGMSG_HEXMSG(size) (0x01 | ((size & 0xff) << 8))
|
||||||
|
#define TARGET_REQ_DEBUGCHAR 0x02
|
||||||
|
|
||||||
|
#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_6SM__)
|
||||||
|
|
||||||
|
/* we use the System Control Block DCRDR reg to simulate a arm7_9 dcc channel
|
||||||
|
* DCRDR[7:0] is used by target for status
|
||||||
|
* DCRDR[15:8] is used by target for write buffer
|
||||||
|
* DCRDR[23:16] is used for by host for status
|
||||||
|
* DCRDR[31:24] is used for by host for write buffer */
|
||||||
|
|
||||||
|
#define NVIC_DBG_DATA_R (*((volatile unsigned short *)0xE000EDF8))
|
||||||
|
|
||||||
|
#define BUSY 1
|
||||||
|
|
||||||
|
void dbg_write(unsigned long dcc_data)
|
||||||
|
{
|
||||||
|
int len = 4;
|
||||||
|
|
||||||
|
while (len--)
|
||||||
|
{
|
||||||
|
/* wait for data ready */
|
||||||
|
while (NVIC_DBG_DATA_R & BUSY);
|
||||||
|
|
||||||
|
/* write our data and set write flag - tell host there is data*/
|
||||||
|
NVIC_DBG_DATA_R = (unsigned short)(((dcc_data & 0xff) << 8) | BUSY);
|
||||||
|
dcc_data >>= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5T__)
|
||||||
|
|
||||||
|
void dbg_write(unsigned long dcc_data)
|
||||||
|
{
|
||||||
|
unsigned long dcc_status;
|
||||||
|
|
||||||
|
do {
|
||||||
|
asm volatile("mrc p14, 0, %0, c0, c0" : "=r" (dcc_status));
|
||||||
|
} while (dcc_status & 0x2);
|
||||||
|
|
||||||
|
asm volatile("mcr p14, 0, %0, c1, c0" : : "r" (dcc_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error unsupported target
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void dbg_trace_point(unsigned long number)
|
||||||
|
{
|
||||||
|
dbg_write(TARGET_REQ_TRACEMSG | (number << 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
void dbg_write_u32(const unsigned long *val, long len)
|
||||||
|
{
|
||||||
|
dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(4) | ((len & 0xffff) << 16));
|
||||||
|
|
||||||
|
while (len > 0)
|
||||||
|
{
|
||||||
|
dbg_write(*val);
|
||||||
|
|
||||||
|
val++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dbg_write_u16(const unsigned short *val, long len)
|
||||||
|
{
|
||||||
|
unsigned long dcc_data;
|
||||||
|
|
||||||
|
dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(2) | ((len & 0xffff) << 16));
|
||||||
|
|
||||||
|
while (len > 0)
|
||||||
|
{
|
||||||
|
dcc_data = val[0]
|
||||||
|
| ((len > 1) ? val[1] << 16: 0x0000);
|
||||||
|
|
||||||
|
dbg_write(dcc_data);
|
||||||
|
|
||||||
|
val += 2;
|
||||||
|
len -= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dbg_write_u8(const unsigned char *val, long len)
|
||||||
|
{
|
||||||
|
unsigned long dcc_data;
|
||||||
|
|
||||||
|
dbg_write(TARGET_REQ_DEBUGMSG_HEXMSG(1) | ((len & 0xffff) << 16));
|
||||||
|
|
||||||
|
while (len > 0)
|
||||||
|
{
|
||||||
|
dcc_data = val[0]
|
||||||
|
| ((len > 1) ? val[1] << 8 : 0x00)
|
||||||
|
| ((len > 2) ? val[2] << 16 : 0x00)
|
||||||
|
| ((len > 3) ? val[3] << 24 : 0x00);
|
||||||
|
|
||||||
|
dbg_write(dcc_data);
|
||||||
|
|
||||||
|
val += 4;
|
||||||
|
len -= 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dbg_write_str(const char *msg)
|
||||||
|
{
|
||||||
|
long len;
|
||||||
|
unsigned long dcc_data;
|
||||||
|
|
||||||
|
for (len = 0; msg[len] && (len < 65536); len++);
|
||||||
|
|
||||||
|
dbg_write(TARGET_REQ_DEBUGMSG_ASCII | ((len & 0xffff) << 16));
|
||||||
|
|
||||||
|
while (len > 0)
|
||||||
|
{
|
||||||
|
dcc_data = msg[0]
|
||||||
|
| ((len > 1) ? msg[1] << 8 : 0x00)
|
||||||
|
| ((len > 2) ? msg[2] << 16 : 0x00)
|
||||||
|
| ((len > 3) ? msg[3] << 24 : 0x00);
|
||||||
|
dbg_write(dcc_data);
|
||||||
|
|
||||||
|
msg += 4;
|
||||||
|
len -= 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dbg_write_char(char msg)
|
||||||
|
{
|
||||||
|
dbg_write(TARGET_REQ_DEBUGCHAR | ((msg & 0xff) << 16));
|
||||||
|
}
|
35
libdcc/dcc_stdio.h
Normal file
35
libdcc/dcc_stdio.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2008 by Dominic Rath *
|
||||||
|
* Dominic.Rath@gmx.de *
|
||||||
|
* Copyright (C) 2008 by Spencer Oliver *
|
||||||
|
* spen@spen-soft.co.uk *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef DCC_STDIO_H
|
||||||
|
#define DCC_STDIO_H
|
||||||
|
|
||||||
|
void dbg_write(unsigned long dcc_data);
|
||||||
|
|
||||||
|
void dbg_trace_point(unsigned long number);
|
||||||
|
|
||||||
|
void dbg_write_u32(const unsigned long *val, long len);
|
||||||
|
void dbg_write_u16(const unsigned short *val, long len);
|
||||||
|
void dbg_write_u8(const unsigned char *val, long len);
|
||||||
|
|
||||||
|
void dbg_write_str(const char *msg);
|
||||||
|
void dbg_write_char(char msg);
|
||||||
|
|
||||||
|
#endif /* DCC_STDIO_H */
|
56
libdcc/example.c
Normal file
56
libdcc/example.c
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2008 by Spencer Oliver *
|
||||||
|
* spen@spen-soft.co.uk *
|
||||||
|
* Copyright (C) 2008 by Frederik Kriewtz *
|
||||||
|
* frederik@kriewitz.eu *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "dcc_stdio.h"
|
||||||
|
|
||||||
|
/* enable openocd debugmsg at the gdb prompt:
|
||||||
|
* monitor target_request debugmsgs enable
|
||||||
|
*
|
||||||
|
* create a trace point:
|
||||||
|
* monitor trace point 1
|
||||||
|
*
|
||||||
|
* to show how often the trace point was hit:
|
||||||
|
* monitor trace point
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
dbg_write_str("hello world");
|
||||||
|
|
||||||
|
dbg_write_char('t');
|
||||||
|
dbg_write_char('e');
|
||||||
|
dbg_write_char('s');
|
||||||
|
dbg_write_char('t');
|
||||||
|
dbg_write_char('\n');
|
||||||
|
|
||||||
|
unsigned long test_u32 = 0x01234567;
|
||||||
|
dbg_write_u32(&test_u32, 1);
|
||||||
|
|
||||||
|
static const unsigned short test_u16[] = {0x0123, 0x4567, 0x89AB, 0xCDEF, 0x0123, 0x4567, 0x89AB, 0xCDEF};
|
||||||
|
dbg_write_u16(test_u16, 8);
|
||||||
|
|
||||||
|
static const unsigned char test_u8[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0XDD, 0xEE, 0xFF};
|
||||||
|
dbg_write_u8(test_u8, 16);
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
dbg_trace_point(0);
|
||||||
|
}
|
||||||
|
}
|
@ -1 +1 @@
|
|||||||
Subproject commit 44928416eacb4c8d7774b1385c7f38fb226d080b
|
Subproject commit 3b89fc5999874c49f6f5be65bbd5e75f7d77469c
|
13
main.c
13
main.c
@ -22,6 +22,8 @@
|
|||||||
#include <libopencm3/stm32/gpio.h>
|
#include <libopencm3/stm32/gpio.h>
|
||||||
#include <libopencm3/stm32/timer.h>
|
#include <libopencm3/stm32/timer.h>
|
||||||
|
|
||||||
|
#include <dcc_stdio.h>
|
||||||
|
|
||||||
static void delay(int count)
|
static void delay(int count)
|
||||||
{
|
{
|
||||||
for (int i=0; i < count; i++) {
|
for (int i=0; i < count; i++) {
|
||||||
@ -138,18 +140,25 @@ static void dht_start_signal(void)
|
|||||||
|
|
||||||
volatile int bla=0;
|
volatile int bla=0;
|
||||||
|
|
||||||
|
void hard_fault_handler(void) {
|
||||||
|
__asm("bkpt 1");
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]);
|
rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]);
|
||||||
gpio_setup();
|
gpio_setup();
|
||||||
tim_setup();
|
//tim_setup();
|
||||||
|
|
||||||
|
dbg_write_str("hello\n");
|
||||||
|
|
||||||
/* Blink the LED (PA5) on the board. */
|
/* Blink the LED (PA5) on the board. */
|
||||||
while (1) {
|
while (1) {
|
||||||
/* Using API function gpio_toggle(): */
|
/* Using API function gpio_toggle(): */
|
||||||
gpio_toggle(GPIOB, GPIO1); /* LED on/off */
|
gpio_toggle(GPIOB, GPIO1); /* LED on/off */
|
||||||
delay(4000000);
|
delay(4000000);
|
||||||
dht_start_signal();
|
//dht_start_signal();
|
||||||
|
dbg_write_str("hello2\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# This is an ST NUCLEO F103RB board with a single STM32F103RBT6 chip.
|
# FT2232H Board V3 connected to Maple Mini
|
||||||
# http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF259875
|
|
||||||
|
|
||||||
interface ftdi
|
adapter driver ftdi
|
||||||
transport select swd
|
transport select swd
|
||||||
ftdi_vid_pid 0x0403 0x6010
|
ftdi_vid_pid 0x0403 0x6010
|
||||||
|
|
||||||
@ -22,3 +21,6 @@ ftdi_layout_signal nSRST -ndata 0x0020 -noe 0x0040
|
|||||||
source [find target/stm32f1x.cfg]
|
source [find target/stm32f1x.cfg]
|
||||||
|
|
||||||
reset_config srst_only
|
reset_config srst_only
|
||||||
|
|
||||||
|
#poll on
|
||||||
|
#target_request debugmsgs enable
|
||||||
|
3
rules.mk
3
rules.mk
@ -86,7 +86,7 @@ TGT_LDFLAGS += $(ARCH_FLAGS)
|
|||||||
TGT_LDFLAGS += -specs=nano.specs
|
TGT_LDFLAGS += -specs=nano.specs
|
||||||
TGT_LDFLAGS += -Wl,--gc-sections
|
TGT_LDFLAGS += -Wl,--gc-sections
|
||||||
# OPTIONAL
|
# OPTIONAL
|
||||||
#TGT_LDFLAGS += -Wl,-Map=$(PROJECT).map
|
TGT_LDFLAGS += -Wl,-Map=$(PROJECT).map
|
||||||
ifeq ($(V),99)
|
ifeq ($(V),99)
|
||||||
TGT_LDFLAGS += -Wl,--print-gc-sections
|
TGT_LDFLAGS += -Wl,--print-gc-sections
|
||||||
endif
|
endif
|
||||||
@ -174,4 +174,3 @@ clean:
|
|||||||
|
|
||||||
.PHONY: all clean flash
|
.PHONY: all clean flash
|
||||||
-include $(OBJS:.o=.d)
|
-include $(OBJS:.o=.d)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user