diff options
-rwxr-xr-x | 02-usart/genmake.pl | 15 | ||||
-rw-r--r-- | 02-usart/include/core/apb.h (renamed from 02-usart/include/apb.h) | 0 | ||||
-rw-r--r-- | 02-usart/include/core/clock.h (renamed from 02-usart/include/clock.h) | 6 | ||||
-rw-r--r-- | 02-usart/include/core/dma.h (renamed from 02-usart/include/dma.h) | 6 | ||||
-rw-r--r-- | 02-usart/include/core/flash.h (renamed from 02-usart/include/flash.h) | 0 | ||||
-rw-r--r-- | 02-usart/include/core/gpio.h (renamed from 02-usart/include/gpio.h) | 6 | ||||
-rw-r--r-- | 02-usart/include/core/isr_vector.h (renamed from 02-usart/include/isr_vector.h) | 6 | ||||
-rw-r--r-- | 02-usart/include/core/isrs.i (renamed from 02-usart/include/isrs.i) | 0 | ||||
-rw-r--r-- | 02-usart/include/core/rcc.h (renamed from 02-usart/include/rcc.h) | 0 | ||||
-rw-r--r-- | 02-usart/include/core/system.h (renamed from 02-usart/include/system.h) | 4 | ||||
-rw-r--r-- | 02-usart/include/core/usart.h (renamed from 02-usart/include/usart.h) | 0 | ||||
-rw-r--r-- | 02-usart/include/mem.h | 8 | ||||
-rw-r--r-- | 02-usart/src/core/clock.c (renamed from 02-usart/src/clock.c) | 6 | ||||
-rw-r--r-- | 02-usart/src/core/gpio.c (renamed from 02-usart/src/gpio.c) | 4 | ||||
-rw-r--r-- | 02-usart/src/core/init.c (renamed from 02-usart/src/init.c) | 2 | ||||
-rw-r--r-- | 02-usart/src/core/isr_vector.c (renamed from 02-usart/src/isr_vector.c) | 8 | ||||
-rw-r--r-- | 02-usart/src/core/usart.c (renamed from 02-usart/src/usart.c) | 2 | ||||
-rw-r--r-- | 02-usart/src/main.c | 19 | ||||
-rw-r--r-- | 02-usart/src/mem.c | 16 | ||||
-rw-r--r-- | 02-usart/src/spin.c | 2 | ||||
-rw-r--r-- | 02-usart/tests/test_dma.c | 2 | ||||
-rw-r--r-- | 02-usart/tests/test_lib.c | 19 | ||||
-rw-r--r-- | 02-usart/tests/test_memory.c | 12 | ||||
-rw-r--r-- | 02-usart/tests/test_usart.c | 20 |
24 files changed, 108 insertions, 55 deletions
diff --git a/02-usart/genmake.pl b/02-usart/genmake.pl index 54b1f80..89403ce 100755 --- a/02-usart/genmake.pl +++ b/02-usart/genmake.pl @@ -23,13 +23,19 @@ sub header_deps { } my @files; -find(sub { push @files, "src/$_" if $_ =~ /.*\.c/ }, "src/"); +find(sub { + push @files, "$File::Find::name" if $_ =~ /.*\.c/ + }, "src/"); my @test_files; -find(sub { push @test_files, "tests/$_" if $_ =~ /.*\.c/ }, "tests/"); +find(sub { + push @test_files, "$File::Find::name" if $_ =~ /.*\.c/ + }, "tests/"); my @header_files; -find(sub { push @header_files, "include/$_" if $_ =~ /.*\.h/ }, "include/" ); +find(sub { + push @header_files, "$File::Find::name" if $_ =~ /.*\.h/; + }, "include/" ); my $idempotency_hash=sha1_hex("@files @test_files @header_files"); @@ -70,10 +76,12 @@ foreach $file (@files) { # Emit the rule to make the object file. print "$obj_file: $deps_as_join\n\t"; + print "\@mkdir -p " . dirname($obj_file) . "\n\t"; print '$(CC) -c ' . $c_file . ' -o ' . $obj_file . ' $(CFLAGS)' . "\n\n"; # Emit the rule to make the assembly file. print "$s_file: $deps_as_join\n\t"; + print "\@mkdir -p " . dirname($obj_file) . "\n\t"; print '$(CC) -S ' . $c_file . ' -o ' . $s_file . ' $(CFLAGS)' . "\n\n"; } @@ -91,6 +99,7 @@ foreach $file (@test_files) { my $deps_as_join = join(" ", @deps); print "${outbinary}: $deps_as_join $obj_files_deps test_harness/test_harness.a\n\t"; + print "mkdir -p " . dirname($outbinary) . "\n\t"; print '$(CC) $(CFLAGS) -o' . ${outbinary} . ' ' . $c_file . ' ' . $obj_files_deps . " test_harness/test_harness.a\n\n"; print "$directories$basename:\n\t"; diff --git a/02-usart/include/apb.h b/02-usart/include/core/apb.h index 11fa7ab..11fa7ab 100644 --- a/02-usart/include/apb.h +++ b/02-usart/include/core/apb.h diff --git a/02-usart/include/clock.h b/02-usart/include/core/clock.h index 46ac6f2..c3c58d7 100644 --- a/02-usart/include/clock.h +++ b/02-usart/include/core/clock.h @@ -1,5 +1,5 @@ -#ifndef CLOCK_H__ -#define CLOCK_H__ +#ifndef CORE_CLOCK_H__ +#define CORE_CLOCK_H__ #include <stdint.h> #include "rcc.h" @@ -123,4 +123,4 @@ int configure_pll( pllm_divisor_t pllm, /* PLL denominator. */ pll_src_t pllsrc /* PLL source */); -#endif /* CLOCK_H__ */ +#endif /* CORE_CLOCK_H__ */ diff --git a/02-usart/include/dma.h b/02-usart/include/core/dma.h index 229b732..1ae41a0 100644 --- a/02-usart/include/dma.h +++ b/02-usart/include/core/dma.h @@ -1,5 +1,5 @@ -#ifndef DMA_H_ -#define DMA_H_ +#ifndef CORE_DMA_H_ +#define CORE_DMA_H_ /* * Header file for definining the DMA (Direct Memory Access). @@ -169,4 +169,4 @@ typedef struct { static_assert(offsetof(dma_t, csel_r) == 0xA8, "Offset check failed."); -#endif /* DMA_H_ */ +#endif /* CORE_DMA_H_ */ diff --git a/02-usart/include/flash.h b/02-usart/include/core/flash.h index a163a25..a163a25 100644 --- a/02-usart/include/flash.h +++ b/02-usart/include/core/flash.h diff --git a/02-usart/include/gpio.h b/02-usart/include/core/gpio.h index 62169c6..856a176 100644 --- a/02-usart/include/gpio.h +++ b/02-usart/include/core/gpio.h @@ -1,5 +1,5 @@ -#ifndef GPIO_H__ -#define GPIO_H__ +#ifndef CORE_GPIO_H__ +#define CORE_GPIO_H__ #include "common.h" #include "rcc.h" @@ -143,4 +143,4 @@ __IO gpio_port_t* enable_gpio(gpio_port_number_t number); void set_gpio_alternate_function( __IO gpio_port_t* port, gpio_pin_t gpio_pin, alternate_function_t afn); -#endif /* GPIO_H__ */ +#endif /* CORE_GPIO_H__ */ diff --git a/02-usart/include/isr_vector.h b/02-usart/include/core/isr_vector.h index 7cb4596..78763cd 100644 --- a/02-usart/include/isr_vector.h +++ b/02-usart/include/core/isr_vector.h @@ -1,5 +1,5 @@ -#ifndef h__ISR_VECTOR_H__ -#define h__ISR_VECTOR_H__ +#ifndef CORE_h__ISR_VECTOR_H__ +#define CORE_h__ISR_VECTOR_H__ #include <stdint.h> @@ -21,4 +21,4 @@ void unhandled_isr(uint8_t val); void isr_simple_pin_on(); -#endif /* h___ISR_VECTOR_H__ */ +#endif /* CORE_h___ISR_VECTOR_H__ */ diff --git a/02-usart/include/isrs.i b/02-usart/include/core/isrs.i index cdb3889..cdb3889 100644 --- a/02-usart/include/isrs.i +++ b/02-usart/include/core/isrs.i diff --git a/02-usart/include/rcc.h b/02-usart/include/core/rcc.h index 05f5e5f..05f5e5f 100644 --- a/02-usart/include/rcc.h +++ b/02-usart/include/core/rcc.h diff --git a/02-usart/include/system.h b/02-usart/include/core/system.h index f2a4de9..c836edc 100644 --- a/02-usart/include/system.h +++ b/02-usart/include/core/system.h @@ -1,5 +1,5 @@ -#ifndef SYSTEM_H_ -#define SYSTEM_H_ +#ifndef CORE_SYSTEM_H_ +#define CORE_SYSTEM_H_ #include <stdint.h> #include "common.h" diff --git a/02-usart/include/usart.h b/02-usart/include/core/usart.h index 9ed6dbb..9ed6dbb 100644 --- a/02-usart/include/usart.h +++ b/02-usart/include/core/usart.h diff --git a/02-usart/include/mem.h b/02-usart/include/mem.h index fefe53d..aa4ce12 100644 --- a/02-usart/include/mem.h +++ b/02-usart/include/mem.h @@ -1,12 +1,4 @@ #ifndef MEM_H_ #define MEM_H_ -#include "common.h" - -void memcpy_(void* dest, const void* src, size_t len); - -#ifdef ARCH_STM32L4 -#define memcpy memcpy_ -#endif - #endif diff --git a/02-usart/src/clock.c b/02-usart/src/core/clock.c index 75bac97..d779140 100644 --- a/02-usart/src/clock.c +++ b/02-usart/src/core/clock.c @@ -2,10 +2,10 @@ * This file sets the system clock to its full glory of 80Mhz */ -#include "clock.h" +#include "core/clock.h" +#include "core/flash.h" + #include <stdint.h> -#include "flash.h" -#include "gpio.h" #include "spin.h" #define TIMEOUT 10000 diff --git a/02-usart/src/gpio.c b/02-usart/src/core/gpio.c index 02933b7..c46b1ff 100644 --- a/02-usart/src/gpio.c +++ b/02-usart/src/core/gpio.c @@ -1,5 +1,5 @@ -#include "gpio.h" -#include "rcc.h" +#include "core/gpio.h" +#include "core/rcc.h" /* * Sets the mode of a pin on a gpio por. diff --git a/02-usart/src/init.c b/02-usart/src/core/init.c index 70703aa..e127006 100644 --- a/02-usart/src/init.c +++ b/02-usart/src/core/init.c @@ -1,5 +1,5 @@ #include "arch.h" -#include "system.h" +#include "core/system.h" /* Forward-declare the main function. This is implemented in main.c. */ void main(); diff --git a/02-usart/src/isr_vector.c b/02-usart/src/core/isr_vector.c index 484f3c5..9f3f560 100644 --- a/02-usart/src/isr_vector.c +++ b/02-usart/src/core/isr_vector.c @@ -1,8 +1,8 @@ -#include "isr_vector.h" +#include "core/isr_vector.h" +#include "core/gpio.h" #include "arch.h" #include "delay.h" -#include "gpio.h" #ifdef ARCH_STM32L4 @@ -11,7 +11,7 @@ void WEAK name () { \ unhandled_isr(n); \ } -#include "isrs.i" +#include "core/isrs.i" #undef IRQ_RESERVED #undef IRQ @@ -51,7 +51,7 @@ void super_flash() #define IRQ(name, n) name, const void* vectors[] __attribute__((section(".vectors"))) = { (void*)0x2000c000, /* Top of stack at top of sram1. 48k */ -#include "isrs.i" +#include "core/isrs.i" }; #undef IRQ_RESERVED #undef IRQ diff --git a/02-usart/src/usart.c b/02-usart/src/core/usart.c index 07bf90c..8f58d8b 100644 --- a/02-usart/src/usart.c +++ b/02-usart/src/core/usart.c @@ -1,4 +1,4 @@ -#include "usart.h" +#include "core/usart.h" #include "delay.h" #include "lib.h" #include <stdarg.h> diff --git a/02-usart/src/main.c b/02-usart/src/main.c index b293202..73ccb17 100644 --- a/02-usart/src/main.c +++ b/02-usart/src/main.c @@ -1,16 +1,17 @@ -#include "isr_vector.h" -#include "lib.h" -#include "string.h" -#include "mem.h" -#include "dma.h" #include "arch.h" -#include "clock.h" +#include "core/clock.h" +#include "core/dma.h" +#include "core/gpio.h" +#include "core/isr_vector.h" +#include "core/system.h" +#include "core/usart.h" + #include "delay.h" -#include "gpio.h" +#include "lib.h" +#include "mem.h" #include "spin.h" -#include "usart.h" -#include "system.h" +#include "string.h" #ifdef ARCH_STM32L4 diff --git a/02-usart/src/mem.c b/02-usart/src/mem.c index 5772bdc..9fef8bc 100644 --- a/02-usart/src/mem.c +++ b/02-usart/src/mem.c @@ -1,11 +1,11 @@ #include "mem.h" #include "common.h" -void memcpy_(void* dest, const void* src, size_t len) -{ - uint8_t* dest_ = (uint8_t*) dest; - uint8_t* src_ = (uint8_t*) src; - - while ((len--) > 0) - *(dest_ ++) = *(src_ ++); -} +// void memcpy_(void* dest, const void* src, size_t len) +// { +// uint8_t* dest_ = (uint8_t*) dest; +// uint8_t* src_ = (uint8_t*) src; +// +// while ((len--) > 0) +// *(dest_ ++) = *(src_ ++); +// } diff --git a/02-usart/src/spin.c b/02-usart/src/spin.c index fbd16b6..4d1aede 100644 --- a/02-usart/src/spin.c +++ b/02-usart/src/spin.c @@ -1,6 +1,6 @@ #include "spin.h" #include "delay.h" -#include "gpio.h" +#include "core/gpio.h" #define SHORT_DELAY 200000 #define LONG_DELAY (SHORT_DELAY * 2) diff --git a/02-usart/tests/test_dma.c b/02-usart/tests/test_dma.c index 7704590..ae34a69 100644 --- a/02-usart/tests/test_dma.c +++ b/02-usart/tests/test_dma.c @@ -1,5 +1,5 @@ #include "test_harness.h" -#include "dma.h" +#include "core/dma.h" #include <stdio.h> #include <stdlib.h> diff --git a/02-usart/tests/test_lib.c b/02-usart/tests/test_lib.c new file mode 100644 index 0000000..8d63577 --- /dev/null +++ b/02-usart/tests/test_lib.c @@ -0,0 +1,19 @@ +#include "test_harness.h" +#include "lib.h" + +TEST(lib, hexify) +{ + char buf[10]; + + hexify(0xaaaaaaaa, buf); + ASSERT_EQ_STR(buf, "AAAAAAAA"); + + hexify(0xdddddddd, buf); + ASSERT_EQ_STR(buf, "DDDDDDDD"); + + hexify(0x02468ace, buf); + ASSERT_EQ_STR(buf, "02468ACE"); + + hexify(0xdeadbeef, buf); + ASSERT_EQ_STR(buf, "DEADBEEF"); +} diff --git a/02-usart/tests/test_memory.c b/02-usart/tests/test_memory.c new file mode 100644 index 0000000..e62877a --- /dev/null +++ b/02-usart/tests/test_memory.c @@ -0,0 +1,12 @@ +#include "test_harness.c" +#include "memory.h" + +TEST(memory, memcpy) +{ + const char* from = "Hello"; + char to[16]; + + memcpy(to, from, 6); + + ASSERT_EQ_STR(to, from); +} diff --git a/02-usart/tests/test_usart.c b/02-usart/tests/test_usart.c new file mode 100644 index 0000000..e2cfdf8 --- /dev/null +++ b/02-usart/tests/test_usart.c @@ -0,0 +1,20 @@ +#include "test_harness.h" +#include "core/usart.h" + +#include <stdlib.h> + +TEST(usart, enable_dma) +{ + __IO usart_t* usart = &USART1; + + usart->c_r3 = 0; + + usart_enable_dma(usart, USART_ENABLE_TX); + ASSERT_EQ(usart->c_r3, 128); + + usart_enable_dma(usart, USART_ENABLE_RX); + ASSERT_EQ(usart->c_r3, 192); + + usart_enable_dma(usart, USART_ENABLE_DISABLED); + ASSERT_EQ(usart->c_r3, 0); +} |