]> rtime.felk.cvut.cz Git - arc.git/blob - common/msl_port.c
Merge branch 'mikulka' of git@rtime.felk.cvut.cz:arc into mikulka
[arc.git] / common / msl_port.c
1 /*\r
2  * msl_port.c\r
3  *\r
4  *  Created on: 14 feb 2011\r
5  *      Author: mahi\r
6  */\r
7 \r
8 /*\r
9 Methods called by MW MSL libraries to perform console IO:\r
10 */\r
11 \r
12 #include "Os.h"\r
13 #include "stddef.h"\r
14 \r
15 #ifdef USE_TTY_WINIDEA\r
16 \r
17 #define TWBUFF_SIZE 0x100\r
18 #define TRBUFF_SIZE 0x100\r
19 #define TBUFF_PTR 2\r
20 \r
21 #define TWBUFF_LEN              (TWBUFF_SIZE+TBUFF_PTR)\r
22 #define TRBUFF_LEN              (TRBUFF_SIZE+TBUFF_PTR)\r
23 #define TWBUFF_TPTR             (g_TWBuffer[TWBUFF_SIZE+0])\r
24 #define TWBUFF_CPTR             (g_TWBuffer[TWBUFF_SIZE+1])\r
25 #define TWBUFF_INC(n)   ((n + 1)&(TWBUFF_SIZE-1))\r
26 #define TWBUFF_FULL()   (TWBUFF_TPTR==((TWBUFF_CPTR-1)&(TWBUFF_SIZE-1)))\r
27 \r
28 volatile char g_TConn;\r
29 volatile unsigned char g_TWBuffer[TWBUFF_LEN] __attribute__ ((aligned (0x100))); // Transmit to WinIDEA terminal\r
30 volatile unsigned char g_TRBuffer[TRBUFF_LEN] __attribute__ ((aligned (0x100)));\r
31 \r
32 \r
33 #endif\r
34 \r
35 int  InitializeUART(void)\r
36 {\r
37         return 0;\r
38 }\r
39 \r
40 int ReadUARTN( char* buf, int cnt )\r
41 {\r
42 #ifdef USE_TTY_WINIDEA\r
43         (void)g_TRBuffer[0];\r
44 #endif\r
45         (void)buf;\r
46         (void)cnt;\r
47         return 0; // No error\r
48 }\r
49 \r
50 int ReadUART1(char* c) {\r
51         return ReadUARTN( c, 1 );\r
52 }\r
53 \r
54 int WriteUARTN( char* buf, int cnt )\r
55 {\r
56 #ifdef USE_TTY_WINIDEA\r
57         if (g_TConn)\r
58         {\r
59                 unsigned char nCnt,nLen;\r
60                 for(nCnt = 0; nCnt < cnt; nCnt++)\r
61                 {\r
62                         while( TWBUFF_FULL() ) {}\r
63                         nLen = TWBUFF_TPTR;\r
64                         g_TWBuffer[nLen] = buf[nCnt];\r
65                         nLen = TWBUFF_INC(nLen);\r
66                         TWBUFF_TPTR = nLen;\r
67                 }\r
68         }\r
69 #endif\r
70 #if defined(USE_RAMLOG)\r
71                 {\r
72                         char *pbuf = buf;\r
73                         for (int i = 0; i < cnt; i++) {\r
74                                 ramlog_chr (*(pbuf + i));\r
75                         }\r
76                 }\r
77 #endif\r
78 \r
79         (void)buf;\r
80         (void)cnt;\r
81         \r
82         return 0; // No error\r
83 }\r
84 \r
85 int WriteUART1(char c) {\r
86         return WriteUARTN( &c, 1 );\r
87 }\r
88 \r
89 \r
90 #if 0\r
91 void __init_hardware(void)\r
92 {\r
93 }\r
94 \r
95 \r
96 void __flush_cache(register void *address, register unsigned int size)\r
97 {\r
98         (void)address;\r
99         (void)size;\r
100 \r
101 }\r
102 \r
103 void __init_user(void)\r
104 {\r
105 \r
106 }\r
107 #endif\r
108 \r
109 \r
110 void exit(int exit ) {\r
111         (void)exit;\r
112         /* !! WARNING !! !! WARNING !! !! WARNING !!\r
113          *\r
114          * ENDING UP HERE CAN BE VERY BAD:\r
115          * 1. You got an assert() (calls exit())\r
116          * 2. For some other reason (deliberately exited main() ?)\r
117          *\r
118          * TODO: Call reset of card?\r
119          * */\r
120         DisableAllInterrupts();\r
121         while(1){}\r
122 }\r
123 \r