@@ -43,7 +43,6 @@ Uart::Uart(NRF_UARTE_Type *_nrfUart, IRQn_Type _IRQn, uint8_t _pinRX, uint8_t _p
43
43
uc_pinTX = g_ADigitalPinMap[_pinTX];
44
44
uc_hwFlow = 0 ;
45
45
46
- _mutex = NULL ;
47
46
_end_tx_sem = NULL ;
48
47
_begun = false ;
49
48
}
@@ -58,7 +57,6 @@ Uart::Uart(NRF_UARTE_Type *_nrfUart, IRQn_Type _IRQn, uint8_t _pinRX, uint8_t _p
58
57
uc_pinRTS = g_ADigitalPinMap[_pinRTS];
59
58
uc_hwFlow = 1 ;
60
59
61
- _mutex = NULL ;
62
60
_end_tx_sem = NULL ;
63
61
_begun = false ;
64
62
}
@@ -143,8 +141,8 @@ void Uart::begin(unsigned long baudrate, uint16_t config)
143
141
NVIC_SetPriority (IRQn, 3 );
144
142
NVIC_EnableIRQ (IRQn);
145
143
146
- _mutex = xSemaphoreCreateMutex ();
147
144
_end_tx_sem = xSemaphoreCreateBinary ();
145
+ xSemaphoreGive (_end_tx_sem);
148
146
_begun = true ;
149
147
}
150
148
@@ -167,18 +165,16 @@ void Uart::end()
167
165
168
166
rxBuffer.clear ();
169
167
170
- vSemaphoreDelete (_mutex);
171
168
vSemaphoreDelete (_end_tx_sem);
172
- _mutex = NULL ;
173
169
_end_tx_sem = NULL ;
174
170
_begun = false ;
175
171
}
176
172
177
173
void Uart::flush ()
178
174
{
179
175
if ( _begun ) {
180
- xSemaphoreTake (_mutex , portMAX_DELAY);
181
- xSemaphoreGive (_mutex );
176
+ xSemaphoreTake (_end_tx_sem , portMAX_DELAY);
177
+ xSemaphoreGive (_end_tx_sem );
182
178
}
183
179
}
184
180
@@ -232,18 +228,14 @@ size_t Uart::write(const uint8_t *buffer, size_t size)
232
228
size_t remaining = size - sent;
233
229
size_t txSize = min (remaining, (size_t )SERIAL_BUFFER_SIZE);
234
230
235
- xSemaphoreTake (_mutex , portMAX_DELAY);
231
+ xSemaphoreTake (_end_tx_sem , portMAX_DELAY);
236
232
237
233
memcpy (txBuffer, buffer + sent, txSize);
238
234
239
235
nrfUart->TXD .MAXCNT = txSize;
240
236
nrfUart->TASKS_STARTTX = 0x1UL ;
241
237
sent += txSize;
242
238
243
- xSemaphoreTake (_end_tx_sem, portMAX_DELAY);
244
-
245
- xSemaphoreGive (_mutex);
246
-
247
239
} while (sent < size);
248
240
249
241
return sent;
0 commit comments