source: trunk/libs/newlib/src/libgloss/mips/jmr3904-io.c @ 604

Last change on this file since 604 was 444, checked in by satin@…, 7 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 2.4 KB
Line 
1
2
3#define READ_UINT8( _register_, _value_ ) \
4        ((_value_) = *((volatile unsigned char *)(_register_)))
5
6#define WRITE_UINT8( _register_, _value_ ) \
7        (*((volatile unsigned char *)(_register_)) = (_value_))
8
9 /* - Board specific addresses for serial chip */
10#define DIAG_BASE       0xfffff300
11#define DIAG_SLCR       (DIAG_BASE+0x00)
12#define DIAG_SLSR       (DIAG_BASE+0x04)
13#define DIAG_SLDICR     (DIAG_BASE+0x08)
14#define DIAG_SLDISR     (DIAG_BASE+0x0C)
15#define DIAG_SFCR       (DIAG_BASE+0x10)
16#define DIAG_SBRG       (DIAG_BASE+0x14)
17#define DIAG_TFIFO      (DIAG_BASE+0x20)
18#define DIAG_RFIFO      (DIAG_BASE+0x30)
19
20#define BRG_T0          0x0000
21#define BRG_T2          0x0100
22#define BRG_T4          0x0200
23#define BRG_T5          0x0300
24
25
26#define READ_UINT16( _register_, _value_ ) \
27     ((_value_) = *((volatile unsigned short *)(_register_)))
28
29#define WRITE_UINT16( _register_, _value_ ) \
30     (*((volatile unsigned short *)(_register_)) = (_value_))
31
32unsigned char
33inbyte (void)
34{
35  unsigned char c;
36  unsigned short disr;
37 
38  for (;;)
39    {
40      READ_UINT16 (DIAG_SLDISR, disr);
41      if (disr & 0x0001)
42        break;
43    }
44  disr = disr & ~0x0001;
45  READ_UINT8 (DIAG_RFIFO, c);
46  WRITE_UINT16 (DIAG_SLDISR, disr);
47  return c;
48}
49
50void
51outbyte (unsigned char c)
52{
53  unsigned short disr;
54 
55  for (;;)
56    {
57      READ_UINT16 (DIAG_SLDISR, disr);
58      if (disr & 0x0002)
59        break;
60    }
61  disr = disr & ~0x0002;
62  WRITE_UINT8 (DIAG_TFIFO, c);
63  WRITE_UINT16 (DIAG_SLDISR, disr);
64}
65
66/* Stuff required to setup IO on this board */
67void board_serial_init (void)
68{
69  WRITE_UINT16 (DIAG_SLCR, 0x0020);
70  WRITE_UINT16 (DIAG_SLDICR, 0x0000);
71  WRITE_UINT16 (DIAG_SFCR, 0x0000);
72  WRITE_UINT16 (DIAG_SBRG, BRG_T2 | 5);
73}
74
75/* If you want this to be initialized as part of the stuff which gets called
76   by crt0, it should be named 'hardware_init_hook'.
77   Local implementations may want to move or add to this function OR
78   do the initializations after main() is entered.
79*/
80void hardware_init_hook(void)
81{
82  board_serial_init() ;
83}
84     
85/* Structure filled in by get_mem_info.  Only the size field is
86   actually used (by sbrk), so the others aren't even filled in.  */
87
88struct s_mem
89{
90  unsigned int size;
91  unsigned int icsize;
92  unsigned int dcsize;
93};
94
95/* mem_size is provided in the linker script so that we don't have to
96   define it here. */
97extern char _mem_size[];
98
99void
100get_mem_info (mem)
101     struct s_mem *mem;
102{
103  mem->size = (unsigned int)_mem_size;
104}
Note: See TracBrowser for help on using the repository browser.