Skip to content
Snippets Groups Projects
Commit 10a2d9e2 authored by antnh6@gmail.com's avatar antnh6@gmail.com
Browse files

sectioned things into libsrc

parent e27ff5a5
No related branches found
No related tags found
1 merge request!16Withtime
# Makefile for busy-wait IO tests
#
XCC = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/gcc
AS = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/as
AR = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/ar
CFLAGS = -c -fPIC -Wall -I. -I../../include -mcpu=arm920t -msoft-float
# -g: include hooks for gdb
# -c: only compile
# -mcpu=arm920t: generate code for the 920t architecture
# -fpic: emit position-independent code
# -Wall: report all warnings
ASFLAGS = -mcpu=arm920t -mapcs-32
# -mapcs: always generate a complete stack frame
ARFLAGS = rcs
all: bwio.a
scheduler.s: scheduler.c
$(XCC) -S $(CFLAGS) scheduler.c
taskdescriptor.s: taskdescriptor.c
$(XCC) -S $(CFLAGS) taskdescriptor.c
bwio.s: bwio.c
$(XCC) -S $(CFLAGS) bwio.c
scheduler.o: scheduler.s
$(AS) $(ASFLAGS) -o scheduler.o scheduler.s
taskdescriptor.o: taskdescriptor.s
$(AS) $(ASFLAGS) -o taskdescriptor.o taskdescriptor.s
bwio.o: bwio.s
$(AS) $(ASFLAGS) -o bwio.o bwio.s
scheduler.a: scheduler.o
$(AR) $(ARFLAGS) $@ scheduler.o
taskdescriptor.a: taskdescriptor.o
$(AR) $(ARFLAGS) $@ taskdescriptor.o
bwio.a: bwio.o
$(AR) $(ARFLAGS) $@ bwio.o
install: bwio.a taskdescriptor.a scheduler.a
mv bwio.a ../../lib/libbwio.a
mv taskdescriptor.a ../../lib/libtaskdescriptor.a
mv scheduler.a ../../lib/libscheduler.a
clean:
-rm -f *.s *.o *.a *~ ../../lib/*.a
# Makefile for busy-wait IO tests
#
XCC = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/gcc
AS = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/as
AR = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/ar
CFLAGS = -c -fPIC -Wall -I. -I../../include -mcpu=arm920t -msoft-float
# -g: include hooks for gdb
# -c: only compile
# -mcpu=arm920t: generate code for the 920t architecture
# -fpic: emit position-independent code
# -Wall: report all warnings
ASFLAGS = -mcpu=arm920t -mapcs-32
# -mapcs: always generate a complete stack frame
ARFLAGS = rcs
all: bwio.a
buffer.s: buffer.c
$(XCC) -S $(CFLAGS) buffer.c
bwio.s: bwio.c
$(XCC) -S $(CFLAGS) bwio.c
buffer.o: buffer.s
$(AS) $(ASFLAGS) -o buffer.o buffer.s
bwio.o: bwio.s
$(AS) $(ASFLAGS) -o bwio.o bwio.s
buffer.a: buffer.o
$(AR) $(ARFLAGS) $@ buffer.o
bwio.a: bwio.o
$(AR) $(ARFLAGS) $@ bwio.o
install: bwio.a buffer.a
mv bwio.a ../../lib/libbwio.a
mv buffer.a ../../lib/libbuffer.a
clean:
-rm -f *.s *.o *.a *~ ../../lib/*.a
/*
* bwio.c - busy-wait I/O routines for diagnosis
*
* Specific to the TS-7200 ARM evaluation board
*
*/
#include <ts7200.h>
#include <bwio.h>
/*
* The UARTs are initialized by RedBoot to the following state
* 115,200 bps
* 8 bits
* no parity
* fifos enabled
*/
int bwsetfifo( int channel, int state ) {
int *line, buf;
switch( channel ) {
case COM1:
line = (int *)( UART1_BASE + UART_LCRH_OFFSET );
break;
case COM2:
line = (int *)( UART2_BASE + UART_LCRH_OFFSET );
break;
default:
return -1;
break;
}
buf = *line;
buf = state ? buf | FEN_MASK : buf & ~FEN_MASK;
*line = buf;
return 0;
}
int bwsetspeed( int channel, int speed ) {
int *high, *low;
switch( channel ) {
case COM1:
high = (int *)( UART1_BASE + UART_LCRM_OFFSET );
low = (int *)( UART1_BASE + UART_LCRL_OFFSET );
break;
case COM2:
high = (int *)( UART2_BASE + UART_LCRM_OFFSET );
low = (int *)( UART2_BASE + UART_LCRL_OFFSET );
break;
default:
return -1;
break;
}
switch( speed ) {
case 115200:
*high = 0x0;
*low = 0x3;
return 0;
case 2400:
*high = 0x0;
*low = 0xbf;
return 0;
default:
return -1;
}
}
int bwputc( int channel, char c ) {
int *flags, *data;
switch( channel ) {
case COM1:
flags = (int *)( UART1_BASE + UART_FLAG_OFFSET );
data = (int *)( UART1_BASE + UART_DATA_OFFSET );
break;
case COM2:
flags = (int *)( UART2_BASE + UART_FLAG_OFFSET );
data = (int *)( UART2_BASE + UART_DATA_OFFSET );
break;
default:
return -1;
break;
}
while( ( *flags & TXFF_MASK ) ) ;
*data = c;
return 0;
}
char c2x( char ch ) {
if ( (ch <= 9) ) return '0' + ch;
return 'a' + ch - 10;
}
int bwputx( int channel, char c ) {
char chh, chl;
chh = c2x( c / 16 );
chl = c2x( c % 16 );
bwputc( channel, chh );
return bwputc( channel, chl );
}
int bwputr( int channel, unsigned int reg ) {
int byte;
char *ch = (char *) &reg;
for( byte = 3; byte >= 0; byte-- ) bwputx( channel, ch[byte] );
return bwputc( channel, ' ' );
}
int bwputstr( int channel, char *str ) {
while( *str ) {
if( bwputc( channel, *str ) < 0 ) return -1;
str++;
}
return 0;
}
void bwputw( int channel, int n, char fc, char *bf ) {
char ch;
char *p = bf;
while( *p++ && n > 0 ) n--;
while( n-- > 0 ) bwputc( channel, fc );
while( ( ch = *bf++ ) ) bwputc( channel, ch );
}
int bwgetc( int channel ) {
int *flags, *data;
unsigned char c;
switch( channel ) {
case COM1:
flags = (int *)( UART1_BASE + UART_FLAG_OFFSET );
data = (int *)( UART1_BASE + UART_DATA_OFFSET );
break;
case COM2:
flags = (int *)( UART2_BASE + UART_FLAG_OFFSET );
data = (int *)( UART2_BASE + UART_DATA_OFFSET );
break;
default:
return -1;
break;
}
while ( !( *flags & RXFF_MASK ) ) ;
c = *data;
return c;
}
int bwa2d( char ch ) {
if( ch >= '0' && ch <= '9' ) return ch - '0';
if( ch >= 'a' && ch <= 'f' ) return ch - 'a' + 10;
if( ch >= 'A' && ch <= 'F' ) return ch - 'A' + 10;
return -1;
}
char bwa2i( char ch, char **src, int base, int *nump ) {
int num, digit;
char *p;
p = *src; num = 0;
while( ( digit = bwa2d( ch ) ) >= 0 ) {
if ( digit > base ) break;
num = num*base + digit;
ch = *p++;
}
*src = p; *nump = num;
return ch;
}
void bwui2a( unsigned int num, unsigned int base, char *bf ) {
int n = 0;
int dgt;
unsigned int d = 1;
while( (num / d) >= base ) d *= base;
while( d != 0 ) {
dgt = num / d;
num %= d;
d /= base;
if( n || dgt > 0 || d == 0 ) {
*bf++ = dgt + ( dgt < 10 ? '0' : 'a' - 10 );
++n;
}
}
*bf = 0;
}
void bwi2a( int num, char *bf ) {
if( num < 0 ) {
num = -num;
*bf++ = '-';
}
bwui2a( num, 10, bf );
}
void bwformat ( int channel, char *fmt, va_list va ) {
char bf[12];
char ch, lz;
int w;
while ( ( ch = *(fmt++) ) ) {
if ( ch != '%' )
bwputc( channel, ch );
else {
lz = 0; w = 0;
ch = *(fmt++);
switch ( ch ) {
case '0':
lz = 1; ch = *(fmt++);
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
ch = bwa2i( ch, &fmt, 10, &w );
break;
}
switch( ch ) {
case 0: return;
case 'c':
bwputc( channel, va_arg( va, char ) );
break;
case 's':
bwputw( channel, w, 0, va_arg( va, char* ) );
break;
case 'u':
bwui2a( va_arg( va, unsigned int ), 10, bf );
bwputw( channel, w, lz, bf );
break;
case 'd':
bwi2a( va_arg( va, int ), bf );
bwputw( channel, w, lz, bf );
break;
case 'x':
bwui2a( va_arg( va, unsigned int ), 16, bf );
bwputw( channel, w, lz, bf );
break;
case '%':
bwputc( channel, ch );
break;
}
}
}
}
void bwprintf( int channel, char *fmt, ... ) {
va_list va;
va_start(va,fmt);
bwformat( channel, fmt, va );
va_end(va);
}
#include "scheduler.h"
\ No newline at end of file
#include "task-descriptor.h"
//void TaskInit();
int isTaskAlive(int TaskID) {
return
}
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