OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [lib/] [libbsp/] [m68k/] [ods68302/] [startup/] [debugport.c] - Blame information for rev 593

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*****************************************************************************/
2
/*
3
  High Level Debug Port Functions
4
 
5
  $Id: debugport.c,v 1.2 2001-09-27 12:00:23 chris Exp $
6
 
7
 */
8
/*****************************************************************************/
9
 
10
#include <stdio.h>
11
#include <stdarg.h>
12
 
13
#include "debugport.h"
14
#include "m68302scc.h"
15
#include "bsp.h"
16
 
17
static int initialised;
18
 
19
void debug_port_initialise(void)
20
{
21
  scc_initialise(CONSOLE_PORT, CONSOLE_BAUD, FALSE);
22
#if defined(DEBUG_PORT)
23
  scc_initialise(DEBUG_PORT, DEBUG_BAUD, FALSE);
24
#endif
25
}
26
 
27
unsigned char debug_port_status(const unsigned char status)
28
{
29
  if (!initialised)
30
  {
31
    initialised = 1;
32
    debug_port_initialise();
33
  }
34
 
35
  return scc_status(CONSOLE_PORT, status);
36
}
37
 
38
unsigned char debug_port_in(void)
39
{
40
  if (!initialised)
41
  {
42
    initialised = 1;
43
    debug_port_initialise();
44
  }
45
 
46
  return scc_in(CONSOLE_PORT);
47
}
48
 
49
void debug_port_out(const unsigned char character)
50
{
51
  if (!initialised)
52
  {
53
    initialised = 1;
54
    debug_port_initialise();
55
  }
56
 
57
  scc_out(CONSOLE_PORT, character);
58
}
59
 
60
void debug_port_write(const char *buffer)
61
{
62
   while (*buffer != '\0')
63
   {
64
     debug_port_out(*buffer++);
65
   }
66
}
67
 
68
void debug_port_write_buffer(const char *buffer, unsigned int size)
69
{
70
   unsigned int count;
71
   for (count = 0; count < size; count++)
72
   {
73
     debug_port_out(buffer[count]);
74
   }
75
}
76
 
77
void debug_port_write_hex_uint(const unsigned int value)
78
{
79
   unsigned int bits = sizeof(value) * 8;
80
   unsigned char c;
81
 
82
   do
83
   {
84
     bits -= 4;
85
     c = (unsigned char) ((value >> bits) & 0x0F);
86
     if (c < 10)
87
     {
88
       c += '0';
89
     }
90
     else
91
     {
92
       c += 'a' - 10;
93
     }
94
     debug_port_out((char) c);
95
   }
96
   while (bits);
97
}
98
 
99
void debug_port_write_hex_ulong(const unsigned long value)
100
{
101
   unsigned int bits = sizeof(value) * 8;
102
   unsigned char c;
103
 
104
   do
105
   {
106
     bits -= 4;
107
     c = (unsigned char) ((value >> bits) & 0x0F);
108
     if (c < 10)
109
     {
110
       c += '0';
111
     }
112
     else
113
     {
114
       c += 'a' - 10;
115
     }
116
     debug_port_out((char) c);
117
   }
118
   while (bits);
119
}
120
 
121
#define BUFFER_SIZE (256)
122
static char buffer[BUFFER_SIZE];
123
 
124
void debug_port_printf(const char *format, ...)
125
{
126
  va_list args;
127
  int written;
128
 
129
  /*  gain access to the argument list */
130
  va_start(args, format);
131
 
132
  /* set the trap    */
133
  buffer[BUFFER_SIZE - 2] = '\xAA';
134
  buffer[BUFFER_SIZE - 1] = '\x55';
135
 
136
  /* format the string and send to stdout */
137
  written = vsprintf(buffer, format, args);
138
 
139
  /* try an trap format buffer overflows */
140
  if ((buffer[BUFFER_SIZE - 2] != '\xAA') ||
141
      (buffer[BUFFER_SIZE - 1] != '\x55'))
142
  {
143
    debug_port_write("debug port buffer overflow, halting...");
144
    DISABLE_WATCHDOG();
145
    while (1 == 1);
146
  }
147
 
148
  /* see if an error occurred, if not flush the output buffer */
149
  if (written != -1)
150
  {
151
    debug_port_write_buffer(buffer, written);
152
  }
153
}
154
 
155
void debug_port_banner(void)
156
{
157
#define CARD_LABEL "ods68302-" #VARIANT
158
 
159
  debug_port_write("\n\n\r");
160
  debug_port_write(_Copyright_Notice);
161
  debug_port_write("\n\r  " CARD_ID "\n\r");
162
}
163
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.