summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.c31
-rw-r--r--script.ld18
2 files changed, 18 insertions, 31 deletions
diff --git a/main.c b/main.c
index 9f05a53..2ad2e86 100644
--- a/main.c
+++ b/main.c
@@ -14,30 +14,23 @@
#define PIO_WPKEY 0x50494Fu
-#define PMC_PID 13
-#define PMC_WPKEY 0x504D43u
-
-#define PMC_WPMR *((volatile unsigned int *)(PORT + 0x400E06E4u))
-#define PMC_PCER0 *((volatile unsigned int *)(PORT + 0x400E0610u))
-
-#define GPIO_NUM 1
-#define GPIO_MASK (1u << GPIO_NUM)
+#define LED_PIN 1
int main(void)
{
volatile int i;
PIO_WPMR = PIO_WPKEY << 8;
- PIO_PER |= GPIO_MASK;
- PIO_OER |= GPIO_MASK;
- PIO_PUDR |= GPIO_MASK;
+ PIO_PER |= (1 << LED_PIN);
+ PIO_OER |= (1 << LED_PIN);
+ PIO_PUDR |= (1 << LED_PIN);
PIO_WPMR = (PIO_WPKEY << 8) | 1u;
for (;;) {
- PIO_SODR |= GPIO_MASK;
+ PIO_SODR |= (1 << LED_PIN);
for (i = 0; i < 100000; i++)
;
- PIO_CODR |= GPIO_MASK;
+ PIO_CODR |= (1 << LED_PIN);
for (i = 0; i < 100000; i++)
;
}
@@ -45,10 +38,16 @@ int main(void)
return 0;
}
+__attribute__ ((noreturn)) void reset_handler(void)
+{
+ main();
+ for(;;)
+ ;
+}
+
extern const unsigned int sp;
-__attribute__ ((section(".vtor")))
-const void* VectorTable[] = {
+__attribute__ ((section(".vtor"))) const void* tab[] = {
&sp,
- main
+ reset_handler
};
diff --git a/script.ld b/script.ld
index 24129f5..a063ffe 100644
--- a/script.ld
+++ b/script.ld
@@ -1,33 +1,23 @@
-ENTRY(main)
-
MEMORY
{
rom (rx) : ORIGIN = 0x00080000, LENGTH = 512K
- ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
+ ram (rwx) : ORIGIN = 0x20000000, LENGTH = 96K
}
+sp = ORIGIN(ram) + LENGTH(ram);
+
SECTIONS
{
.text :
{
KEEP(*(.vtor))
-
*(.text*)
*(.rodata*)
-
- . = ALIGN(4);
- __end_of_text__ = .;
} > rom
.data :
{
- __data_start_src__ = __end_of_text__;
- __data_start__ = .;
-
*(.data*)
-
- . = ALIGN(4);
- __data_end__ = .;
} > ram AT >rom
.bss (NOLOAD) :
@@ -37,6 +27,4 @@ SECTIONS
*(COMMON)
__bss_end__ = . ;
} > ram
-
- sp = ORIGIN(ram) + LENGTH(ram);
}