Changeset 1590e23 in mainline


Ignore:
Timestamp:
2010-06-25T19:53:13Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d7ef14b
Parents:
adf6607
Message:

Drive the gta02 UART properly.

Location:
boot/arch/arm32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • boot/arch/arm32/include/main.h

    radf6607 r1590e23  
    11/*
    22 * Copyright (c) 2007 Michal Kebrt
     3 * Copyright (c) 2010 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    3940/** Address where characters to be printed are expected. */
    4041
    41 #ifdef MACHINE_gta02
    42         /* FIXME: Need real S3C244x UART driver. */
    43         #define VIDEORAM_ADDRESS  0x50008020
    44 #endif
     42/** GTA02 serial console UART register addresses.
     43 *
     44 * This is UART channel 2 of the S3C244x CPU
     45 */
     46#define GTA02_SCONS_UTRSTAT     0x50008010
     47#define GTA02_SCONS_UTXH        0x50008020
    4548
    46 #ifdef MACHINE_testarm
    47         #define VIDEORAM_ADDRESS  0x10000000
    48 #endif
     49/* Bits in UTXH register */
     50#define S3C244X_UTXH_TX_EMPTY   0x00000004
    4951
    50 #ifdef MACHINE_integratorcp
    51         #define VIDEORAM_ADDRESS  0x16000000
    52 #endif
     52
     53/** GXemul testarm serial console output register */
     54#define TESTARM_SCONS_ADDR      0x10000000
     55
     56/** IntegratorCP serial console output register */
     57#define ICP_SCONS_ADDR          0x16000000
    5358
    5459extern void bootstrap(void);
  • boot/arch/arm32/src/putchar.c

    radf6607 r1590e23  
    22 * Copyright (c) 2007 Michal Kebrt
    33 * Copyright (c) 2009 Vineeth Pillai
     4 * Copyright (c) 2010 Jiri Svoboda
    45 * All rights reserved.
    56 *
     
    4041#include <str.h>
    4142
     43#ifdef MACHINE_gta02
     44
     45/** Send a byte to the gta02 serial console.
     46 *
     47 * @param byte          Byte to send.
     48 */
     49static void scons_sendb_gta02(uint8_t byte)
     50{
     51        volatile uint32_t *utrstat;
     52        volatile uint32_t *utxh;
     53
     54        utrstat = (volatile uint32_t *) GTA02_SCONS_UTRSTAT;
     55        utxh    = (volatile uint32_t *) GTA02_SCONS_UTXH;
     56
     57        /* Wait until transmitter is empty. */
     58        while ((*utrstat & S3C244X_UTXH_TX_EMPTY) == 0)
     59                ;
     60
     61        /* Transmit byte. */
     62        *utxh = (uint32_t) byte;
     63}
     64
     65#endif
     66
     67#ifdef MACHINE_testarm
     68
     69/** Send a byte to the GXemul testarm serial console.
     70 *
     71 * @param byte          Byte to send.
     72 */
     73static void scons_sendb_testarm(uint8_t byte)
     74{
     75        *((volatile uint8_t *) TESTARM_SCONS_ADDR) = byte;
     76}
     77
     78#endif
     79
     80#ifdef MACHINE_integratorcp
     81
     82/** Send a byte to the IntegratorCP serial console.
     83 *
     84 * @param byte          Byte to send.
     85 */
     86static void scons_sendb_icp(uint8_t byte)
     87{
     88        *((volatile uint8_t *) ICP_SCONS_ADDR) = byte;
     89}
     90
     91#endif
     92
     93/** Send a byte to the serial console.
     94 *
     95 * @param byte          Byte to send.
     96 */
     97static void scons_sendb(uint8_t byte)
     98{
     99#ifdef MACHINE_gta02
     100        scons_sendb_gta02(byte);
     101#endif
     102#ifdef MACHINE_testarm
     103        scons_sendb_testarm(byte);
     104#endif
     105#ifdef MACHINE_integratorcp
     106        scons_senbd_integratorcp(byte);
     107#endif
     108}
     109
     110/** Display a character
     111 *
     112 * @param ch    Character to display
     113 */
    42114void putchar(const wchar_t ch)
    43115{
    44116        if (ch == '\n')
    45                 *((volatile char *) VIDEORAM_ADDRESS) = '\r';
    46        
     117                scons_sendb('\r');
     118
    47119        if (ascii_check(ch))
    48                 *((volatile char *) VIDEORAM_ADDRESS) = ch;
     120                scons_sendb((uint8_t) ch);
    49121        else
    50                 *((volatile char *) VIDEORAM_ADDRESS) = U_SPECIAL;
     122                scons_sendb(U_SPECIAL);
    51123}
    52124
Note: See TracChangeset for help on using the changeset viewer.