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 2011 STMicroelectronics ********************
Sergunb 0:8f0d870509fe 2 * File Name : usb_pwr.c
Sergunb 0:8f0d870509fe 3 * Author : MCD Application Team
Sergunb 0:8f0d870509fe 4 * Version : V3.3.0
Sergunb 0:8f0d870509fe 5 * Date : 21-March-2011
Sergunb 0:8f0d870509fe 6 * Description : Connection/disconnection & power management
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
Sergunb 0:8f0d870509fe 16 /* Includes ------------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 17 #ifdef STM32L1XX_MD
Sergunb 0:8f0d870509fe 18 #include "stm32l1xx.h"
Sergunb 0:8f0d870509fe 19 #else
Sergunb 0:8f0d870509fe 20 #include "stm32f10x.h"
Sergunb 0:8f0d870509fe 21 #endif /* STM32L1XX_MD */
Sergunb 0:8f0d870509fe 22
Sergunb 0:8f0d870509fe 23 #include "usb_lib.h"
Sergunb 0:8f0d870509fe 24 #include "usb_conf.h"
Sergunb 0:8f0d870509fe 25 #include "usb_pwr.h"
Sergunb 0:8f0d870509fe 26 #include "hw_config.h"
Sergunb 0:8f0d870509fe 27
Sergunb 0:8f0d870509fe 28 /* Private typedef -----------------------------------------------------------*/
Sergunb 0:8f0d870509fe 29 /* Private define ------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 30 /* Private macro -------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 31 /* Private variables ---------------------------------------------------------*/
Sergunb 0:8f0d870509fe 32 __IO uint32_t bDeviceState = UNCONNECTED; /* USB device status */
Sergunb 0:8f0d870509fe 33 __IO bool fSuspendEnabled = TRUE; /* true when suspend is possible */
Sergunb 0:8f0d870509fe 34
Sergunb 0:8f0d870509fe 35 struct
Sergunb 0:8f0d870509fe 36 {
Sergunb 0:8f0d870509fe 37 __IO RESUME_STATE eState;
Sergunb 0:8f0d870509fe 38 __IO uint8_t bESOFcnt;
Sergunb 0:8f0d870509fe 39 }ResumeS;
Sergunb 0:8f0d870509fe 40
Sergunb 0:8f0d870509fe 41 /* Extern variables ----------------------------------------------------------*/
Sergunb 0:8f0d870509fe 42 /* Private function prototypes -----------------------------------------------*/
Sergunb 0:8f0d870509fe 43 /* Extern function prototypes ------------------------------------------------*/
Sergunb 0:8f0d870509fe 44 /* Private functions ---------------------------------------------------------*/
Sergunb 0:8f0d870509fe 45
Sergunb 0:8f0d870509fe 46 /*******************************************************************************
Sergunb 0:8f0d870509fe 47 * Function Name : PowerOn
Sergunb 0:8f0d870509fe 48 * Description :
Sergunb 0:8f0d870509fe 49 * Input : None.
Sergunb 0:8f0d870509fe 50 * Output : None.
Sergunb 0:8f0d870509fe 51 * Return : USB_SUCCESS.
Sergunb 0:8f0d870509fe 52 *******************************************************************************/
Sergunb 0:8f0d870509fe 53 RESULT PowerOn(void)
Sergunb 0:8f0d870509fe 54 {
Sergunb 0:8f0d870509fe 55 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 56 uint16_t wRegVal;
Sergunb 0:8f0d870509fe 57
Sergunb 0:8f0d870509fe 58 /*** cable plugged-in ? ***/
Sergunb 0:8f0d870509fe 59 USB_Cable_Config(ENABLE);
Sergunb 0:8f0d870509fe 60
Sergunb 0:8f0d870509fe 61 /*** CNTR_PWDN = 0 ***/
Sergunb 0:8f0d870509fe 62 wRegVal = CNTR_FRES;
Sergunb 0:8f0d870509fe 63 _SetCNTR(wRegVal);
Sergunb 0:8f0d870509fe 64
Sergunb 0:8f0d870509fe 65 /*** CNTR_FRES = 0 ***/
Sergunb 0:8f0d870509fe 66 wInterrupt_Mask = 0;
Sergunb 0:8f0d870509fe 67 _SetCNTR(wInterrupt_Mask);
Sergunb 0:8f0d870509fe 68 /*** Clear pending interrupts ***/
Sergunb 0:8f0d870509fe 69 _SetISTR(0);
Sergunb 0:8f0d870509fe 70 /*** Set interrupt mask ***/
Sergunb 0:8f0d870509fe 71 wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
Sergunb 0:8f0d870509fe 72 _SetCNTR(wInterrupt_Mask);
Sergunb 0:8f0d870509fe 73 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 74
Sergunb 0:8f0d870509fe 75 return USB_SUCCESS;
Sergunb 0:8f0d870509fe 76 }
Sergunb 0:8f0d870509fe 77
Sergunb 0:8f0d870509fe 78 /*******************************************************************************
Sergunb 0:8f0d870509fe 79 * Function Name : PowerOff
Sergunb 0:8f0d870509fe 80 * Description : handles switch-off conditions
Sergunb 0:8f0d870509fe 81 * Input : None.
Sergunb 0:8f0d870509fe 82 * Output : None.
Sergunb 0:8f0d870509fe 83 * Return : USB_SUCCESS.
Sergunb 0:8f0d870509fe 84 *******************************************************************************/
Sergunb 0:8f0d870509fe 85 RESULT PowerOff()
Sergunb 0:8f0d870509fe 86 {
Sergunb 0:8f0d870509fe 87 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 88 /* disable all interrupts and force USB reset */
Sergunb 0:8f0d870509fe 89 _SetCNTR(CNTR_FRES);
Sergunb 0:8f0d870509fe 90 /* clear interrupt status register */
Sergunb 0:8f0d870509fe 91 _SetISTR(0);
Sergunb 0:8f0d870509fe 92 /* Disable the Pull-Up*/
Sergunb 0:8f0d870509fe 93 USB_Cable_Config(DISABLE);
Sergunb 0:8f0d870509fe 94 /* switch-off device */
Sergunb 0:8f0d870509fe 95 _SetCNTR(CNTR_FRES + CNTR_PDWN);
Sergunb 0:8f0d870509fe 96 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 97
Sergunb 0:8f0d870509fe 98 /* sw variables reset */
Sergunb 0:8f0d870509fe 99 /* ... */
Sergunb 0:8f0d870509fe 100
Sergunb 0:8f0d870509fe 101 return USB_SUCCESS;
Sergunb 0:8f0d870509fe 102 }
Sergunb 0:8f0d870509fe 103
Sergunb 0:8f0d870509fe 104 /*******************************************************************************
Sergunb 0:8f0d870509fe 105 * Function Name : Suspend
Sergunb 0:8f0d870509fe 106 * Description : sets suspend mode operating conditions
Sergunb 0:8f0d870509fe 107 * Input : None.
Sergunb 0:8f0d870509fe 108 * Output : None.
Sergunb 0:8f0d870509fe 109 * Return : USB_SUCCESS.
Sergunb 0:8f0d870509fe 110 *******************************************************************************/
Sergunb 0:8f0d870509fe 111 void Suspend(void)
Sergunb 0:8f0d870509fe 112 {
Sergunb 0:8f0d870509fe 113 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 114 uint16_t wCNTR;
Sergunb 0:8f0d870509fe 115 /* suspend preparation */
Sergunb 0:8f0d870509fe 116 /* ... */
Sergunb 0:8f0d870509fe 117
Sergunb 0:8f0d870509fe 118 /* macrocell enters suspend mode */
Sergunb 0:8f0d870509fe 119 wCNTR = _GetCNTR();
Sergunb 0:8f0d870509fe 120 wCNTR |= CNTR_FSUSP;
Sergunb 0:8f0d870509fe 121 _SetCNTR(wCNTR);
Sergunb 0:8f0d870509fe 122 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 123
Sergunb 0:8f0d870509fe 124 /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
Sergunb 0:8f0d870509fe 125 /* power reduction */
Sergunb 0:8f0d870509fe 126 /* ... on connected devices */
Sergunb 0:8f0d870509fe 127
Sergunb 0:8f0d870509fe 128 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 129 /* force low-power mode in the macrocell */
Sergunb 0:8f0d870509fe 130 wCNTR = _GetCNTR();
Sergunb 0:8f0d870509fe 131 wCNTR |= CNTR_LPMODE;
Sergunb 0:8f0d870509fe 132 _SetCNTR(wCNTR);
Sergunb 0:8f0d870509fe 133 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 134
Sergunb 0:8f0d870509fe 135 /* switch-off the clocks */
Sergunb 0:8f0d870509fe 136 /* ... */
Sergunb 0:8f0d870509fe 137 Enter_LowPowerMode();
Sergunb 0:8f0d870509fe 138
Sergunb 0:8f0d870509fe 139 }
Sergunb 0:8f0d870509fe 140
Sergunb 0:8f0d870509fe 141 /*******************************************************************************
Sergunb 0:8f0d870509fe 142 * Function Name : Resume_Init
Sergunb 0:8f0d870509fe 143 * Description : Handles wake-up restoring normal operations
Sergunb 0:8f0d870509fe 144 * Input : None.
Sergunb 0:8f0d870509fe 145 * Output : None.
Sergunb 0:8f0d870509fe 146 * Return : USB_SUCCESS.
Sergunb 0:8f0d870509fe 147 *******************************************************************************/
Sergunb 0:8f0d870509fe 148 void Resume_Init(void)
Sergunb 0:8f0d870509fe 149 {
Sergunb 0:8f0d870509fe 150 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 151 uint16_t wCNTR;
Sergunb 0:8f0d870509fe 152 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 153
Sergunb 0:8f0d870509fe 154 /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
Sergunb 0:8f0d870509fe 155 /* restart the clocks */
Sergunb 0:8f0d870509fe 156 /* ... */
Sergunb 0:8f0d870509fe 157
Sergunb 0:8f0d870509fe 158 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 159 /* CNTR_LPMODE = 0 */
Sergunb 0:8f0d870509fe 160 wCNTR = _GetCNTR();
Sergunb 0:8f0d870509fe 161 wCNTR &= (~CNTR_LPMODE);
Sergunb 0:8f0d870509fe 162 _SetCNTR(wCNTR);
Sergunb 0:8f0d870509fe 163 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 164
Sergunb 0:8f0d870509fe 165 /* restore full power */
Sergunb 0:8f0d870509fe 166 /* ... on connected devices */
Sergunb 0:8f0d870509fe 167 Leave_LowPowerMode();
Sergunb 0:8f0d870509fe 168
Sergunb 0:8f0d870509fe 169 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 170 /* reset FSUSP bit */
Sergunb 0:8f0d870509fe 171 _SetCNTR(IMR_MSK);
Sergunb 0:8f0d870509fe 172 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 173
Sergunb 0:8f0d870509fe 174 /* reverse suspend preparation */
Sergunb 0:8f0d870509fe 175 /* ... */
Sergunb 0:8f0d870509fe 176
Sergunb 0:8f0d870509fe 177 }
Sergunb 0:8f0d870509fe 178
Sergunb 0:8f0d870509fe 179 /*******************************************************************************
Sergunb 0:8f0d870509fe 180 * Function Name : Resume
Sergunb 0:8f0d870509fe 181 * Description : This is the state machine handling resume operations and
Sergunb 0:8f0d870509fe 182 * timing sequence. The control is based on the Resume structure
Sergunb 0:8f0d870509fe 183 * variables and on the ESOF interrupt calling this subroutine
Sergunb 0:8f0d870509fe 184 * without changing machine state.
Sergunb 0:8f0d870509fe 185 * Input : a state machine value (RESUME_STATE)
Sergunb 0:8f0d870509fe 186 * RESUME_ESOF doesn't change ResumeS.eState allowing
Sergunb 0:8f0d870509fe 187 * decrementing of the ESOF counter in different states.
Sergunb 0:8f0d870509fe 188 * Output : None.
Sergunb 0:8f0d870509fe 189 * Return : None.
Sergunb 0:8f0d870509fe 190 *******************************************************************************/
Sergunb 0:8f0d870509fe 191 void Resume(RESUME_STATE eResumeSetVal)
Sergunb 0:8f0d870509fe 192 {
Sergunb 0:8f0d870509fe 193 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 194 uint16_t wCNTR;
Sergunb 0:8f0d870509fe 195 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 196
Sergunb 0:8f0d870509fe 197 if (eResumeSetVal != RESUME_ESOF)
Sergunb 0:8f0d870509fe 198 ResumeS.eState = eResumeSetVal;
Sergunb 0:8f0d870509fe 199
Sergunb 0:8f0d870509fe 200 switch (ResumeS.eState)
Sergunb 0:8f0d870509fe 201 {
Sergunb 0:8f0d870509fe 202 case RESUME_EXTERNAL:
Sergunb 0:8f0d870509fe 203 Resume_Init();
Sergunb 0:8f0d870509fe 204 ResumeS.eState = RESUME_OFF;
Sergunb 0:8f0d870509fe 205 break;
Sergunb 0:8f0d870509fe 206 case RESUME_INTERNAL:
Sergunb 0:8f0d870509fe 207 Resume_Init();
Sergunb 0:8f0d870509fe 208 ResumeS.eState = RESUME_START;
Sergunb 0:8f0d870509fe 209 break;
Sergunb 0:8f0d870509fe 210 case RESUME_LATER:
Sergunb 0:8f0d870509fe 211 ResumeS.bESOFcnt = 2;
Sergunb 0:8f0d870509fe 212 ResumeS.eState = RESUME_WAIT;
Sergunb 0:8f0d870509fe 213 break;
Sergunb 0:8f0d870509fe 214 case RESUME_WAIT:
Sergunb 0:8f0d870509fe 215 ResumeS.bESOFcnt--;
Sergunb 0:8f0d870509fe 216 if (ResumeS.bESOFcnt == 0)
Sergunb 0:8f0d870509fe 217 ResumeS.eState = RESUME_START;
Sergunb 0:8f0d870509fe 218 break;
Sergunb 0:8f0d870509fe 219 case RESUME_START:
Sergunb 0:8f0d870509fe 220 #ifdef STM32F10X_CL
Sergunb 0:8f0d870509fe 221 OTGD_FS_SetRemoteWakeup();
Sergunb 0:8f0d870509fe 222 #else
Sergunb 0:8f0d870509fe 223 wCNTR = _GetCNTR();
Sergunb 0:8f0d870509fe 224 wCNTR |= CNTR_RESUME;
Sergunb 0:8f0d870509fe 225 _SetCNTR(wCNTR);
Sergunb 0:8f0d870509fe 226 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 227 ResumeS.eState = RESUME_ON;
Sergunb 0:8f0d870509fe 228 ResumeS.bESOFcnt = 10;
Sergunb 0:8f0d870509fe 229 break;
Sergunb 0:8f0d870509fe 230 case RESUME_ON:
Sergunb 0:8f0d870509fe 231 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 232 ResumeS.bESOFcnt--;
Sergunb 0:8f0d870509fe 233 if (ResumeS.bESOFcnt == 0)
Sergunb 0:8f0d870509fe 234 {
Sergunb 0:8f0d870509fe 235 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 236 #ifdef STM32F10X_CL
Sergunb 0:8f0d870509fe 237 OTGD_FS_ResetRemoteWakeup();
Sergunb 0:8f0d870509fe 238 #else
Sergunb 0:8f0d870509fe 239 wCNTR = _GetCNTR();
Sergunb 0:8f0d870509fe 240 wCNTR &= (~CNTR_RESUME);
Sergunb 0:8f0d870509fe 241 _SetCNTR(wCNTR);
Sergunb 0:8f0d870509fe 242 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 243 ResumeS.eState = RESUME_OFF;
Sergunb 0:8f0d870509fe 244 #ifndef STM32F10X_CL
Sergunb 0:8f0d870509fe 245 }
Sergunb 0:8f0d870509fe 246 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 247 break;
Sergunb 0:8f0d870509fe 248 case RESUME_OFF:
Sergunb 0:8f0d870509fe 249 case RESUME_ESOF:
Sergunb 0:8f0d870509fe 250 default:
Sergunb 0:8f0d870509fe 251 ResumeS.eState = RESUME_OFF;
Sergunb 0:8f0d870509fe 252 break;
Sergunb 0:8f0d870509fe 253 }
Sergunb 0:8f0d870509fe 254 }
Sergunb 0:8f0d870509fe 255
Sergunb 0:8f0d870509fe 256 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/