aboutsummaryrefslogtreecommitdiff
path: root/VexRiscvSocSoftware/projects/murax/wip/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'VexRiscvSocSoftware/projects/murax/wip/src/main.c')
-rwxr-xr-xVexRiscvSocSoftware/projects/murax/wip/src/main.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/VexRiscvSocSoftware/projects/murax/wip/src/main.c b/VexRiscvSocSoftware/projects/murax/wip/src/main.c
new file mode 100755
index 0000000..2d92b76
--- /dev/null
+++ b/VexRiscvSocSoftware/projects/murax/wip/src/main.c
@@ -0,0 +1,58 @@
+#include <stdint.h>
+#include <murax.h>
+
+/* bss section */
+uint32_t a, b, c;
+
+/* ctor section */
+void __attribute__ ((constructor)) defaultConstructor()
+{
+ c += 3;
+}
+
+/* text section */
+void main()
+{
+ uint32_t result;
+
+ interruptCtrl_init(TIMER_INTERRUPT);
+ prescaler_init(TIMER_PRESCALER);
+ timer_init(TIMER_A);
+
+ TIMER_PRESCALER->LIMIT = 12000-1; //1 ms rate
+
+ TIMER_A->LIMIT = 1000-1; //1 second rate
+ TIMER_A->CLEARS_TICKS = 0x00010002;
+
+ TIMER_INTERRUPT->PENDINGS = 0xF;
+ TIMER_INTERRUPT->MASKS = 0x1;
+
+ GPIO_A->OUTPUT_ENABLE = 0x000000FF;
+ GPIO_A->OUTPUT = 0x00000000;
+
+ UART->STATUS = 2; //Enable RX interrupts
+ UART->DATA = 'A';
+
+ result = 0;
+ a = 1, b = 2;
+ while(1){
+ result += a;
+ result += b + c;
+ for(uint32_t idx = 0;idx < 50000;idx++) asm volatile("");
+ GPIO_A->OUTPUT = (GPIO_A->OUTPUT & ~0x3F) | ((GPIO_A->OUTPUT + 1) & 0x3F); //Counter on LED[5:0]
+ }
+}
+
+void irqCallback()
+{
+ if(TIMER_INTERRUPT->PENDINGS & 1){ //Timer A interrupt
+ GPIO_A->OUTPUT ^= 0x80; //Toogle led 7
+ TIMER_INTERRUPT->PENDINGS = 1;
+ }
+ while(UART->STATUS & (1 << 9)){ //UART RX interrupt
+ UART->DATA = (UART->DATA) & 0xFF;
+ }
+}
+
+
+