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

Subversion Repositories sdcard_mass_storage_controller

[/] [sdcard_mass_storage_controller/] [trunk/] [sw/] [sdc_dma/] [uart.c] - Blame information for rev 126

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

Line No. Rev Author Line
1 69 tac2
/*$$HEADER*/
2
/******************************************************************************/
3
/*                                                                            */
4
/*                    H E A D E R   I N F O R M A T I O N                     */
5
/*                                                                            */
6
/******************************************************************************/
7
 
8
// Project Name                   : Development Board Debugger Example 
9
// File Name                      : uart.c
10
// Prepared By                    : jb
11
// Project Start                  : 2009-01-01
12
// Sourced from OpenCores         : http://opencores.org/cvsweb.shtml/or1k/orp/orp_soc/sw/uart/uart.c
13
 
14
/*$$CHANGE HISTORY*/
15
/******************************************************************************/
16
/*                                                                            */
17
/*                         C H A N G E  H I S T O R Y                         */
18
/*                                                                            */
19
/******************************************************************************/
20
 
21
// Date         Version Description
22
//------------------------------------------------------------------------
23
// 090101       1.0     First version, commented out main()             jb
24
 
25
/*$$DESCRIPTION*/
26
/******************************************************************************/
27
/*                                                                            */
28
/*                           D E S C R I P T I O N                            */
29
/*                                                                            */
30
/******************************************************************************/
31
 
32
// UART initialisation and usage functions
33
 
34
/*$$INCLUDE FILES*/
35
/******************************************************************************/
36
/*                                                                            */
37
/*                      I N C L U D E   F I L E S                             */
38
/*                                                                            */
39
/******************************************************************************/
40
 
41
#include "orsocdef.h"
42
#include "board.h"
43
#include "uart.h"
44
 
45
/*$$DEFINES*/
46
/******************************************************************************/
47
/*                                                                            */
48
/*                            D E F I N E S                                   */
49
/*                                                                            */
50
/******************************************************************************/
51
 
52
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
53
 
54
#define WAIT_FOR_XMITR \
55
        do { \
56
                lsr = REG8(UART_BASE + UART_LSR); \
57
        } while ((lsr & BOTH_EMPTY) != BOTH_EMPTY)
58
 
59
#define WAIT_FOR_THRE \
60
        do { \
61
                lsr = REG8(UART_BASE + UART_LSR); \
62
        } while ((lsr & UART_LSR_THRE) != UART_LSR_THRE)
63
 
64
#define CHECK_FOR_CHAR (REG8(UART_BASE + UART_LSR) & UART_LSR_DR)
65
 
66
#define WAIT_FOR_CHAR \
67
         do { \
68
                lsr = REG8(UART_BASE + UART_LSR); \
69
         } while ((lsr & UART_LSR_DR) != UART_LSR_DR)
70
 
71
#define UART_TX_BUFF_LEN 32
72
#define UART_TX_BUFF_MASK (UART_TX_BUFF_LEN -1)
73
 
74
/*$$GLOBAL VARIABLES*/
75
/******************************************************************************/
76
/*                                                                            */
77
/*                   G L O B A L   V A R I A B L E S                          */
78
/*                                                                            */
79
/******************************************************************************/
80
 
81
char tx_buff[UART_TX_BUFF_LEN];
82
volatile int tx_level, rx_level;
83
 
84
/*$$FUNCTIONS*/
85
/******************************************************************************/
86
/*                                                                            */
87
/*                          F U N C T I O N S                                 */
88
/*                                                                            */
89
/******************************************************************************/
90
 
91
void uart_init(void)
92
{
93
        int devisor;
94
 
95
        /* Reset receiver and transmiter */
96
        REG8(UART_BASE + UART_FCR) = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT | UART_FCR_TRIGGER_14;
97
 
98
        /* Disable all interrupts */
99
        REG8(UART_BASE + UART_IER) = 0x00;
100
 
101
        /* Set 8 bit char, 1 stop bit, no parity */
102
        REG8(UART_BASE + UART_LCR) = UART_LCR_WLEN8 & ~(UART_LCR_STOP | UART_LCR_PARITY);
103
 
104
        /* Set baud rate */
105
        devisor = IN_CLK/(16 * UART_BAUD_RATE);
106
        REG8(UART_BASE + UART_LCR) |= UART_LCR_DLAB;
107
        REG8(UART_BASE + UART_DLL) = devisor & 0x000000ff;
108
        REG8(UART_BASE + UART_DLM) = (devisor >> 8) & 0x000000ff;
109
        REG8(UART_BASE + UART_LCR) &= ~(UART_LCR_DLAB);
110
 
111
        return;
112
}
113
 
114
void uart_putc(char c)
115
{
116
  unsigned char lsr;
117
 
118
  WAIT_FOR_THRE;
119
  REG8(UART_BASE + UART_TX) = c;
120
  if(c == '\n') {
121
    WAIT_FOR_THRE;
122
    REG8(UART_BASE + UART_TX) = '\r';
123
        }
124
  WAIT_FOR_XMITR;
125
}
126
 
127
void uart_print_str(char *p)
128
{
129
  while(*p != 0) {
130
    uart_putc(*p);
131
    p++;
132
  }
133
}
134
 
135
 
136
void uart_print_long(unsigned long ul)
137
{
138
  int i;
139
  char c;
140
 
141
  uart_print_str("");
142
 
143
  for(i=0; i<8; i++) {
144
    c = (char) (ul>>((7-i)*4)) & 0xf;
145
    if(c >= 0x0 && c<=0x9)
146
      c += '0';
147
    else
148
      c += 'a' - 10;
149
    uart_putc(c);
150
  }
151
}
152
 
153
 
154
void uart_print_short(unsigned long ul)
155
{
156
  int i;
157
  char c;
158
  char flag=0;
159
 
160
  uart_print_str("");
161
 
162
  for(i=0; i<8; i++) {
163
    c = (char) (ul>>((7-i)*4)) & 0xf;
164
 
165
    if(c >= 0x0 && c<=0x9)
166
      c += '0';
167
    else
168
      c += 'a' - 10;
169
 
170
    if ((c != '0') || (i==7))
171
      flag=1;
172
 
173
    if(flag)
174
      uart_putc(c);
175
  }
176
}
177
 
178
 
179
 
180
char uart_getc()
181
{
182
  unsigned char lsr;
183
  char c;
184
 
185
  WAIT_FOR_CHAR;
186
 
187
  c = REG8(UART_BASE + UART_RX);
188
 
189
  return c;
190
}
191
 
192
/******************************************************************************/
193
/*                                                                            */
194
/*                       E X A M P L E  U S A G E                             */
195
/*                                                                            */
196
/******************************************************************************/
197
/*
198
int main()
199
{
200
        uart_init();
201
 
202
        // We can't use printf because in this simple example
203
        // we don't link C library.
204
        uart_print_str("Hello World.\n\r");
205
 
206
        report(0xdeaddead);
207
        exit(0);
208
}
209
*/

powered by: WebSVN 2.1.0

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