From 02064576e8dc31509dc91a0681ba80f2c9615d2f Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Sun, 10 Apr 2016 13:22:17 +0000 Subject: qemu test sample from daniellinux: soruced originally from: https://github.com/libopencm3/libopencm3/pull/613 edited to drop the use of bin files, and switch to devices.data --- tests/qemu/Makefile | 40 ++++++++++++++++++++++++++++++++++++ tests/qemu/README.md | 20 ++++++++++++++++++ tests/qemu/main.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 tests/qemu/Makefile create mode 100644 tests/qemu/README.md create mode 100644 tests/qemu/main.c (limited to 'tests') diff --git a/tests/qemu/Makefile b/tests/qemu/Makefile new file mode 100644 index 0000000..67e84ab --- /dev/null +++ b/tests/qemu/Makefile @@ -0,0 +1,40 @@ +## +## This file is part of the libopencm3 project. +## +## This library is free software: you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This library 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 Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this library. If not, see . +## + +BOARD = lm3s +PROJECT = qemu-$(BOARD) +BUILD_DIR = bin-$(BOARD) + +SHARED_DIR = ../shared + +CFILES = main.c + +VPATH += $(SHARED_DIR) + +INCLUDES += $(patsubst %,-I%, . $(SHARED_DIR)) + +OPENCM3_DIR=../../libopencm3 + +DEVICE=lm3s6965 + +include ../../rules.mk + +qemu: $(PROJECT).elf + qemu-system-arm -semihosting -M lm3s6965evb --kernel $^ -serial stdio + +qemu-dbg: $(PROJECT).elf + qemu-system-arm -semihosting -M lm3s6965evb --kernel $^ -serial stdio -S -gdb tcp::3333 diff --git a/tests/qemu/README.md b/tests/qemu/README.md new file mode 100644 index 0000000..4f02adb --- /dev/null +++ b/tests/qemu/README.md @@ -0,0 +1,20 @@ +This project is used as a demonstrator on how to run a small baremetal application +on a LM3S6965 board, which can be emulated on qemu as well (using qemu-system-arm +with -M lm3s6965evb). + +For this reason, this application is not portable to other platforms at the moment. + +To execute in qemu run: + +`make qemu` + +To debug using gcc run: + +`make qemu-dbg` + +and then attach a gdb to localhost tcp port 3333. + +Requirements: +qemu-system-arm +openocd + diff --git a/tests/qemu/main.c b/tests/qemu/main.c new file mode 100644 index 0000000..863ce9e --- /dev/null +++ b/tests/qemu/main.c @@ -0,0 +1,58 @@ +#include +#include + + +/* LM3S Specifics, usart and RCC */ +#include +#include + +static volatile uint32_t jiffies = 0u; + +static void printbanner(void) +{ + char msg[] = "One second elapsed!\r\n"; + char *c = msg; + while (*c != 0) { + usart_send(USART0_BASE, (uint16_t )*c); + c++; + } +} + +void sys_tick_handler(void) +{ + jiffies++; +} + +static inline uint32_t systick_app_config(uint32_t n_ticks) +{ + /* constant from systick_set_reload -- as this returns something that's + * * not void, this is the only possible error condition */ + if (n_ticks & ~0x00FFFFFF) { + return 1; + } + + systick_set_reload(n_ticks); + systick_set_clocksource(1); + systick_interrupt_enable(); + systick_counter_enable(); + + return 0; +} + +#define HZ 1000 + +int main(void) +{ + uint32_t last_time = 0; + rcc_clock_setup_in_xtal_8mhz_out_50mhz(); + systick_app_config(HZ); + + nvic_set_priority(NVIC_SYSTICK_IRQ, 0); + jiffies = 0; + while(1) { + if (jiffies > HZ) { + printbanner(); + jiffies = 0; + } + } +} -- cgit