simplify VCOM code

master
XIVN1987 6 months ago
parent dc2c8d401a
commit f124c3a685
  1. BIN
      CH32V305/obj/DAPLink.bin
  2. 2501
      CH32V305/obj/DAPLink.hex
  3. 5
      CH32V305/src/USBD/ch32v30x_usbhs_device.c
  4. 10
      CH32V305/src/vcom_serial.c
  5. 2
      CH32V305/src/vcom_serial.h

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -102,8 +102,6 @@ void USBHS_Device_Endp_Init(void)
USBHSD->UEP3_TX_LEN = 0; USBHSD->UEP3_TX_LEN = 0;
USBHSD->UEP3_TX_CTRL = USBHS_UEP_T_RES_NAK; USBHSD->UEP3_TX_CTRL = USBHS_UEP_T_RES_NAK;
USBHSD->UEP3_RX_CTRL = USBHS_UEP_R_RES_ACK; USBHSD->UEP3_RX_CTRL = USBHS_UEP_R_RES_ACK;
Vcom.in_ready = 1;
} }
@ -601,8 +599,6 @@ void USBHS_IRQHandler( void )
case CDC_BULK_IN_EP & 0x0F: case CDC_BULK_IN_EP & 0x0F:
USBHSD->UEP3_TX_CTRL = (USBHSD->UEP3_TX_CTRL & ~USBHS_UEP_T_RES_MASK) | USBHS_UEP_T_RES_NAK; USBHSD->UEP3_TX_CTRL = (USBHSD->UEP3_TX_CTRL & ~USBHS_UEP_T_RES_MASK) | USBHS_UEP_T_RES_NAK;
USBHSD->UEP3_TX_CTRL ^= USBHS_UEP_T_TOG_DATA1; USBHSD->UEP3_TX_CTRL ^= USBHS_UEP_T_TOG_DATA1;
Vcom.in_ready = 1;
break; break;
default: default:
@ -657,7 +653,6 @@ void USBHS_IRQHandler( void )
USBHSD->UEP3_RX_CTRL = (USBHSD->UEP3_RX_CTRL & ~USBHS_UEP_R_RES_MASK) | USBHS_UEP_R_RES_NAK; USBHSD->UEP3_RX_CTRL = (USBHSD->UEP3_RX_CTRL & ~USBHS_UEP_R_RES_MASK) | USBHS_UEP_R_RES_NAK;
Vcom.out_bytes = len; Vcom.out_bytes = len;
Vcom.out_ready = 1;
break; break;
default: default:

@ -128,7 +128,7 @@ void VCOM_TransferData(void)
static uint32_t last_ms = 0; static uint32_t last_ms = 0;
static uint32_t last_pos = 0; static uint32_t last_pos = 0;
if(Vcom.in_ready) // 可以向主机发送数据 if((USBHSD->UEP3_TX_CTRL & USBHS_UEP_T_RES_MASK) == USBHS_UEP_T_RES_NAK) // 可以向主机发送数据
{ {
uint32_t pos = RXDMA_SZ - DMA_GetCurrDataCounter(DMA1_Channel3); uint32_t pos = RXDMA_SZ - DMA_GetCurrDataCounter(DMA1_Channel3);
if((pos - last_pos >= CDC_BULK_IN_SZ_HS) || ((pos != last_pos) && (SysTick_ms != last_ms))) if((pos - last_pos >= CDC_BULK_IN_SZ_HS) || ((pos != last_pos) && (SysTick_ms != last_ms)))
@ -141,8 +141,6 @@ void VCOM_TransferData(void)
Vcom.in_bytes = pos - last_pos; Vcom.in_bytes = pos - last_pos;
Vcom.in_ready = 0;
USBHSD->UEP3_TX_DMA = (uint32_t)&RXBuffer[last_pos]; USBHSD->UEP3_TX_DMA = (uint32_t)&RXBuffer[last_pos];
USBHSD->UEP3_TX_LEN = Vcom.in_bytes; USBHSD->UEP3_TX_LEN = Vcom.in_bytes;
USBHSD->UEP3_TX_CTRL = (USBHSD->UEP3_TX_CTRL & ~USBHS_UEP_T_RES_MASK) | USBHS_UEP_T_RES_ACK; USBHSD->UEP3_TX_CTRL = (USBHSD->UEP3_TX_CTRL & ~USBHS_UEP_T_RES_MASK) | USBHS_UEP_T_RES_ACK;
@ -167,16 +165,16 @@ void VCOM_TransferData(void)
xfer_out: xfer_out:
/* 从主机接收到数据,且前面的数据 DMA 已发送完 */ /* 从主机接收到数据,且前面的数据 DMA 已发送完 */
if(Vcom.out_ready && (DMA_GetCurrDataCounter(DMA1_Channel2) == 0)) if(Vcom.out_bytes && (DMA_GetCurrDataCounter(DMA1_Channel2) == 0))
{ {
Vcom.out_ready = 0;
memcpy(TXBuffer, USBHS_EP3_Rx_Buf, Vcom.out_bytes); memcpy(TXBuffer, USBHS_EP3_Rx_Buf, Vcom.out_bytes);
DMA_Cmd(DMA1_Channel2, DISABLE); DMA_Cmd(DMA1_Channel2, DISABLE);
DMA_SetCurrDataCounter(DMA1_Channel2, Vcom.out_bytes); DMA_SetCurrDataCounter(DMA1_Channel2, Vcom.out_bytes);
DMA_Cmd(DMA1_Channel2, ENABLE); DMA_Cmd(DMA1_Channel2, ENABLE);
Vcom.out_bytes = 0;
/* Ready for next BULK OUT */ /* Ready for next BULK OUT */
USBHSD->UEP3_RX_CTRL = (USBHSD->UEP3_RX_CTRL & ~USBHS_UEP_R_RES_MASK) | USBHS_UEP_R_RES_ACK; USBHSD->UEP3_RX_CTRL = (USBHSD->UEP3_RX_CTRL & ~USBHS_UEP_R_RES_MASK) | USBHS_UEP_R_RES_ACK;
} }

@ -17,10 +17,8 @@ typedef struct {
uint8_t in_buff[512]; uint8_t in_buff[512];
uint16_t in_bytes; uint16_t in_bytes;
uint16_t in_ready;
uint8_t out_buff[512]; uint8_t out_buff[512];
uint16_t out_bytes; uint16_t out_bytes;
uint16_t out_ready;
} VCOM; } VCOM;
extern volatile VCOM Vcom; extern volatile VCOM Vcom;

Loading…
Cancel
Save