diff --git a/include/error.h b/include/error.h new file mode 100644 index 0000000000000000000000000000000000000000..d8719f0ff70a4fde4435dc357b8d26daf1f85179 --- /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 0000000000000000000000000000000000000000..3fd60cfdc7915c00859f91b3a9dad0d1bc384c49 --- /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 0000000000000000000000000000000000000000..956253e0fdf362447af970826105bb637980a5f3 --- /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 0000000000000000000000000000000000000000..ce312c32e62daacc65279ef1f361f7f38219ee93 --- /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 0000000000000000000000000000000000000000..81ba61ed1efa71f391b4e7bef3ee31b4098061fa --- /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 Binary files /dev/null and b/lib/libbwio.a differ diff --git a/lib/libmycanvas.a b/lib/libmycanvas.a new file mode 100644 index 0000000000000000000000000000000000000000..ec1d78d3816baec0a50398511b01153e4f879a1f Binary files /dev/null and b/lib/libmycanvas.a differ diff --git a/lib/libmyclock.a b/lib/libmyclock.a new file mode 100644 index 0000000000000000000000000000000000000000..2edf7b1e64c442c5825dae9e8b2187218b0e836a Binary files /dev/null and b/lib/libmyclock.a differ diff --git a/src/Makefile b/src/Makefile index bc6e65b8257e4c8fa73770a151bb4071c03059d1..f20846a487da456fcbedbf93508f32b5fa835b41 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 0000000000000000000000000000000000000000..3ea6cb0ac14eec8c3247e9c9e0bca4d5f0a2c6d5 --- /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 d3710380fcfea7b1cddbab0f6c3ce0698edd4396..a932d94b058242f772d7453b11383fa563e9c274 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 0000000000000000000000000000000000000000..1f92bd4abd4dcb18b61518cfd0b506bb362e206f --- /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 0000000000000000000000000000000000000000..b76cdeb842fcf7f1d656c222d5d83c3a85eebcd6 --- /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 0000000000000000000000000000000000000000..aa4220682bc908c1a2cbbcbc73abe0d37448fa28 --- /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 0000000000000000000000000000000000000000..5ff7c25dc8a83eaafad3d6e0a2bafe7544ffde19 --- /dev/null +++ b/src/upload @@ -0,0 +1,3 @@ +#! /bin/bash + +mv $1 /u/cs452/tftp/ARM/b26feng/