From a518425419eb3d17b7ec15d0230ccb4748805998 Mon Sep 17 00:00:00 2001
From: Bingzheng Feng <b26feng@uwaterloo.ca>
Date: Sat, 5 May 2018 20:54:20 -0400
Subject: [PATCH] Need to correctly set/read the timer register

---
 include/error.h       |   1 +
 include/mycanvas.h    |   6 +++
 include/mycanvas.h~   |   6 +++
 include/myclock.h     |  10 ++++
 include/myclock.h~    |  11 ++++
 lib/libbwio.a         | Bin 0 -> 5592 bytes
 lib/libmycanvas.a     | Bin 0 -> 1550 bytes
 lib/libmyclock.a      | Bin 0 -> 1540 bytes
 src/Makefile          |  18 +++----
 src/first.map         | 117 ++++++++++++++++++++++++++++++++++++++++++
 src/libsrc/Makefile   |  32 +++++++++---
 src/libsrc/mycanvas.c |  14 +++++
 src/libsrc/myclock.c  |  29 +++++++++++
 src/startup.c         |  30 +++++++++++
 src/upload            |   3 ++
 15 files changed, 262 insertions(+), 15 deletions(-)
 create mode 100644 include/error.h
 create mode 100644 include/mycanvas.h
 create mode 100644 include/mycanvas.h~
 create mode 100644 include/myclock.h
 create mode 100644 include/myclock.h~
 create mode 100644 lib/libbwio.a
 create mode 100644 lib/libmycanvas.a
 create mode 100644 lib/libmyclock.a
 create mode 100644 src/first.map
 create mode 100644 src/libsrc/mycanvas.c
 create mode 100644 src/libsrc/myclock.c
 create mode 100644 src/startup.c
 create mode 100755 src/upload

diff --git a/include/error.h b/include/error.h
new file mode 100644
index 0000000..d8719f0
--- /dev/null
+++ b/include/error.h
@@ -0,0 +1 @@
+#define ERR_INIT_IO 0xDEAD0000
diff --git a/include/mycanvas.h b/include/mycanvas.h
new file mode 100644
index 0000000..3fd60cf
--- /dev/null
+++ b/include/mycanvas.h
@@ -0,0 +1,6 @@
+#ifndef __CANVAS_H__
+#define __CANVAS_H__
+
+void DrawClock(int* ClockCount);
+
+#endif
diff --git a/include/mycanvas.h~ b/include/mycanvas.h~
new file mode 100644
index 0000000..956253e
--- /dev/null
+++ b/include/mycanvas.h~
@@ -0,0 +1,6 @@
+#ifndef __CANVAS_H__
+#define __CANVAS_H__
+
+void DrawClock();
+
+#endif
diff --git a/include/myclock.h b/include/myclock.h
new file mode 100644
index 0000000..ce312c3
--- /dev/null
+++ b/include/myclock.h
@@ -0,0 +1,10 @@
+#ifndef __MY_CLOCK_H__
+#define __MY_CLOCK_H__
+
+#define CLOCK_LOAD_VALUE 50800
+
+// initialize the global time to 0
+void InitClockCount(int *ClockCount, int* LastTimerValue);
+// update the time count from start of the program
+void UpdateClock(int* ClockCount, int* LastTimerValue);
+#endif
diff --git a/include/myclock.h~ b/include/myclock.h~
new file mode 100644
index 0000000..81ba61e
--- /dev/null
+++ b/include/myclock.h~
@@ -0,0 +1,11 @@
+#ifndef __MY_CLOCK_H__
+#define __MY_CLOCK_H__
+
+#define CLOCK_LOAD_VALUE 50800
+
+volatile static unsigned int ClockCount;
+// initialize the global time to 0
+void InitClockCount(int *ClockCount, int* LastTimerValue);
+// update the time count from start of the program
+void UpdateClock(int* ClockCount, int* LastTimerValue);
+#endif
diff --git a/lib/libbwio.a b/lib/libbwio.a
new file mode 100644
index 0000000000000000000000000000000000000000..f0b7e8795a5224c162a70a76c357db8aaa79d034
GIT binary patch
literal 5592
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

literal 0
HcmV?d00001

diff --git a/lib/libmycanvas.a b/lib/libmycanvas.a
new file mode 100644
index 0000000000000000000000000000000000000000..ec1d78d3816baec0a50398511b01153e4f879a1f
GIT binary patch
literal 1550
zcma)6%}*0S6o1=oMT=-9#MHEjLt0FYx=!0|K|(Z8`ADpApc-yv>4z9;OWIZBWVD`4
zj1ta<HC{Y;@St~%S4=p1@UV+)qVeQEAilTVfh8XFr8~d(`Fn46X4^laHA{<^gBRIB
zNoG=+Om=W^Fv}QsLf)0J<dDdp4+4OM&&{h%Z6&wVDBXeDYDuf#(^^WS!|P>BWz}?=
zWwOaMvT&YNRYaBJN-`gOFrJ@~BuPU?M<hr%^ujLqI-2T00)o&5Js%7UzFzp@f1BTq
zZe8CVdAVT+jb|o<ZkzFl4Q$<(!1$I(ZrCz^V#*=I`n|jR(}{)F?LPFc#Xgz2e#82B
z#jt#=WF}a*oxoZ-X;=vsv3<O4wz*+RA&iAOu_*6$c)##{-YDkoar1RsW`-3-9v{}d
z!@RXv+l-|RD~`2s;>DhE>cbwHzLa6fe8FsEPwErLK98{`9*Q`1uh1WMdoFu=hP^#;
zKY6DQ?kDE%hnLJgtfM)AKXqnSJ@tK9AI2EX9oo9K4R2n2AEGlwxmB%J3Ew}Qj(pzS
z+$5c3@3hY|=g@PFyLFunl!HA7VueawUv%Bxn%PRJQ7^lJf%35Pqgt5E<%U^ea{9(u
zrYc-X0Vu82nyxJ%>dg)=3awdLQuNAw9h9=BYoIK&TA(x=9i!B!)v&!Y?td+(F^jf+
z$jzoZrn~QfTz=OdK|JE>1Zn_a3h^*Llumi154g6BNb=glMYb@{p-%b#%HwX0`w2LF
zbLbNy<{LtX;C5nI&?}NWu@k6^o)qrIyirnI5gde~Cxv#X2%Yo}=*XyV2p_V&d^;GJ
zL7x!8Cv1UUzaM_>3O}KIa3^ScJ5XHgx>F@X0FHVI(58Jx_k003iF)V%gPZ}N^URa#
zNC23t5%{ow46)!2Dg8CiAvoja(_QJsIGvLadM}rRfk^iLA7lxXe2&wSq$Nd58sZwn
z%llsoEUYXyZ`buI6esgDW25=v%*4d(c%fJr9m|gwJ9~*719*<qgnpcZaLPrR{nT-Q
WIm9qt?s>v4fF(k_c*}%%cz*yHyAxIb

literal 0
HcmV?d00001

diff --git a/lib/libmyclock.a b/lib/libmyclock.a
new file mode 100644
index 0000000000000000000000000000000000000000..2edf7b1e64c442c5825dae9e8b2187218b0e836a
GIT binary patch
literal 1540
zcma)6%}*0i5T9j>AFXIbVrppOGbsrwuCL#Q5Cb$6i7O;pj0cmlv^5Z0O4=pDNkmUx
zB;l%I4<0@E2YBG*!Fb^4!2>PX#E+AABhKu;hYw?dlf0ez&G+n^-3vojqcnFtc$FQb
zcsh|zXR_IBhB5A$)F)#pAEIR@2ml>;s&pn6=IvayUV50TFD=+Gy;!#Fil+dmt(3@O
z)I~A1Mk13+CRsWYPcjzgJd;WxPi7N-S2MxKV`g5{Gz)8Zq(MJu5+EO-4v<pbvmb(R
z6uP#Y7JR<)HSpGKhqrIFmz_;F=)Bm8Lda#|kQ-&aE^ucT_?pX5zRx!iuetY-M|j9B
zAn!pQLEEsf^`N{eVxk=5*@nxAZ*905IJ+_Q)A{oqJ?ykjaHsWaZ|{3}`(_*7y!v8e
zZ;S5%R^iF2gNIr@tjDV8B|<g$hS!f*59@mMMco_!s4M+?Fjj}#tvtX7iV5(i?I_Mg
zGn0*GR(o6*z3t!S0Q+;Ltgk%4Osi=Z=4+M4U8}lO8AM&M3)IV2U8<JvqGlQNBk%=`
z=W>Ire|&QKB1;+ENB|hkm6~nMBDWhppOaFfQZ?+#vJD2Vl?BFZvk69{?t@ajR;%F7
z{WqOQPuig)B7$~jSXruo(Dx!gE@Wb{PJnC3kKrMA@*}xVU>!M;t>hvs;boM`|1du;
zV#I2D`O2u1B>SUYWNxy3LeMRp6x(T(Wlb`FL%$Ic1j!u4Wlb`@!=NxK=^fxTd-H~o
z6ISzm#D=C(CrRd$SaMY#fFFBOPh3AR31PJYVL7!Qr9&r#)C7pBH%T3s?+k)<q0kVY
zMVa2MPrm<afuw&*G)ev{>9{Sl4@4BxjrL0(@*h+?`4^r*OujGikpKRVumpyg;}EkT
zRwgkH`=6Zu`<#8W*qC3iA3$;3oEjZ5i&Odhov}i(FfwY671a-pN<PEWd(xlv+$jJD
YaRit9r_j?KYIw0U8`+1DNAMDV1Hl#zHUIzs

literal 0
HcmV?d00001

diff --git a/src/Makefile b/src/Makefile
index bc6e65b..f20846a 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -19,17 +19,17 @@ ARFLAGS = rcs
 
 LDFLAGS = -init main -Map first.map -N -T orex.ld -L/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2 -L../lib
 
-all:  first.elf
+all: startup.elf #first.elf
 
-first.s: first.c
-	$(XCC) -S $(CFLAGS) first.c
+startup.s: startup.c
+	$(XCC) -S $(CFLAGS) startup.c
  
-first.o: first.s
-	$(AS) $(ASFLAGS) -o first.o first.s
+startup.o: startup.s
+	$(AS) $(ASFLAGS) -o startup.o startup.s
 
-first.elf: first.o
-	$(LD) $(LDFLAGS) -o $@ first.o -lbwio -lgcc
+startup.elf: startup.o
+	$(LD) $(LDFLAGS) -o $@ startup.o -lmycanvas -lmyclock -lbwio -lgcc
 
 clean:
-	-rm -f first.elf *.s *.o first.map *.a ../lib/*.a
- 
+	-rm -f first.elf *.s *.o startup.map *.a *~
+
diff --git a/src/first.map b/src/first.map
new file mode 100644
index 0000000..3ea6cb0
--- /dev/null
+++ b/src/first.map
@@ -0,0 +1,117 @@
+Archive member included because of file (symbol)
+
+../lib/libmycanvas.a(mycanvas.o)
+                              startup.o (DrawClock)
+../lib/libmyclock.a(myclock.o)
+                              startup.o (InitClockCount)
+../lib/libbwio.a(bwio.o)      startup.o (bwsetfifo)
+/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
+                              ../lib/libbwio.a(bwio.o) (__udivsi3)
+/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
+                              ../lib/libbwio.a(bwio.o) (__umodsi3)
+/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
+                              /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) (__div0)
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+ram              0x0000000000000000 0x0000000002000000
+rom              0x0000000060000000 0x0000000000800000
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+
+data            0x0000000000000000        0x0
+                0x0000000000000000                _DataStart = .
+ *(.data)
+                0x0000000000000000                _DataEnd = .
+
+bss             0x0000000000000000        0x0
+                0x0000000000000000                _BssStart = .
+ *(.bss)
+                0x0000000000000000                _BssEnd = .
+
+text            0x0000000000000000     0x133c
+ *(.text)
+ .text          0x0000000000000000      0x17c startup.o
+                0x000000000000010c                main
+                0x0000000000000000                initialize
+                0x00000000000000b0                runloop
+ .text          0x000000000000017c      0x174 ../lib/libmycanvas.a(mycanvas.o)
+                0x000000000000017c                DrawClock
+ .text          0x00000000000002f0      0x140 ../lib/libmyclock.a(myclock.o)
+                0x00000000000002f0                InitClockCount
+                0x0000000000000394                UpdateClock
+ .text          0x0000000000000430      0xc54 ../lib/libbwio.a(bwio.o)
+                0x00000000000007a8                bwputr
+                0x0000000000000d14                bwi2a
+                0x0000000000000430                bwsetfifo
+                0x0000000000000604                bwputc
+                0x0000000000000a64                bwa2d
+                0x00000000000004f8                bwsetspeed
+                0x00000000000006c8                c2x
+                0x0000000000000b0c                bwa2i
+                0x00000000000009ac                bwgetc
+                0x0000000000000bd0                bwui2a
+                0x0000000000000d78                bwformat
+                0x00000000000008a4                bwputw
+                0x000000000000104c                bwprintf
+                0x0000000000000728                bwputx
+                0x0000000000000828                bwputstr
+ .text          0x0000000000001084      0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
+                0x0000000000001084                __udivsi3
+                0x000000000000117c                __aeabi_uidivmod
+ .text          0x0000000000001194       0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
+                0x0000000000001194                __umodsi3
+ .text          0x0000000000001260        0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
+                0x0000000000001260                __aeabi_ldiv0
+                0x0000000000001260                __div0
+                0x0000000000001260                __aeabi_idiv0
+ *(.got)
+ *(.got.plt)
+ .got.plt       0x0000000000001264        0xc startup.o
+                0x0000000000001264                _GLOBAL_OFFSET_TABLE_
+ *(.rodata)
+ .rodata        0x0000000000001270       0x10 startup.o
+ .rodata        0x0000000000001280       0x58 ../lib/libmycanvas.a(mycanvas.o)
+ .rodata        0x00000000000012d8       0x64 ../lib/libmyclock.a(myclock.o)
+ *(.glue_7)
+ *(.glue_7t)
+
+.rel.dyn
+LOAD startup.o
+LOAD ../lib/libmycanvas.a
+LOAD ../lib/libmyclock.a
+LOAD ../lib/libbwio.a
+LOAD /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a
+OUTPUT(startup.elf elf32-littlearm)
+
+.comment        0x0000000000000000       0x48
+ .comment       0x0000000000000000       0x12 startup.o
+ .comment       0x0000000000000012       0x12 ../lib/libmycanvas.a(mycanvas.o)
+ .comment       0x0000000000000024       0x12 ../lib/libmyclock.a(myclock.o)
+ .comment       0x0000000000000036       0x12 ../lib/libbwio.a(bwio.o)
+
+.debug_line     0x0000000000000000      0x14f
+ .debug_line    0x0000000000000000       0x86 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
+ .debug_line    0x0000000000000086       0x6f /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
+ .debug_line    0x00000000000000f5       0x5a /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
+
+.debug_info     0x0000000000000000      0x153
+ .debug_info    0x0000000000000000       0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
+ .debug_info    0x0000000000000071       0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
+ .debug_info    0x00000000000000e2       0x71 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
+
+.debug_abbrev   0x0000000000000000       0x3c
+ .debug_abbrev  0x0000000000000000       0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
+ .debug_abbrev  0x0000000000000014       0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
+ .debug_abbrev  0x0000000000000028       0x14 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
+
+.debug_aranges  0x0000000000000000       0x60
+ .debug_aranges
+                0x0000000000000000       0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
+ .debug_aranges
+                0x0000000000000020       0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
+ .debug_aranges
+                0x0000000000000040       0x20 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
diff --git a/src/libsrc/Makefile b/src/libsrc/Makefile
index d371038..a932d94 100644
--- a/src/libsrc/Makefile
+++ b/src/libsrc/Makefile
@@ -16,20 +16,40 @@ ASFLAGS	= -mcpu=arm920t -mapcs-32
 
 ARFLAGS = rcs
 
-all:  bwio.a
- 
+all:  bwio.a 
+
 bwio.s: bwio.c
 	$(XCC) -S $(CFLAGS) bwio.c
 
+mycanvas.s: mycanvas.c
+	$(XCC) -S $(CFLAGS) mycanvas.c
+
+myclock.s: myclock.c
+	$(XCC) -S $(CFLAGS) myclock.c
+
+
 bwio.o: bwio.s
 	$(AS) $(ASFLAGS) -o bwio.o bwio.s
 
+mycanvas.o: mycanvas.s
+	$(AS) $(ASFLAGS) -o mycanvas.o mycanvas.s
+
+myclock.o: myclock.s
+	$(AS) $(ASFLAGS) -o myclock.o myclock.s
+
 bwio.a: bwio.o
 	$(AR) $(ARFLAGS) $@ bwio.o
 
-install: bwio.a
-	 mv bwio.a ../../lib/libbwio.a
+mycanvas.a: mycanvas.o
+	$(AR) $(ARFLAGS) $@ mycanvas.o
+
+myclock.a: myclock.o
+	$(AR) $(ARFLAGS) $@ myclock.o
+
+install: bwio.a mycanvas.a myclock.a
+	mv bwio.a ../../lib/libbwio.a
+	mv mycanvas.a ../../lib/libmycanvas.a
+	mv myclock.a ../../lib/libmyclock.a
 
 clean:
-	-rm -f *.s *.o *.a
- 
+	-rm -f *.s *.o *.a *~ ../../lib/*.a
diff --git a/src/libsrc/mycanvas.c b/src/libsrc/mycanvas.c
new file mode 100644
index 0000000..1f92bd4
--- /dev/null
+++ b/src/libsrc/mycanvas.c
@@ -0,0 +1,14 @@
+#include <bwio.h>
+#include <mycanvas.h>
+#include <myclock.h>
+
+void DrawClock(int* ClockCount)
+{
+  bwprintf(COM2,"DrawClock, ClockCount %d\n\r", *ClockCount);
+  unsigned int TenthSecond = (*ClockCount) % 10;
+  bwprintf(COM2,"DrawClock, Tenth %d\n\r", TenthSecond);
+  unsigned int Second = ((*ClockCount - TenthSecond) % 600)/10;
+  bwprintf(COM2,"DrawClock, Second %d\n\r", Second);
+  unsigned int Minute = (*ClockCount)/600;
+  bwprintf(COM2,"%d:%d:%d\n\r",Minute,Second,TenthSecond);
+}
diff --git a/src/libsrc/myclock.c b/src/libsrc/myclock.c
new file mode 100644
index 0000000..b76cdeb
--- /dev/null
+++ b/src/libsrc/myclock.c
@@ -0,0 +1,29 @@
+#include <bwio.h>
+#include <myclock.h>
+#include <ts7200.h>
+
+
+void InitClockCount(int* ClockCount, int* LastTimerValue)
+{
+  *ClockCount = 0;
+  *LastTimerValue = CLOCK_LOAD_VALUE;
+  int* Clock3LoadRegister = (int *) TIMER3_BASE;
+  int* Clock3ControlRegister = (int *) TIMER3_BASE + CRTL_OFFSET;
+  // int ClearMode = MODE_MASK | CLKSEL_MASK;
+  // clear clock
+  // *Clock3ControlRegister = ClearMode;
+  // set interval
+  *Clock3LoadRegister = CLOCK_LOAD_VALUE;
+  // enable clock
+  *Clock3ControlRegister = ENABLE_MASK;
+  bwprintf(COM2,"InitClock, ClockCount %d, LastTimerValue: %d\n\r",*ClockCount, *LastTimerValue);
+}
+
+void UpdateClock(int* ClockCount, int* LastTimerValue)
+{
+  int* TimerValueRegister = (int *) TIMER3_BASE + VAL_OFFSET;
+  int CurrentTimerValue = *TimerValueRegister;
+  bwprintf(COM2, "UpdateClock, LastTimerVlaue: %d, ClockCount:%d\n\r",*LastTimerValue,*ClockCount);
+  if(CurrentTimerValue >= *LastTimerValue) ClockCount++;
+  *LastTimerValue = CurrentTimerValue;
+}
diff --git a/src/startup.c b/src/startup.c
new file mode 100644
index 0000000..aa42206
--- /dev/null
+++ b/src/startup.c
@@ -0,0 +1,30 @@
+#include <bwio.h>
+#include <error.h>
+#include <mycanvas.h>
+#include <myclock.h>
+
+int initialize(int* ClockCount, int* LastTimerValue)
+{
+  if(bwsetfifo(COM2, OFF)) return ERR_INIT_IO;
+  if(bwsetspeed(COM1, 2400)) return ERR_INIT_IO;
+  if(bwsetspeed(COM2, 115200)) return ERR_INIT_IO;
+  InitClockCount(ClockCount, LastTimerValue);
+  return 0;
+}
+
+int runloop(int* ClockCount, int* LastTimerValue)
+{
+  while(1){
+    UpdateClock(ClockCount, LastTimerValue);
+    bwprintf(COM2, "ClockCount %d\n\r", *ClockCount);
+    DrawClock(ClockCount);
+  }
+  return 0;
+}
+
+int main(){
+  unsigned int ClockCount, LastTimerValue;
+  unsigned int InitCode = initialize(&ClockCount, &LastTimerValue);
+  if(InitCode) return InitCode;
+  return runloop(&ClockCount, &LastTimerValue);
+}
diff --git a/src/upload b/src/upload
new file mode 100755
index 0000000..5ff7c25
--- /dev/null
+++ b/src/upload
@@ -0,0 +1,3 @@
+#! /bin/bash
+
+mv $1 /u/cs452/tftp/ARM/b26feng/
-- 
GitLab