Flute_Hello_World/src/main.c

62 lines
1.2 KiB
C

#include <stdint.h>
#include "printf.h"
#include "main.h"
xilinx_uartlite_handle_t soc_uart;
xilinx_gpio_handle_t soc_gpio;
void _print_arch_string(uint64_t misa);
int main(int argc, char *argv[]) {
printf("Running on a Bluespec flute core.\r\n");
uint64_t csr = 0;
__csrr("misa", csr);
printf("MISA: 0x%016llx, this is a ", csr);
_print_arch_string(csr);
printf(" processor.\r\n");
printf("System clock frequency: %luHz\r\n", SYS_CLK_FREQ);
xilinx_gpio_port_mode(&soc_gpio, 0, 0x000000FF); // All output
uint8_t led_data = 0x01;
for(;;) {
System_Delay(500);
__csrr("mcycle", csr);
printf("mcycle: 0x%016llx\r\n", csr);
xilinx_gpio_port_write(&soc_gpio, 0, ~led_data);
led_data <<= 1U;
if(led_data == 0) led_data = 0x01;
}
return 0;
}
void _print_arch_string(uint64_t misa) {
switch(misa >> 62) {
case 1:
printf("RV32");
break;
case 2:
printf("RV64");
break;
case 3:
printf("RV128");
break;
}
for(uint8_t i = 0; i < 26; i++) {
if(misa >> i & 0x01ULL) {
printf("%c", 'A' + i);
}
}
}