diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..43addd9
--- /dev/null
+++ b/.clang-format
@@ -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
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..280cd99
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,8 @@
+# top-most EditorConfig file
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+indent_style = tab
+indent_size = 4
diff --git a/.gitignore b/.gitignore
index 9ba28bd..bf4fc60 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,8 @@
bin/
*.elf
*.bin
+*.map
+*.lss
+*.list
generated.*.ld
.idea
diff --git a/Makefile b/Makefile
index f81b150..d066728 100644
--- a/Makefile
+++ b/Makefile
@@ -5,12 +5,17 @@ BUILD_DIR = bin
#SHARED_DIR = ../my-common-code
CFILES = main.c
-#CFILES += api.c
#AFILES += api-asm.S
# TODO - you will need to edit these two lines!
-DEVICE=stm32f103rcbt6
-OOCD_FILE = board/stm32f4discovery.cfg
+DEVICE=STM32F103C8T6
+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.
#VPATH += $(SHARED_DIR)
diff --git a/libdcc/README b/libdcc/README
new file mode 100644
index 0000000..1135b24
--- /dev/null
+++ b/libdcc/README
@@ -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
diff --git a/libdcc/dcc_stdio.c b/libdcc/dcc_stdio.c
new file mode 100644
index 0000000..7da78c6
--- /dev/null
+++ b/libdcc/dcc_stdio.c
@@ -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 . *
+ ***************************************************************************/
+
+#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));
+}
diff --git a/libdcc/dcc_stdio.h b/libdcc/dcc_stdio.h
new file mode 100644
index 0000000..7e36348
--- /dev/null
+++ b/libdcc/dcc_stdio.h
@@ -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 . *
+ ***************************************************************************/
+
+#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 */
diff --git a/libdcc/example.c b/libdcc/example.c
new file mode 100644
index 0000000..99b7bf6
--- /dev/null
+++ b/libdcc/example.c
@@ -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 . *
+ ***************************************************************************/
+
+#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);
+ }
+}
diff --git a/libopencm3 b/libopencm3
index 4492841..3b89fc5 160000
--- a/libopencm3
+++ b/libopencm3
@@ -1 +1 @@
-Subproject commit 44928416eacb4c8d7774b1385c7f38fb226d080b
+Subproject commit 3b89fc5999874c49f6f5be65bbd5e75f7d77469c
diff --git a/main.c b/main.c
index 76c001a..91c4d6e 100644
--- a/main.c
+++ b/main.c
@@ -22,6 +22,8 @@
#include
#include
+#include
+
static void delay(int count)
{
for (int i=0; i < count; i++) {
@@ -138,18 +140,25 @@ static void dht_start_signal(void)
volatile int bla=0;
+void hard_fault_handler(void) {
+ __asm("bkpt 1");
+}
+
int main(void)
{
rcc_clock_setup_pll(&rcc_hse_configs[RCC_CLOCK_HSE8_72MHZ]);
gpio_setup();
- tim_setup();
+ //tim_setup();
+
+ dbg_write_str("hello\n");
/* Blink the LED (PA5) on the board. */
while (1) {
/* Using API function gpio_toggle(): */
gpio_toggle(GPIOB, GPIO1); /* LED on/off */
delay(4000000);
- dht_start_signal();
+ //dht_start_signal();
+ dbg_write_str("hello2\n");
}
return 0;
diff --git a/openocd.cfg b/openocd.cfg
index f45185d..b53f28c 100644
--- a/openocd.cfg
+++ b/openocd.cfg
@@ -1,7 +1,6 @@
-# This is an ST NUCLEO F103RB board with a single STM32F103RBT6 chip.
-# http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847/PF259875
+# FT2232H Board V3 connected to Maple Mini
-interface ftdi
+adapter driver ftdi
transport select swd
ftdi_vid_pid 0x0403 0x6010
@@ -22,3 +21,6 @@ ftdi_layout_signal nSRST -ndata 0x0020 -noe 0x0040
source [find target/stm32f1x.cfg]
reset_config srst_only
+
+#poll on
+#target_request debugmsgs enable
diff --git a/rules.mk b/rules.mk
index e417d2f..7a26311 100644
--- a/rules.mk
+++ b/rules.mk
@@ -86,7 +86,7 @@ TGT_LDFLAGS += $(ARCH_FLAGS)
TGT_LDFLAGS += -specs=nano.specs
TGT_LDFLAGS += -Wl,--gc-sections
# OPTIONAL
-#TGT_LDFLAGS += -Wl,-Map=$(PROJECT).map
+TGT_LDFLAGS += -Wl,-Map=$(PROJECT).map
ifeq ($(V),99)
TGT_LDFLAGS += -Wl,--print-gc-sections
endif
@@ -174,4 +174,3 @@ clean:
.PHONY: all clean flash
-include $(OBJS:.o=.d)
-