summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules3
-rw-r--r--README.md2
-rw-r--r--software/coreip-welcome/Makefile6
-rw-r--r--software/coreip-welcome/README.md2
-rw-r--r--software/coreip-welcome/coreip-welcome.c156
m---------software/example-coreip-welcome0
6 files changed, 4 insertions, 165 deletions
diff --git a/.gitmodules b/.gitmodules
index 068c7a1..28db658 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -37,3 +37,6 @@
[submodule "software/empty"]
path = software/empty
url = https://github.com/sifive/example-empty.git
+[submodule "software/example-coreip-welcome"]
+ path = software/example-coreip-welcome
+ url = https://github.com/sifive/example-coreip-welcome
diff --git a/README.md b/README.md
index d2496df..56d3ddd 100644
--- a/README.md
+++ b/README.md
@@ -79,7 +79,7 @@ of Freedom E SDK.
- Demonstrates how to register a handler for and trigger a local interrupt
- example-pmp
- Demonstrates how to configure a Physical Memory Protection (PMP) region
- - coreip-welcome
+ - example-coreip-welcome
- Prints the SiFive banner and blinks LEDs
#### (Deprecated) Legacy Freedom E SDK Library ####
diff --git a/software/coreip-welcome/Makefile b/software/coreip-welcome/Makefile
deleted file mode 100644
index 3198603..0000000
--- a/software/coreip-welcome/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-
-coreip-welcome: coreip-welcome.c
-
-clean:
- rm -f coreip-welcome coreip-welcome.hex
-
diff --git a/software/coreip-welcome/README.md b/software/coreip-welcome/README.md
deleted file mode 100644
index a9a513b..0000000
--- a/software/coreip-welcome/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# coreip-welcome
-A simple "CoreIP Welcome" example which prints SiFive banner and uses board LEDs.
diff --git a/software/coreip-welcome/coreip-welcome.c b/software/coreip-welcome/coreip-welcome.c
deleted file mode 100644
index 7147d83..0000000
--- a/software/coreip-welcome/coreip-welcome.c
+++ /dev/null
@@ -1,156 +0,0 @@
-
-#include <stdio.h>
-#include <metal/cpu.h>
-#include <metal/led.h>
-#include <metal/button.h>
-#include <metal/switch.h>
-
-#define RTC_FREQ 32768
-
-struct metal_cpu *cpu0;
-struct metal_interrupt *cpu_intr, *tmr_intr;
-int tmr_id;
-volatile uint32_t timer_isr_flag;
-
-void display_banner (void) {
-
- printf("\n");
- printf("\n");
- printf(" SIFIVE, INC.\n");
- printf("\n");
- printf(" 5555555555555555555555555\n");
- printf(" 5555 5555\n");
- printf(" 5555 5555\n");
- printf(" 5555 5555\n");
- printf(" 5555 5555555555555555555555\n");
- printf(" 5555 555555555555555555555555\n");
- printf(" 5555 5555\n");
- printf(" 5555 5555\n");
- printf(" 5555 5555\n");
- printf(" 5555555555555555555555555555 55555\n");
- printf(" 55555 555555555 55555\n");
- printf(" 55555 55555 55555\n");
- printf(" 55555 5 55555\n");
- printf(" 55555 55555\n");
- printf(" 55555 55555\n");
- printf(" 55555 55555\n");
- printf(" 55555 55555\n");
- printf(" 55555 55555\n");
- printf(" 555555555\n");
- printf(" 55555\n");
- printf(" 5\n");
- printf("\n");
-
- printf("\n");
- printf("Welcome to the E31/E51 Core IP FPGA Evaluation Kit!\n");
-
-}
-
-void timer_isr (int id, void *data) {
-
- // Disable Timer interrupt
- metal_interrupt_disable(tmr_intr, tmr_id);
-
- // Flag showing we hit timer isr
- timer_isr_flag = 1;
-}
-
-void wait_for_timer(struct metal_led *which_led) {
-
- // clear global timer isr flag
- timer_isr_flag = 0;
-
- // Turn on desired LED
- metal_led_on(which_led);
-
- // Set timer
- metal_cpu_set_mtimecmp(cpu0, metal_cpu_get_mtime(cpu0) + RTC_FREQ);
-
- // Enable Timer interrupt
- metal_interrupt_enable(tmr_intr, tmr_id);
-
- // wait till timer triggers and isr is hit
- while (timer_isr_flag == 0){};
-
- timer_isr_flag = 0;
-
- // All Off
- metal_led_off(which_led);
-}
-
-int main (void)
-{
- int rc, up_cnt, dn_cnt;
- struct metal_led *led0_red, *led0_green, *led0_blue;
-
- // This demo will toggle LEDs colors so we define them here
- led0_red = metal_led_get_rgb("LD0", "red");
- led0_green = metal_led_get_rgb("LD0", "green");
- led0_blue = metal_led_get_rgb("LD0", "blue");
- if ((led0_red == NULL) || (led0_green == NULL) || (led0_blue == NULL)) {
- printf("At least one of LEDs is null.\n");
- return 1;
- }
-
- // Enable each LED
- metal_led_enable(led0_red);
- metal_led_enable(led0_green);
- metal_led_enable(led0_blue);
-
- // All Off
- metal_led_off(led0_red);
- metal_led_off(led0_green);
- metal_led_off(led0_blue);
-
- // Lets get the CPU and and its interrupt
- cpu0 = metal_cpu_get(0);
- if (cpu0 == NULL) {
- printf("CPU null.\n");
- return 2;
- }
- cpu_intr = metal_cpu_interrupt_controller(cpu0);
- if (cpu_intr == NULL) {
- printf("CPU interrupt controller is null.\n");
- return 3;
- }
- metal_interrupt_init(cpu_intr);
-
- // display welcome banner
- display_banner();
-
- // Setup Timer and its interrupt so we can toggle LEDs on 1s cadence
- tmr_intr = metal_cpu_timer_interrupt_controller(cpu0);
- if (tmr_intr == NULL) {
- printf("TIMER interrupt controller is null.\n");
- return 4;
- }
- metal_interrupt_init(tmr_intr);
- tmr_id = metal_cpu_timer_get_interrupt_id(cpu0);
- rc = metal_interrupt_register_handler(tmr_intr, tmr_id, timer_isr, cpu0);
- if (rc < 0) {
- printf("TIMER interrupt handler registration failed\n");
- return (rc * -1);
- }
-
- // Lastly CPU interrupt
- if (metal_interrupt_enable(cpu_intr, 0) == -1) {
- printf("CPU interrupt enable failed\n");
- return 6;
- }
-
- // Red -> Green -> Blue, repeat
- while (1) {
-
- // Turn on RED
- wait_for_timer(led0_red);
-
- // Turn on Green
- wait_for_timer(led0_green);
-
- // Turn on Blue
- wait_for_timer(led0_blue);
- }
-
- // return
- return 0;
-}
diff --git a/software/example-coreip-welcome b/software/example-coreip-welcome
-Subproject b8e2d46f3d589dab7b4ba4c38b87d3dec02e3b8
+Subproject 11309c62af2e373b989968ad32e28c651a95f86