init
[pyfrprog.git] / uart.c
1 /* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. FUJITSU */\r
2 /* MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR */\r
3 /* ELIGIBILITY FOR ANY PURPOSES.                                             */\r
4 /*                 (C) Fujitsu Microelectronics Europe GmbH                  */\r
5 /*---------------------------------------------------------------------------*/\r
6 \r
7 #include "mb91465k.h"\r
8 \r
9 const char ASCII[] = "0123456789ABCDEF";\r
10 \r
11 void InitUart4(void)\r
12 {\r
13   // Initialize UART asynchronous mode\r
14   // BGR04 = 1666; //  9600 Baud @ 16MHz\r
15      BGR04 = 832;  // 19200 Baud @ 16MHz\r
16   // BGR04 = 416;  // 38400 Baud @ 16MHz\r
17 \r
18   // BGR04 = 2083; //  9600 Baud @ 20MHz\r
19   // BGR04 = 1041; // 19200 Baud @ 20MHz\r
20   // BGR04 = 520;  // 38400 Baud @ 20MHz\r
21 \r
22   // BGR04 = 2499; //  9600 Baud @ 24MHz\r
23   // BGR04 = 1249; // 19200 Baud @ 24MHz\r
24   // BGR04 = 624;  // 38400 Baud @ 24MHz  \r
25   SCR04 = 0x17;    // 8N1\r
26   SMR04 = 0x0d;    // enable SOT3, Reset, normal mode\r
27   SSR04 = 0x00;    // LSB first\r
28   PFR19 = (PFR19 & 0xFC) | 0x03;        // enable UART: SIN,SOT for async. transfer\r
29   EPFR19 = 0x00;   // enable UART\r
30 }\r
31 \r
32 void Putch4(char ch)         /* sends a char */\r
33 {\r
34   while (SSR04_TDRE == 0);    /* wait for transmit buffer empty         */\r
35   TDR04 = ch;                 /* put ch into buffer                     */\r
36 }\r
37 \r
38 char Getch4(void)            /* waits for and returns incomming char    */\r
39 {\r
40   volatile unsigned ch;\r
41 \r
42   for(;;)\r
43   {\r
44   \r
45      while(SSR04_RDRF == 0)      /* wait for data received      */\r
46        HWWD = 0x00; \r
47   \r
48      ch = RDR04;\r
49   \r
50      if ((SSR04 & 0xE0) != 0)    /* Check for errors PE, ORE, FRE */\r
51      {\r
52          SCR04_CRE = 1;            /* Clear error flags         */\r
53      }\r
54      else   \r
55         return (ch);            /* return char                  */\r
56   }\r
57 }\r
58 \r
59 \r
60 void Puts4(const char *Name2)  /* Puts a String to UART */\r
61 {\r
62   volatile int i,len;\r
63    \r
64   len = strlen(Name2);\r
65         \r
66   for (i=0; i<strlen(Name2); i++)   /* go through string                     */\r
67   {\r
68     if (Name2[i] == 10)\r
69       Putch4(13);\r
70     Putch4(Name2[i]);              /* send it out                           */\r
71   }\r
72 }\r
73 \r
74 \r
75 char Echo4(void)        /* Echo UART and return ch */\r
76 {\r
77   char ch;\r
78   \r
79   Puts4("UART 4 receive: ");      // send text to UART\r
80   ch = RDR04;                      // readout character              \r
81   Putch4(ch);                          // send character to UART                 \r
82   if (ch==13)   \r
83     Putch4(10);\r
84 \r
85   return (ch);\r
86 }\r
87 \r
88 void Puthex4(unsigned long n, unsigned char digits)\r
89 {\r
90    unsigned char digit=0,div=0,i;\r
91 \r
92    div=(4*(digits-1));  /* init shift divisor */\r
93    for (i=0;i<digits;i++)\r
94    {\r
95      digit = ((n >> div)&0xF); /* get hex-digit value */\r
96          Putch4(digit + ((digit < 0xA) ? '0' : 'A' - 0xA));\r
97      div-=4;                    /* next digit shift */\r
98    }\r
99 }\r
100 \r
101 void Putdec4(unsigned long x, int digits)\r
102 {\r
103         int i;\r
104         char buf[10],sign=1;\r
105         \r
106         if (digits < 0) {     /* should be print of zero? */\r
107           digits *= (-1);\r
108           sign =1;\r
109         }  \r
110         buf[digits]='\0';                       /* end sign of string */\r
111         \r
112         for (i=digits; i>0; i--) {\r
113                 buf[i-1] = ASCII[x % 10];\r
114                 x = x/10;\r
115         }\r
116 \r
117     if ( sign )\r
118     {\r
119           for (i=0; buf[i]=='0'; i++) { /* no print of zero */\r
120                 if ( i<digits-1)\r
121                         buf[i] = ' ';\r
122           }             \r
123     }\r
124     \r
125         Puts4(buf);                                     /* send string */\r
126 }\r
127 \r
128 \r
129 \r