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

Committer:
Sergunb
Date:
Mon Sep 04 12:04:13 2017 +0000
Revision:
0:8f0d870509fe
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:8f0d870509fe 1 /******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
Sergunb 0:8f0d870509fe 2 * File Name : usb_int.c
Sergunb 0:8f0d870509fe 3 * Author : MCD Application Team
Sergunb 0:8f0d870509fe 4 * Version : V3.2.1
Sergunb 0:8f0d870509fe 5 * Date : 07/05/2010
Sergunb 0:8f0d870509fe 6 * Description : Endpoint CTR (Low and High) interrupt's service routines
Sergunb 0:8f0d870509fe 7 ********************************************************************************
Sergunb 0:8f0d870509fe 8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Sergunb 0:8f0d870509fe 9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
Sergunb 0:8f0d870509fe 10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
Sergunb 0:8f0d870509fe 11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
Sergunb 0:8f0d870509fe 12 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
Sergunb 0:8f0d870509fe 13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Sergunb 0:8f0d870509fe 14 *******************************************************************************/
Sergunb 0:8f0d870509fe 15 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 16
Sergunb 0:8f0d870509fe 17 /* Includes ------------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 18 #include "usb_lib.h"
Sergunb 0:8f0d870509fe 19
Sergunb 0:8f0d870509fe 20 /* Private typedef -----------------------------------------------------------*/
Sergunb 0:8f0d870509fe 21 /* Private define ------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 22 /* Private macro -------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 23 /* Private variables ---------------------------------------------------------*/
Sergunb 0:8f0d870509fe 24 __IO uint16_t SaveRState;
Sergunb 0:8f0d870509fe 25 __IO uint16_t SaveTState;
Sergunb 0:8f0d870509fe 26
Sergunb 0:8f0d870509fe 27 /* Extern variables ----------------------------------------------------------*/
Sergunb 0:8f0d870509fe 28 extern void (*pEpInt_IN[7])(void); /* Handles IN interrupts */
Sergunb 0:8f0d870509fe 29 extern void (*pEpInt_OUT[7])(void); /* Handles OUT interrupts */
Sergunb 0:8f0d870509fe 30
Sergunb 0:8f0d870509fe 31 /* Private function prototypes -----------------------------------------------*/
Sergunb 0:8f0d870509fe 32 /* Private functions ---------------------------------------------------------*/
Sergunb 0:8f0d870509fe 33
Sergunb 0:8f0d870509fe 34 /*******************************************************************************
Sergunb 0:8f0d870509fe 35 * Function Name : CTR_LP.
Sergunb 0:8f0d870509fe 36 * Description : Low priority Endpoint Correct Transfer interrupt's service
Sergunb 0:8f0d870509fe 37 * routine.
Sergunb 0:8f0d870509fe 38 * Input : None.
Sergunb 0:8f0d870509fe 39 * Output : None.
Sergunb 0:8f0d870509fe 40 * Return : None.
Sergunb 0:8f0d870509fe 41 *******************************************************************************/
Sergunb 0:8f0d870509fe 42 void CTR_LP(void)
Sergunb 0:8f0d870509fe 43 {
Sergunb 0:8f0d870509fe 44 __IO uint16_t wEPVal = 0;
Sergunb 0:8f0d870509fe 45 /* stay in loop while pending ints */
Sergunb 0:8f0d870509fe 46 while (((wIstr = _GetISTR()) & ISTR_CTR) != 0)
Sergunb 0:8f0d870509fe 47 {
Sergunb 0:8f0d870509fe 48 /* extract highest priority endpoint number */
Sergunb 0:8f0d870509fe 49 EPindex = (uint8_t)(wIstr & ISTR_EP_ID);
Sergunb 0:8f0d870509fe 50 if (EPindex == 0)
Sergunb 0:8f0d870509fe 51 {
Sergunb 0:8f0d870509fe 52 /* Decode and service control endpoint interrupt */
Sergunb 0:8f0d870509fe 53 /* calling related service routine */
Sergunb 0:8f0d870509fe 54 /* (Setup0_Process, In0_Process, Out0_Process) */
Sergunb 0:8f0d870509fe 55
Sergunb 0:8f0d870509fe 56 /* save RX & TX status */
Sergunb 0:8f0d870509fe 57 /* and set both to NAK */
Sergunb 0:8f0d870509fe 58
Sergunb 0:8f0d870509fe 59
Sergunb 0:8f0d870509fe 60 SaveRState = _GetENDPOINT(ENDP0);
Sergunb 0:8f0d870509fe 61 SaveTState = SaveRState & EPTX_STAT;
Sergunb 0:8f0d870509fe 62 SaveRState &= EPRX_STAT;
Sergunb 0:8f0d870509fe 63
Sergunb 0:8f0d870509fe 64 _SetEPRxTxStatus(ENDP0,EP_RX_NAK,EP_TX_NAK);
Sergunb 0:8f0d870509fe 65
Sergunb 0:8f0d870509fe 66 /* DIR bit = origin of the interrupt */
Sergunb 0:8f0d870509fe 67
Sergunb 0:8f0d870509fe 68 if ((wIstr & ISTR_DIR) == 0)
Sergunb 0:8f0d870509fe 69 {
Sergunb 0:8f0d870509fe 70 /* DIR = 0 */
Sergunb 0:8f0d870509fe 71
Sergunb 0:8f0d870509fe 72 /* DIR = 0 => IN int */
Sergunb 0:8f0d870509fe 73 /* DIR = 0 implies that (EP_CTR_TX = 1) always */
Sergunb 0:8f0d870509fe 74
Sergunb 0:8f0d870509fe 75
Sergunb 0:8f0d870509fe 76 _ClearEP_CTR_TX(ENDP0);
Sergunb 0:8f0d870509fe 77 In0_Process();
Sergunb 0:8f0d870509fe 78
Sergunb 0:8f0d870509fe 79 /* before terminate set Tx & Rx status */
Sergunb 0:8f0d870509fe 80
Sergunb 0:8f0d870509fe 81 _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
Sergunb 0:8f0d870509fe 82 return;
Sergunb 0:8f0d870509fe 83 }
Sergunb 0:8f0d870509fe 84 else
Sergunb 0:8f0d870509fe 85 {
Sergunb 0:8f0d870509fe 86 /* DIR = 1 */
Sergunb 0:8f0d870509fe 87
Sergunb 0:8f0d870509fe 88 /* DIR = 1 & CTR_RX => SETUP or OUT int */
Sergunb 0:8f0d870509fe 89 /* DIR = 1 & (CTR_TX | CTR_RX) => 2 int pending */
Sergunb 0:8f0d870509fe 90
Sergunb 0:8f0d870509fe 91 wEPVal = _GetENDPOINT(ENDP0);
Sergunb 0:8f0d870509fe 92
Sergunb 0:8f0d870509fe 93 if ((wEPVal &EP_SETUP) != 0)
Sergunb 0:8f0d870509fe 94 {
Sergunb 0:8f0d870509fe 95 _ClearEP_CTR_RX(ENDP0); /* SETUP bit kept frozen while CTR_RX = 1 */
Sergunb 0:8f0d870509fe 96 Setup0_Process();
Sergunb 0:8f0d870509fe 97 /* before terminate set Tx & Rx status */
Sergunb 0:8f0d870509fe 98
Sergunb 0:8f0d870509fe 99 _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
Sergunb 0:8f0d870509fe 100 return;
Sergunb 0:8f0d870509fe 101 }
Sergunb 0:8f0d870509fe 102
Sergunb 0:8f0d870509fe 103 else if ((wEPVal & EP_CTR_RX) != 0)
Sergunb 0:8f0d870509fe 104 {
Sergunb 0:8f0d870509fe 105 _ClearEP_CTR_RX(ENDP0);
Sergunb 0:8f0d870509fe 106 Out0_Process();
Sergunb 0:8f0d870509fe 107 /* before terminate set Tx & Rx status */
Sergunb 0:8f0d870509fe 108
Sergunb 0:8f0d870509fe 109 _SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
Sergunb 0:8f0d870509fe 110 return;
Sergunb 0:8f0d870509fe 111 }
Sergunb 0:8f0d870509fe 112 }
Sergunb 0:8f0d870509fe 113 }/* if(EPindex == 0) */
Sergunb 0:8f0d870509fe 114 else
Sergunb 0:8f0d870509fe 115 {
Sergunb 0:8f0d870509fe 116 /* Decode and service non control endpoints interrupt */
Sergunb 0:8f0d870509fe 117
Sergunb 0:8f0d870509fe 118 /* process related endpoint register */
Sergunb 0:8f0d870509fe 119 wEPVal = _GetENDPOINT(EPindex);
Sergunb 0:8f0d870509fe 120 if ((wEPVal & EP_CTR_RX) != 0)
Sergunb 0:8f0d870509fe 121 {
Sergunb 0:8f0d870509fe 122 /* clear int flag */
Sergunb 0:8f0d870509fe 123 _ClearEP_CTR_RX(EPindex);
Sergunb 0:8f0d870509fe 124
Sergunb 0:8f0d870509fe 125 /* call OUT service function */
Sergunb 0:8f0d870509fe 126 (*pEpInt_OUT[EPindex-1])();
Sergunb 0:8f0d870509fe 127
Sergunb 0:8f0d870509fe 128 } /* if((wEPVal & EP_CTR_RX) */
Sergunb 0:8f0d870509fe 129
Sergunb 0:8f0d870509fe 130 if ((wEPVal & EP_CTR_TX) != 0)
Sergunb 0:8f0d870509fe 131 {
Sergunb 0:8f0d870509fe 132 /* clear int flag */
Sergunb 0:8f0d870509fe 133 _ClearEP_CTR_TX(EPindex);
Sergunb 0:8f0d870509fe 134
Sergunb 0:8f0d870509fe 135 /* call IN service function */
Sergunb 0:8f0d870509fe 136 (*pEpInt_IN[EPindex-1])();
Sergunb 0:8f0d870509fe 137 } /* if((wEPVal & EP_CTR_TX) != 0) */
Sergunb 0:8f0d870509fe 138
Sergunb 0:8f0d870509fe 139 }/* if(EPindex == 0) else */
Sergunb 0:8f0d870509fe 140
Sergunb 0:8f0d870509fe 141 }/* while(...) */
Sergunb 0:8f0d870509fe 142 }
Sergunb 0:8f0d870509fe 143
Sergunb 0:8f0d870509fe 144 /*******************************************************************************
Sergunb 0:8f0d870509fe 145 * Function Name : CTR_HP.
Sergunb 0:8f0d870509fe 146 * Description : High Priority Endpoint Correct Transfer interrupt's service
Sergunb 0:8f0d870509fe 147 * routine.
Sergunb 0:8f0d870509fe 148 * Input : None.
Sergunb 0:8f0d870509fe 149 * Output : None.
Sergunb 0:8f0d870509fe 150 * Return : None.
Sergunb 0:8f0d870509fe 151 *******************************************************************************/
Sergunb 0:8f0d870509fe 152 void CTR_HP(void)
Sergunb 0:8f0d870509fe 153 {
Sergunb 0:8f0d870509fe 154 uint32_t wEPVal = 0;
Sergunb 0:8f0d870509fe 155
Sergunb 0:8f0d870509fe 156 while (((wIstr = _GetISTR()) & ISTR_CTR) != 0)
Sergunb 0:8f0d870509fe 157 {
Sergunb 0:8f0d870509fe 158 _SetISTR((uint16_t)CLR_CTR); /* clear CTR flag */
Sergunb 0:8f0d870509fe 159 /* extract highest priority endpoint number */
Sergunb 0:8f0d870509fe 160 EPindex = (uint8_t)(wIstr & ISTR_EP_ID);
Sergunb 0:8f0d870509fe 161 /* process related endpoint register */
Sergunb 0:8f0d870509fe 162 wEPVal = _GetENDPOINT(EPindex);
Sergunb 0:8f0d870509fe 163 if ((wEPVal & EP_CTR_RX) != 0)
Sergunb 0:8f0d870509fe 164 {
Sergunb 0:8f0d870509fe 165 /* clear int flag */
Sergunb 0:8f0d870509fe 166 _ClearEP_CTR_RX(EPindex);
Sergunb 0:8f0d870509fe 167
Sergunb 0:8f0d870509fe 168 /* call OUT service function */
Sergunb 0:8f0d870509fe 169 (*pEpInt_OUT[EPindex-1])();
Sergunb 0:8f0d870509fe 170
Sergunb 0:8f0d870509fe 171 } /* if((wEPVal & EP_CTR_RX) */
Sergunb 0:8f0d870509fe 172 else if ((wEPVal & EP_CTR_TX) != 0)
Sergunb 0:8f0d870509fe 173 {
Sergunb 0:8f0d870509fe 174 /* clear int flag */
Sergunb 0:8f0d870509fe 175 _ClearEP_CTR_TX(EPindex);
Sergunb 0:8f0d870509fe 176
Sergunb 0:8f0d870509fe 177 /* call IN service function */
Sergunb 0:8f0d870509fe 178 (*pEpInt_IN[EPindex-1])();
Sergunb 0:8f0d870509fe 179
Sergunb 0:8f0d870509fe 180
Sergunb 0:8f0d870509fe 181 } /* if((wEPVal & EP_CTR_TX) != 0) */
Sergunb 0:8f0d870509fe 182
Sergunb 0:8f0d870509fe 183 }/* while(...) */
Sergunb 0:8f0d870509fe 184 }
Sergunb 0:8f0d870509fe 185
Sergunb 0:8f0d870509fe 186 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 187
Sergunb 0:8f0d870509fe 188 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/