simplify VCOM code

master
XIVN1987 6 months ago
parent f124c3a685
commit e8d6eb35f4
  1. BIN
      AT32F425/out/DAPLink.bin
  2. 1153
      AT32F425/out/DAPLink.hex
  3. 1
      AT32F425/src/hid_transfer.c
  4. 8
      AT32F425/src/vcom_serial.c
  5. 1
      AT32F425/src/vcom_serial.h
  6. BIN
      CH32V203/obj/DAPLink.bin
  7. 3026
      CH32V203/obj/DAPLink.hex
  8. 3
      CH32V203/src/USBUsr/usb_istr.c
  9. 2
      CH32V203/src/USBUsr/usb_prop.c
  10. 10
      CH32V203/src/vcom_serial.c
  11. 2
      CH32V203/src/vcom_serial.h

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -212,7 +212,6 @@ static usb_sts_type class_out_handler(void *udev, uint8_t ept_num)
case CDC_BULK_OUT_EP: case CDC_BULK_OUT_EP:
Vcom.out_bytes = recv_len; Vcom.out_bytes = recv_len;
Vcom.out_ready = 1;
break; break;
} }

@ -131,7 +131,7 @@ void VCOM_TransferData(void)
Vcom.in_bytes = pos - last_pos; Vcom.in_bytes = pos - last_pos;
Vcom.in_ready = 0; Vcom.in_ready = 0;
memcpy((uint8_t *)Vcom.in_buff, &RXBuffer[last_pos], Vcom.in_bytes); memcpy((uint8_t *)Vcom.in_buff, &RXBuffer[last_pos], Vcom.in_bytes);
usbd_ept_send(&Otg.dev, CDC_BULK_IN_EP, (uint8_t *)Vcom.in_buff, Vcom.in_bytes); usbd_ept_send(&Otg.dev, CDC_BULK_IN_EP, (uint8_t *)Vcom.in_buff, Vcom.in_bytes);
@ -154,16 +154,16 @@ void VCOM_TransferData(void)
} }
/* 从主机接收到数据,且前面的数据 DMA 已发送完 */ /* 从主机接收到数据,且前面的数据 DMA 已发送完 */
if(Vcom.out_ready && (dma_data_number_get(DMA1_CHANNEL1) == 0)) if(Vcom.out_bytes && (dma_data_number_get(DMA1_CHANNEL1) == 0))
{ {
Vcom.out_ready = 0;
memcpy(TXBuffer, (uint8_t *)Vcom.out_buff, Vcom.out_bytes); memcpy(TXBuffer, (uint8_t *)Vcom.out_buff, Vcom.out_bytes);
dma_channel_enable(DMA1_CHANNEL1, FALSE); dma_channel_enable(DMA1_CHANNEL1, FALSE);
dma_data_number_set(DMA1_CHANNEL1, Vcom.out_bytes); dma_data_number_set(DMA1_CHANNEL1, Vcom.out_bytes);
dma_channel_enable(DMA1_CHANNEL1, TRUE); dma_channel_enable(DMA1_CHANNEL1, TRUE);
Vcom.out_bytes = 0;
/* Ready for next BULK OUT */ /* Ready for next BULK OUT */
usbd_ept_recv(&Otg.dev, CDC_BULK_OUT_EP, (uint8_t *)Vcom.out_buff, CDC_BULK_OUT_SZ); usbd_ept_recv(&Otg.dev, CDC_BULK_OUT_EP, (uint8_t *)Vcom.out_buff, CDC_BULK_OUT_SZ);
} }

@ -20,7 +20,6 @@ typedef struct {
uint16_t in_ready; uint16_t in_ready;
uint8_t out_buff[64]; uint8_t out_buff[64];
uint16_t out_bytes; uint16_t out_bytes;
uint16_t out_ready;
} VCOM; } VCOM;
extern volatile VCOM Vcom; extern volatile VCOM Vcom;

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -214,15 +214,12 @@ void EP2_IN_Callback(void)
void EP3_IN_Callback(void) void EP3_IN_Callback(void)
{ {
Vcom.in_ready = 1;
} }
void EP3_OUT_Callback(void) void EP3_OUT_Callback(void)
{ {
Vcom.out_bytes = USB_SIL_Read(EP3_OUT, (uint8_t *)Vcom.out_buff); Vcom.out_bytes = USB_SIL_Read(EP3_OUT, (uint8_t *)Vcom.out_buff);
Vcom.out_ready = 1;
} }

@ -259,8 +259,6 @@ void USBD_Reset(void)
SetDeviceAddress(0); SetDeviceAddress(0);
bDeviceState = ATTACHED; bDeviceState = ATTACHED;
Vcom.in_ready = 1;
} }
/********************************************************************* /*********************************************************************

@ -127,7 +127,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(GetEPTxStatus(ENDP3) == EP_TX_NAK) // 可以向主机发送数据
{ {
uint32_t pos = RXDMA_SZ - DMA_GetCurrDataCounter(DMA1_Channel6); uint32_t pos = RXDMA_SZ - DMA_GetCurrDataCounter(DMA1_Channel6);
if((pos - last_pos >= CDC_BULK_IN_SZ) || ((pos != last_pos) && (SysTick_ms != last_ms))) if((pos - last_pos >= CDC_BULK_IN_SZ) || ((pos != last_pos) && (SysTick_ms != last_ms)))
@ -140,8 +140,6 @@ void VCOM_TransferData(void)
Vcom.in_bytes = pos - last_pos; Vcom.in_bytes = pos - last_pos;
Vcom.in_ready = 0;
USB_SIL_Write(EP3_IN, &RXBuffer[last_pos], Vcom.in_bytes); USB_SIL_Write(EP3_IN, &RXBuffer[last_pos], Vcom.in_bytes);
SetEPTxValid(ENDP3); SetEPTxValid(ENDP3);
@ -164,16 +162,16 @@ void VCOM_TransferData(void)
} }
/* 从主机接收到数据,且前面的数据 DMA 已发送完 */ /* 从主机接收到数据,且前面的数据 DMA 已发送完 */
if(Vcom.out_ready && (DMA_GetCurrDataCounter(DMA1_Channel7) == 0)) if(Vcom.out_bytes && (DMA_GetCurrDataCounter(DMA1_Channel7) == 0))
{ {
Vcom.out_ready = 0;
memcpy(TXBuffer, (uint8_t *)Vcom.out_buff, Vcom.out_bytes); memcpy(TXBuffer, (uint8_t *)Vcom.out_buff, Vcom.out_bytes);
DMA_Cmd(DMA1_Channel7, DISABLE); DMA_Cmd(DMA1_Channel7, DISABLE);
DMA_SetCurrDataCounter(DMA1_Channel7, Vcom.out_bytes); DMA_SetCurrDataCounter(DMA1_Channel7, Vcom.out_bytes);
DMA_Cmd(DMA1_Channel7, ENABLE); DMA_Cmd(DMA1_Channel7, ENABLE);
Vcom.out_bytes = 0;
/* Ready for next BULK OUT */ /* Ready for next BULK OUT */
SetEPRxValid(ENDP3); SetEPRxValid(ENDP3);
} }

@ -17,10 +17,8 @@ typedef struct {
uint8_t in_buff[64]; uint8_t in_buff[64];
uint16_t in_bytes; uint16_t in_bytes;
uint16_t in_ready;
uint8_t out_buff[64]; uint8_t out_buff[64];
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