diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/gp32/console')
-rw-r--r-- | c/src/lib/libbsp/arm/gp32/console/conio.c | 360 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/gp32/console/console.c | 176 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/gp32/console/defaultfont.c | 600 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/gp32/console/uart.c | 249 |
4 files changed, 249 insertions, 1136 deletions
diff --git a/c/src/lib/libbsp/arm/gp32/console/conio.c b/c/src/lib/libbsp/arm/gp32/console/conio.c deleted file mode 100644 index d85e8a8234..0000000000 --- a/c/src/lib/libbsp/arm/gp32/console/conio.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * conio.c : ARM GBA BSP - * - * This file contains the GBA conio I/O package. - * - * - * Copyright (c) 2004 Markku Puro <markku.puro@kopteri.net> - * - * This source file is based on work by Rafael Vuijk (aka Dark Fader) - * MyLib by Rafael Vuijk (aka Dark Fader) - * - * The license and distribution terms for this file may be - * found in found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ -*/ - - -/*---------------------------------------------------------------------------* - * Includes * - *---------------------------------------------------------------------------*/ -#include <rtems/score/types.h> -#include <s3c2400.h> -#include <bsp.h> -#include <conio.h> -#include <stdio.h> -#include <stdarg.h> - -#define gp_initButtons() {rPBCON=0x0;} -#define gp_getButtons() ((((~rPEDAT >> 6) & 0x3) << 8) | \ - ((~rPBDAT >> 8) & 0xFF)) - -/*---------------------------------------------------------------------------* - * Defines * - *---------------------------------------------------------------------------*/ -#define DEFAULT_FONT_WIDTH 4 -#define DEFAULT_FONT_HEIGHT 6 -#define W (LCD_WIDTH/DEFAULT_FONT_WIDTH) -#define H (LCD_HEIGHT/DEFAULT_FONT_HEIGHT) - -typedef unsigned char Bitmap[LCD_HEIGHT][LCD_WIDTH]; -#define GP32_CONIO_VRAM 0x0c7ed000 -#define bg_bitmap (*(Bitmap *)GP32_CONIO_VRAM) - -/* color conversion */ -#define RGB(r,g,b) ( (r)<<11 | (g)<<6 | (b)<<1 ) - -int _wherex; -int _wherey; -int _textattr; - - -/*---------------------------------------------------------------------------* - * Defaultfont * - *---------------------------------------------------------------------------*/ -#include "defaultfont.c" - -/*---------------------------------------------------------------------------* - * gp32_gotoxy * - *---------------------------------------------------------------------------*/ -void gpconio_gotoxy(int _x, int _y) -{ - _wherex = _x; - _wherey = _y; -} - - -/*---------------------------------------------------------------------------* - * PutChar * - *---------------------------------------------------------------------------*/ -void PutChar(char c, int textattr, int x, int y) -{ - int f = textattr & 0x0F; - int b = textattr >> 4; - uint32_t fmask = f | (f << 8) | (f << 16) | (f << 24); - uint32_t bmask = b | (b << 8) | (b << 16) | (b << 24); - uint32_t *dest = (uint32_t *)&bg_bitmap[((y << 1) + y) << 1][x << 2]; - const uint32_t *src = (uint32_t *)&(font3x5[(int)c]); - uint32_t s; - - s = *src++; - *dest = (fmask&s) | (bmask&~s); - dest += LCD_WIDTH / sizeof(uint32_t); - - s = *src++; - *dest = (fmask&s) | (bmask&~s); - dest += LCD_WIDTH / sizeof(uint32_t); - - s = *src++; - *dest = (fmask&s) | (bmask&~s); - dest += LCD_WIDTH / sizeof(uint32_t); - - s = *src++; - *dest = (fmask&s) | (bmask&~s); - dest += LCD_WIDTH / sizeof(uint32_t); - - s = *src++; - *dest = (fmask&s) | (bmask&~s); - dest += LCD_WIDTH / sizeof(uint32_t); - - s = *src++; - *dest = (fmask&s) | (bmask&~s); - dest += LCD_WIDTH / sizeof(uint32_t); -} - - -/*---------------------------------------------------------------------------* - * gp32_textattr * - *---------------------------------------------------------------------------*/ -void gpconio_textattr(int _attr) -{ - _textattr = _attr; -} - -/*---------------------------------------------------------------------------* - * gp32_textbackground * - *---------------------------------------------------------------------------*/ -void gpconio_textbackground(int _color) -{ - _textattr = (_textattr & 0x0F) | (_color << 4); -} - -/*---------------------------------------------------------------------------* - * gp32_textcolor * - *---------------------------------------------------------------------------*/ -void gpconio_textcolor(int _color) -{ - _textattr = (_textattr & 0xF0) | (_color); -} - - -/*---------------------------------------------------------------------------* - * ClrLine * - *---------------------------------------------------------------------------*/ -void ClrLine(int y) -{ - int x; - - for(x=0 ; x<=W ; x++) PutChar(0, _textattr, x, y); -} - -/*---------------------------------------------------------------------------* - * NextLine * - *---------------------------------------------------------------------------*/ -void NextLine() -{ - _wherex = 0; - - if (++_wherey >= H) { - _wherey = 0; - } - - ClrLine(_wherey); -} - -/*---------------------------------------------------------------------------* - * clrscr * - *---------------------------------------------------------------------------*/ -void gpconio_clrscr() -{ - int y; - - for(y=0 ; y<=H ; y++) { - ClrLine(y); - } - - gpconio_gotoxy(0,0); -} - -/*---------------------------------------------------------------------------* - * gp32_put * - *---------------------------------------------------------------------------*/ -void gpconio_put(char _c) -{ - /* We have save some memory with fonts */ - _c = _c & 0x7F; /* no extened chars */ - _c = _c - 0x20; /* no cntr chars */ - PutChar(_c, _textattr, _wherex, _wherey); -} - -/*---------------------------------------------------------------------------* - * gp32_putch * - *---------------------------------------------------------------------------*/ -void gpconio_putch(char _c) -{ - switch (_c) { - case ASCII_LF: - NextLine(); - break; - case ASCII_CR: - gpconio_gotoxy(0, _wherey); - break; - default: - gpconio_put(_c); - if (++_wherex >= W) { - NextLine(); - } - break; - } - return; -} - -/*---------------------------------------------------------------------------* - * gp32_puts * - *---------------------------------------------------------------------------*/ -void gpconio_puts(const char *_str) -{ - while (*_str) { - gpconio_putch(*_str++); - } - return; -} - -/*---------------------------------------------------------------------------* - * gp32_printf * - *---------------------------------------------------------------------------*/ -int gpconio_printf(const char *_format, ...) -{ - char s[256]; - va_list marker; - va_start(marker, _format); - int r = vsprintf(s, _format, marker); - - va_end(marker); - gpconio_puts(s); - return r; -} - -void ShowConIO() -{ - unsigned short BPPMODE = 11; - unsigned short CLKVAL = (get_HCLK()/(83385*2*60))-1; - uint32_t LCDBANK = GP32_CONIO_VRAM >> 22; - uint32_t LCDBASEU = (GP32_CONIO_VRAM & 0x3FFFFF) >> 1; - uint32_t LCDBASEL; - unsigned short OFFSIZE = 0; - unsigned short PAGEWIDTH; - - rLCDCON1 = (CLKVAL<<8) | (0<<7) | (3<<5) | (BPPMODE<<1) | (1<<0) ; - rLCDCON2 = 0; - rLCDCON2 = (1<<24) | (319<<14) | (2<<6) | (1<<0) ; - rLCDCON3 = 0; - rLCDCON3 = (6<<19) | (239<<8) | (2<<0) ; - rLCDCON4 = 0; - rLCDCON4 = (0<<24) | (0<<16) | (0<<8) | (4<<0) ; - rLCDCON5 = 0; - rLCDCON5 = ((1<<10) | (1<<9) | (1<<8) | (0<<7) | - (0<<6) | (0<<4) | (0<<2) | (1<<1) | (0<<0)) ; - - LCDBASEL = LCDBASEU + 320*120; - PAGEWIDTH = 120; - - rLCDSADDR1 = (LCDBANK<<21) | (LCDBASEU<<0) ; - rLCDSADDR2 = (LCDBASEL<<0) ; - rLCDSADDR3 = (OFFSIZE<<11) | (PAGEWIDTH<<0) ; -} - - -/*---------------------------------------------------------------------------* - * InitConIO * - *---------------------------------------------------------------------------*/ -void InitConIO() -{ - ShowConIO(); - - gp_initButtons(); - gpconio_textattr(0); - gpconio_textcolor(DEF_TEXTCOLOR); - gpconio_textbackground(DEF_TEXTBACKGROUND); - gpconio_clrscr(); -} - - -static void delay_loop(unsigned int count) -{ - int i; - - for(i = 0; i < count; i++) { - i = i; - } - -} - -/*---------------------------------------------------------------------------* - * gp32_getch * - *---------------------------------------------------------------------------*/ -static unsigned char inputch = ASCII_CR; -char gpconio_getch(void) -{ - int keyx; - int key = 0; - - while(1) { - key = gp_getButtons(); - - do { - keyx = gp_getButtons(); - } while (keyx == key); - - switch (key) { - case GP32_KEY_SELECT: - gpconio_put(inputch); - return inputch; - break; - - case GP32_KEY_START: - gpconio_put(' '); - inputch = ASCII_CR; - return inputch; - break; - - case GP32_KEY_A: - inputch = 'A'; - break; - - case GP32_KEY_B: - inputch = 'Z'; - break; - - case GP32_KEY_UP: - if ((inputch-1) >= 0x20) { - inputch--; - } - break; - - case GP32_KEY_DOWN: - if ((inputch+1) <= 0x7E) { - inputch++; - } - break; - - case GP32_KEY_LEFT: - if ((inputch - 0x20) >= 0x20) { - inputch -= 0x20; - } - break; - - case GP32_KEY_RIGHT: - if ((inputch + 0x20) <= 0x7E) { - inputch += 0x20; - } - break; - - case GP32_KEY_R: - inputch = '1'; - break; - - case GP32_KEY_L: - inputch = '9'; - break; - - default: - break; - } - - gpconio_put(inputch); - delay_loop(10000); - } -} diff --git a/c/src/lib/libbsp/arm/gp32/console/console.c b/c/src/lib/libbsp/arm/gp32/console/console.c deleted file mode 100644 index d0fc3fef30..0000000000 --- a/c/src/lib/libbsp/arm/gp32/console/console.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * console.c : ARM GBA BSP - * - * This file contains the GBA console I/O package. - * - * - * Copyright (c) 2004 Markku Puro <markku.puro@kopteri.net> - * - * The license and distribution terms for this file may be - * found in found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <assert.h> -#include <unistd.h> - -#include <bsp.h> -#include <rtems/bspIo.h> -#include <rtems/libio.h> -#include <rtems/termiostypes.h> -#include <termios.h> -#include <irq.h> -#include <s3c2400.h> -#include <conio.h> - -/* - * BSP initialization - */ - -static int gp32_pollRead(int minor) -{ - return(gpconio_getch()); -} - -static int gp32_write(int minor, const char *buf, int len) -{ - int i; - - for(i = 0; i < len; i++) { - gpconio_putch((unsigned short)buf[i]); - } - - return len; -} - - -/* for printk support */ -BSP_output_char_function_type BSP_output_char = (BSP_output_char_function_type) gpconio_putch; -BSP_polling_getchar_function_type BSP_poll_char = (BSP_polling_getchar_function_type) gpconio_getch; - -/*-------------------------------------------------------------------------+ -| Console device driver INITIALIZE entry point. -+--------------------------------------------------------------------------+ -| Initilizes the I/O console (keyboard + VGA display) driver. -+--------------------------------------------------------------------------*/ -rtems_device_driver -console_initialize(rtems_device_major_number major, - rtems_device_minor_number minor, - void *arg) -{ - rtems_status_code status; - - /* - * Set up TERMIOS - */ - rtems_termios_initialize (); - - /* - * Do device-specific initialization - */ - InitConIO(); - - /* - * Register the device - */ - status = rtems_io_register_name ("/dev/console", major, 0); - if (status != RTEMS_SUCCESSFUL) { - printk("Error registering console device!\n"); - rtems_fatal_error_occurred (status); - } - - return RTEMS_SUCCESSFUL; -} - - -/*-------------------------------------------------------------------------+ -| Console device driver OPEN entry point -+--------------------------------------------------------------------------*/ -rtems_device_driver -console_open(rtems_device_major_number major, - rtems_device_minor_number minor, - void *arg) -{ - rtems_status_code status; - static rtems_termios_callbacks cb = - { - NULL, /* firstOpen */ - NULL, /* lastClose */ - gp32_pollRead, /* pollRead */ - gp32_write, /* write */ - NULL, /* setAttributes */ - NULL, /* stopRemoteTx */ - NULL, /* startRemoteTx */ - TERMIOS_POLLED /* 1 = outputUsesInterrupts */ - }; - - status = rtems_termios_open (major, minor, arg, &cb); - - if(status != RTEMS_SUCCESSFUL) { - printk("Error openning console device\n"); - return status; - } - - return RTEMS_SUCCESSFUL; -} - -/*-------------------------------------------------------------------------+ -| Console device driver CLOSE entry point -+--------------------------------------------------------------------------*/ -rtems_device_driver -console_close(rtems_device_major_number major, - rtems_device_minor_number minor, - void *arg) -{ - rtems_device_driver res = RTEMS_SUCCESSFUL; - - res = rtems_termios_close (arg); - return res; -} - - -/*-------------------------------------------------------------------------+ -| Console device driver READ entry point. -+--------------------------------------------------------------------------+ -| Read characters from the I/O console. We only have stdin. -+--------------------------------------------------------------------------*/ -rtems_device_driver -console_read(rtems_device_major_number major, - rtems_device_minor_number minor, - void *arg) -{ - return rtems_termios_read (arg); - -} - - -/*-------------------------------------------------------------------------+ -| Console device driver WRITE entry point. -+--------------------------------------------------------------------------+ -| Write characters to the I/O console. Stderr and stdout are the same. -+--------------------------------------------------------------------------*/ -rtems_device_driver -console_write(rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg) -{ - return rtems_termios_write (arg); -} - - - -/* - * Handle ioctl request. - */ -rtems_device_driver -console_control(rtems_device_major_number major, - rtems_device_minor_number minor, - void * arg -) -{ - return rtems_termios_ioctl (arg); -} diff --git a/c/src/lib/libbsp/arm/gp32/console/defaultfont.c b/c/src/lib/libbsp/arm/gp32/console/defaultfont.c deleted file mode 100644 index a4a5082e03..0000000000 --- a/c/src/lib/libbsp/arm/gp32/console/defaultfont.c +++ /dev/null @@ -1,600 +0,0 @@ -/* - * defaultfont.c : ARM GBA BSP - * - * This file contains default font definitions - * - * - * Copyright (c) 2004 Markku Puro <markku.puro@kopteri.net> - * - * The license and distribution terms for this file may be - * found in found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ -*/ - -#define X 255 -#define GEN_FONT_DATA(a,b,c,d) ( ((d) << 24) | \ - ((c) << 16) | \ - ((b) << 8) | \ - ((a) << 0) ) - -static const unsigned long font3x5[256][6] = { - { /* ' ' - ascii:0x20 font:0x00 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '!' - ascii:0x21 font:0x01 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* '"' - ascii:0x22 font:0x02 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '#' - ascii:0x23 font:0x03 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* '$' - ascii:0x24 font:0x04 */ - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* '%' - ascii:0x25 font:0x05 */ - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,0 ) - },{ /* '&' - ascii:0x26 font:0x06 */ - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* ''' - ascii:0x27 font:0x07 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '(' - ascii:0x28 font:0x08 */ - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ) - },{ /* ')' - ascii:0x29 font:0x09 */ - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ) - },{ /* '*' - ascii:0x2A font:0x0A */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '+' - ascii:0x2B font:0x0B */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '´' - ascii:0x2C font:0x0C */ - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '-' - ascii:0x2D font:0x0D */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '.' - ascii:0x2E font:0x0E */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - },{ /* '/' - ascii:0x2F font:0x0F */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( X,0,0,0 ) - },{ /* '0' - ascii:0x30 font:0x10 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '1' - ascii:0x31 font:0x11 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '2' - ascii:0x32 font:0x12 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '3' - ascii:0x33 font:0x13 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '4' - ascii:0x34 font:0x14 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,X ) - },{ /* '5' - ascii:0x35 font:0x15 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '6' - ascii:0x36 font:0x16 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '7' - ascii:0x37 font:0x17 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* '8' - ascii:0x38 font:0x18 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '9' - ascii:0x39 font:0x19 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* ':' - ascii:0x3A font:0x1A */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - },{ /* ';' - ascii:0x3B font:0x1B */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - },{ /* '<' - ascii:0x3C font:0x1C */ - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ) - },{ /* '=' - ascii:0x3D font:0x1D */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '>' - ascii:0x3E font:0x1E */ - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ) - },{ /* '?' - ascii:0x3F font:0x1F */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* '@' - ascii:0x40 font:0x20 */ - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* 'A' - ascii:0x41 font:0x21 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'B' - ascii:0x42 font:0x22 */ - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ) - },{ /* 'C' - ascii:0x43 font:0x23 */ - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* 'D' - ascii:0x44 font:0x24 */ - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - },{ /* 'E' - ascii:0x45 font:0x25 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* 'F' - ascii:0x46 font:0x26 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - },{ /* 'G' - ascii:0x47 font:0x27 */ - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* 'H' - ascii:0x48 font:0x28 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'I' - ascii:0x49 font:0x29 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* 'J' - ascii:0x4A font:0x2A */ - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* 'K' - ascii:0x4B font:0x2B */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'L' - ascii:0x4C font:0x2C */ - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* 'M' - ascii:0x4D font:0x2D */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'N' - ascii:0x4E font:0x2E */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'O' - ascii:0x4F font:0x2F */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* 'P' - ascii:0x50 font:0x30 */ - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - },{ /* 'Q' - ascii:0x51 font:0x31 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* 'R' - ascii:0x52 font:0x33 */ - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'S' - ascii:0x53 font:0x33 */ - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,X,0 ) - },{ /* 'T' - ascii:0x54 font:0x34 */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - },{ /* 'U' - ascii:0x55 font:0x35 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* 'V' - ascii:0x56 font:0x36 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - },{ /* 'W' - ascii:0x57 font:0x37 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - },{ /* 'X' - ascii:0x58 font:0x38 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'Y' - ascii:0x59 font:0x39 */ - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - },{ /* 'Z' - ascii:0x5A font:0x3A */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '[' - ascii:0x5B font:0x3B */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '\' - ascii:0x5C font:0x3C */ - GEN_FONT_DATA( X,0,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* ']' - ascii:0x5D font:0x3D */ - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '^' - ascii:0x5E font:0x3E */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '_' - ascii:0x5F font:0x3F */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '´' - ascii:0x60 font:0x30 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* 'a' - ascii:0x31 font:0x31 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* 'b' - ascii:0x62 font:0x32 */ - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ) - },{ /* 'c' - ascii:0x63 font:0x33 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* 'd' - ascii:0x64 font:0x34 */ - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,X ), - },{ /* 'e' - ascii:0x65 font:0x35 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* 'f' - ascii:0x66 font:0x36 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,0 ), - },{ /* 'g' - ascii:0x67 font:0x37 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,X,0 ) - },{ /* 'h' - ascii:0x68 font:0x38 */ - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'i' - ascii:0x69 font:0x39 */ - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* 'j' - ascii:0x6A font:0x3A */ - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* 'k' - ascii:0x6B font:0x3B */ - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'l' - ascii:0x6C font:0x3C */ - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* 'm' - ascii:0x6D font:0x3D */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'n' - ascii:0x6E font:0x3E */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'o' - ascii:0x6F font:0x6F */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ) - },{ /* 'p' - ascii:0x70 font:0x40 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - },{ /* 'q' - ascii:0x71 font:0x41 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,0,0,X ) - },{ /* 'r' - ascii:0x72 font:0x43 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ) - },{ /* 's' - ascii:0x73 font:0x43 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,X,X,0 ) - },{ /* 't' - ascii:0x74 font:0x44 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,X ), - },{ /* 'u' - ascii:0x75 font:0x45 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* 'v' - ascii:0x76 font:0x46 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - },{ /* 'w' - ascii:0x77 font:0x47 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,X,0,X ), - },{ /* 'x' - ascii:0x78 font:0x48 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,X ) - },{ /* 'y' - ascii:0x79 font:0x49 */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - },{ /* 'z' - ascii:0x7A font:0x4A */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,X,X ) - },{ /* '{' - ascii:0x7B font:0x4B */ - GEN_FONT_DATA( 0,0,X,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,X,X ) - },{ /* '\' - ascii:0x7C font:0x4C */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* '}' - ascii:0x7D font:0x4D */ - GEN_FONT_DATA( 0,X,X,0 ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,X,0 ), - GEN_FONT_DATA( 0,X,X,0 ) - },{ /* '~' - ascii:0x7E font:0x4E */ - GEN_FONT_DATA( 0,0,0,0 ), - GEN_FONT_DATA( 0,X,0,0 ), - GEN_FONT_DATA( 0,X,X,X ), - GEN_FONT_DATA( 0,0,0,X ), - GEN_FONT_DATA( 0,0,0,0 ) - },{ /* DEL - ascii:0x7F font:0x4F */ - GEN_FONT_DATA( X,X,X,X ), - GEN_FONT_DATA( X,X,X,X ), - GEN_FONT_DATA( X,X,X,X ), - GEN_FONT_DATA( X,X,X,X ), - GEN_FONT_DATA( X,X,X,X ) - } -}; diff --git a/c/src/lib/libbsp/arm/gp32/console/uart.c b/c/src/lib/libbsp/arm/gp32/console/uart.c new file mode 100644 index 0000000000..6ca578265d --- /dev/null +++ b/c/src/lib/libbsp/arm/gp32/console/uart.c @@ -0,0 +1,249 @@ +/* + * console driver for S3C2400 UARTs + * + * This driver uses the shared console driver in + * ...../libbsp/shared/console.c + * + * If you want the driver to be interrupt driven, you + * need to write the ISR, and in the ISR insert the + * chars into termios's queue. + * + * Copyright (c) 2004 Cogent Computer Systems + * Written by Jay Monkman <jtm@lopingdog.com> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * + * http://www.OARcorp.com/rtems/license.html. + * + * + * $Id$ +*/ +#include <bsp.h> /* Must be before libio.h */ +#include <rtems/libio.h> +#include <termios.h> +#include <rtems/bspIo.h> + +/* Put the CPU (or UART) specific header file #include here */ +#include <s3c2400.h> +#include <libchip/serial.h> +#include <libchip/sersupp.h> + +/* How many serial ports? */ +#define NUM_DEVS 1 + +int uart_poll_read(int minor); + +int dbg_dly; + +/* static function prototypes */ +static int uart_first_open(int major, int minor, void *arg); +static int uart_last_close(int major, int minor, void *arg); +static int uart_read(int minor); +static int uart_write(int minor, const char *buf, int len); +static void uart_init(int minor); +static void uart_write_polled(int minor, char c); +static int uart_set_attributes(int minor, const struct termios *t); + +/* These are used by code in console.c */ +unsigned long Console_Port_Count = NUM_DEVS; +console_data Console_Port_Data[NUM_DEVS]; + +/* rtems console uses the following minor number */ +rtems_device_minor_number Console_Port_Minor = 0; + +/* Pointers to functions for handling the UART. */ +console_fns uart_fns = +{ + libchip_serial_default_probe, + uart_first_open, + uart_last_close, + uart_read, + uart_write, + uart_init, + uart_write_polled, /* not used in this driver */ + uart_set_attributes, + FALSE /* TRUE if interrupt driven, FALSE if not. */ +}; + +/* + * There's one item in array for each UART. + * + * Some of these fields are marked "NOT USED". They are not used + * by console.c, but may be used by drivers in libchip + * + */ +console_tbl Console_Port_Tbl[] = { + { + "/dev/com0", /* sDeviceName */ + SERIAL_CUSTOM, /* deviceType */ + &uart_fns, /* pDeviceFns */ + NULL, /* deviceProbe */ + NULL, /* pDeviceFlow */ + 0, /* ulMargin - NOT USED */ + 0, /* ulHysteresis - NOT USED */ + NULL, /* pDeviceParams */ + 0, /* ulCtrlPort1 - NOT USED */ + 0, /* ulCtrlPort2 - NOT USED */ + 0, /* ulDataPort - NOT USED */ + NULL, /* getRegister - NOT USED */ + NULL, /* setRegister - NOT USED */ + NULL, /* getData - NOT USED */ + NULL, /* setData - NOT USED */ + 0, /* ulClock - NOT USED */ + 0 /* ulIntVector - NOT USED */ + } +}; + +/*********************************************************************/ +/* Functions called via termios callbacks (i.e. the ones in uart_fns */ +/*********************************************************************/ + +/* + * This is called the first time each device is opened. If the driver + * is interrupt driven, you should enable interrupts here. Otherwise, + * it's probably safe to do nothing. + * + * Since micromonitor already set up the UART, we do nothing. + */ +static int uart_first_open(int major, int minor, void *arg) +{ + return 0; +} + + +/* + * This is called the last time each device is closed. If the driver + * is interrupt driven, you should disable interrupts here. Otherwise, + * it's probably safe to do nothing. + */ +static int uart_last_close(int major, int minor, void *arg) +{ + return 0; +} + + +/* + * Read one character from UART. + * + * Return -1 if there's no data, otherwise return + * the character in lowest 8 bits of returned int. + */ +static int uart_read(int minor) +{ + char c; + + if (minor == 0) { + if (rUTRSTAT0 & 0x1) { + c = rURXH0 & 0xff; + return c; + } else { + return -1; + } + } else { + printk("Unknown console minor number: %d\n", minor); + return -1; + } + +} + + +/* + * Write buffer to UART + * + * return 1 on success, -1 on error + */ +static int uart_write(int minor, const char *buf, int len) +{ + int i; + + if (minor == 0) { + for (i = 0; i < len; i++) { + /* Wait for fifo to have room */ + while(!(rUTRSTAT0 & 0x2)) { + continue; + } + + rUTXH0 = (char) buf[i]; + } + } else { + printk("Unknown console minor number: %d\n", minor); + return -1; + } + + return 1; +} + + +/* Set up the UART. */ +static void uart_init(int minor) +{ + int i; + unsigned int reg = 0; + + /* enable UART0 */ + rCLKCON|=0x100; + + /* value is calculated so : (int)(PCLK/16./baudrate) -1 */ + reg = get_PCLK() / (16 * 115200) - 1; + + /* FIFO enable, Tx/Rx FIFO clear */ + rUFCON0 = 0x07; + rUMCON0 = 0x0; + /* Normal,No parity,1 stop,8 bit */ + rULCON0 = 0x3; + /* + * tx=level,rx=edge,disable timeout int.,enable rx error int., + * normal,interrupt or polling + */ + rUCON0 = 0x245; + rUBRDIV0 = reg; + + for (i = 0; i < 100; i++); + +} + +/* I'm not sure this is needed for the shared console driver. */ +static void uart_write_polled(int minor, char c) +{ + uart_write(minor, &c, 1); +} + +/* This is for setting baud rate, bits, etc. */ +static int uart_set_attributes(int minor, const struct termios *t) +{ + return 0; +} + +/***********************************************************************/ +/* + * The following functions are not used by TERMIOS, but other RTEMS + * functions use them instead. + */ +/***********************************************************************/ +/* + * Read from UART. This is used in the exit code, and can't + * rely on interrupts. +*/ +int uart_poll_read(int minor) +{ + return uart_read(minor); +} + + +/* + * Write a character to the console. This is used by printk() and + * maybe other low level functions. It should not use interrupts or any + * RTEMS system calls. It needs to be very simple + */ +static void _BSP_put_char( char c ) { + uart_write_polled(0, c); + if (c == '\n') { + uart_write_polled(0, '\r'); + } +} + +BSP_output_char_function_type BSP_output_char = _BSP_put_char; + + + |