Line 11... |
Line 11... |
// Creator: Dan Gisselquist, Ph.D.
|
// Creator: Dan Gisselquist, Ph.D.
|
// Gisselquist Technology, LLC
|
// Gisselquist Technology, LLC
|
//
|
//
|
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
//
|
//
|
// Copyright (C) 2015-2016, Gisselquist Technology, LLC
|
// Copyright (C) 2015-2017, Gisselquist Technology, LLC
|
//
|
//
|
// This program is free software (firmware): you can redistribute it and/or
|
// This program is free software (firmware): you can redistribute it and/or
|
// modify it under the terms of the GNU General Public License as published
|
// modify it under the terms of the GNU General Public License as published
|
// by the Free Software Foundation, either version 3 of the License, or (at
|
// by the Free Software Foundation, either version 3 of the License, or (at
|
// your option) any later version.
|
// your option) any later version.
|
Line 53... |
Line 53... |
do {
|
do {
|
asm("noop");
|
asm("noop");
|
} while(i-->0);
|
} while(i-->0);
|
}
|
}
|
|
|
void dispchar(int ch) {
|
void dispchar(char ch) {
|
if (!ch) // Don't display null characters
|
if (!ch) // Don't display null characters
|
return;
|
return;
|
if (ch&(~0x0ff)) { // Multiple characters to display
|
int ich = ch;
|
int v = (ch>>24)&0x0ff;
|
|
if (v) {
|
|
dispchar(v);
|
|
v = (ch>>16)&0x0ff;
|
|
if (v) {
|
|
dispchar(v);
|
|
v = (ch>> 8)&0x0ff;
|
|
if (v) {
|
|
dispchar(v);
|
|
dispchar(ch&0x0ff);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
IOSPACE *sys = (IOSPACE *)IOADDR;
|
|
// Send the character
|
// Send the character
|
for(int i=0; i<8; i++) {
|
for(int i=0; i<8; i++) {
|
int gpiov = GPOCLRV(GPO_MOSI|GPO_SCK|GPO_SS);
|
int gpiov = GPOCLRV(GPO_MOSI|GPO_SCK|GPO_SS);
|
if (ch&0x80)
|
if (ich&0x80)
|
gpiov |= GPOSETV(GPO_MOSI);
|
gpiov |= GPOSETV(GPO_MOSI);
|
sys->io_gpio = gpiov;
|
_sys->io_gpio = gpiov;
|
dispwait();
|
dispwait();
|
sys->io_gpio = GPOSETV(GPO_SCK);
|
_sys->io_gpio = GPOSETV(GPO_SCK);
|
dispwait();
|
dispwait();
|
ch<<=1;
|
ich<<=1;
|
}
|
}
|
|
|
// Turn off the clock
|
// Turn off the clock
|
sys->io_gpio = GPOCLRV(GPO_SCK);
|
_sys->io_gpio = GPOCLRV(GPO_SCK);
|
dispwait();
|
dispwait();
|
// Then the port
|
// Then the port
|
sys->io_gpio = GPOSETV(GPO_SS);
|
_sys->io_gpio = GPOSETV(GPO_SS);
|
dispwait();
|
dispwait();
|
}
|
}
|
}
|
|
|
|
#ifdef ZIPOS
|
#ifdef ZIPOS
|
#include "../zipos/ktraps.h"
|
#include "../zipos/ktraps.h"
|
#include "../zipos/kfildes.h"
|
#include "../zipos/kfildes.h"
|
void display_task(void) {
|
void display_task(void) {
|
while(1) {
|
while(1) {
|
int ch;
|
char ch;
|
read(FILENO_STDIN, &ch, 1);
|
read(FILENO_STDIN, &ch, 1);
|
dispchar(ch);
|
dispchar(ch);
|
}
|
}
|
}
|
}
|
#endif
|
#endif
|