I'm trying to port GRBL 1.1 to the STM32F746 chip. Tell me the solution, thanks.
Diff: usb/usb_endp.c
- Revision:
- 0:8f0d870509fe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usb/usb_endp.c Mon Sep 04 12:04:13 2017 +0000 @@ -0,0 +1,106 @@ +/******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** + * File Name : usb_endp.c + * Author : MCD Application Team + * Version : V3.3.0 + * Date : 21-March-2011 + * Description : Endpoint routines + ******************************************************************************** + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. + * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, + * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE + * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING + * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + *******************************************************************************/ + +#include "usb_lib.h" +#include "usb_desc.h" +#include "usb_mem.h" +#include "hw_config.h" +#include "usb_istr.h" +#include "usb_pwr.h" +#include "serial.h" +uint8_t USB_Rx_Buffer[VIRTUAL_COM_PORT_DATA_SIZE]; + +extern uint8_t serial_tx_buffer[]; +extern uint8_t serial_tx_buffer_head; +extern volatile uint8_t serial_tx_buffer_tail; + +void EP3_OUT_Callback(void) +{ + uint16_t USB_Rx_Cnt; + + /* Get the received data buffer and update the counter */ + USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer); + + /* USB data will be immediately processed, this allow next USB traffic being + NAKed till the end of the USART Xfer */ + + OnUsbDataRx(USB_Rx_Buffer, USB_Rx_Cnt); + + /* Enable the receive of data on EP3 */ + SetEPRxValid(ENDP3); +} +void EP1_IN_Callback (void) +{ + if (serial_tx_buffer_head != serial_tx_buffer_tail && (_GetEPTxStatus(ENDP1) == EP_TX_NAK)) + { + uint16_t USB_Tx_length; + + if (serial_tx_buffer_head > serial_tx_buffer_tail) + USB_Tx_length = serial_tx_buffer_head - serial_tx_buffer_tail; + else + { + USB_Tx_length = TX_BUFFER_SIZE - serial_tx_buffer_tail + serial_tx_buffer_head; + } + + if (USB_Tx_length != 0) + { + if (USB_Tx_length > 64) + USB_Tx_length = 64; + + // UserToPMABufferCopy(&serial_tx_buffer[serial_tx_buffer_tail], ENDP1_TXADDR, USB_Tx_length); + { + uint8_t *pbUsrBuf = serial_tx_buffer + serial_tx_buffer_tail; + uint32_t n = (USB_Tx_length + 1) >> 1; /* n = (wNBytes + 1) / 2 */ + uint32_t i, temp1; + uint16_t *pdwVal; + pdwVal = (uint16_t *)(ENDP1_TXADDR * 2 + PMAAddr); + for (i = n; i != 0; i--) + { + temp1 = (uint16_t) * pbUsrBuf; + pbUsrBuf++; + if (pbUsrBuf - serial_tx_buffer == TX_BUFFER_SIZE) + pbUsrBuf = serial_tx_buffer; + + *pdwVal++ = temp1 | (uint16_t) * pbUsrBuf << 8; + pdwVal++; + pbUsrBuf++; + if (pbUsrBuf - serial_tx_buffer == TX_BUFFER_SIZE) + pbUsrBuf = serial_tx_buffer; + } + } + + SetEPTxCount(ENDP1, USB_Tx_length); + SetEPTxValid(ENDP1); + + serial_tx_buffer_tail += USB_Tx_length; + if (serial_tx_buffer_tail >= TX_BUFFER_SIZE) + serial_tx_buffer_tail -= TX_BUFFER_SIZE; + } + } +} + + +/* \brief Start Of Frame (SOF) callback + */ +void SOF_Callback(void) +{ + if(bDeviceState == CONFIGURED) + { + /* Check the data to be sent through IN pipe */ + EP1_IN_Callback(); + } +} +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ +