11
11
HardwareSerial Serial (UART_NUM_0);
12
12
HardwareSerial Serial1 (UART_NUM_1);
13
13
14
+ uart_rxbuff_t _rxbuff[2 ];
15
+
14
16
HardwareSerial::HardwareSerial (int8_t uart_num)
15
17
:_uart_num(uart_num)
16
18
,_rx(-1 )
17
19
,_tx(-1 )
18
20
{}
19
21
22
+ void writeRxToBuff0 ()
23
+ {
24
+ uint8_t uart_num = 0 ;
25
+ while (UART_1_SpiUartGetRxBufferSize ())
26
+ {
27
+ if ( ((_rxbuff[uart_num].rx_w + 1 ) % UART_RX_SIZE) != _rxbuff[uart_num].rx_r )
28
+ {
29
+ _rxbuff[uart_num].rx_buf [_rxbuff[uart_num].rx_w ++] = UART_1_UartGetByte ();;
30
+ _rxbuff[uart_num].rx_w = _rxbuff[uart_num].rx_w % UART_RX_SIZE;
31
+ }
32
+ else
33
+ {
34
+ UART_1_UartGetByte ();
35
+ }
36
+ }
37
+ UART_1_ClearRxInterruptSource (UART_1_INTR_RX_NOT_EMPTY);
38
+ }
39
+
40
+ void writeRxToBuff1 ()
41
+ {
42
+ uint8_t uart_num = 1 ;
43
+ while (UART_2_SpiUartGetRxBufferSize ())
44
+ {
45
+ if ( ((_rxbuff[uart_num].rx_w + 1 ) % UART_RX_SIZE) != _rxbuff[uart_num].rx_r )
46
+ {
47
+ _rxbuff[uart_num].rx_buf [_rxbuff[uart_num].rx_w ++] = UART_2_UartGetByte ();;
48
+ _rxbuff[uart_num].rx_w = _rxbuff[uart_num].rx_w % UART_RX_SIZE;
49
+ }
50
+ else
51
+ {
52
+ UART_2_UartGetByte ();
53
+ }
54
+ }
55
+ UART_2_ClearRxInterruptSource (UART_2_INTR_RX_NOT_EMPTY);
56
+ }
57
+
58
+
20
59
bool HardwareSerial::begin (uint32_t baud, uint32_t config, int rxPin, int txPin, bool invert, unsigned long timeout_ms)
21
60
{
22
61
if (_uart_num == 0 && rxPin < 0 && txPin < 0 ) {
@@ -96,6 +135,20 @@ bool HardwareSerial::begin(uint32_t baud, uint32_t config, int rxPin, int txPin,
96
135
UART_2_UART_TX_CTRL_REG =tx_ctrl0;
97
136
UART_2_TX_CTRL_REG = tx_ctrl1;
98
137
}
138
+ _rxbuff[_uart_num].rx_r =0 ;
139
+ _rxbuff[_uart_num].rx_w =0 ;
140
+ _rxbuff[_uart_num].rx_buf =(uint8_t *) malloc (UART_RX_SIZE);
141
+
142
+ if ( _uart_num == UART_NUM_0)
143
+ {
144
+ UART_1_SCB_IRQ_StartEx (writeRxToBuff0);
145
+ }
146
+ else
147
+ {
148
+ UART_2_SCB_IRQ_StartEx (writeRxToBuff1);
149
+ }
150
+
151
+
99
152
return true ;
100
153
/*
101
154
printf("config %d\r\n",config);
@@ -153,9 +206,12 @@ void HardwareSerial::setDebugOutput(bool en)
153
206
154
207
int HardwareSerial::available (void )
155
208
{
209
+ /*
210
+
156
211
uint8_t buffsize;
157
212
//for(uint32_t i=0;i<(23040000/SerialBaud);i++)
158
213
//{
214
+
159
215
if( _uart_num == UART_NUM_0)
160
216
{
161
217
buffsize=UART_1_SpiUartGetRxBufferSize();
@@ -168,7 +224,14 @@ int HardwareSerial::available(void)
168
224
return buffsize;
169
225
}
170
226
//}
171
- return 0 ;
227
+ return 0;*/
228
+
229
+ if (_rxbuff[_uart_num].rx_r == _rxbuff[_uart_num].rx_w )
230
+ return 0 ;
231
+ if (_rxbuff[_uart_num].rx_r < _rxbuff[_uart_num].rx_w )
232
+ return _rxbuff[_uart_num].rx_w - _rxbuff[_uart_num].rx_r ;
233
+ else
234
+ return UART_RX_SIZE - _rxbuff[_uart_num].rx_r + _rxbuff[_uart_num].rx_w ;
172
235
}
173
236
174
237
void HardwareSerial::delayByte (void )
@@ -190,15 +253,14 @@ int HardwareSerial::availableForWrite(void)
190
253
191
254
int HardwareSerial::peek (void )
192
255
{
193
- // if (available()) {
194
- // return uartPeek(_uart);
195
- // }
196
- // return -1;
197
- return 0 ;
256
+ if (_rxbuff[_uart_num].rx_r == _rxbuff[_uart_num].rx_w )
257
+ return -1 ;
258
+ return _rxbuff[_uart_num].rx_buf [_rxbuff[_uart_num].rx_r ];
198
259
}
199
260
200
261
int HardwareSerial::read (void )
201
262
{
263
+ /*
202
264
if(available()) {
203
265
if( _uart_num == UART_NUM_0)
204
266
{
@@ -209,7 +271,13 @@ int HardwareSerial::read(void)
209
271
return UART_2_UartGetByte();
210
272
}
211
273
}
212
- return (uint32)(-1 );
274
+ return (uint32)(-1);*/
275
+ if (_rxbuff[_uart_num].rx_r == _rxbuff[_uart_num].rx_w )
276
+ return -1 ;
277
+
278
+ uint8_t data = _rxbuff[_uart_num].rx_buf [_rxbuff[_uart_num].rx_r ++];
279
+ _rxbuff[_uart_num].rx_r = _rxbuff[_uart_num].rx_r % UART_RX_SIZE;
280
+ return data;
213
281
}
214
282
215
283
int HardwareSerial::read (uint8_t * buff, uint32_t timeout)
@@ -243,6 +311,8 @@ int HardwareSerial::read(uint8_t* buff, uint32_t timeout)
243
311
244
312
void HardwareSerial::flush ()
245
313
{
314
+ _rxbuff[_uart_num].rx_r = 0 ;
315
+ _rxbuff[_uart_num].rx_w = 0 ;
246
316
if ( _uart_num == UART_NUM_0)
247
317
{
248
318
UART_1_SpiUartClearRxBuffer ();
0 commit comments