/
main.c
78 lines (65 loc) · 1.68 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdint.h>
#include <stdlib.h>
#include "riscv.h"
#include "reg.h"
#include "top_defines.h"
#include "lib.h"
#include "jtag_uart.h"
void wait_led_cycle(int ms)
{
if (REG_RD_FIELD(STATUS, SIMULATION) == 1){
// Wait for a much shorter time when simulation...
wait_cycles(100);
}
else{
wait_ms(ms);
}
}
void help()
{
jtag_uart_tx_str(
"r: reverse LED toggle sequence\n"
"\n"
);
}
int main()
{
jtag_uart_tx_str("Hello World!\n");
int reverse_dir = 0;
while(1){
int wait_time = REG_RD_FIELD(STATUS, BUTTON) ? 200 : 100;
int ret;
do{
unsigned char c;
ret = jtag_uart_rx_get_char(&c);
if (ret != 0){
jtag_uart_tx_str("Command: ");
jtag_uart_tx_char(c);
jtag_uart_tx_char('\n');
if (c == 'r'){
jtag_uart_tx_str("Reversing LED sequence...\n");
reverse_dir ^= 1;
}
else{
help();
}
}
} while(ret != 0);
if (reverse_dir){
REG_WR(LED_CONFIG, 0x04);
wait_led_cycle(wait_time);
REG_WR(LED_CONFIG, 0x02);
wait_led_cycle(wait_time);
REG_WR(LED_CONFIG, 0x01);
wait_led_cycle(wait_time);
}
else{
REG_WR(LED_CONFIG, 0x01);
wait_led_cycle(wait_time);
REG_WR(LED_CONFIG, 0x02);
wait_led_cycle(wait_time);
REG_WR(LED_CONFIG, 0x04);
wait_led_cycle(wait_time);
}
}
}