diff --git a/src/main/io/serial_4way_avrootloader.c b/src/main/io/serial_4way_avrootloader.c index 513c2538d..788a94571 100644 --- a/src/main/io/serial_4way_avrootloader.c +++ b/src/main/io/serial_4way_avrootloader.c @@ -164,11 +164,19 @@ static uint8_t BL_ReadBuf(uint8_t *pstring, uint8_t len) * 后继处理: 测试通过后,尝试atomic_block(nvic_prio_max) 方式 */ #if defined(AT32F43x) - ATOMIC_BLOCK(NVIC_PRIO_MAX){ - //disable exint - ExIntReg=EXINT->inten; - EXINT->inten=0;//DISABLE ALL EXINT - } + //disable exint + ExIntReg=EXINT->inten; + EXINT->inten=0;//DISABLE ALL EXINT + //disable 5-15 EXINT + NVIC_DisableIRQ(EXINT9_5_IRQn); + NVIC_DisableIRQ(EXINT15_10_IRQn); + //disable USB + NVIC_DisableIRQ(TMR20_OVF_IRQn); + NVIC_DisableIRQ(OTGFS1_IRQn); + //disable uart 1\2\3 + NVIC_DisableIRQ(USART1_IRQn); + NVIC_DisableIRQ(USART2_IRQn); + NVIC_DisableIRQ(USART3_IRQn); #endif do { if (!suart_getc_(pstring)) goto timeout; @@ -190,10 +198,17 @@ static uint8_t BL_ReadBuf(uint8_t *pstring, uint8_t len) } timeout: #if defined(AT32F43x) - ATOMIC_BLOCK(NVIC_PRIO_MAX){ - //re-enable exint - EXINT->inten=ExIntReg; - } + //re-enable exint + EXINT->inten=ExIntReg; + NVIC_EnableIRQ(EXINT9_5_IRQn); + NVIC_EnableIRQ(EXINT15_10_IRQn); + //re-enable USB + NVIC_EnableIRQ(TMR20_OVF_IRQn);//TODO:tmr20 should be removed after + NVIC_EnableIRQ(OTGFS1_IRQn); + //re-enable uart 1\2\3 + NVIC_EnableIRQ(USART1_IRQn); + NVIC_EnableIRQ(USART2_IRQn); + NVIC_EnableIRQ(USART3_IRQn); #endif return (LastACK == brSUCCESS); }