From 18e94e14cbd22e8696ab7e341c4b4f6094444741 Mon Sep 17 00:00:00 2001 From: Nélio Laranjeiro Date: Wed, 5 Nov 2008 23:30:20 +0100 Subject: avr/modules/trace: Added the trace module. --- digital/avr/modules/trace/Makefile | 5 + digital/avr/modules/trace/Makefile.module | 1 + digital/avr/modules/trace/README | 24 +++++ digital/avr/modules/trace/avrconfig.h | 37 +++++++ digital/avr/modules/trace/test/.test-trace.c.swp | Bin 0 -> 12288 bytes digital/avr/modules/trace/test/Makefile | 14 +++ digital/avr/modules/trace/test/avrconfig.h | 95 +++++++++++++++++ digital/avr/modules/trace/test/flash_stub.c | 44 ++++++++ digital/avr/modules/trace/test/test-trace.c | 50 +++++++++ digital/avr/modules/trace/trace.c | 48 +++++++++ digital/avr/modules/trace/trace.h | 125 +++++++++++++++++++++++ 11 files changed, 443 insertions(+) create mode 100644 digital/avr/modules/trace/Makefile create mode 100644 digital/avr/modules/trace/Makefile.module create mode 100644 digital/avr/modules/trace/README create mode 100644 digital/avr/modules/trace/avrconfig.h create mode 100644 digital/avr/modules/trace/test/.test-trace.c.swp create mode 100644 digital/avr/modules/trace/test/Makefile create mode 100644 digital/avr/modules/trace/test/avrconfig.h create mode 100644 digital/avr/modules/trace/test/flash_stub.c create mode 100644 digital/avr/modules/trace/test/test-trace.c create mode 100644 digital/avr/modules/trace/trace.c create mode 100644 digital/avr/modules/trace/trace.h (limited to 'digital/avr') diff --git a/digital/avr/modules/trace/Makefile b/digital/avr/modules/trace/Makefile new file mode 100644 index 00000000..51bbecef --- /dev/null +++ b/digital/avr/modules/trace/Makefile @@ -0,0 +1,5 @@ +BASE = ../.. +DOC = trace.html +EXTRACTDOC = trace.h trace.c + +include $(BASE)/make/Makefile.gen diff --git a/digital/avr/modules/trace/Makefile.module b/digital/avr/modules/trace/Makefile.module new file mode 100644 index 00000000..e5fcdfc2 --- /dev/null +++ b/digital/avr/modules/trace/Makefile.module @@ -0,0 +1 @@ +trace_SOURCES=trace.c diff --git a/digital/avr/modules/trace/README b/digital/avr/modules/trace/README new file mode 100644 index 00000000..f8e5dc67 --- /dev/null +++ b/digital/avr/modules/trace/README @@ -0,0 +1,24 @@ +avr.trace - AVR TRACE use. + +Add some trace all over the source code to log the pertinent data in the flash +memory. + +Copyright (C) 2008 Nélio Laranjeiro + +APBTeam: + Web: http://apbteam.org/ + Email: team AT apbteam DOT org + +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, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. diff --git a/digital/avr/modules/trace/avrconfig.h b/digital/avr/modules/trace/avrconfig.h new file mode 100644 index 00000000..56d64ced --- /dev/null +++ b/digital/avr/modules/trace/avrconfig.h @@ -0,0 +1,37 @@ +#ifndef avrconfig_h +#define avrconfig_h +/* avrconfig.h */ +/* avr.flash - Flash SPI AVR module. {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +/* flash - Flash SPI AVR module. */ + +/** Flash PORT used. */ +#define AC_FLASH_PORT PORTX +/** Flash DDR used. */ +#define AC_FLASH_DDR DDRX +/** Flash SS pin. */ +#define AC_FLASH_BIT_SS N + +#endif /* avrconfig_h */ diff --git a/digital/avr/modules/trace/test/.test-trace.c.swp b/digital/avr/modules/trace/test/.test-trace.c.swp new file mode 100644 index 00000000..de3a924a Binary files /dev/null and b/digital/avr/modules/trace/test/.test-trace.c.swp differ diff --git a/digital/avr/modules/trace/test/Makefile b/digital/avr/modules/trace/test/Makefile new file mode 100644 index 00000000..93cffc5a --- /dev/null +++ b/digital/avr/modules/trace/test/Makefile @@ -0,0 +1,14 @@ +BASE = ../../.. +HOST_PROGS = test-trace + +test-trace_SOURCES = test-trace.c flash_stub.c + +MODULES = trace +#CONFIGFILE = avrconfig.h +# atmega8, atmega8535, atmega128... +#AVR_MCU = atmega128 +# -O2 : speed +# -Os : size +OPTIMIZE = -O2 + +include $(BASE)/make/Makefile.gen diff --git a/digital/avr/modules/trace/test/avrconfig.h b/digital/avr/modules/trace/test/avrconfig.h new file mode 100644 index 00000000..c4d9f159 --- /dev/null +++ b/digital/avr/modules/trace/test/avrconfig.h @@ -0,0 +1,95 @@ +#ifndef avrconfig_h +#define avrconfig_h +/* avrconfig.h */ +/* avr.spi - SPI AVR module. {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +/* global */ +/** AVR Frequency : 1000000, 1843200, 2000000, 3686400, 4000000, 7372800, + * 8000000, 11059200, 14745600, 16000000, 18432000, 20000000. */ +#define AC_FREQ 14745600 + +/* uart - UART module. */ +/** Select hardware uart for primary uart: 0, 1 or -1 to disable. */ +#define AC_UART0_PORT 1 +/** Baudrate: 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 76800, + * 115200, 230400, 250000, 500000, 1000000. */ +#define AC_UART0_BAUDRATE 38400 +/** Send mode: + * - POLLING: no interrupts. + * - RING: interrupts, ring buffer. */ +#define AC_UART0_SEND_MODE POLLING +/** Recv mode, same as send mode. */ +#define AC_UART0_RECV_MODE POLLING +/** Character size: 5, 6, 7, 8, 9 (only 8 implemented). */ +#define AC_UART0_CHAR_SIZE 8 +/** Parity : ODD, EVEN, NONE. */ +#define AC_UART0_PARITY EVEN +/** Stop bits : 1, 2. */ +#define AC_UART0_STOP_BITS 1 +/** Send buffer size, should be power of 2 for RING mode. */ +#define AC_UART0_SEND_BUFFER_SIZE 32 +/** Recv buffer size, should be power of 2 for RING mode. */ +#define AC_UART0_RECV_BUFFER_SIZE 32 +/** If the send buffer is full when putc: + * - DROP: drop the new byte. + * - WAIT: wait until there is room in the send buffer. */ +#define AC_UART0_SEND_BUFFER_FULL WAIT +/** In HOST compilation: + * - STDIO: use stdin/out. + * - PTS: use pseudo terminal. */ +#define AC_UART0_HOST_DRIVER STDIO +/** Same thing for secondary port. */ +#define AC_UART1_PORT -1 +#define AC_UART1_BAUDRATE 115200 +#define AC_UART1_SEND_MODE RING +#define AC_UART1_RECV_MODE RING +#define AC_UART1_CHAR_SIZE 8 +#define AC_UART1_PARITY EVEN +#define AC_UART1_STOP_BITS 1 +#define AC_UART1_SEND_BUFFER_SIZE 32 +#define AC_UART1_RECV_BUFFER_SIZE 32 +#define AC_UART1_SEND_BUFFER_FULL WAIT +#define AC_UART1_HOST_DRIVER PTS + +/* proto - Protocol module. */ +/** Maximum argument size. */ +#define AC_PROTO_ARGS_MAX_SIZE 8 +/** Callback function name. */ +#define AC_PROTO_CALLBACK proto_callback +/** Putchar function name. */ +#define AC_PROTO_PUTC uart0_putc +/** Support for quote parameter. */ +#define AC_PROTO_QUOTE 1 + +/* flash - Flash SPI AVR module. */ +/** Flash PORT used. */ +#define AC_FLASH_PORT PORTD +/** Flash DDR used. */ +#define AC_FLASH_DDR DDRD +/** Flash SS pin. */ +#define AC_FLASH_BIT_SS 5 + + +#endif /* avrconfig_h */ diff --git a/digital/avr/modules/trace/test/flash_stub.c b/digital/avr/modules/trace/test/flash_stub.c new file mode 100644 index 00000000..cd250884 --- /dev/null +++ b/digital/avr/modules/trace/test/flash_stub.c @@ -0,0 +1,44 @@ +/* flash_stub.c */ +/* avr.trace - AVR TRACE use. {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "modules/flash/flash.h" +#include + +uint8_t +flash_init (void) +{ + return 0x1; +} + +uint32_t +flash_sector_next(uint32_t addr) +{ + return 0; +} + +void +flash_write (uint32_t addr, uint8_t arg) +{ + printf ("%s -- %x\n", __FUNCTION__, arg); +} diff --git a/digital/avr/modules/trace/test/test-trace.c b/digital/avr/modules/trace/test/test-trace.c new file mode 100644 index 00000000..834a3318 --- /dev/null +++ b/digital/avr/modules/trace/test/test-trace.c @@ -0,0 +1,50 @@ +/* test-erase.c */ +/* avr.flash - AVR Trace. {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "common.h" +#include "../trace.h" + +#include + +int +main (void) +{ + uint8_t val1 = 0xEF; + uint16_t val2 = 0x1234; + uint32_t val3 = 0x456789AB; + + trace_init (); + + printf ("First trace\n"); + TRACE (val1); + + printf ("Second trace\n"); + TRACE (val2); + + printf ("Third trace\n"); + TRACE (val3); + + return 0; +} + diff --git a/digital/avr/modules/trace/trace.c b/digital/avr/modules/trace/trace.c new file mode 100644 index 00000000..42f8bdd0 --- /dev/null +++ b/digital/avr/modules/trace/trace.c @@ -0,0 +1,48 @@ +/* trace.c */ +/* {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "modules/flash/flash.h" +#include "trace.h" + +static trace_t trace_global; + +void +trace_init (void) +{ + trace_global.flash_status = flash_init (); + + /* Get the first sector to write. */ + if (trace_global.flash_status) + { + trace_global.flash_addr = flash_sector_next (0); + } +} + +void +trace_print_word (uint8_t arg) +{ + if (trace_global.flash_status) + flash_write (trace_global.flash_addr++, arg); +} + diff --git a/digital/avr/modules/trace/trace.h b/digital/avr/modules/trace/trace.h new file mode 100644 index 00000000..230e8ab0 --- /dev/null +++ b/digital/avr/modules/trace/trace.h @@ -0,0 +1,125 @@ +#ifndef trace_h +#define trace_h +/* trace.h */ +/* {{{ + * + * Copyright (C) 2008 Nélio Laranjeiro + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +/** File based on work done by Neil Booth + * You can find the example on the website : + * http://gcc.gnu.org/ml/gcc-patches/2000-11/msg00016.html + * Thanks to him. + */ +#define PASTE_EXPAND(a, b) PASTE(a, b) + +#define PASTE(a, b) a ## b + +#define TRACE_ARGS_COUNT(...) \ + _TRACE_ARGS_COUNT1 ( , ##__VA_ARGS__) + +#define _TRACE_ARGS_COUNT1(...) \ + _TRACE_ARGS_COUNT2 (__VA_ARGS__, 10,9,8,7,6,5,4,3,2,1,0) + +#define _TRACE_ARGS_COUNT2(_ ,_0,_1,_2,_3,_4,_5,_6,_7,_8,_9, n,...) n + +#define TRACE(args...) \ + PASTE_EXPAND(TRACE_PRINT, TRACE_ARGS_COUNT(args...)) (args) + +#define TRACE_PRINT1(args)\ + ({TRACE_PRINT_ARG_TYPE(args);}) + +#define TRACE_PRINT2(arg0, arg1)\ + ({ TRACE_PRINT_ARG_TYPE(arg0);\ + TRACE_PRINT_ARG_TYPE(arg1);}) + +#define TRACE_PRINT3(arg0, arg1, arg2)\ + ({ TRACE_PRINT_ARG_TYPE(arg0);\ + TRACE_PRINT_ARG_TYPE(arg1);\ + TRACE_PRINT_ARG_TYPE(arg2);}) + +#define TRACE_PRINT4(arg0, arg1, arg2, arg3)\ + ({ TRACE_PRINT_ARG_TYPE(arg0);\ + TRACE_PRINT_ARG_TYPE(arg1);\ + TRACE_PRINT_ARG_TYPE(arg2);\ + TRACE_PRINT_ARG_TYPE(arg3);}) + +#define TRACE_PRINT5(arg0, arg1, arg2, arg3, arg4)\ + ({ TRACE_PRINT_ARG_TYPE(arg0);\ + TRACE_PRINT_ARG_TYPE(arg1);\ + TRACE_PRINT_ARG_TYPE(arg2);\ + TRACE_PRINT_ARG_TYPE(arg3);\ + TRACE_PRINT_ARG_TYPE(arg4);}) + +#define TRACE_PRINT6(arg0, arg1, arg2, arg3, arg4, arg5)\ + ({ TRACE_PRINT_ARG_TYPE(arg0);\ + TRACE_PRINT_ARG_TYPE(arg1);\ + TRACE_PRINT_ARG_TYPE(arg2);\ + TRACE_PRINT_ARG_TYPE(arg3);\ + TRACE_PRINT_ARG_TYPE(arg4);\ + TRACE_PRINT_ARG_TYPE(arg5);}) + +#define TRACE_PRINT_ARG_TYPE(arg)\ + do\ + {\ + if (sizeof(arg) == sizeof(uint8_t)) TRACE_PRINT_ARG_1(arg);\ + else if (sizeof(arg) == sizeof(uint16_t)) TRACE_PRINT_ARG_2(arg);\ + else if (sizeof(arg) == sizeof(uint32_t)) TRACE_PRINT_ARG_4(arg);\ + }while (0) + + +#define TRACE_PRINT_ARG_1(arg)\ + ({trace_print_word(arg);}) + +#define TRACE_PRINT_ARG_2(arg)\ + ({ trace_print_word(arg >> 8);\ + trace_print_word(arg);}) + +#define TRACE_PRINT_ARG_4(arg)\ + ({ trace_print_word (arg >> 24);\ + trace_print_word (arg >> 16); \ + trace_print_word (arg >> 8); \ + trace_print_word (arg);}) + + +struct trace_t +{ + /** Flash status. */ + uint8_t flash_status; + /** Flash address. */ + uint32_t flash_addr; + /** Flash next sector */ + uint32_t flash_next_sector; +}; +typedef struct trace_t trace_t; + +/** Initialise the trace module. + */ +void +trace_init (void); + +/** Print the trace. + * \param arg the argument to print. + */ +void +trace_print_word (uint8_t arg); + +#endif /* trace_h */ -- cgit v1.2.3