I'm trying to port GRBL 1.1 to the STM32F746 chip. Tell me the solution, thanks.

Committer:
Sergunb
Date:
Mon Sep 04 12:03:42 2017 +0000
Revision:
0:f1834a63f7c1
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:f1834a63f7c1 1 /******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
Sergunb 0:f1834a63f7c1 2 * File Name : usb_endp.c
Sergunb 0:f1834a63f7c1 3 * Author : MCD Application Team
Sergunb 0:f1834a63f7c1 4 * Version : V3.3.0
Sergunb 0:f1834a63f7c1 5 * Date : 21-March-2011
Sergunb 0:f1834a63f7c1 6 * Description : Endpoint routines
Sergunb 0:f1834a63f7c1 7 ********************************************************************************
Sergunb 0:f1834a63f7c1 8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Sergunb 0:f1834a63f7c1 9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
Sergunb 0:f1834a63f7c1 10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
Sergunb 0:f1834a63f7c1 11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
Sergunb 0:f1834a63f7c1 12 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
Sergunb 0:f1834a63f7c1 13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Sergunb 0:f1834a63f7c1 14 *******************************************************************************/
Sergunb 0:f1834a63f7c1 15
Sergunb 0:f1834a63f7c1 16 #include "usb_lib.h"
Sergunb 0:f1834a63f7c1 17 #include "usb_desc.h"
Sergunb 0:f1834a63f7c1 18 #include "usb_mem.h"
Sergunb 0:f1834a63f7c1 19 #include "hw_config.h"
Sergunb 0:f1834a63f7c1 20 #include "usb_istr.h"
Sergunb 0:f1834a63f7c1 21 #include "usb_pwr.h"
Sergunb 0:f1834a63f7c1 22 #include "serial.h"
Sergunb 0:f1834a63f7c1 23 uint8_t USB_Rx_Buffer[VIRTUAL_COM_PORT_DATA_SIZE];
Sergunb 0:f1834a63f7c1 24
Sergunb 0:f1834a63f7c1 25 extern uint8_t serial_tx_buffer[];
Sergunb 0:f1834a63f7c1 26 extern uint8_t serial_tx_buffer_head;
Sergunb 0:f1834a63f7c1 27 extern volatile uint8_t serial_tx_buffer_tail;
Sergunb 0:f1834a63f7c1 28
Sergunb 0:f1834a63f7c1 29 void EP3_OUT_Callback(void)
Sergunb 0:f1834a63f7c1 30 {
Sergunb 0:f1834a63f7c1 31 uint16_t USB_Rx_Cnt;
Sergunb 0:f1834a63f7c1 32
Sergunb 0:f1834a63f7c1 33 /* Get the received data buffer and update the counter */
Sergunb 0:f1834a63f7c1 34 USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer);
Sergunb 0:f1834a63f7c1 35
Sergunb 0:f1834a63f7c1 36 /* USB data will be immediately processed, this allow next USB traffic being
Sergunb 0:f1834a63f7c1 37 NAKed till the end of the USART Xfer */
Sergunb 0:f1834a63f7c1 38
Sergunb 0:f1834a63f7c1 39 OnUsbDataRx(USB_Rx_Buffer, USB_Rx_Cnt);
Sergunb 0:f1834a63f7c1 40
Sergunb 0:f1834a63f7c1 41 /* Enable the receive of data on EP3 */
Sergunb 0:f1834a63f7c1 42 SetEPRxValid(ENDP3);
Sergunb 0:f1834a63f7c1 43 }
Sergunb 0:f1834a63f7c1 44 void EP1_IN_Callback (void)
Sergunb 0:f1834a63f7c1 45 {
Sergunb 0:f1834a63f7c1 46 if (serial_tx_buffer_head != serial_tx_buffer_tail && (_GetEPTxStatus(ENDP1) == EP_TX_NAK))
Sergunb 0:f1834a63f7c1 47 {
Sergunb 0:f1834a63f7c1 48 uint16_t USB_Tx_length;
Sergunb 0:f1834a63f7c1 49
Sergunb 0:f1834a63f7c1 50 if (serial_tx_buffer_head > serial_tx_buffer_tail)
Sergunb 0:f1834a63f7c1 51 USB_Tx_length = serial_tx_buffer_head - serial_tx_buffer_tail;
Sergunb 0:f1834a63f7c1 52 else
Sergunb 0:f1834a63f7c1 53 {
Sergunb 0:f1834a63f7c1 54 USB_Tx_length = TX_BUFFER_SIZE - serial_tx_buffer_tail + serial_tx_buffer_head;
Sergunb 0:f1834a63f7c1 55 }
Sergunb 0:f1834a63f7c1 56
Sergunb 0:f1834a63f7c1 57 if (USB_Tx_length != 0)
Sergunb 0:f1834a63f7c1 58 {
Sergunb 0:f1834a63f7c1 59 if (USB_Tx_length > 64)
Sergunb 0:f1834a63f7c1 60 USB_Tx_length = 64;
Sergunb 0:f1834a63f7c1 61
Sergunb 0:f1834a63f7c1 62 // UserToPMABufferCopy(&serial_tx_buffer[serial_tx_buffer_tail], ENDP1_TXADDR, USB_Tx_length);
Sergunb 0:f1834a63f7c1 63 {
Sergunb 0:f1834a63f7c1 64 uint8_t *pbUsrBuf = serial_tx_buffer + serial_tx_buffer_tail;
Sergunb 0:f1834a63f7c1 65 uint32_t n = (USB_Tx_length + 1) >> 1; /* n = (wNBytes + 1) / 2 */
Sergunb 0:f1834a63f7c1 66 uint32_t i, temp1;
Sergunb 0:f1834a63f7c1 67 uint16_t *pdwVal;
Sergunb 0:f1834a63f7c1 68 pdwVal = (uint16_t *)(ENDP1_TXADDR * 2 + PMAAddr);
Sergunb 0:f1834a63f7c1 69 for (i = n; i != 0; i--)
Sergunb 0:f1834a63f7c1 70 {
Sergunb 0:f1834a63f7c1 71 temp1 = (uint16_t) * pbUsrBuf;
Sergunb 0:f1834a63f7c1 72 pbUsrBuf++;
Sergunb 0:f1834a63f7c1 73 if (pbUsrBuf - serial_tx_buffer == TX_BUFFER_SIZE)
Sergunb 0:f1834a63f7c1 74 pbUsrBuf = serial_tx_buffer;
Sergunb 0:f1834a63f7c1 75
Sergunb 0:f1834a63f7c1 76 *pdwVal++ = temp1 | (uint16_t) * pbUsrBuf << 8;
Sergunb 0:f1834a63f7c1 77 pdwVal++;
Sergunb 0:f1834a63f7c1 78 pbUsrBuf++;
Sergunb 0:f1834a63f7c1 79 if (pbUsrBuf - serial_tx_buffer == TX_BUFFER_SIZE)
Sergunb 0:f1834a63f7c1 80 pbUsrBuf = serial_tx_buffer;
Sergunb 0:f1834a63f7c1 81 }
Sergunb 0:f1834a63f7c1 82 }
Sergunb 0:f1834a63f7c1 83
Sergunb 0:f1834a63f7c1 84 SetEPTxCount(ENDP1, USB_Tx_length);
Sergunb 0:f1834a63f7c1 85 SetEPTxValid(ENDP1);
Sergunb 0:f1834a63f7c1 86
Sergunb 0:f1834a63f7c1 87 serial_tx_buffer_tail += USB_Tx_length;
Sergunb 0:f1834a63f7c1 88 if (serial_tx_buffer_tail >= TX_BUFFER_SIZE)
Sergunb 0:f1834a63f7c1 89 serial_tx_buffer_tail -= TX_BUFFER_SIZE;
Sergunb 0:f1834a63f7c1 90 }
Sergunb 0:f1834a63f7c1 91 }
Sergunb 0:f1834a63f7c1 92 }
Sergunb 0:f1834a63f7c1 93
Sergunb 0:f1834a63f7c1 94
Sergunb 0:f1834a63f7c1 95 /* \brief Start Of Frame (SOF) callback
Sergunb 0:f1834a63f7c1 96 */
Sergunb 0:f1834a63f7c1 97 void SOF_Callback(void)
Sergunb 0:f1834a63f7c1 98 {
Sergunb 0:f1834a63f7c1 99 if(bDeviceState == CONFIGURED)
Sergunb 0:f1834a63f7c1 100 {
Sergunb 0:f1834a63f7c1 101 /* Check the data to be sent through IN pipe */
Sergunb 0:f1834a63f7c1 102 EP1_IN_Callback();
Sergunb 0:f1834a63f7c1 103 }
Sergunb 0:f1834a63f7c1 104 }
Sergunb 0:f1834a63f7c1 105 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
Sergunb 0:f1834a63f7c1 106