Skip to content
Snippets Groups Projects
Commit a5184254 authored by Tom Feng's avatar Tom Feng
Browse files

Need to correctly set/read the timer register

parent 49c3cee2
No related branches found
No related tags found
1 merge request!16Withtime
#define ERR_INIT_IO 0xDEAD0000
#ifndef __CANVAS_H__
#define __CANVAS_H__
void DrawClock(int* ClockCount);
#endif
#ifndef __CANVAS_H__
#define __CANVAS_H__
void DrawClock();
#endif
#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
#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
File added
File added
File added
...@@ -19,17 +19,17 @@ ARFLAGS = rcs ...@@ -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 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 startup.s: startup.c
$(XCC) -S $(CFLAGS) first.c $(XCC) -S $(CFLAGS) startup.c
first.o: first.s startup.o: startup.s
$(AS) $(ASFLAGS) -o first.o first.s $(AS) $(ASFLAGS) -o startup.o startup.s
first.elf: first.o startup.elf: startup.o
$(LD) $(LDFLAGS) -o $@ first.o -lbwio -lgcc $(LD) $(LDFLAGS) -o $@ startup.o -lmycanvas -lmyclock -lbwio -lgcc
clean: clean:
-rm -f first.elf *.s *.o first.map *.a ../lib/*.a -rm -f first.elf *.s *.o startup.map *.a *~
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)
...@@ -16,20 +16,40 @@ ASFLAGS = -mcpu=arm920t -mapcs-32 ...@@ -16,20 +16,40 @@ ASFLAGS = -mcpu=arm920t -mapcs-32
ARFLAGS = rcs ARFLAGS = rcs
all: bwio.a all: bwio.a
bwio.s: bwio.c bwio.s: bwio.c
$(XCC) -S $(CFLAGS) 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 bwio.o: bwio.s
$(AS) $(ASFLAGS) -o 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 bwio.a: bwio.o
$(AR) $(ARFLAGS) $@ bwio.o $(AR) $(ARFLAGS) $@ bwio.o
install: bwio.a mycanvas.a: mycanvas.o
mv bwio.a ../../lib/libbwio.a $(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: clean:
-rm -f *.s *.o *.a -rm -f *.s *.o *.a *~ ../../lib/*.a
#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);
}
#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;
}
#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);
}
#! /bin/bash
mv $1 /u/cs452/tftp/ARM/b26feng/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment