Forráskód Böngészése

[bsp]add gdb support for BBB

陈豪 10 éve
szülő
commit
a966dd3c38

+ 8 - 0
bsp/beaglebone/applications/application.c

@@ -16,6 +16,10 @@
 #include <rtthread.h>
 #include <components.h>
 
+#ifdef RT_USING_GDB
+#include <gdb_stub.h>
+#endif
+
 int rt_application_init()
 {
     /* do component initialization */
@@ -23,6 +27,10 @@ int rt_application_init()
 #ifdef RT_USING_NEWLIB
 	libc_system_init(RT_CONSOLE_DEVICE_NAME);
 #endif
+#ifdef RT_USING_GDB
+    gdb_set_device("uart4");
+    gdb_start();
+#endif
 
     return 0;
 }

+ 39 - 3
bsp/beaglebone/drivers/serial.c

@@ -338,6 +338,42 @@ static void config_pinmux(void)
 #endif
 }
 
+static int am33xx_putc_poll(struct rt_serial_device *serial, char c)
+{
+    struct am33xx_uart* uart;
+
+    RT_ASSERT(serial != RT_NULL);
+    uart = (struct am33xx_uart *)serial->parent.user_data;
+
+    while (!(UART_LSR_REG(uart->base) & 0x20));
+    UART_THR_REG(uart->base) = c;
+
+    return 1;
+}
+
+static int am33xx_getc_poll(struct rt_serial_device *serial)
+{   
+    int ch;
+    struct am33xx_uart* uart;
+
+    RT_ASSERT(serial != RT_NULL);
+    uart = (struct am33xx_uart *)serial->parent.user_data;
+
+    ch = -1;
+    while(!(UART_LSR_REG(uart->base) & 0x01));
+    ch = UART_RHR_REG(uart->base) & 0xff;
+
+    return ch;
+}
+
+static const struct rt_uart_ops am33xx_gdb_ops =
+{
+    am33xx_configure,
+    am33xx_control,
+    am33xx_putc_poll,
+    am33xx_getc_poll,
+};
+
 int rt_hw_serial_init(void)
 {
     struct serial_configure config;
@@ -447,17 +483,17 @@ int rt_hw_serial_init(void)
     config.invert    = NRZ_NORMAL;
 	config.bufsz     = RT_SERIAL_RB_BUFSZ;
 
-    serial4.ops    = &am33xx_uart_ops;
+    serial4.ops    = &am33xx_gdb_ops;
     serial4.config = config;
     /* enable RX interrupt */
-    UART_IER_REG(uart4.base) = 0x01;
+    UART_IER_REG(uart4.base) = 0x00;
     /* install ISR */
     rt_hw_interrupt_install(uart4.irq, am33xx_uart_isr, &serial4, "uart4");
     rt_hw_interrupt_control(uart4.irq, 0, 0);
     rt_hw_interrupt_mask(uart4.irq);
     /* register UART4 device */
     rt_hw_serial_register(&serial4, "uart4",
-            RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
+            RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STREAM,
             &uart4);
 #endif
 

+ 6 - 0
bsp/beaglebone/rtconfig.h

@@ -2,6 +2,12 @@
 #ifndef __RTTHREAD_CFG_H__
 #define __RTTHREAD_CFG_H__
 
+// <section name="RT_USING_GDB" description="Gdb Stub for rtt" default="true" >
+//#define RT_USING_GDB
+//#define RT_GDB_DEBUG
+#define RT_GDB_ICACHE
+// </section>
+
 // <RDTConfigurator URL="http://www.rt-thread.com/eclipse">
 
 // <integer name="RT_NAME_MAX" description="Maximal size of kernel object name length" default="6" />

+ 1 - 1
bsp/beaglebone/rtconfig.py

@@ -23,7 +23,7 @@ elif CROSS_TOOL == 'iar':
 if os.getenv('RTT_EXEC_PATH'):
 	EXEC_PATH = os.getenv('RTT_EXEC_PATH')
 
-BUILD = 'release'
+BUILD = 'debug'
 
 if PLATFORM == 'gcc':
     # toolchains