mirror of
https://github.com/XIVN1987/DAPLink.git
synced 2026-09-26 22:16:11 +00:00
simplify VCOM code
This commit is contained in:
Binary file not shown.
+1249
-1252
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user