summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-04-25 00:15:04 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-04-25 00:15:04 +0000
commit7b9581a13148957842ab53e2b28bf0a663a48980 (patch)
tree04db80bcc15ccb36c50d6e368c5846ec65bcd4f0
parent99406a6635f91f5fc716cd0ca28e8364f7a97061 (diff)
downloadrockbox-7b9581a13148957842ab53e2b28bf0a663a48980.tar.gz
rockbox-7b9581a13148957842ab53e2b28bf0a663a48980.zip
Not yet working
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@220 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/kernel.c2
-rw-r--r--firmware/test/kernel/Makefile3
-rw-r--r--firmware/test/kernel/main.c35
-rw-r--r--firmware/test/kernel/timer.c18
-rw-r--r--firmware/thread.c32
5 files changed, 49 insertions, 41 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c
index 012ff94c73..da3ddf5ca7 100644
--- a/firmware/kernel.c
+++ b/firmware/kernel.c
@@ -17,6 +17,7 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19#include "kernel.h" 19#include "kernel.h"
20#include "thread.h"
20 21
21long current_tick = 0; 22long current_tick = 0;
22 23
@@ -32,4 +33,5 @@ void sleep(int ticks)
32 33
33void yield(void) 34void yield(void)
34{ 35{
36 switch_thread();
35} 37}
diff --git a/firmware/test/kernel/Makefile b/firmware/test/kernel/Makefile
index f632b3f6de..0740f6809c 100644
--- a/firmware/test/kernel/Makefile
+++ b/firmware/test/kernel/Makefile
@@ -14,7 +14,8 @@ TARGET = -DARCHOS_PLAYER_OLD=1
14CFLAGS = -g -O -Wall -m1 -save-temps -nostdlib -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns -fno-builtin $(INCLUDES) $(TARGET) 14CFLAGS = -g -O -Wall -m1 -save-temps -nostdlib -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns -fno-builtin $(INCLUDES) $(TARGET)
15AFLAGS += -small -relax 15AFLAGS += -small -relax
16 16
17OBJS= ../../crt0.o ../../system.o main.o timer.o ../../thread.o ../../debug.o 17OBJS= ../../crt0.o ../../system.o main.o timer.o \
18 ../../thread.o ../../kernel.o ../../debug.o
18 19
19%.o: %.S 20%.o: %.S
20 $(CC) -o $@ $(CFLAGS) $(INCLUDES) $(DEFS) -c $< 21 $(CC) -o $@ $(CFLAGS) $(INCLUDES) $(DEFS) -c $<
diff --git a/firmware/test/kernel/main.c b/firmware/test/kernel/main.c
index 6ce99c8065..b52ecff21d 100644
--- a/firmware/test/kernel/main.c
+++ b/firmware/test/kernel/main.c
@@ -17,6 +17,7 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19#include "thread.h" 19#include "thread.h"
20#include "kernel.h"
20#include "sh7034.h" 21#include "sh7034.h"
21#include "debug.h" 22#include "debug.h"
22 23
@@ -30,11 +31,11 @@ void t2(void);
30 31
31int main(void) 32int main(void)
32{ 33{
33 char buf[40]; 34 char buf[40];
34 char str[32]; 35 char str[32];
35 int i=0; 36 int i=0;
36 37
37 /* Clear it all! */ 38 /* Clear it all! */
38 SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER); 39 SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER);
39 40
40 /* This enables the serial Rx interrupt, to be able to exit into the 41 /* This enables the serial Rx interrupt, to be able to exit into the
@@ -46,31 +47,31 @@ int main(void)
46 debugf("OK. Let's go\n"); 47 debugf("OK. Let's go\n");
47 48
48 tick_start(40); 49 tick_start(40);
49 50
50 create_thread(t1, s1, 1024); 51 create_thread(t1, s1, 1024);
51 create_thread(t2, s2, 1024); 52 create_thread(t2, s2, 1024);
52 53
53 while(1) 54 while(1)
54 { 55 {
55 debugf("t0\n"); 56 debugf("t0\n");
56 switch_thread(); 57 sleep(100);
57 } 58 }
58} 59}
59 60
60void t1(void) 61void t1(void)
61{ 62{
62 while(1) 63 while(1)
63 { 64 {
64 debugf("t1\n"); 65 debugf("t1\n");
65 switch_thread(); 66 sleep(200);
66 } 67 }
67} 68}
68 69
69void t2(void) 70void t2(void)
70{ 71{
71 while(1) 72 while(1)
72 { 73 {
73 debugf("t2\n"); 74 debugf("t2\n");
74 switch_thread(); 75 sleep(300);
75 } 76 }
76} 77}
diff --git a/firmware/test/kernel/timer.c b/firmware/test/kernel/timer.c
index be253db2b5..31c6f82baa 100644
--- a/firmware/test/kernel/timer.c
+++ b/firmware/test/kernel/timer.c
@@ -19,6 +19,7 @@
19#include "sh7034.h" 19#include "sh7034.h"
20#include "system.h" 20#include "system.h"
21#include "debug.h" 21#include "debug.h"
22#include "kernel.h"
22 23
23void tick_start(unsigned int interval_in_ms) 24void tick_start(unsigned int interval_in_ms)
24{ 25{
@@ -26,6 +27,7 @@ void tick_start(unsigned int interval_in_ms)
26 27
27 count = FREQ / 1000 / 8 * interval_in_ms; 28 count = FREQ / 1000 / 8 * interval_in_ms;
28 29
30 debugf("count = %d\n", count);
29 if(count > 0xffff) 31 if(count > 0xffff)
30 { 32 {
31 debugf("Error! The tick interval is too long (%d ms)\n", 33 debugf("Error! The tick interval is too long (%d ms)\n",
@@ -40,24 +42,22 @@ void tick_start(unsigned int interval_in_ms)
40 TMDR &= ~0x01; /* Operate normally */ 42 TMDR &= ~0x01; /* Operate normally */
41 43
42 TCNT0 = 0; /* Start counting at 0 */ 44 TCNT0 = 0; /* Start counting at 0 */
43 GRA0 = 0xfff0; 45 GRA0 = count;
44 TCR0 = 0x23; /* Clear at GRA match, sysclock/8 */ 46 TCR0 = 0x23; /* Clear at GRA match, sysclock/8 */
45 47
46 TSTR |= 0x01; /* Start timer 1 */
47
48 /* Enable interrupt on level 1 */ 48 /* Enable interrupt on level 1 */
49 IPRC = (IPRC & ~0x00f0) | 0x0010; 49 IPRC = (IPRC & ~0x00f0) | 0x0010;
50
51 TIER0 |= 0x01; /* Enable GRA match interrupt */
52 50
53 while(1) 51 TSR0 &= ~0x01;
54 { 52 TIER0 |= 0x01; /* Enable GRA match interrupt */
55 } 53
54 TSTR |= 0x01; /* Start timer 1 */
56} 55}
57 56
58#pragma interrupt 57#pragma interrupt
59void IMIA0(void) 58void IMIA0(void)
60{ 59{
60 current_tick++;
61
61 TSR0 &= ~0x01; 62 TSR0 &= ~0x01;
62 debugf("Yes\n");
63} 63}
diff --git a/firmware/thread.c b/firmware/thread.c
index e6bc1dd2ff..e3116fbeb5 100644
--- a/firmware/thread.c
+++ b/firmware/thread.c
@@ -52,16 +52,18 @@ static inline void stctx(void* addr)
52 "mov.l r9, @(4, %1)\n\t" 52 "mov.l r9, @(4, %1)\n\t"
53 "mov.l r10, @(8, %1)\n\t" 53 "mov.l r10, @(8, %1)\n\t"
54 "mov.l r11, @(12, %1)\n\t" 54 "mov.l r11, @(12, %1)\n\t"
55 "mov.l r12, @(16, %1)\n\t" 55 "add #16,%1\n\t"
56 "mov.l r13, @(20, %1)\n\t" 56 "mov.l r12, @(0, %1)\n\t"
57 "mov.l r14, @(24, %1)\n\t" 57 "mov.l r13, @(4, %1)\n\t"
58 "mov.l r15, @(28, %1)\n\t" 58 "mov.l r14, @(8, %1)\n\t"
59 "mov.l r15, @(12, %1)\n\t"
60 "add #16,%1\n\t"
59 "stc sr, %0\n\t" 61 "stc sr, %0\n\t"
60 "mov.l %0, @(32, %1)\n\t" 62 "mov.l %0, @(0, %1)\n\t"
61 "stc gbr, %0\n\t" 63 "stc gbr, %0\n\t"
62 "mov.l %0, @(36, %1)\n\t" 64 "mov.l %0, @(4, %1)\n\t"
63 "sts pr, %0\n\t" 65 "sts pr, %0\n\t"
64 "mov.l %0, @(40, %1)" : "=r&" (tmp) : "r" (addr)); 66 "mov.l %0, @(8, %1)" : "=r&" (tmp) : "r" (addr));
65} 67}
66 68
67/*--------------------------------------------------------------------------- 69/*---------------------------------------------------------------------------
@@ -76,15 +78,17 @@ static inline void ldctx(void* addr)
76 "mov.l @(4, %1), r9\n\t" 78 "mov.l @(4, %1), r9\n\t"
77 "mov.l @(8, %1), r10\n\t" 79 "mov.l @(8, %1), r10\n\t"
78 "mov.l @(12, %1), r11\n\t" 80 "mov.l @(12, %1), r11\n\t"
79 "mov.l @(16, %1), r12\n\t" 81 "add #16,%1\n\t"
80 "mov.l @(20, %1), r13\n\t" 82 "mov.l @(0, %1), r12\n\t"
81 "mov.l @(24, %1), r14\n\t" 83 "mov.l @(4, %1), r13\n\t"
82 "mov.l @(28, %1), r15\n\t" 84 "mov.l @(8, %1), r14\n\t"
83 "mov.l @(32, %1), r0\n\t" 85 "mov.l @(12, %1), r15\n\t"
86 "add #16,%1\n\t"
87 "mov.l @(0, %1), r0\n\t"
84 "ldc %0, sr\n\t" 88 "ldc %0, sr\n\t"
85 "mov.l @(36, %1), %0\n\t" 89 "mov.l @(4, %1), %0\n\t"
86 "ldc %0, gbr\n\t" 90 "ldc %0, gbr\n\t"
87 "mov.l @(40, %1), %0\n\t" 91 "mov.l @(8, %1), %0\n\t"
88 "lds %0, pr\n\t" 92 "lds %0, pr\n\t"
89 "mov.l %0, @(0, r15)" : "=r&" (tmp) : "r" (addr)); 93 "mov.l %0, @(0, r15)" : "=r&" (tmp) : "r" (addr));
90} 94}