aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x02-usart/genmake.pl15
-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.h8
-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.c19
-rw-r--r--02-usart/src/mem.c16
-rw-r--r--02-usart/src/spin.c2
-rw-r--r--02-usart/tests/test_dma.c2
-rw-r--r--02-usart/tests/test_lib.c19
-rw-r--r--02-usart/tests/test_memory.c12
-rw-r--r--02-usart/tests/test_usart.c20
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);
+}