Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit fdcd563

Browse files
committed
unstable, buckup
1 parent 26987ad commit fdcd563

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

vsf/hal/cpu/gd32f3x0/vsfhal_usart.c

+27-16
Original file line numberDiff line numberDiff line change
@@ -335,17 +335,17 @@ uint16_t vsfhal_usart_rx_bytes(vsfhal_usart_t index, uint8_t *data, uint16_t siz
335335
if (index >= VSFHAL_USART_NUM)
336336
return 0;
337337

338-
if ((rx_dma_buff_pos[index] + size) <= (VSFHAL_USART_NUM * 2))
338+
if ((rx_dma_buff_pos[index] + size) <= (DMA_BUFF_SIZE * 2))
339339
{
340340
tail = size;
341341
head = 0;
342342
}
343343
else
344344
{
345-
tail = VSFHAL_USART_NUM * 2 - rx_dma_buff_pos[index];
345+
tail = DMA_BUFF_SIZE * 2 - rx_dma_buff_pos[index];
346346
head = size - tail;
347347
}
348-
348+
349349
if (tail)
350350
memcpy(data, &rx_dma_buff[index][rx_dma_buff_pos[index]], tail);
351351
if (head)
@@ -360,15 +360,15 @@ uint16_t vsfhal_usart_rx_bytes(vsfhal_usart_t index, uint8_t *data, uint16_t siz
360360

361361
uint16_t vsfhal_usart_rx_get_data_size(vsfhal_usart_t index)
362362
{
363-
uint16_t dma_pos;
363+
uint32_t dma_pos;
364364

365365
switch (index)
366366
{
367367
case 0:
368-
dma_pos = VSFHAL_USART_NUM * 2 - DMA_CH2CNT;
368+
dma_pos = DMA_BUFF_SIZE * 2 - DMA_CH2CNT;
369369
break;
370370
case 1:
371-
dma_pos = VSFHAL_USART_NUM * 2 - DMA_CH4CNT;
371+
dma_pos = DMA_BUFF_SIZE * 2 - DMA_CH4CNT;
372372
break;
373373
default:
374374
return 0;
@@ -377,7 +377,7 @@ uint16_t vsfhal_usart_rx_get_data_size(vsfhal_usart_t index)
377377
if (rx_dma_buff_pos[index] <= dma_pos)
378378
return dma_pos - rx_dma_buff_pos[index];
379379
else
380-
return dma_pos + VSFHAL_USART_NUM * 2 - rx_dma_buff_pos[index];
380+
return dma_pos + DMA_BUFF_SIZE * 2 - rx_dma_buff_pos[index];
381381
}
382382

383383
uint16_t vsfhal_usart_rx_get_free_size(vsfhal_usart_t index)
@@ -419,7 +419,7 @@ ROOT void USART0_IRQHandler(void)
419419
if (USART_STAT(USART0) & USART_STAT_RTF)
420420
{
421421
USART_INTC(USART0) = USART_INTC_RTC;
422-
dma_pos = VSFHAL_USART_NUM * 2 - DMA_CH2CNT;
422+
dma_pos = DMA_BUFF_SIZE * 2 - DMA_CH2CNT;
423423
if ((dma_pos != rx_dma_buff_pos[0]) && vsfhal_usart_onrx[0])
424424
vsfhal_usart_onrx[0](vsfhal_usart_callback_param[0]);
425425
}
@@ -436,9 +436,15 @@ ROOT void DMA_Channel1_2_IRQHandler(void)
436436
vsfhal_usart_ontx[0](vsfhal_usart_callback_param[0]);
437437
}
438438
// rx dma
439-
if (DMA_INTF & (DMA_INTF_GIF << (0x2 * 4)))
439+
if (DMA_INTF & (DMA_INTF_HTFIF << (0x2 * 4)))
440+
{
441+
DMA_INTC = DMA_INTF_HTFIF << (0x2 * 4);
442+
if (vsfhal_usart_onrx[0])
443+
vsfhal_usart_onrx[0](vsfhal_usart_callback_param[0]);
444+
}
445+
if (DMA_INTF & (DMA_INTF_FTFIF << (0x2 * 4)))
440446
{
441-
DMA_INTC = DMA_INTC_GIFC << (0x2 * 4);
447+
DMA_INTC = DMA_INTF_FTFIF << (0x2 * 4);
442448
if (vsfhal_usart_onrx[0])
443449
vsfhal_usart_onrx[0](vsfhal_usart_callback_param[0]);
444450
}
@@ -448,9 +454,6 @@ ROOT void DMA_Channel1_2_IRQHandler(void)
448454
// used for usart1 tx/rx
449455
ROOT void DMA_Channel3_4_IRQHandler(void)
450456
{
451-
DMA_INTC = (DMA_INTC_GIFC << (3 * 4)) | (DMA_INTC_GIFC << (4 * 4));
452-
usart1_dma_handler();
453-
454457
// tx dma
455458
if (DMA_INTF & (DMA_INTF_GIF << (0x3 * 4)))
456459
{
@@ -471,9 +474,17 @@ void gd32f3x0_usart1_poll(void)
471474
{
472475
uint16_t dma_pos;
473476

474-
dma_pos = VSFHAL_USART_NUM * 2 - DMA_CH4CNT;
475-
if ((dma_pos != rx_dma_buff_pos[1]) && vsfhal_usart_onrx[1])
476-
vsfhal_usart_onrx[1](vsfhal_usart_callback_param[1]);
477+
if (DMA_CH4CTL & DMA_CHXCTL_CHEN)
478+
{
479+
istate_t gint = GET_GLOBAL_INTERRUPT_STATE();
480+
DISABLE_GLOBAL_INTERRUPT();
481+
482+
dma_pos = DMA_BUFF_SIZE * 2 - DMA_CH4CNT;
483+
if ((dma_pos != rx_dma_buff_pos[1]) && vsfhal_usart_onrx[1])
484+
vsfhal_usart_onrx[1](vsfhal_usart_callback_param[1]);
485+
486+
SET_GLOBAL_INTERRUPT_STATE(gint);
487+
}
477488
}
478489
#endif
479490

vsf/projects/vllink_lite/proj/EWARM8.32/demo.ewd

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
</option>
8585
<option>
8686
<name>OCDynDriverList</name>
87-
<state>CMSISDAP_ID</state>
87+
<state>NULINK_ID</state>
8888
</option>
8989
<option>
9090
<name>OCLastSavedByProductVersion</name>

0 commit comments

Comments
 (0)