summaryrefslogtreecommitdiff
path: root/software/coreip-welcome
diff options
context:
space:
mode:
authorDavid Connelly <david.connelly@sifive.com>2019-03-05 15:08:12 -0500
committerDavid Connelly <david.connelly@sifive.com>2019-03-05 15:08:12 -0500
commit0f5acb16b51fe3a2b2f93f096f2c928c2a0a0a40 (patch)
tree0ab072f6f51dea07419000bae40ba34b7cf68a02 /software/coreip-welcome
parent8e886ab52c3621cc25f158ca86b452356c22b9a2 (diff)
Updated to submodule
Diffstat (limited to 'software/coreip-welcome')
-rw-r--r--software/coreip-welcome/Makefile6
-rw-r--r--software/coreip-welcome/README.md2
-rw-r--r--software/coreip-welcome/coreip-welcome.c156
3 files changed, 0 insertions, 164 deletions
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;
-}